URL: https://linuxfr.org/users/gomgom/journaux/arch-vers-monotone Title: Arch vers Monotone Authors: Edouard Gomez Date: 2005年04月14日T17:30:15+02:00 Tags: Score: 0 Suite a l'episode BK sur la LKML, je me suis dit que je pouvais retenter d'utiliser monotone car ça fait maintenant 3ans que j'utilise arch/tla (baz aujourd'hui), et je m'encroute dans mes habitudes. J'ai donc pour tester le bignou, pris le projet XviD depuis Janvier 2004 que j'ai maintenu dans mes archives arch (dispos sur mon site) En gros j'ai fait, deux scripts de porc: Le premier importe la base head de 2004: #!/bin/sh # ---- Initial import ---- baz get ed.gomez@free.fr--2004-1/xvidcore--head--0.0--base-0 xvidcore.baz monotone --db=xvidcore.monotone db init monotone --db=xvidcore.monotone genkey ed.gomez@free.fr cd xvidcore.baz monotone --db=../xvidcore.monotone setup . baz inventory -s | xargs monotone --db=../xvidcore.monotone add monotone --db=../xvidcore.monotone --branch=org.xvid.head commit --message="Initial import in monotone" Le deuxieme permet de mettre a jour vers la revision suivante: #!/bin/sh REVISION=1ドル baz replay ed.gomez@free.fr--2004-1/xvidcore--head--0.0--patch-${REVISION} | grep -v '{arch}' | grep -v '.arch-ids' | grep -v "^*" > replay.txt ADDED_FILES=`grep ^A[^/] replay.txt |awk '{print 2ドル}'` MODIFIED_FILES=`grep ^M replay.txt |awk '{print 2ドル}'` DELETED_FILES=`grep ^D[^/] replay.txt |awk '{print 2ドル}'` RENAMED_FILES=`grep ^R replay.txt |awk '{print 2ドル ":" 4ドル;}'` for i in ${ADDED_FILES} ; do £spaces£ £/spaces£monotone --db=../xvidcore.monotone add ${i} £spaces£ £/spaces£echo "A ${i}" done for i in ${DELETED_FILES} ; do £spaces£ £/spaces£monotone --db=../xvidcore.monotone drop ${i} £spaces£ £/spaces£echo "D ${i}" done for i in ${RENAMED_FILES} ; do £spaces£ £/spaces£ORG_FILE=`echo $i | cut -d ':' -f 1` £spaces£ £/spaces£DST_FILE=`echo $i | cut -d ':' -f 2` £spaces£ £/spaces£echo "R ${ORG_FILE} => ${DST_FILE}" £spaces£ £/spaces£monotone --db=../xvidcore.monotone rename ${ORG_FILE} ${DST_FILE} done for i in ${MODIFIED_FILES} ; do £spaces£ £/spaces£echo "M ${i}" done COMMIT_SUMMARY=` baz log -f -r patch-${REVISION}:patch-${REVISION} |grep ^Summary: | sed s,'^Summary:[[:space:]]*\(.*\)$','1円',` COMMIT_LOG=`baz log -f -r patch-${REVISION}:patch-${REVISION} | awk 'BEGIN{start=0} /^$/ {start=1;} // { if (start != 0) print;}' | grep -v '==========='` echo "Summary: ${COMMIT_SUMMARY}" > MT/log echo >> MT/log echo "${COMMIT_LOG}" >> MT/log Puis je m'en suis servi comme ça: # cd ~/tmp/ # mkdir monotone.test # cd monotone.test # import-base.sh # cd xvidcore.baz # for i in `seq 1 121` ; do commit-rev.sh ${i} ; monotone --db=../xvidcore.monotone commit ; done # (edition de commit-rev.sh pour passer sur mon archive 2005) # baz replay ed.gomez@free.fr--2005-1/xvidcore--head--0.0--base-0 # for i in `seq 1 8` ; do commit-rev.sh ${i} ; monotone --db=../xvidcore.monotone commit ; done Avis de la transition: - J'ai pas encore vérifié la cohérence des révisions, je ne sais pas si elles sont équivalentes à celles de arch. Mais les commits ne m'ont pas semblé longuets, donc pour un projet de la taille d'xvid, monotone est utilisable sans souci sur ce point la. - En deux cuillères a pot, j'ai pu coder un script de migration arch>monotone qui conserve l'historique linéaire d'une branche avec tous les logs messages ! Pas mal, il faudrait cependant faire gaffe au type de changeset dans arch, s'il s'agit d'un merge, il faudrait idéalement importer la branche dont provient le merge avant de merger le patch, et utiliser monotone dans un contexte de merge histoire que l'arbre des révisions monotone ait la meme topologie que celui d'arch. - J'ai mal aux doigts a force de taper le password de mon certificat monotone et de faire :wq pour valider le log pourtant ecrit dans MT/log... En gros la 0.18 semble aussi sympa a utiliser que arch/baz, la prise en main est plus simple que celle d'un baz 1.3. Le seul point que je trouve dommage c'est le fait de ne pas pouvoir faire un mirror de sa DB locale sur un serveur tout bête HTTP ou FTP ou SFTP comme le fait arch, la on est obligé de lancer un serveur maison qui permet de synchroniser. Ah bonne surprise, monotone est plutôt bon à représenter les révisions sous forme compacte, les 130 révisions pèsent 1.5MB pour monotone alors que pour arch sur une partoche ext3, ca pèse 3MB, avec certes une révision en cache pour la continuation 2004->2005. Enfin voila, ma petite expérience avec monotone... au lieu de troller sur le thread BK, on pourrait donner ici ses expériences dans l'utilisation d'outils SCM décentralisés. PS: j'ai utilisé bazaar 1.3.1 et monotone 0.18 pour effectuer tout ça