Convertir l'arbre CVS des ports en git
Voulant pouvoir jouer tranquillement avec les ports via git, je me suis dit que j'allais convertir les CVS des ports en git tout simplement.
Récupération du CVSROOT
Créer le fichier de config suivant pour csup
*default host=cvsup.free.org
*default base=/var/db
*default prefix=/usr/portsdev
*default release=cvs
*default delete use-rel-suffix
*default compress
ports-all
Puis récupérer le cvsroot :
$ csup cvsroot-supfile
Récupération et construction de parsecvs
Récupérer les sources
$ git clone git://anongit.freedesktop.org/~keithp/parsecvs
Contruire les lib git qui seront nécessaires, sans les installer.
$ make -C /usr/ports/devel/git
Modifier le Makefile de parsecvs pour qu'il ressemble à celui-ci
GCC_WARNINGS1=-Wall -Wpointer-arith -Wstrict-prototypes
GCC_WARNINGS2=-Wmissing-prototypes -Wmissing-declarations
GCC_WARNINGS3=-Wnested-externs -fno-strict-aliasing
GCC_WARNINGS=$(GCC_WARNINGS1) $(GCC_WARNINGS2) $(GCC_WARNINGS3)
GITPATH=/usr/ports/devel/git/work/git-1.6.4
CFLAGS=-O2 -g $(GCC_WARNINGS) -I$(GITPATH) -DSHA1_HEADER='<openssl/sha.h>' -I/usr/local/include
LIBS=-L$(GITPATH) -lgit $(GITPATH)/xdiff/lib.a -lssl -lcrypto -lz -liconv -L/usr/local/lib
YFLAGS=-d -l
LFLAGS=-l
OBJS=gram.o lex.o parsecvs.o cvsutil.o revdir.o \
revlist.o atom.o revcvs.o git.o gitutil.o rcs2git.o \
nodehash.o tags.o tree.o
parsecvs: $(OBJS)
cc $(CFLAGS) -o $@ $(OBJS) $(LIBS)
$(OBJS): cvs.h
lex.o: y.tab.h
lex.o: lex.c
y.tab.h: gram.c
clean:
rm -f $(OBJS) y.tab.h gram.c lex.c parsecvs
install:
cp parsecvs edit-change-log ${HOME}/bin
Construction et installation de parsecvs
$ gmake
$ cp parsecvs edit-change-log /usr/local/bin
Conversion du CVSROOT en git
$ cd /usr/portsdev/ports
Si vous utilisez zsh :
$ print -l **/*,v | parsecvs
Sinon
$ find . -name "*,v" -print | parsecvs
Attention c'est long, très long : 17h30 sur un Q6600 avec 4Go de RAM et un disque SATA 150 en zfs Le facteur principal est la vitesse du disque dur en effet la consommation de RAM et CPU est négligeable comparée à l'utilisation disque.
Une fois cette étape terminée vous disposez d'un répertoire git fonctionnel mais énorme : plus de 4Go
Repack du rep
$ git repack -a -f -d -l
Cette étape est très longue aussi et dépend de la vitesse de votre disque pour beaucoup. Ici ça a pris 28h50
Une fois cette étape finie vous voila avec un répertoire git de 400M ce qui est quand même beaucoup mieux.
Préparation pour les mises à jour
Alors comme cvsps foire prodigieusement souvent via git cvsimport, il faut le lancer de côté :
$ export CVS_RSH=ssh
$ export CVSROOT=anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs
$ cvsps -x --norc -u -A ports > /tmp/cvsps.out
Mise à jour de l'arbre git
$ git cvsimport -o master -P /tmp/cvsps.out ports
Vous voila avec un git à jour, pour continuer à mettre à jour, recommencer les deux dernières étapes.
En un seul coup pour zsh :
$ git cvsimport -o master -P <(cvsps -x --norc -u -A ports) ports