summaryrefslogtreecommitdiffstats
path: root/misc-scripts/sourceballs-cleanup
diff options
context:
space:
mode:
authorEric Bélanger <snowmaniscool@gmail.com>2010-02-08 16:13:42 +0100
committerPierre Schmitz <pierre@archlinux.de>2010-03-13 11:33:26 +0100
commite7fe897a91e6376a8724c226f8e078251620a173 (patch)
tree93a9b814b3e96b38734d0bc1908b9c18a8f09d2c /misc-scripts/sourceballs-cleanup
parent17dd60ced8eb8ca461b73dd8429be0fda83264e5 (diff)
downloaddbscripts-e7fe897a91e6376a8724c226f8e078251620a173.tar.gz
dbscripts-e7fe897a91e6376a8724c226f8e078251620a173.tar.xz
sourceballs: Make cleanup more efficient
Moved all cleanup related code in sourceballs-cleanup script and moved, now common, functions in db-functions. The cleanup script is now ran after all the new sourceballs have been fetched. Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Diffstat (limited to 'misc-scripts/sourceballs-cleanup')
-rwxr-xr-xmisc-scripts/sourceballs-cleanup95
1 files changed, 95 insertions, 0 deletions
diff --git a/misc-scripts/sourceballs-cleanup b/misc-scripts/sourceballs-cleanup
new file mode 100755
index 0000000..0a1ac4d
--- /dev/null
+++ b/misc-scripts/sourceballs-cleanup
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+. "$(dirname $0)/../db-functions"
+. "$(dirname $0)/../config"
+
+srcpath="$FTP_BASE/sources/"
+logfile="$srcpath/cleanup.txt"
+
+LOCKFILE="/tmp/.sourceball-cleanup.lock"
+WORKDIR="/tmp/sourceball-cleanup.$packagename.$UID"
+
+cleanup () {
+ restore_umask
+ rm -rf "$WORKDIR"
+ rm -f "$LOCKFILE"
+ exit 0
+}
+
+ctrl_c() {
+ echo "Interrupted" >&2
+ cleanup 0
+}
+
+remove_old() {
+ if [ -d "$1" ]; then
+ pushd "$1" >/dev/null
+ PKGVERS=""
+ for repo in *; do
+ cd "$repo"
+ . "$BUILDSCRIPT"
+ PKGVERS="$PKGVERS $pkgver-$pkgrel"
+ cd ..
+ done
+
+ for srcpkg in "$srcpath/$packagename-"*; do
+ [ -f "$srcpkg" ] || continue
+ if [ "$(pkgname_from_src $srcpkg)" == "$packagename" ]; then
+ skip=0
+ pver="$(pkgver_from_src $srcpkg)"
+ for v in $PKGVERS; do
+ if [ "$v" = "$pver" ]; then
+ skip=1
+ break
+ fi
+ done
+ if [ $skip -ne 1 ]; then
+ mv "$srcpkg" $SOURCE_CLEANUP_DESTDIR
+ fi
+ fi
+ done
+
+ popd >/dev/null
+ fi
+}
+
+if [ -f "$LOCKFILE" ]; then
+ owner="$(/usr/bin/stat -c %U $LOCKFILE)"
+ echo "error: source tarball generation is already in progress (started by $owner)"
+ exit 1
+fi
+
+trap cleanup 0
+trap ctrl_c 2
+
+/bin/touch "$LOCKFILE"
+
+#adjust the nice level to run at a lower priority
+/usr/bin/renice +10 -p $$ > /dev/null
+
+set_umask
+/bin/mkdir -p "$WORKDIR"
+cd "$WORKDIR"
+
+[ -e "$logfile" ] && /bin/mv "$logfile" "$logfile.old"
+echo "Orphaned sourceballs:" > "$logfile"
+
+for sourceball in "$srcpath"/*$SRCEXT; do
+ packagename=$(basename $sourceball)
+ packagename=${packagename%-*-*$SRCEXT}
+
+ if ! /usr/bin/svn export -q --force "$SVNREPO/$packagename" "$packagename" >/dev/null 2>&1 ; then
+ echo "$packagename : no longer in svn. Removing sourceball." >> "$logfile"
+ mv $sourceball $SOURCE_CLEANUP_DESTDIR
+ elif [ -z "$(ls -A "$packagename/repos")" ]; then
+ echo "$packagename : no longer in repos but trunk is still in svn. Removing sourceball." >> "$logfile"
+ mv $sourceball $SOURCE_CLEANUP_DESTDIR
+ elif ! source "$packagename/trunk/$BUILDSCRIPT" && chk_license ${license[@]}; then
+ echo "$packagename : source hosting no longer required by license. Removing sourceball." >> "$logfile"
+ mv $sourceball $SOURCE_CLEANUP_DESTDIR
+ else
+ remove_old "$packagename/repos/"
+ fi
+done
+
+cleanup 0