# HG changeset patch # User Greg Ward # Date 1240075788 14400 # Node ID 2c7c973c2abdf39657bd62a720c700051d8d94a2 # Parent d093e57671eae4756093c22680a8ecf739ccac6f Reproduce crash where synthetic revs break merge detection (issue1578). (The fix for this was committed as 9bbcfa898cd3.) Slightly edited by Patrick Mezard diff -r d093e57671ea -r 2c7c973c2abd tests/test-convert-cvs-synthetic --- a/tests/test-convert-cvs-synthetic Wed Apr 29 21:48:59 2009 +0200 +++ b/tests/test-convert-cvs-synthetic Sat Apr 18 13:29:48 2009 -0400 @@ -7,6 +7,7 @@ echo "[extensions]" >> $HGRCPATH echo "convert = " >> $HGRCPATH +echo "graphlog = " >> $HGRCPATH echo "[convert]" >> $HGRCPATH echo "cvsps=builtin" >> $HGRCPATH @@ -51,10 +52,10 @@ cvscall -q tag -b v1_1 echo % create file2 on branch v1_0 -cvscall -q up -rv1_0 +cvscall -Q up -rv1_0 touch file2 cvscall -Q add file2 -cvsci -m"add file2 on branch v1_0" file2 +cvsci -m"add file2" file2 echo % create file3, file4 on branch v1_1 cvscall -Q up -rv1_1 @@ -64,15 +65,54 @@ cvsci -m"add file3, file4 on branch v1_1" file3 file4 echo % merge file2 from v1_0 to v1_1 -cvscall -q up -jv1_0 -cvsci -m"merge file2 from v1_0 to v1_1" +cvscall -Q up -jv1_0 +cvsci -m"MERGE from v1_0: add file2" + +# Step things up a notch: now we make the history really hairy, with +# changes bouncing back and forth between trunk and v1_2 and merges +# going both ways. (I.e., try to model the real world.) + +echo "% create branch v1_2" +cvscall -Q up -A +cvscall -q tag -b v1_2 + +echo "% create file5 on branch v1_2" +cvscall -Q up -rv1_2 +touch file5 +cvs -Q add file5 +cvsci -m"add file5 on v1_2" + +echo "% create file6 on trunk post-v1_2" +cvscall -Q up -A +touch file6 +cvscall -Q add file6 +cvsci -m"add file6 on trunk post-v1_2" + +echo "% merge file5 from v1_2 to trunk" +cvscall -Q up -A +cvscall -Q up -jv1_2 file5 +cvsci -m"MERGE from v1_2: add file5" + +echo "% merge file6 from trunk to v1_2" +cvscall -Q up -rv1_2 +cvscall up -jHEAD file6 +cvsci -m"MERGE from HEAD: add file6" echo % cvs rlog output filterpath cvscall -q rlog proj | egrep '^(RCS file|revision)' -echo % convert to hg +echo "% convert to hg (#1)" cd .. -filterpath hg convert proj proj.hg +filterpath hg convert --datesort proj proj.hg + +echo "% hg glog output (#1)" +hg -R proj.hg glog --template "{rev} {desc}\n" -echo % hg log output -hg -R proj.hg log --template "{rev} {desc}\n" +echo "% convert to hg (#2: with merge detection)" +filterpath hg convert \ + --config convert.cvsps.mergefrom="\"^MERGE from (\S+):\"" \ + --datesort \ + proj proj.hg2 + +echo "% hg glog output (#2)" +hg -R proj.hg2 glog --template "{rev} {desc}\n" diff -r d093e57671ea -r 2c7c973c2abd tests/test-convert-cvs-synthetic.out --- a/tests/test-convert-cvs-synthetic.out Wed Apr 29 21:48:59 2009 +0200 +++ b/tests/test-convert-cvs-synthetic.out Sat Apr 18 13:29:48 2009 -0400 @@ -10,17 +10,36 @@ cvs -f -q tag -b v1_1 T file1 % create file2 on branch v1_0 -cvs -f -q up -rv1_0 +cvs -f -Q up -rv1_0 cvs -f -Q add file2 -cvs -f ci -madd file2 on branch v1_0 file2 +cvs -f ci -madd file2 file2 % create file3, file4 on branch v1_1 cvs -f -Q up -rv1_1 cvs -f -Q add file3 file4 cvs -f ci -madd file3, file4 on branch v1_1 file3 file4 % merge file2 from v1_0 to v1_1 -cvs -f -q up -jv1_0 -U file2 -cvs -f ci -mmerge file2 from v1_0 to v1_1 +cvs -f -Q up -jv1_0 +cvs -f ci -mMERGE from v1_0: add file2 +% create branch v1_2 +cvs -f -Q up -A +cvs -f -q tag -b v1_2 +T file1 +% create file5 on branch v1_2 +cvs -f -Q up -rv1_2 +cvs -f ci -madd file5 on v1_2 +% create file6 on trunk post-v1_2 +cvs -f -Q up -A +cvs -f -Q add file6 +cvs -f ci -madd file6 on trunk post-v1_2 +% merge file5 from v1_2 to trunk +cvs -f -Q up -A +cvs -f -Q up -jv1_2 file5 +cvs -f ci -mMERGE from v1_2: add file5 +% merge file6 from trunk to v1_2 +cvs -f -Q up -rv1_2 +cvs -f up -jHEAD file6 +U file6 +cvs -f ci -mMERGE from HEAD: add file6 % cvs rlog output RCS file: *REPO*/proj/file1,v revision 1.1 @@ -35,23 +54,83 @@ RCS file: *REPO*/proj/Attic/file4,v revision 1.1 revision 1.1.2.1 -% convert to hg +RCS file: *REPO*/proj/file5,v +revision 1.2 +revision 1.1 +revision 1.1.2.1 +RCS file: *REPO*/proj/file6,v +revision 1.1 +revision 1.1.2.2 +revision 1.1.2.1 +% convert to hg (#1) initializing destination proj.hg repository connecting to *REPO* scanning source... using builtin cvsps collecting CVS rlog -9 log entries +15 log entries creating changesets -4 changeset entries +8 changeset entries sorting... converting... -3 add file1 on trunk -2 add file2 on branch v1_0 -1 add file3, file4 on branch v1_1 -0 merge file2 from v1_0 to v1_1 -% hg log output -3 merge file2 from v1_0 to v1_1 -2 add file3, file4 on branch v1_1 -1 add file2 on branch v1_0 -0 add file1 on trunk +7 add file1 on trunk +6 add file2 +5 add file3, file4 on branch v1_1 +4 MERGE from v1_0: add file2 +3 add file5 on v1_2 +2 add file6 on trunk post-v1_2 +1 MERGE from v1_2: add file5 +0 MERGE from HEAD: add file6 +% hg glog output (#1) +o 7 MERGE from HEAD: add file6 +| +| o 6 MERGE from v1_2: add file5 +| | +| o 5 add file6 on trunk post-v1_2 +| | +o | 4 add file5 on v1_2 +|/ +| o 3 MERGE from v1_0: add file2 +| | +| o 2 add file3, file4 on branch v1_1 +|/ +| o 1 add file2 +|/ +o 0 add file1 on trunk + +% convert to hg (#2: with merge detection) +initializing destination proj.hg2 repository +connecting to *REPO* +scanning source... +using builtin cvsps +collecting CVS rlog +15 log entries +creating changesets +8 changeset entries +sorting... +converting... +7 add file1 on trunk +6 add file2 +5 add file3, file4 on branch v1_1 +4 MERGE from v1_0: add file2 +3 add file5 on v1_2 +2 add file6 on trunk post-v1_2 +1 MERGE from v1_2: add file5 +0 MERGE from HEAD: add file6 +% hg glog output (#2) +o 7 MERGE from HEAD: add file6 +|\ +| o 6 MERGE from v1_2: add file5 +| | +| o 5 add file6 on trunk post-v1_2 +| | +o | 4 add file5 on v1_2 +|/ +| o 3 MERGE from v1_0: add file2 +| |\ ++---o 2 add file3, file4 on branch v1_1 +| | +| o 1 add file2 +|/ +o 0 add file1 on trunk +