summaryrefslogtreecommitdiffstats
path: root/misc-scripts
diff options
context:
space:
mode:
authorEric Bélanger <snowmaniscool@gmail.com>2010-03-02 04:44:08 +0100
committerPierre Schmitz <pierre@archlinux.de>2010-03-03 21:02:15 +0100
commit17dd60ced8eb8ca461b73dd8429be0fda83264e5 (patch)
tree6622d1d2e10e7b2368b0c43c2c096942331da8df /misc-scripts
parent18a74ca61a44a6716f6e3a160cc32efc6cc6cbab (diff)
downloaddbscripts-17dd60ced8eb8ca461b73dd8429be0fda83264e5.tar.gz
dbscripts-17dd60ced8eb8ca461b73dd8429be0fda83264e5.tar.xz
Make repo locking an atomic process and added timeout argument
The repo locking function now use a lock directory instead of a lock file. This makes the lock checking and creation an atomic process. The repo_lock function will now try to obtain a lock every $LOCK_DELAY seconds until it is successful. An optional third argument can be use to give a timeout in seconds; this is intended for scripts that runs unattended. Repo locking is now used in the ftpdir-cleanup script. This should fix the problem of the ftpdir-cleanup script removing the new package instead of the old one (FS#17058). Signed-off-by: Eric Bélanger <snowmaniscool@gmail.com>
Diffstat (limited to 'misc-scripts')
-rwxr-xr-xmisc-scripts/ftpdir-cleanup10
1 files changed, 7 insertions, 3 deletions
diff --git a/misc-scripts/ftpdir-cleanup b/misc-scripts/ftpdir-cleanup
index a185090..4c559b9 100755
--- a/misc-scripts/ftpdir-cleanup
+++ b/misc-scripts/ftpdir-cleanup
@@ -10,7 +10,7 @@ dest=$2
############################################################
-. "$(dirname $0)/../db-functions"
+. "$(dirname $0)/../db-functions"
. "$(dirname $0)/../config"
${CLEANUP_DRYRUN} && echo 'dry run mode is active'
@@ -19,6 +19,8 @@ ftppath_base="$FTP_BASE/$reponame/$FTP_OS_SUFFIX"
for arch in ${ARCHES[@]}; do
+ repo_lock $reponame $arch $LOCK_TIMEOUT
+
TMPDIR=$(mktemp -d /tmp/cleanup-XXXXXX) || exit 1
ftppath="$ftppath_base/$arch"
MISSINGFILES=""
@@ -80,10 +82,10 @@ for arch in ${ARCHES[@]}; do
dbpkgname=$(grep -A1 '^%FILENAME%$' "${p}/desc" 2>/dev/null| tail -n1)
if [ "${dbpkgname}" = "${pkgname}" ]; then
continue 2
- fi
+ fi
done
EXTRAFILES="$EXTRAFILES $pkg"
- done
+ done
rm -rf ${TMPDIR}
@@ -100,6 +102,8 @@ for arch in ${ARCHES[@]}; do
fi
done
+ repo_unlock $reponame $arch
+
#Make sure we've done *something* before outputting anything
if [ -z "$DELETEFILES$DELETESYMLINKS$MISSINGFILES$EXTRAFILES" ]; then
continue