summaryrefslogtreecommitdiffstats
path: root/misc-scripts/ftpdir-cleanup
diff options
context:
space:
mode:
Diffstat (limited to 'misc-scripts/ftpdir-cleanup')
-rwxr-xr-xmisc-scripts/ftpdir-cleanup116
1 files changed, 116 insertions, 0 deletions
diff --git a/misc-scripts/ftpdir-cleanup b/misc-scripts/ftpdir-cleanup
new file mode 100755
index 0000000..f8c1a8e
--- /dev/null
+++ b/misc-scripts/ftpdir-cleanup
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+if [ $# -ne 2 ]; then
+ echo "usage: $(basename $0) <reponame> <arch>"
+ exit 1
+fi
+
+reponame=$1
+arch=$2
+
+##### Arch specific stuff. TODO make this configurable #####
+ftppath="/home/ftp/$reponame/os/$arch/"
+############################################################
+
+if [ ! -d "$ftppath" ]; then
+ echo "FTP path '$ftppath' does not exist"
+ exit 1
+fi
+
+if [ ! -f /etc/makepkg.conf ]; then
+ echo "/etc/makepkg.conf not found! Aborting"
+ exit 1
+fi
+
+. /etc/makepkg.conf
+
+getpkgname() {
+ local tmp
+
+ tmp=${1##*/}
+ tmp=${tmp%$PKGEXT}
+ tmp=${tmp%-$arch}
+ echo ${tmp%-*-*}
+}
+
+getpkgname_ver() {
+ local tmp
+
+ tmp=${1##*/}
+ tmp=${tmp%$PKGEXT}
+ echo ${tmp%-$arch}
+}
+
+MISSINGFILES=""
+DELETEFILES=""
+EXTRAFILES=""
+
+TMPDIR=$(mktemp -d /tmp/cleanup.XXXXXX) || exit 1
+
+cd "${TMPDIR}"
+/bin/tar xzf "$ftppath/$reponame.db.tar.$DB_COMPRESSION"
+
+for pkg in *; do
+ filename=$(grep -A1 '^%FILENAME%$' "${pkg}/desc" | tail -n1)
+ [ -z "${filename}" ] && filename="${pkg}.pkg.tar.gz"
+
+ if [ ! -f "${ftppath}/${filename}" ]; then
+ MISSINGFILES="${MISSINGFILES} ${filename}"
+ else
+ pkgname="$(getpkgname ${filename})"
+ for otherfile in ${ftppath}/${pkgname}-*; do
+ otherfile="$(basename ${otherfile})"
+ if [ "${otherfile}" != "${filename}" -a "${pkgname}" = "$(getpkgname ${otherfile})" ]; then
+ DELETEFILES="${DELETEFILES} ${otherfile}"
+ fi
+ done
+ fi
+done
+
+cd "$ftppath"
+for pkg in *$PKGEXT; do
+ pkgname="$(getpkgname $pkg)"
+ for p in ${TMPDIR}/${pkgname}-*; do
+ if [ -d "${p}" -a "$(getpkgname $(basename ${p}))" = "${pkgname}" ]; then
+ continue 2
+ fi
+ done
+ EXTRAFILES="$EXTRAFILES $pkg"
+done
+
+cd "$ftppath"
+rm -rf ${TMPDIR}
+
+echo "Scan complete for $reponame ($arch) at ${ftppath}"
+if [ -n "$DELETEFILES" ]; then
+ echo " The following files are out of date"
+ echo " They will be moved to /home/package-cleanup"
+ for f in $DELETEFILES; do
+ echo " $f"
+ done
+fi
+echo ""
+if [ -n "$MISSINGFILES" ]; then
+ echo " The following files are missing in the repo"
+ for f in $MISSINGFILES; do
+ echo " $f"
+ done
+fi
+echo ""
+if [ -n "$EXTRAFILES" ]; then
+ echo " The following files are in the repo but not the db"
+ echo " They will be moved to /home/package-cleanup"
+ for f in $EXTRAFILES; do
+ echo " $f"
+ done
+fi
+
+if [ -n "${DELETEFILES}" ]; then
+ mv ${DELETEFILES} /home/package-cleanup/
+ echo ""
+fi
+
+if [ -n "${EXTRAFILES}" ]; then
+ mv ${EXTRAFILES} /home/package-cleanup/
+ echo ""
+fi