diff --git a/tests/test-convert-cvs-detectmerge b/tests/test-convert-cvs-detectmerge new file mode 100755 --- /dev/null +++ b/tests/test-convert-cvs-detectmerge @@ -0,0 +1,108 @@ +#!/bin/sh + +# Test config convert.cvsps.mergefrom config setting. +# (Should test similar mergeto feature, but I don't understand it yet.) +# Requires builtin cvsps. + +"$TESTDIR/hghave" cvs || exit 80 + +export CVSROOT=`pwd`/cvsrepo + +# XXX copied from test-convert-cvs-synthetic +cvscall() +{ + echo cvs -f "$@" + cvs -f "$@" +} + +# output of 'cvs ci' varies unpredictably, so just discard it +# XXX copied from test-convert-cvs-synthetic +cvsci() +{ + echo cvs -f ci "$@" + cvs -f ci "$@" >/dev/null 2>&1 +} + +# XXX copied from test-convert-cvs-synthetic +filterpath() +{ + eval "$@" | sed "s:$CVSROOT:*REPO*:g" +} + +echo "[extensions]" >> $HGRCPATH +echo "convert = " >> $HGRCPATH +echo "[convert]" >> $HGRCPATH +echo "cvsps=builtin" >> $HGRCPATH +echo "cvsps.mergefrom=\[MERGE from (\S+)\]" >> $HGRCPATH + +echo % create cvs repository with one project +mkdir cvsrepo + +filterpath cvscall -q -d "$CVSROOT" init +mkdir cvsrepo/proj + +echo % populate cvs repository +cvscall -Q co proj +cd proj +touch file1 +cvscall -Q add file1 +cvsci -m"add file1 on trunk" + +echo % create two release branches +cvscall -q tag -b v1_0 +cvscall -q tag -b v1_1 + +echo % modify file1 on branch v1_0 +filterpath cvscall -Q update -rv1_0 +echo "change" >> file1 +cvsci -m"add text" + +echo % make unrelated change on v1_1 +cvscall -Q update -rv1_1 +touch unrelated +cvscall -Q add unrelated +cvsci -m"unrelated change" + +echo % merge file1 to v1_1 +filterpath cvscall -Q update -jv1_0 +cvsci -m"add text [MERGE from v1_0]" + +echo % merge change to trunk +cvscall -Q update -A +filterpath cvscall -Q update -jv1_1 +cvsci -m"add text [MERGE from v1_1]" + +echo % non-merged change on trunk +echo "foo" > file2 +cvscall -Q add file2 +cvsci -m"add file2 on trunk" file2 + +# this will create rev 1.3 +echo % change on trunk to backport +echo "backport me" >> file1 +cvsci -m"add other text" file1 +cvscall log file1 | sed -n '/^date: / d; /^revision /,$ p;' + +# XXX how many ways are there to spell "trunk" with CVS? +echo % backport trunk change to v1_1 +cvscall -Q update -rv1_1 +filterpath cvscall -Q update -j1.2 -j1.3 file1 +cvsci -m"add other text [MERGE from HEAD]" file1 + +set -e +echo % convert to hg +cd .. +filterpath hg convert proj proj.hg + +echo % complete log +template="{rev}: '{branches}' {desc}\n" +hg -R proj.hg log --template="$template" + +echo % parents of rev 3 +hg -R proj.hg parents --template="$template" -r3 +echo % parents of rev 4 +hg -R proj.hg parents --template="$template" -r4 +echo % parents of rev 5 +hg -R proj.hg parents --template="$template" -r5 +echo % parents of rev 7 +hg -R proj.hg parents --template="$template" -r7 diff --git a/tests/test-convert-cvs-detectmerge.out b/tests/test-convert-cvs-detectmerge.out new file mode 100644 --- /dev/null +++ b/tests/test-convert-cvs-detectmerge.out @@ -0,0 +1,101 @@ +% create cvs repository with one project +cvs -f -q -d *REPO* init +% populate cvs repository +cvs -f -Q co proj +cvs -f -Q add file1 +cvs -f ci -madd file1 on trunk +% create two release branches +cvs -f -q tag -b v1_0 +T file1 +cvs -f -q tag -b v1_1 +T file1 +% modify file1 on branch v1_0 +cvs -f -Q update -rv1_0 +cvs -f ci -madd text +% make unrelated change on v1_1 +cvs -f -Q update -rv1_1 +cvs -f -Q add unrelated +cvs -f ci -munrelated change +% merge file1 to v1_1 +cvs -f -Q update -jv1_0 +RCS file: *REPO*/proj/file1,v +retrieving revision 1.1 +retrieving revision 1.1.2.1 +Merging differences between 1.1 and 1.1.2.1 into file1 +cvs -f ci -madd text [MERGE from v1_0] +% merge change to trunk +cvs -f -Q update -A +cvs -f -Q update -jv1_1 +RCS file: *REPO*/proj/file1,v +retrieving revision 1.1 +retrieving revision 1.1.4.1 +Merging differences between 1.1 and 1.1.4.1 into file1 +cvs -f ci -madd text [MERGE from v1_1] +% non-merged change on trunk +cvs -f -Q add file2 +cvs -f ci -madd file2 on trunk file2 +% change on trunk to backport +cvs -f ci -madd other text file1 +revision 1.3 +add other text +---------------------------- +revision 1.2 +add text [MERGE from v1_1] +---------------------------- +revision 1.1 +branches: 1.1.2; 1.1.4; +add file1 on trunk +---------------------------- +revision 1.1.4.1 +add text [MERGE from v1_0] +---------------------------- +revision 1.1.2.1 +add text +============================================================================= +% backport trunk change to v1_1 +cvs -f -Q update -rv1_1 +cvs -f -Q update -j1.2 -j1.3 file1 +RCS file: *REPO*/proj/file1,v +retrieving revision 1.2 +retrieving revision 1.3 +Merging differences between 1.2 and 1.3 into file1 +cvs -f ci -madd other text [MERGE from HEAD] file1 +% convert to hg +initializing destination proj.hg repository +connecting to *REPO* +scanning source... +using builtin cvsps +collecting CVS rlog +10 log entries +creating changesets +8 changeset entries +sorting... +converting... +7 add file1 on trunk +6 add text +5 unrelated change +4 add text [MERGE from v1_0] +3 add text [MERGE from v1_1] +2 add file2 on trunk +1 add other text +0 add other text [MERGE from HEAD] +% complete log +7: 'v1_1' add other text [MERGE from HEAD] +6: '' add other text +5: '' add file2 on trunk +4: '' add text [MERGE from v1_1] +3: 'v1_1' add text [MERGE from v1_0] +2: 'v1_1' unrelated change +1: 'v1_0' add text +0: '' add file1 on trunk +% parents of rev 3 +2: 'v1_1' unrelated change +1: 'v1_0' add text +% parents of rev 4 +0: '' add file1 on trunk +3: 'v1_1' add text [MERGE from v1_0] +% parents of rev 5 +4: '' add text [MERGE from v1_1] +% parents of rev 7 +3: 'v1_1' add text [MERGE from v1_0] +6: '' add other text