summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Fenzi <kevin@scrye.com>2016-05-28 16:41:34 +0000
committerKevin Fenzi <kevin@scrye.com>2016-05-28 16:42:05 +0000
commitc54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72 (patch)
tree5927daaf998abce0cbda1ad57bee0aa2313c4922
parent6068802824a0ca9dd128d4b4b33a36567923d28f (diff)
downloadansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.tar.gz
ansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.tar.xz
ansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.zip
Update new version from upstream
-rwxr-xr-xfiles/scripts/update-fullfiletimelist96
1 files changed, 71 insertions, 25 deletions
diff --git a/files/scripts/update-fullfiletimelist b/files/scripts/update-fullfiletimelist
index 04e6e0b58..415a78068 100755
--- a/files/scripts/update-fullfiletimelist
+++ b/files/scripts/update-fullfiletimelist
@@ -1,33 +1,79 @@
-#!/bin/sh
+#!/bin/bash
-MOD=$1
-[ -z "$MOD" ] && {
- echo "usage: $0 <module>"
+# Note: this is only an example of how you'd call create-filelist. Edit to fit
+# your requirements.
+
+# Takes a list of module names. Generates file lists for all of them and them
+# moves them into place at once. If you are creating hardlinks between rsync
+# modules, it is required that you update the file lists of both mirrors at the
+# same time. Otherwise the clients may make separate copies of the files.
+
+mods=$*
+
+if [[ -z $mods ]]; then
+ echo "usage: $0 <module> [<module> ...]"
exit 2
-}
+fi
-TOPD=/srv/pub/
-FILELIST=fullfilelist
-TIMELIST=fullfiletimelist-$MOD
-LOCKFILE=.lock.$TIMELIST
CREATE=/usr/local/bin/create-filelist
+# A single lockfile for everything we're modifying
+LOCKFILE=.lock.create-filelist
+
+# The directory where all of the modules live
+TOPD=/srv/mirror/pub
+
+# These strings will be eval'ed later with $mod replaced by its value in
+# context.
+FILELIST=fullfilelist
+TIMELIST='fullfiletimelist-$mod'
+
(
- flock -n 9 || exit 1
-
- TMPD=$(mktemp -d -t create-filelist.XXXXXXXXXX)
- trap "rm -rf $TMPD" EXIT
- cd $TMPD
-
- $CREATE -c -s -d $TOPD/$MOD -f $FILELIST -t $TIMELIST
- if diff -q $FILELIST $TOPD/$MOD/$FILELIST > /dev/null; then
- mv $FILELIST $TOPD/$MOD/$FILELIST
- chmod 0644 $TOPD/$MOD/$FILELIST
- fi
-
- if diff -q $TIMELIST $TOPD/$MOD/$TIMELIST > /dev/null; then
- mv $TIMELIST $TOPD/$MOD/$TIMELIST
- chmod 0644 $TOPD/$MOD/$TIMELIST
- fi
+ # We want to wait forever until we can do what we're asked
+ flock -x 9
+
+ # If you don't want to wait forever, try one of the following:
+ # flock -n 9 || exit 1 - Gives up immediately
+ # flock -w 120 9 || exit 1 - Waits 120 seconds and then gives up
+ # Don't change the '9', unless you change the last line of this script.
+
+ tmpd=$(mktemp -d -t create-filelist.XXXXXXXXXX)
+ trap "rm -rf $tmpd" EXIT
+ cd $tmpd
+
+ # Create all of the filelists
+ for mod in $mods; do
+ $CREATE -c -s -d $TOPD/$mod-f fl-$mod -t tl-$mod
+ done
+
+ # Now diff the file lists and delete the ones which didn't change
+ for mod in $mods; do
+ currentfl=$TOPD/$mod/${FILELIST/'$mod'/$mod}
+ currenttl=$TOPD/$mod/${TIMELIST/'$mod'/$mod}
+
+ # If a file list exsts and doesn't differ from what we just generated,
+ # delete the latter.
+ if [[ -f $currentfl ]] && diff -q fl-$mod $currentfl > /dev/null; then
+ rm -f $fl
+ fi
+ if [[ -f $currenttl ]] && diff -q tl-$mod $currenttl > /dev/null; then
+ rm -f $fl
+ fi
+ done
+
+ # And finally, move all of the files which need updating into place
+ for mod in $mods; do
+ currentfl=$TOPD/$mod/${FILELIST/'$mod'/$mod}
+ currenttl=$TOPD/$mod/${TIMELIST/'$mod'/$mod}
+
+ if [[ -f fl-$mod ]]; then
+ chmod 644 fl-$mod
+ cp -p fl-$mod $currentfl
+ fi
+ if [[ -f tl-$mod ]]; then
+ chmod 644 tl-$mod
+ cp -p tl-$mod $currenttl
+ fi
+ done
) 9>$LOCKFILE