#!/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