[SPIP Zone] r3586 - /_outils_/svnup2tgz/svnup2tgz.sh

Author: bertrand@toggg.com
Date: Mon Jun 19 10:44:42 2006
New Revision: 3586

Log:
* sortie plus gentille si le svn à mettre à jour n'existe pas
* présentation du code
* on ne conserve plus le xxx-up.log mais seulement le xxx-yyy.log
* pour permettre l'utilisation sur plusieurs svn , les fichiers sont préfixés avec leur nom:
  nomsvn-from-to.delete et nomsvn-from-to.tgz (nomsvn est le dernier tronçon du chemin du svn)
* amélioré les explications, l'affichage et les consignes finales
* emets une alarme si des conflits ou des merges sont détectés

Modified:
    _outils_/svnup2tgz/svnup2tgz.sh

Modified: _outils_/svnup2tgz/svnup2tgz.sh

--- _outils_/svnup2tgz/svnup2tgz.sh (original)
+++ _outils_/svnup2tgz/svnup2tgz.sh Mon Jun 19 10:44:42 2006
@@ -1,22 +1,23 @@
#!/bin/bash
#
-# Update svn and build : (from=previous version, to=current version
-# - a bash from-to.delete to remove deleted files and directories
-# - a from-to.tgz of the added/modified files
-# only parameter is the base dir
+# Updates svn (log: name-from-to.log) and builds : (from=previous version, to=current version
+# - a bash name-from-to.delete to remove deleted files and directories
+# - a name-from-to.tgz of the added/modified files (+ the root .svn/entries)
+# only parameter is the base dir , name is the last compound of it
#
-# Met à jour un svn et construit :
-# - un exécutable from-to.delete pour supprimer les fichiers et répertoires disparus
-# - une archive from-to.tgz qui contient les fichiers modifiés ou ajoutés
-# l'unique paramètre est le répertoire de base
+# Met à jour un svn (log: name-from-to.log) et construit :
+# - un exécutable name-from-to.delete pour supprimer les fichiers et répertoires disparus
+# - une archive name-from-to.tgz qui contient les fichiers modifiés ou ajoutés
+# et le .svn/entries de la racine pour le suivi de version
+# l'unique paramètre est le répertoire de base, "name" en est la dernière composante
# les fichiers produits permettent de mettre à jour une installation sans svn ni rsync
#
# Example, spip étant localement en 5977 et le svn version 6258
# ./svnup2tgz spip
-# - la copie locale est mise à jour en 6258
-# - un fichier 5977-6258.delete est produit qui supprime les fichiers disparus, à exécuter
-# sur le site de production par ./5977-6258.delete (depuis le répertoire parent de spip)
-# - une archive 5977-6258.tgz est fabriquée avec tous fichiers modifiés ou nouveaux
+# - la copie locale est mise à jour en 6258, voir le log dans spip-5977-6258.log,
+# - un fichier spip-5977-6258.delete est produit qui supprime les fichiers disparus, à exécuter
+# sur le site de production par ./spip-5977-6258.delete (depuis le répertoire parent de spip)
+# - une archive spip-5977-6258.tgz est fabriquée avec tous fichiers modifiés ou nouveaux
# à extraire sur le site de production (du répertoire parent de spip)
#
if [ $# = 0 ]
@@ -26,34 +27,58 @@
         echo
         exit 1
fi
+NAM=${1##*/}

OLD=`svnversion -n $1`
+if [ -z "${OLD}" ] ; then
+ echo
+ echo "no $1 svn local repository available, svn checkout $1 ?"
+ echo
+ exit 2
+fi
echo "Current version: ${OLD}"
-svn update $1 > ${OLD}-up.log
+svn update $1 > ${NAM}-${OLD}-up.log
NEW=`svnversion -n $1`
-if [ $NEW -eq $OLD ]; then echo "NO CHANGE since ${OLD}"; rm ${OLD}-up.log; exit 0; fi
+if [ $NEW -eq $OLD ]; then
+ echo "NO CHANGE since ${OLD}"
+ rm ${NAM}-${OLD}-up.log
+ exit 0
+fi

echo "New version: ${NEW}"
-cp ${OLD}-up.log ${OLD}-${NEW}.log
+BAS="${NAM}-${OLD}-${NEW}"
+mv ${NAM}-${OLD}-up.log ${BAS}.log

# deleted files or dirs?
-RM=$(sed -n '/^[D]\s\s*\(.*\)$/s//\1/p' ${OLD}-${NEW}.log)
+RM=$(sed -n '/^[D]\s\s*\(.*\)$/s//\1/p' ${BAS}.log)
if [ -n "${RM}" ] ; then
- echo '#!/bin/bash' > ${OLD}-${NEW}.delete
- echo "# deleted from ${OLD} to ${NEW}" >> ${OLD}-${NEW}.delete
- for fil in ${RM}; do echo "rm -Rv ${fil}" >> ${OLD}-${NEW}.delete ; done
- chmod a+x ${OLD}-${NEW}.delete
- echo ${OLD}-${NEW}.delete
+ echo '#!/bin/bash' > ${BAS}.delete
+ echo "# deleted from ${OLD} to ${NEW}" >> ${BAS}.delete
+ for fil in ${RM}; do
+ echo "rm -Rv ${fil}" >> ${BAS}.delete
+ echo "${fil} removed"
+ done
+ chmod a+x ${BAS}.delete
fi

# added/changed files ?
-for fil in $(sed -n '/^[AU]\s\s*\(.*\)$/s//\1/p' ${OLD}-${NEW}.log); do
+for fil in $(sed -n '/^[AU]\s\s*\(.*\)$/s//\1/p' ${BAS}.log); do
     if [ ! -d "$fil" ] ; then
         TGZ="${TGZ} ${fil}" ;
     fi
done # fil
if [ -n "${TGZ}" ] ; then
- tar czvf ${OLD}-${NEW}.tgz $1/.svn/entries ${TGZ}
- echo ${OLD}-${NEW}.tgz
+ tar czvf ${BAS}.tgz $1/.svn/entries ${TGZ}
+ echo "You will have to tar xzvf ${BAS}.tgz from root dir on the site"
+fi
+if [ -n "${RM}" ] ; then
+ echo "After you have run ./${BAS}.delete from the same root"
+fi
+
+# conflict or merged files ?
+CG=$(sed -n '/^[CG]\s\s*\(.*\)$/s//\1/p' ${BAS}.log)
+if [ -n "${CG}" ] ; then
+ echo "CAUTION: conflict or merged files !"
+ echo "${CG}"
fi
exit 0