Revision 47 (by dpavlin, 2007/11/02 12:11:31) integrated changes from Samuel Gélineau which implement .keepme files inside
directories to fix basically all problems with directories.
#!/bin/sh -x

dir=/dev/shm
test -e $dir || dir=/tmp/

svn_rep=$dir/test-svn-rep/
svn_co=$dir/test-svn-co/
cvs_rep=$dir/test-cvs-rep/
cvs_co=$dir/test-cvs-co/

test -d $svn_rep && rm -Rf $svn_rep
test -d $svn_co && rm -Rf $svn_co
test -d $cvs_rep && rm -Rf $cvs_rep
test -d $cvs_co && rm -Rf $cvs_co

svnadmin create $svn_rep || exit
mkdir $svn_co || exit
svn import -m "initial import" $svn_co file://$svn_rep || exit
rm -Rf $svn_co || exit
svn co file://$svn_rep $svn_co || exit
mkdir $svn_co/dir || exit
svn add $svn_co/dir || exit
svn commit -m "dir" $svn_co/dir || exit

mkdir "$svn_co/dir/with space" || exit
svn add "$svn_co/dir/with space" || exit
svn commit -m "dir with space" "$svn_co/dir/with space" || exit

ps ax > $svn_co/dir/file || exit
ps ax > "$svn_co/dir/file with spaces" || exit
svn add $svn_co/dir/file "$svn_co/dir/file with spaces" || exit
svn commit -m "files" $svn_co || exit

svn rm $svn_co/dir/file || exit
svn rm "$svn_co/dir/file with spaces" || exit
svn commit -m "delete files" $svn_co || exit

export CVSROOT=$cvs_rep

mkdir $cvs_rep || exit
cvs -f init || exit
mkdir $cvs_co || exit
cd $cvs_co || exit
cvs -f co . || exit
mkdir $cvs_co/dir || exit
cvs -f add dir $cvs_co/dir || exit
cvs -f commit -m "fake repository root" dir $cvs_co/dir || exit
echo 0 > $cvs_co/dir/.svnrev || exit
cvs -f add $cvs_co/dir/.svnrev || exit
cvs -f commit -m "fake existing repository" $cvs_co/dir/.svnrev || exit
cd - || exit

rm -Rf $cvs_co || exit
mkdir $cvs_co || exit
cd $cvs_co && cvs -f co -P dir && cd - || exit

function svn2cvs() {
	./svn2cvs.pl file://$svn_rep/dir $cvs_rep dir || exit
}
function update_cvs() {
	cd $cvs_co && cvs -f update -P -d dir && cd - || exit
}
function update_svn() {
	svn update $svn_co || exit
}
function update_all() {
	update_svn
	update_cvs
}
function test() {
	svn2cvs
	update_all
	diff -x .svn\* -x CVS -x '\.keepme' -urw $svn_co/dir/ $cvs_co/dir/ || exit
}

svn2cvs
update_cvs

test -d "$cvs_co/dir/with space" || exit

ps ax > $svn_co/dir/file || exit
svn add $svn_co/dir/file || exit
svn commit -m "file again" $svn_co || exit

test

svn rm $svn_co/dir/file || exit
svn commit -m "remove file again" $svn_co || exit

test

echo "new file" > $svn_co/dir/skip_add
svn add $svn_co/dir/skip_add || exit
svn commit -m "add skip_add" $svn_co || exit

echo "modify file" >> $svn_co/dir/skip_add
svn commit -m "modify skip_add" $svn_co || exit

cvs_rev=`cat $cvs_co/dir/.svnrev`
echo "*** skipping revision $cvs_rev ***"
echo `expr $cvs_rev + 1` > $cvs_co/dir/.svnrev || exit
cd $cvs_co && cvs -f commit -m "skip $cvs_rev" dir/.svnrev && cd - || exit

test

echo keep > $svn_co/dir/keep
svn add $svn_co/dir/keep
svn mkdir $svn_co/dir/keep-dir
echo keep > $svn_co/dir/keep-dir/keep
svn add $svn_co/dir/keep-dir/keep
svn commit -m "stuff to keep" $svn_co || exit

test

svn rm $svn_co/dir/keep-dir/keep
svn commit -m "remove keep in keep-dir" $svn_co || exit

test

svn mv $svn_co/dir/keep $svn_co/dir/keep-dir/ || exit
svn commit -m "move keep into keep-dir" $svn_co || exit

test

svn mv $svn_co/dir/keep-dir/keep $svn_co/dir/keep || exit
svn commit -m "move keep back" $svn_co || exit

test

echo bar > $svn_co/dir/bar
echo baz > $svn_co/dir/baz
svn mkdir  $svn_co/dir/l1
echo bar > $svn_co/dir/l1/bar
echo baz > $svn_co/dir/l1/baz
svn mkdir  $svn_co/dir/l1/l2
echo bar > $svn_co/dir/l1/l2/bar
echo baz > $svn_co/dir/l1/l2/baz
svn mkdir  $svn_co/dir/l1/l2/l3
echo bar > $svn_co/dir/l1/l2/l3/bar
echo baz > $svn_co/dir/l1/l2/l3/baz

svn add $svn_co/dir/* $svn_co/dir/l1 $svn_co/dir/l1/* $svn_co/dir/l1/l2/* $svn_co/dir/l1/l2/l3/*
svn commit -m "add a bunch of stuff" $svn_co || exit

test

svn rm $svn_co/dir/* || exit
svn revert $svn_co/dir/keep $svn_co/dir/keep-dir{,/keep}
svn commit -m "remove everything" $svn_co || exit

test