Linux: Bitkeeper <-> CVS gateway

Címkék

Pavel Machek (pavel@ucw.cz) egy levelet küldött az LKML-re, melyben bejelentette, hogy készített egy egyszerű BitKeeper CVS gatewayt.

A BitKeeper használata nagy viharokat váltott ki a kernelfejlesztők között, és RMS (Richard M. Stallman) is többször szót emelt a használata ellen.

Egy kis emlékezet frissítés: A BitKeeper 1998-ban mutatkozott be, Larry McVoy hozta létre abból a célból, hogy segítse a kernel fejlesztés menetét. A BitKeeper tulajdonképpen egy CVS-t kiváltó eszköz, amolyan 'source code management system'. Linus többször hangoztatta, hogy nem tud hatékonyan dolgozni a CVS-el. A Linux fejlesztése során most a BitKeepert használják.Számos kernelfejlesztő nem ért egyet Linussal, és nem akarja használni a BitKeepert. Sokan megszokták a CVS-t az évek alatt, és szívesebben dolgoznának azzal a fejlesztés során.

Pavel Machek ezért készített egy egyszerű shell scriptet, melynek segítségével a BitKeeper tartalmát egyszerűen konvertálhatjuk CVS-be.

A scriptek:

-----------------------------------------------------------------

bk2all:

#!/bin/bash

cd /home/riel/bk-kernel/linux-2.5

A=$1

while [ $A -lt $2 ]; do

PREV=$A

A=$[$A+1]

echo "Processing patch $A"

bk export -tpatch -r1.$PREV,1.$A > ~/bkdata/1.$A

done

diff2cvs:

#!/bin/bash

fake() {

eval $1

}

dir() {

while [ ! -d $1 ]; do

DIR=$1

OLDDIR=foo

while [ $OLDDIR != $DIR ]; do

mkdir $DIR && fake "cvs add $DIR"

OLDDIR=$DIR

DIR=${DIR%/*}

done

done

}

cat $1 | grep '^+++ ' | grep -v "/dev/null" | (

while true; do

read A B C || break

FILE=${B#*/}

if [ ! -e $FILE ]; then

touch $FILE || dir ${FILE%/*}

touch $FILE || echo "Could not create $FILE"

touch $FILE || exit 1

fake "cvs add -ko $FILE"

fi

done

)

cat $1 | patch -Esp1 || exit 3

cat $1 | grep '^--- ' | grep -v "/dev/null" | (

while true; do

read A B C || break

FILE=${B#*/}

if [ ! -e $FILE ]; then

fake "cvs remove $FILE"

fi

done

)

cat $1 | grep '^#' > /tmp/delme.diff2cvs

fake "cvs -z 3 commit -F /tmp/delme.diff2cvs ."

-----------------------------------------------------------------

all2cvs:

#!/bin/bash

A=$1

while [ $A -lt $2 ]; do

A=$[$A+1]

if [ ! -e ../data/1.$A ]; then

echo "Patch $A does not exist"

exit 1

fi

echo "Processing patch $A"

../scripts/diff2cvs ../data/1.$A

mv ../data/1.$A ../olddata/1.$A

echo "Done processing $A"

if [ -e ../data/STOP ]; then

echo "Stopped at user request after $A"

echo "Stopped at user request after $A" > ../data/STOP

exit 1

fi

I=1; while [ $I -lt 50000 ]; do I=$[$I+1]; done

done

-----------------------------------------------------------------