test-convert-cvsnt-mergepoints: ignore differences between CVS 1.11 and 1.12.
- factor out cvsci function (similar to other test-convert-cvs* scripts)
- add filterpath function (also similar to other scripts)
- generally munge the output of CVS
- add lots of output to make it easier to follow when things go wrong
This doesn't make the test pass reliably under CVS 1.11; it just makes
it behave the same as under CVS 1.12, i.e. sometimes it passes and
sometimes it fails. Failure is more frequent with faster hardware.
--- a/tests/test-convert-cvsnt-mergepoints Mon Jun 15 20:35:19 2009 -0400
+++ b/tests/test-convert-cvsnt-mergepoints Mon Jun 15 20:35:19 2009 -0400
@@ -2,11 +2,25 @@
"$TESTDIR/hghave" cvs || exit 80
+filterpath()
+{
+ eval "$@" | sed "s:$CVSROOT:*REPO*:g"
+}
+
cvscall()
{
+ echo cvs -f "$@"
cvs -f "$@"
}
+# output of 'cvs ci' varies unpredictably, so discard most of it
+# -- just keep the part that matters
+cvsci()
+{
+ echo cvs -f ci "$@"
+ cvs -f ci "$@" 2>&1 | egrep "^(new|initial) revision:"
+}
+
hgcat()
{
hg --cwd src-hg cat -r tip "$1"
@@ -18,7 +32,7 @@
echo "[convert]" >> $HGRCPATH
echo "cvsps=builtin" >> $HGRCPATH
-echo % create cvs repository
+echo "% create cvs repository"
mkdir cvsmaster
cd cvsmaster
CVSROOT=`pwd`
@@ -26,51 +40,56 @@
CVS_OPTIONS=-f
export CVS_OPTIONS
cd ..
+filterpath cvscall -Q -d "$CVSROOT" init
-cvscall -q -d "$CVSROOT" init
-
-cvscall -q checkout -d cvsworktmp .
+echo "% checkout #1: add foo.txt"
+cvscall -Q checkout -d cvsworktmp .
cd cvsworktmp
mkdir foo
-cvscall -q add foo | sed -e 's/Directory .* added to the repository//g'
+cvscall -Q add foo
cd foo
echo foo > foo.txt
-cvscall -q add foo.txt
-cvscall -q ci -m "foo.txt" | sed 's/.*,v.*/checking in/g'
+cvscall -Q add foo.txt
+cvsci -m "foo.txt"
cd ../..
rm -rf cvsworktmp
-cvscall -q checkout -d cvswork foo
+echo "% checkout #2: create MYBRANCH1 and modify foo.txt on it"
+cvscall -Q checkout -d cvswork foo
cd cvswork
cvscall -q rtag -b -R MYBRANCH1 foo
-cvscall -q up -P -r MYBRANCH1
+cvscall -Q update -P -r MYBRANCH1
echo bar > foo.txt
-cvscall -q ci -m "bar" | sed 's/.*,v.*/checking in/g'
+cvsci -m "bar"
echo baz > foo.txt
-cvscall -q ci -m "baz" | sed 's/.*,v.*/checking in/g'
+cvsci -m "baz"
+echo "% create MYBRANCH1_2 and modify foo.txt some more"
cvscall -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo
-cvscall -q up -P -r MYBRANCH1_2
+cvscall -Q update -P -r MYBRANCH1_2
echo bazzie > foo.txt
-cvscall -q ci -m "bazzie" | sed 's/.*,v.*/checking in/g'
+cvsci -m "bazzie"
+echo "% create MYBRANCH1_1 and modify foo.txt yet again"
cvscall -q rtag -b -R MYBRANCH1_1 foo
-cvscall -q up -P -r MYBRANCH1_1
+cvscall -Q update -P -r MYBRANCH1_1
echo quux > foo.txt
-cvscall -q ci -m "quux" | sed 's/.*,v.*/checking in/g'
-cvscall -q up -P -jMYBRANCH1 | sed 's/RCS file: .*,v/merging MYBRANCH1/g'
-echo xyzzy > foo.txt
-cvscall -q ci -m "merge" | sed 's/.*,v.*/checking in/g'
+cvsci -m "quux"
-cvscall -q up -P -A
+echo "% merge MYBRANCH1 to MYBRANCH1_1"
+filterpath cvscall -Q update -P -jMYBRANCH1
+echo xyzzy > foo.txt
+cvsci -m "merge1"
-cvscall -q up -P -jMYBRANCH1_2 | sed 's/RCS file: .*,v/merging MYBRANCH1_2/g'
-cvscall -q ci -m "merge" | sed 's/.*,v.*/checking in/g'
+echo "% return to trunk and merge MYBRANCH1_2"
+cvscall -Q update -P -A
+filterpath cvscall -Q update -P -jMYBRANCH1_2
+cvsci -m "merge2"
REALCVS=`which cvs`
echo "for x in \$*; do if [ \"\$x\" = \"rlog\" ]; then echo \"RCS file: $CVSROOT/foo/foo.txt,v\"; cat $TESTDIR/test-convert-cvsnt-mergepoints.rlog; exit 0; fi; done; $REALCVS \$*" > cvs
--- a/tests/test-convert-cvsnt-mergepoints.out Mon Jun 15 20:35:19 2009 -0400
+++ b/tests/test-convert-cvsnt-mergepoints.out Mon Jun 15 20:35:19 2009 -0400
@@ -1,46 +1,46 @@
% create cvs repository
-U cvsworktmp/CVSROOT/checkoutlist
-U cvsworktmp/CVSROOT/commitinfo
-U cvsworktmp/CVSROOT/config
-U cvsworktmp/CVSROOT/cvswrappers
-U cvsworktmp/CVSROOT/loginfo
-U cvsworktmp/CVSROOT/modules
-U cvsworktmp/CVSROOT/notify
-U cvsworktmp/CVSROOT/postadmin
-U cvsworktmp/CVSROOT/postproxy
-U cvsworktmp/CVSROOT/posttag
-U cvsworktmp/CVSROOT/postwatch
-U cvsworktmp/CVSROOT/preproxy
-U cvsworktmp/CVSROOT/rcsinfo
-U cvsworktmp/CVSROOT/taginfo
-U cvsworktmp/CVSROOT/verifymsg
-
-cvs add: use `cvs commit' to add this file permanently
-checking in
+cvs -f -Q -d *REPO* init
+% checkout #1: add foo.txt
+cvs -f -Q checkout -d cvsworktmp .
+cvs -f -Q add foo
+cvs -f -Q add foo.txt
+cvs -f ci -m foo.txt
initial revision: 1.1
-U cvswork/foo.txt
-checking in
+% checkout #2: create MYBRANCH1 and modify foo.txt on it
+cvs -f -Q checkout -d cvswork foo
+cvs -f -q rtag -b -R MYBRANCH1 foo
+cvs -f -Q update -P -r MYBRANCH1
+cvs -f ci -m bar
new revision: 1.1.2.1; previous revision: 1.1
-checking in
+cvs -f ci -m baz
new revision: 1.1.2.2; previous revision: 1.1.2.1
-checking in
+% create MYBRANCH1_2 and modify foo.txt some more
+cvs -f -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo
+cvs -f -Q update -P -r MYBRANCH1_2
+cvs -f ci -m bazzie
new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
-U foo.txt
-checking in
+% create MYBRANCH1_1 and modify foo.txt yet again
+cvs -f -q rtag -b -R MYBRANCH1_1 foo
+cvs -f -Q update -P -r MYBRANCH1_1
+cvs -f ci -m quux
new revision: 1.1.4.1; previous revision: 1.1
+% merge MYBRANCH1 to MYBRANCH1_1
rcsmerge: warning: conflicts during merge
-merging MYBRANCH1
+cvs -f -Q update -P -jMYBRANCH1
+RCS file: *REPO*/foo/foo.txt,v
retrieving revision 1.1
retrieving revision 1.1.2.2
Merging differences between 1.1 and 1.1.2.2 into foo.txt
-checking in
+cvs -f ci -m merge1
new revision: 1.1.4.2; previous revision: 1.1.4.1
-U foo.txt
-merging MYBRANCH1_2
+% return to trunk and merge MYBRANCH1_2
+cvs -f -Q update -P -A
+cvs -f -Q update -P -jMYBRANCH1_2
+RCS file: *REPO*/foo/foo.txt,v
retrieving revision 1.1
retrieving revision 1.1.2.2.2.1
Merging differences between 1.1 and 1.1.2.2.2.1 into foo.txt
-checking in
+cvs -f ci -m merge2
new revision: 1.2; previous revision: 1.1
collecting CVS rlog
7 log entries