119 lines
3.5 KiB
Text
119 lines
3.5 KiB
Text
|
|
#!/usr/bin/env zsh
|
|
|
|
# Script synchronisant le site sur me.com
|
|
# normalement, le site est indisponible le moins de temps possible
|
|
# le temps de deux renommages de répertoire
|
|
|
|
# get configuration
|
|
# mostly directories
|
|
source $0:h/config
|
|
|
|
# get trycp function (copy until success)
|
|
source $0:h/webdav-framework
|
|
|
|
if [[ $1 == '-h' ]]; then
|
|
print -- "usage : $0:h [-h|-s|-d]"
|
|
print -- " -a sychronise aussi l'index"
|
|
print -- " -h affiche l'aide"
|
|
print -- " -d modification directe (pas de swap)"
|
|
print -- " -s swappe simplement les répertoires"
|
|
fi
|
|
|
|
# publication incrementale
|
|
function incrementalPublish {
|
|
local ydestRep=$destRep$suffix
|
|
localRef="$srcRep/map.yrf"
|
|
print -- "Creation du fichier de references"
|
|
create-reference-file.sh > $localRef
|
|
remoteRef="/tmp/remoteSiteMapRef.$$.yrf"
|
|
if [[ ! -e "$ydestRep/map.yrf" ]]; then
|
|
# pas de fichier de reference sur la cible
|
|
print -- "pas de fichier de reference sur la cible, passage en mode rsync"
|
|
rsyncPublish
|
|
swap
|
|
else
|
|
trycp "$ydestRep/map.yrf" "$remoteRef"
|
|
typeset -U filesToUpdate
|
|
filesToUpdate=( $(diff $localRef $remoteRef | awk '/^[<>]/ {print $2}' ) )
|
|
if ((${#filesToUpdate} == 1)); then
|
|
print -- "Seul le fichier ${filesToUpdate} sera téléversé"
|
|
elif ((${#filesToUpdate}<10)); then
|
|
print -- "${#filesToUpdate} fichiers seront téléversés :"
|
|
print -- "${filesToUpdate}"
|
|
else
|
|
print -- "${#filesToUpdate} fichiers seront téléversés"
|
|
fi
|
|
# copy all file with some differences
|
|
# except the map in case of error
|
|
for element in $filesToUpdate; do
|
|
if [[ $element == "/map.yrf" ]]; then
|
|
continue
|
|
fi
|
|
if [[ -e $srcRep$element ]]; then
|
|
trycp $srcRep$element $ydestRep$element
|
|
else
|
|
tryrm $ydestRep$element
|
|
fi
|
|
done
|
|
# if all went fine, copy the map file
|
|
trycp $srcRep/map.yrf $ydestRep/map.yrf
|
|
# remove the temporary file
|
|
\rm $remoteRef
|
|
# if we have used the tmp directory we swap
|
|
if [[ "$suffix" != "" ]]; then
|
|
swap
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# publication via rsync
|
|
function rsyncPublish {
|
|
result=1
|
|
essai=1
|
|
while (( $result > 0 )); do
|
|
print -- rsync -arv $srcRep/ $destRep.tmp
|
|
if ((!testmode)); then
|
|
rsync -arv $srcRep/ $destRep.tmp
|
|
fi
|
|
result=$?
|
|
if (( $result > 0 )); then
|
|
print -P -- "%BEchec du rsync%b (essai n°$essai)" >&2
|
|
fi
|
|
((essai++))
|
|
done
|
|
}
|
|
|
|
# swap
|
|
function swap {
|
|
print -P -- "%B[Directory Swap (tmp <=> target)]%b"
|
|
[[ -e $destRep.old ]] && tryrm $destRep.old
|
|
|
|
print -- " renommage du repertoire sandard vers le .old"
|
|
tryrename $destRep $destRep.old
|
|
|
|
print -- " renommage du repertoire tmp (nouveau) vers le standard"
|
|
print -P -- "%B[Site Indisponible]%b $(date)"
|
|
tryrename $destRep.tmp $destRep
|
|
print -P -- "%B[Site Disponible]%b $(date)"
|
|
|
|
print -- " renommage du repertoire old vers le tmp"
|
|
tryrename $destRep.old $destRep.tmp
|
|
|
|
print -P -- " publication terminée"
|
|
}
|
|
|
|
print -- "Root = $webroot"
|
|
print -- "Dest = $destRep"
|
|
|
|
if [[ "$1" = "-s" ]]; then
|
|
swap
|
|
else
|
|
if [[ "$1" = "-d" ]]; then
|
|
suffix=""
|
|
else
|
|
suffix=".tmp"
|
|
fi
|
|
print -P -- "%BSync%b[${Root:t} => ${destRep:t}$suffix]"
|
|
incrementalPublish
|
|
fi
|