diff options
author | Kevin Fenzi <kevin@scrye.com> | 2016-05-28 16:41:34 +0000 |
---|---|---|
committer | Kevin Fenzi <kevin@scrye.com> | 2016-05-28 16:42:05 +0000 |
commit | c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72 (patch) | |
tree | 5927daaf998abce0cbda1ad57bee0aa2313c4922 | |
parent | 6068802824a0ca9dd128d4b4b33a36567923d28f (diff) | |
download | ansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.tar.gz ansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.tar.xz ansible-c54d26a9f97ac9fbdc89dfb88a8fa8dfd7686b72.zip |
Update new version from upstream
-rwxr-xr-x | files/scripts/update-fullfiletimelist | 96 |
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 |