# HG changeset patch # User Matt Mackall # Date 1285537192 18000 # Node ID 7813e6b44a0bdb39e9cee7ab5f4e6aa156cfc3f8 # Parent 539480ce1c892f890c9d23e46fb98d159eeee3ff tests: unify test-convert-cvs-synthetic diff -r 539480ce1c89 -r 7813e6b44a0b tests/test-convert-cvs-synthetic --- a/tests/test-convert-cvs-synthetic Sun Sep 26 15:42:48 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -#!/bin/sh - -# This feature requires use of builtin cvsps! -"$TESTDIR/hghave" cvs || exit 80 - -set -e - -echo "[extensions]" >> $HGRCPATH -echo "convert = " >> $HGRCPATH -echo "graphlog = " >> $HGRCPATH - -echo % create cvs repository with one project -mkdir cvsrepo -cd cvsrepo -CVSROOT=`pwd` -export CVSROOT -CVS_OPTIONS=-f -export CVS_OPTIONS -cd .. - -filterpath() -{ - eval "$@" | sed "s:$CVSROOT:*REPO*:g" -} - -cvscall() -{ - echo cvs -f "$@" - cvs -f "$@" 2>&1 -} - -# output of 'cvs ci' varies unpredictably, so just discard it -cvsci() -{ - echo cvs -f ci "$@" - cvs -f ci "$@" >/dev/null 2>&1 -} - -filterpath cvscall -d "$CVSROOT" init -mkdir cvsrepo/proj - -cvscall -q co proj - -echo % create file1 on the trunk -cd proj -touch file1 -cvscall -Q add file1 -cvsci -m"add file1 on trunk" file1 - -echo % create two branches -cvscall -q tag -b v1_0 -cvscall -q tag -b v1_1 - -echo % create file2 on branch v1_0 -cvscall -Q up -rv1_0 -touch file2 -cvscall -Q add file2 -cvsci -m"add file2" file2 - -echo % create file3, file4 on branch v1_1 -cvscall -Q up -rv1_1 -touch file3 -touch file4 -cvscall -Q add file3 file4 -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 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 (#1)" -cd .. -filterpath hg convert --datesort proj proj.hg - -echo "% hg glog output (#1)" -hg -R proj.hg glog --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 539480ce1c89 -r 7813e6b44a0b tests/test-convert-cvs-synthetic.out --- a/tests/test-convert-cvs-synthetic.out Sun Sep 26 15:42:48 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -% create cvs repository with one project -cvs -f -d *REPO* init -cvs -f -q co proj -% create file1 on the trunk -cvs -f -Q add file1 -cvs -f ci -madd file1 on trunk file1 -% create two branches -cvs -f -q tag -b v1_0 -T file1 -cvs -f -q tag -b v1_1 -T file1 -% create file2 on branch v1_0 -cvs -f -Q up -rv1_0 -cvs -f -Q add 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 -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 -RCS file: *REPO*/proj/Attic/file2,v -revision 1.1 -revision 1.1.4.2 -revision 1.1.4.1 -revision 1.1.2.1 -RCS file: *REPO*/proj/Attic/file3,v -revision 1.1 -revision 1.1.2.1 -RCS file: *REPO*/proj/Attic/file4,v -revision 1.1 -revision 1.1.2.1 -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... -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 (#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... -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 - diff -r 539480ce1c89 -r 7813e6b44a0b tests/test-convert-cvs-synthetic.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-cvs-synthetic.t Sun Sep 26 16:39:52 2010 -0500 @@ -0,0 +1,216 @@ +This feature requires use of builtin cvsps! + + $ "$TESTDIR/hghave" cvs || exit 80 + $ echo "[extensions]" >> $HGRCPATH + $ echo "convert = " >> $HGRCPATH + $ echo "graphlog = " >> $HGRCPATH + +create cvs repository with one project + + $ mkdir cvsrepo + $ cd cvsrepo + $ CVSROOT=`pwd` + $ export CVSROOT + $ CVS_OPTIONS=-f + $ export CVS_OPTIONS + $ cd .. + $ cvscall() + > { + > cvs -f "$@" + > } + +output of 'cvs ci' varies unpredictably, so just discard it + + $ cvsci() + > { + > cvs -f ci "$@" >/dev/null + > } + $ cvscall -d "$CVSROOT" init + $ mkdir cvsrepo/proj + $ cvscall -q co proj + +create file1 on the trunk + + $ cd proj + $ touch file1 + $ cvscall -Q add file1 + $ cvsci -m"add file1 on trunk" file1 + +create two branches + + $ cvscall -q tag -b v1_0 + T file1 + $ cvscall -q tag -b v1_1 + T file1 + +create file2 on branch v1_0 + + $ cvscall -Q up -rv1_0 + $ touch file2 + $ cvscall -Q add file2 + $ cvsci -m"add file2" file2 + +create file3, file4 on branch v1_1 + + $ cvscall -Q up -rv1_1 + $ touch file3 + $ touch file4 + $ cvscall -Q add file3 file4 + $ cvsci -m"add file3, file4 on branch v1_1" file3 file4 + +merge file2 from v1_0 to v1_1 + + $ cvscall -Q up -jv1_0 + $ cvsci -m"MERGE from v1_0: add file2" + cvs commit: Examining . + +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.) +create branch v1_2 + + $ cvscall -Q up -A + $ cvscall -q tag -b v1_2 + T file1 + +create file5 on branch v1_2 + + $ cvscall -Q up -rv1_2 + $ touch file5 + $ cvs -Q add file5 + $ cvsci -m"add file5 on v1_2" + cvs commit: Examining . + +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" + cvs commit: Examining . + +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" + cvs commit: Examining . + +merge file6 from trunk to v1_2 + + $ cvscall -Q up -rv1_2 + $ cvscall up -jHEAD file6 + U file6 + $ cvsci -m"MERGE from HEAD: add file6" + cvs commit: Examining . + +cvs rlog output + + $ cvscall -q rlog proj | egrep '^(RCS file|revision)' + RCS file: */cvsrepo/proj/file1,v (glob) + revision 1.1 + RCS file: */cvsrepo/proj/Attic/file2,v (glob) + revision 1.1 + revision 1.1.4.2 + revision 1.1.4.1 + revision 1.1.2.1 + RCS file: */cvsrepo/proj/Attic/file3,v (glob) + revision 1.1 + revision 1.1.2.1 + RCS file: */cvsrepo/proj/Attic/file4,v (glob) + revision 1.1 + revision 1.1.2.1 + RCS file: */cvsrepo/proj/file5,v (glob) + revision 1.2 + revision 1.1 + revision 1.1.2.1 + RCS file: */cvsrepo/proj/file6,v (glob) + revision 1.1 + revision 1.1.2.2 + revision 1.1.2.1 + +convert to hg (#1) + + $ cd .. + $ hg convert --datesort proj proj.hg + initializing destination proj.hg repository + connecting to */cvsrepo (glob) + scanning source... + 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 (#1) + + $ hg -R proj.hg glog --template "{rev} {desc}\n" + 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) + + $ hg convert \ + > --config convert.cvsps.mergefrom='"^MERGE from (\S+):"' \ + > --datesort \ + > proj proj.hg2 + initializing destination proj.hg2 repository + connecting to */cvsrepo (glob) + scanning source... + 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) + + $ hg -R proj.hg2 glog --template "{rev} {desc}\n" + 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 +