J’ai eu a faire une migration svn-to-git. J’ai été bloqué par de mauvaises révisions presentes dans le repo SVN qui m’enpechaient de faire mon git svn clone. J’ai vu qu’il était possible de bypasser les mauvaises révisions svn en utilisant l’utilitaire svnadmin.
Du coup , j’ai écrit un petit script vite fait (crado mais ça fait le job 🙂 ) pour lancer le dump du repo sans avoir à intervenir lorsqu’une révision était moisie :
#!/bin/sh
echo "removing initial revision dump"
rm -f /home/data01/svn-dumpfile-20190517-1
if ! [ -f /home/data01/svn-dumpfile-20190517 ] ; then
echo "dumping first"
/usr/bin/svnadmin dump /home/data01/repository > /home/data01/svn-dumpfile-20190517 2> ./dump-start.log
fi
echo "copie du dump"
cp /home/data01/svn-dumpfile-20190517 /home/data01/svn-dumpfile-20190517-1
counter=1
counter=$(tail ./dump-start.log |grep "Dumped revision" | tail -1 | awk -F "Dumped revision " '{print $2}' | awk -F "." '{print $1}')
((counter++))
echo "last buggy revision is : $counter"
echo "incrementing next revision"
((counter++))
echo "removing last dump.log"
echo > ./dump.log
res=1
echo "ready to start !?"
read toto
#42762
while [ "$counter" -le 42700 ] || [ "$res" -eq 1 ]
do
echo "dumping from revision $counter"
/usr/bin/svnadmin dump --incremental -r $counter:HEAD /home/data01/repository >> /home/data01/svn-dumpfile-20190517-1 2>>./dump.log
res=$?
if [ "$res" -ne 0 ] ; then
newcounter=$(tail -20 ./dump.log |grep "Dumped revision" | tail -1 | awk -F "Dumped revision " '{print $2}' | awk -F "." '{print $1}')
if [ "" != "$newcounter" ] && [ $newcounter -gt $counter ] ; then
echo "found newcounter=$newcounter"
counter=$newcounter
fi
((counter++))
echo "buggy revision is : $counter"
else
echo "end of the dump !"
continue
fi
echo "skipping revision $counter"
((counter++))
done
C’est un script vite fait qui fait le job comme expliqué, je vous laisse le soin de mettre au propre si nécessaire 😉


Laisser un commentaire