2010-08-23 12:26:48 +00:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "fr" xml:lang = "fr" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" / >
< meta name = "keywords" content = "Apple, mobileme, WebDav, synchronisation, zsh, script" >
< link rel = "shortcut icon" type = "image/x-icon" href = "/Scratch/img/favicon.ico" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/assets/css/main.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/twilight.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/idc.css" / >
< link rel = "alternate" type = "application/rss+xml" title = "RSS" href = "http://feeds.feedburner.com/yannespositocomfr" / >
< link rel = "alternate" lang = "fr" xml:lang = "fr" title = "Synchronisation avec mobileme (2)" type = "text/html" hreflang = "fr" href = "/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/" / >
< link rel = "alternate" lang = "en" xml:lang = "en" title = "custom website synchronisation with mobileme (2)" type = "text/html" hreflang = "en" href = "/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/" / >
< script type = "text/javascript" src = "/Scratch/js/jquery-1.3.1.min.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/jquery.cookie.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/index.js" > < / script >
< title > Synchronisation avec mobileme (2)< / title >
< / head >
< body lang = "fr" >
< script type = "text/javascript" > / / < ! [ C D A T A [
document.write('< div id = "blackpage" > < img src = "/Scratch/img/loading.gif" alt = "Chargement en cours..." / > < / div > ');
// ]]>
< / script >
< div id = "content" >
2010-09-27 18:49:15 +00:00
< div id = "choix" >
< div class = "return" > < a href = "#entete" > ↓ Menu ↓ < / a > < / div >
< div id = "choixlang" >
< a href = "/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/" onclick = "setLanguage('en')" > in English< / a >
< / div >
< / div >
< img src = "/Scratch/img/presentation.png" alt = "Presentation drawing" / >
2010-08-23 12:26:48 +00:00
< div id = "titre" >
< h1 >
Synchronisation avec mobileme (2)
< / h1 >
< / div >
< div class = "flush" > < / div >
< div class = "flush" > < / div >
< div id = "afterheader" >
< div class = "corps" >
< p > J’ ai déjà discuté de la façon dont je < a href = "/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe" > synchronise mon site web sur mobileme< / a > . J’ ai amélioré mon script pour le rendre incrémental.< / p >
< p > Voici mon script, il créé tout d’ abord un fichier qui contient la liste des fichiers avec leur < em > hash< / em > . Afin de les comparer avec ceux qui sont en ligne sans avoir à les parcourir. Ensuite pour chaque fichier qui semble différent, je met à jour le contenu.< / p >
< p > Cependant même avec ce script j’ ai encore des problèmes. Dû à webdav. En particulier le renommage de répertoire. Par exemple :< / p >
< div > < pre class = "twilight" >
mv folder folder2
< / pre > < / div >
< p > Retourne OK et pourtant : < / p >
< div > < pre class = "twilight" >
$ ls
folder folder2
< / pre > < / div >
< p > Bouuhh… < / p >
< p > Pour résoudre ce type de problèmes j’ utilise un < em > framework< / em > en zsh. Il résout presque tous les problèmes liés à webdav à l’ exception du renommage de répertoire.< / p >
< div > < div class = "code" > < div class = "file" > < a href = "/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/code/webdav-framework" > ➥ webdav-framework < / a > < / div > < div class = "withfile" >
< pre class = "twilight" >
< span class = "Comment" > < span class = "Comment" > #< / span > !/usr/bin/env zsh< / span >
function samelineprint {
print -n -P -- < span class = "String" > < span class = "String" > " < / span > \r< span class = "StringVariable" > < span class = "StringVariable" > $< / span > *< / span > < span class = "String" > " < / span > < / span >
}
< span class = "Comment" > < span class = "Comment" > #< / span > avec 1 essai par seconde: 300 = 5 minutes< / span >
maxessais=300
< span class = "Comment" > < span class = "Comment" > #< / span > try to create a directory until success< / span >
function trymkdir {
target=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span >
print -- mkdir -p < span class = "Variable" > < span class = "Variable" > $< / span > target< / span >
local essai=1
< span class = "Keyword" > while< / span > < span class = "Keyword" > !< / span > mkdir -p < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec: essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
print
}
< span class = "Comment" > < span class = "Comment" > #< / span > try to copy until success< / span >
function trycp {
element=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span >
target=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 2< / span > < span class = "String" > " < / span > < / span >
< span class = "Keyword" > if< / span > [[ < span class = "Keyword" > !< / span > -d < span class = "Variable" > < span class = "Variable" > ${< / span > target:h< span class = "Variable" > }< / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
trymkdir < span class = "Variable" > < span class = "Variable" > ${< / span > target:h< span class = "Variable" > }< / span > < / span >
< span class = "Keyword" > fi< / span >
local essai=1
print -- cp < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span >
< span class = "Keyword" > while< / span > < span class = "Keyword" > !< / span > < span class = "Constant" > \c< / span > p < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec: essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
print
}
< span class = "Comment" > < span class = "Comment" > #< / span > try to remove until success< / span >
function tryrm {
target=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span >
local essai=1
local options=< span class = "String" > < span class = "String" > '< / span > < span class = "String" > '< / span > < / span >
[[ -d < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > ]] < span class = "Keyword" > & & < / span > options=< span class = "String" > < span class = "String" > '< / span > -rf< span class = "String" > '< / span > < / span >
print -- rm < span class = "Variable" > < span class = "Variable" > $< / span > options< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span >
< span class = "Keyword" > while< / span > < span class = "Keyword" > !< / span > rm < span class = "Variable" > < span class = "Variable" > $< / span > options< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec: essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
essai=1
< span class = "Keyword" > while< / span > [[ -e < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > rm reussi mais fichier source non disparu n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
sleep 1
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
print
}
< span class = "Comment" > < span class = "Comment" > #< / span > try to rename until success< / span >
function tryrename {
element=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span >
target=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 2< / span > < span class = "String" > " < / span > < / span >
local essai=1
< span class = "Keyword" > while< / span > [[ -e < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > le fichier < span class = "StringVariable" > < span class = "StringVariable" > $< / span > target< / span > existe déjà< span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
sleep 1
< span class = "Keyword" > done< / span >
print -- mv < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span >
< span class = "Keyword" > while< / span > < span class = "Keyword" > !< / span > mv < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec: essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 4
< span class = "Keyword" > done< / span >
essai=1
< span class = "Keyword" > while< / span > [[ -e < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > mv reussi mais fichier source non disparu n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
sleep 1
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
print
}
< span class = "Comment" > < span class = "Comment" > #< / span > try to move until success< / span >
function trymv {
element=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span >
target=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 2< / span > < span class = "String" > " < / span > < / span >
local essai=1
print -- mv < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span >
< span class = "Keyword" > while< / span > < span class = "Keyword" > !< / span > mv < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > target< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > Echec: essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
essai=1
< span class = "Keyword" > while< / span > [[ -e < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
samelineprint < span class = "String" > < span class = "String" > " < / span > mv reussi mais fichier source non disparu n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > < span class = "String" > " < / span > < / span >
sleep 1
((essai++))
((essai< span class = "Keyword" > > < / span > maxessais)) < span class = "Keyword" > & & < / span > exit 5
< span class = "Keyword" > done< / span >
print
}
< / pre >
< / div > < / div > < / div >
< p > Et voici le code qui me permet de synchroniser mon site web. Il y a une partie un peu incompréhensible. C’ est pour enlever les mail réencodés par le filtre bluecloth qui est une implémentation de markdown. Mes mails, sont encodés à chaque fois de façon différente à chaque réengendrement de page html. C’ est pourquoi je les enlève pour ne pas les < em > uploadés< / em > inutilement à chaque fois.< / p >
< div > < div class = "code" > < div class = "file" > < a href = "/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/code/publish" > ➥ publish < / a > < / div > < div class = "withfile" >
< pre class = "twilight" >
< span class = "Comment" > < span class = "Comment" > #< / span > !/usr/bin/env zsh< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > Script synchronisant le site sur me.com< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > normalement, le site est indisponible le moins de temps possible< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > le temps de deux renommages de répertoire< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > get configuration< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > mostly directories< / span >
source < span class = "Variable" > < span class = "Variable" > $< / span > 0< / span > :h/config
< span class = "Comment" > < span class = "Comment" > #< / span > get trycp function (copy until success)< / span >
source < span class = "Variable" > < span class = "Variable" > $< / span > 0< / span > :h/webdav-framework
< span class = "Keyword" > if< / span > [[ < span class = "Variable" > < span class = "Variable" > $< / span > 1< / span > < span class = "Keyword" > ==< / span > < span class = "String" > < span class = "String" > '< / span > -h< span class = "String" > '< / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
print -- < span class = "String" > < span class = "String" > " < / span > usage : < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 0< / span > :h [-h|-s|-d]< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > -a sychronise aussi l'index< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > -h affiche l'aide< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > -d modification directe (pas de swap)< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > -s swappe simplement les répertoires< span class = "String" > " < / span > < / span >
< span class = "Keyword" > fi< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > publication incrementale< / span >
function incrementalPublish {
local ydestRep=< span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > suffix< / span >
localRef=< span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > srcRep< / span > /map.yrf< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > Creation du fichier de references< span class = "String" > " < / span > < / span >
create-reference-file.sh < span class = "Keyword" > > < / span > < span class = "Variable" > < span class = "Variable" > $< / span > localRef< / span >
remoteRef=< span class = "String" > < span class = "String" > " < / span > /tmp/remoteSiteMapRef.< span class = "StringVariable" > < span class = "StringVariable" > $< / span > $< / span > .yrf< span class = "String" > " < / span > < / span >
< span class = "Keyword" > if< / span > [[ < span class = "Keyword" > !< / span > -e < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > ydestRep< / span > /map.yrf< span class = "String" > " < / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > pas de fichier de reference sur la cible< / span >
print -- < span class = "String" > < span class = "String" > " < / span > pas de fichier de reference sur la cible, passage en mode rsync< span class = "String" > " < / span > < / span >
rsyncPublish
swap
< span class = "Keyword" > else< / span >
trycp < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > ydestRep< / span > /map.yrf< span class = "String" > " < / span > < / span > < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > remoteRef< / span > < span class = "String" > " < / span > < / span >
typeset -U filesToUpdate
filesToUpdate=( < span class = "String" > < span class = "String" > $(< / span > diff < span class = "StringVariable" > < span class = "StringVariable" > $< / span > localRef< / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > remoteRef< / span > < span class = "Keyword" > |< / span > awk < span class = "String" > < span class = "String" > '< / span > /^[< > ]/ {print $2}< span class = "String" > '< / span > < / span > < span class = "String" > )< / span > < / span > )
< span class = "Keyword" > if< / span > ((< span class = "Variable" > < span class = "Variable" > ${< / span > #filesToUpdate< span class = "Variable" > }< / span > < / span > == 1))< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
print -- < span class = "String" > < span class = "String" > " < / span > Seul le fichier < span class = "StringVariable" > < span class = "StringVariable" > ${< / span > filesToUpdate< span class = "StringVariable" > }< / span > < / span > sera téléversé< span class = "String" > " < / span > < / span >
< span class = "Keyword" > elif< / span > ((< span class = "Variable" > < span class = "Variable" > ${< / span > #filesToUpdate< span class = "Variable" > }< / span > < / span > < span class = "Keyword" > < < / span > 10))< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
print -- < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > ${< / span > #filesToUpdate< span class = "StringVariable" > }< / span > < / span > fichiers seront téléversés :< span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > ${< / span > filesToUpdate< span class = "StringVariable" > }< / span > < / span > < span class = "String" > " < / span > < / span >
< span class = "Keyword" > else< / span >
print -- < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > ${< / span > #filesToUpdate< span class = "StringVariable" > }< / span > < / span > fichiers seront téléversés< span class = "String" > " < / span > < / span >
< span class = "Keyword" > fi< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > copy all file with some differences< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > except the map in case of error< / span >
< span class = "Keyword" > for< / span > element < span class = "Keyword" > in< / span > < span class = "Variable" > < span class = "Variable" > $< / span > filesToUpdate< / span > < span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
< span class = "Keyword" > if< / span > [[ < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Keyword" > ==< / span > < span class = "String" > < span class = "String" > " < / span > /map.yrf< span class = "String" > " < / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
< span class = "Keyword" > continue< / span >
< span class = "Keyword" > fi< / span >
< span class = "Keyword" > if< / span > [[ -e < span class = "Variable" > < span class = "Variable" > $< / span > srcRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
trycp < span class = "Variable" > < span class = "Variable" > $< / span > srcRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > element< / span > < span class = "Variable" > < span class = "Variable" > $< / span > ydestRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > element< / span >
< span class = "Keyword" > else< / span >
tryrm < span class = "Variable" > < span class = "Variable" > $< / span > ydestRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > element< / span >
< span class = "Keyword" > fi< / span >
< span class = "Keyword" > done< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > if all went fine, copy the map file< / span >
trycp < span class = "Variable" > < span class = "Variable" > $< / span > srcRep< / span > /map.yrf < span class = "Variable" > < span class = "Variable" > $< / span > ydestRep< / span > /map.yrf
< span class = "Comment" > < span class = "Comment" > #< / span > remove the temporary file< / span >
< span class = "Constant" > \r< / span > m < span class = "Variable" > < span class = "Variable" > $< / span > remoteRef< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > if we have used the tmp directory we swap< / span >
< span class = "Keyword" > if< / span > [[ < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > suffix< / span > < span class = "String" > " < / span > < / span > < span class = "Keyword" > !=< / span > < span class = "String" > < span class = "String" > " < / span > < span class = "String" > " < / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
swap
< span class = "Keyword" > fi< / span >
< span class = "Keyword" > fi< / span >
}
< span class = "Comment" > < span class = "Comment" > #< / span > publication via rsync< / span >
function rsyncPublish {
result=1
essai=1
< span class = "Keyword" > while< / span > (( < span class = "Variable" > < span class = "Variable" > $< / span > result< / span > < span class = "Keyword" > > < / span > 0 ))< span class = "Keyword" > ;< / span > < span class = "Keyword" > do< / span >
print -- rsync -arv < span class = "Variable" > < span class = "Variable" > $< / span > srcRep< / span > / < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .tmp
< span class = "Keyword" > if< / span > ((< span class = "Keyword" > !< / span > testmode))< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
rsync -arv < span class = "Variable" > < span class = "Variable" > $< / span > srcRep< / span > / < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .tmp
< span class = "Keyword" > fi< / span >
result=< span class = "Variable" > < span class = "Variable" > $< / span > ?< / span >
< span class = "Keyword" > if< / span > (( < span class = "Variable" > < span class = "Variable" > $< / span > result< / span > < span class = "Keyword" > > < / span > 0 ))< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
print -P -- < span class = "String" > < span class = "String" > " < / span > %BEchec du rsync%b (essai n°< span class = "StringVariable" > < span class = "StringVariable" > $< / span > essai< / span > )< span class = "String" > " < / span > < / span > < span class = "Keyword" > > & 2< / span >
< span class = "Keyword" > fi< / span >
((essai++))
< span class = "Keyword" > done< / span >
}
< span class = "Comment" > < span class = "Comment" > #< / span > swap< / span >
function swap {
print -P -- < span class = "String" > < span class = "String" > " < / span > %B[Directory Swap (tmp < => target)]%b< span class = "String" > " < / span > < / span >
[[ -e < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .old ]] < span class = "Keyword" > & & < / span > tryrm < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .old
print -- < span class = "String" > < span class = "String" > " < / span > renommage du repertoire sandard vers le .old< span class = "String" > " < / span > < / span >
tryrename < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .old
print -- < span class = "String" > < span class = "String" > " < / span > renommage du repertoire tmp (nouveau) vers le standard< span class = "String" > " < / span > < / span >
print -P -- < span class = "String" > < span class = "String" > " < / span > %B[Site Indisponible]%b < span class = "String" > < span class = "String" > $(< / span > date< span class = "String" > )< / span > < / span > < span class = "String" > " < / span > < / span >
tryrename < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .tmp < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span >
print -P -- < span class = "String" > < span class = "String" > " < / span > %B[Site Disponible]%b < span class = "String" > < span class = "String" > $(< / span > date< span class = "String" > )< / span > < / span > < span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > renommage du repertoire old vers le tmp< span class = "String" > " < / span > < / span >
tryrename < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .old < span class = "Variable" > < span class = "Variable" > $< / span > destRep< / span > .tmp
print -P -- < span class = "String" > < span class = "String" > " < / span > publication terminée< span class = "String" > " < / span > < / span >
}
print -- < span class = "String" > < span class = "String" > " < / span > Root = < span class = "StringVariable" > < span class = "StringVariable" > $< / span > webroot< / span > < span class = "String" > " < / span > < / span >
print -- < span class = "String" > < span class = "String" > " < / span > Dest = < span class = "StringVariable" > < span class = "StringVariable" > $< / span > destRep< / span > < span class = "String" > " < / span > < / span >
< span class = "Keyword" > if< / span > [[ < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span > = < span class = "String" > < span class = "String" > " < / span > -s< span class = "String" > " < / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
swap
< span class = "Keyword" > else< / span >
print -P < span class = "String" > < span class = "String" > " < / span > Copie de l'init< span class = "String" > " < / span > < / span >
< span class = "Constant" > \c< / span > p -f < span class = "Variable" > < span class = "Variable" > $< / span > webroot< / span > /Scratch/multi/index.html < span class = "Variable" > < span class = "Variable" > $< / span > webroot< / span > /index.html
< span class = "Keyword" > if< / span > [[ < span class = "String" > < span class = "String" > " < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > 1< / span > < span class = "String" > " < / span > < / span > = < span class = "String" > < span class = "String" > " < / span > -d< span class = "String" > " < / span > < / span > ]]< span class = "Keyword" > ;< / span > < span class = "Keyword" > then< / span >
suffix=< span class = "String" > < span class = "String" > " < / span > < span class = "String" > " < / span > < / span >
< span class = "Keyword" > else< / span >
suffix=< span class = "String" > < span class = "String" > " < / span > .tmp< span class = "String" > " < / span > < / span >
< span class = "Keyword" > fi< / span >
print -P -- < span class = "String" > < span class = "String" > " < / span > %BSync%b[< span class = "StringVariable" > < span class = "StringVariable" > ${< / span > Root:t< span class = "StringVariable" > }< / span > < / span > => < span class = "StringVariable" > < span class = "StringVariable" > ${< / span > destRep:t< span class = "StringVariable" > }< / span > < / span > < span class = "StringVariable" > < span class = "StringVariable" > $< / span > suffix< / span > ]< span class = "String" > " < / span > < / span >
incrementalPublish
< span class = "Keyword" > fi< / span >
< / pre >
< / div > < / div > < / div >
< p > C’ est ma façon de remplacer < code > rsync< / code > avec des filesystem qui ne permettent pas de l’ utiliser. J’ espère que ça pourra vous être utile. Je serai heureux de savoir si quelqu’ un à une idée sur comment gérer le problème de renommage de répertoire avec webdav.< / p >
< / div >
< div id = "choixrss" >
< a id = "rss" href = "http://feeds.feedburner.com/yannespositocomfr" >
s'abonner
< / a >
< / div >
< script type = "text/javascript" >
$(document).ready(function(){
$('#comment').hide();
$('#clickcomment').click(showComments);
});
function showComments() {
$('#comment').show();
$('#clickcomment').fadeOut();
}
document.write('< div id = "clickcomment" > Commentaires< / div > ');
< / script >
< div class = "flush" > < / div >
< div class = "corps" id = "comment" >
< h2 class = "first" > commentaires< / h2 >
< noscript >
< / noscript >
< script type = "text/javascript" >
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
var idcomments_post_id = '/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/';
var idcomments_post_url = 'http://yannesposito.com/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/';
< / script >
< span id = "IDCommentsPostTitle" style = "display:none" > < / span >
< script type = 'text/javascript' src = '/Scratch/js/genericCommentWrapperV2.js' > < / script >
< / div >
< div id = "entete" class = "corps_spaced" >
< div id = "liens" >
2010-09-17 14:22:38 +00:00
< ul > < li > < a href = "/Scratch/fr/" > Accueil< / a > < / li >
2010-08-23 12:26:48 +00:00
< li > < a href = "/Scratch/fr/blog/" > Blog< / a > < / li >
2010-09-30 13:01:14 +00:00
< li > < a href = "/Scratch/fr/softwares/" > Softwares< / a > < / li >
2010-09-28 01:00:51 +00:00
< li > < a href = "/Scratch/fr/about/" > À propos< / a > < / li > < / ul >
2010-08-23 12:26:48 +00:00
< / div >
< div class = "flush" > < / div >
< hr / >
< div id = "next_before_articles" >
< div id = "previous_articles" >
articles précédents
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/" > < span class = "nicer" > «< / span > Un menu qui attends avant de se cacher< / a >
2010-08-23 12:26:48 +00:00
< / div >
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/" > < span class = "nicer" > «< / span > lancer un démon en ligne de commande< / a >
2010-08-23 12:26:48 +00:00
< / div >
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/" > < span class = "nicer" > «< / span > < em > Focus< / em > > Minimalisme< / a >
2010-08-23 12:26:48 +00:00
< / div >
< / div >
< div id = "next_articles" >
articles suivants
< div class = "next_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/" > Une CSS pour IE seulement < span class = "nicer" > »< / span > < / a >
2010-08-23 12:26:48 +00:00
< / div >
< div class = "next_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-11-12-Git-for-n00b/" > Git pour les nuls < span class = "nicer" > »< / span > < / a >
2010-08-23 12:26:48 +00:00
< / div >
< div class = "next_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2009-12-06-iphone-call-filter/" > Filtrage d'appel avec l'iPhone < span class = "nicer" > »< / span > < / a >
2010-08-23 12:26:48 +00:00
< / div >
< / div >
< div class = "flush" > < / div >
< / div >
< / div >
< div id = "bottom" >
< div >
< a rel = "license" href = "http://creativecommons.org/licenses/by-sa/3.0/deed.fr" > Droits de reproduction ©, Yann Esposito< / a >
< / div >
< div id = "lastmod" >
2010-08-31 13:06:43 +00:00
Écrit le : 28/10/2009
2010-09-02 09:51:46 +00:00
modifié le : 09/05/2010
2010-08-23 12:26:48 +00:00
< / div >
< div >
Site entièrement réalisé avec
< a href = "http://www.vim.org" > Vim< / a >
et
< a href = "http://nanoc.stoneship.org" > nanoc< / a >
< / div >
< div >
< a href = "/Scratch/fr/validation/" > Validation< / a >
< a href = "http://validator.w3.org/check?uri=referer" > [xhtml] < / a >
.
< a href = "http://jigsaw.w3.org/css-validator/check/referer?profile=css3" > [css] < / a >
.
< a href = "http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/fr/blog/feed/feed.xml" > [rss]< / a >
< / div >
< / div >
< div class = "clear" > < / div >
< / div >
< / body >
< / html >