# HG changeset patch # User Matt Mackall # Date 1285533768 18000 # Node ID 539480ce1c892f890c9d23e46fb98d159eeee3ff # Parent 873ca83d6cfd4e1751ee99e966b0001175125da2 tests: unify test-convert-cvs-detectmerge diff -r 873ca83d6cfd -r 539480ce1c89 tests/test-convert-cvs-detectmerge --- a/tests/test-convert-cvs-detectmerge Sun Sep 26 15:33:09 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -#!/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 - -CVSROOT=`pwd`/cvsrepo -export CVSROOT - -# 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 "graphlog = " >> $HGRCPATH -echo "[convert]" >> $HGRCPATH -echo "cvsps.cache=0" >> $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 "% fix bug on v1_1, merge to trunk with error" -cvscall -Q update -rv1_1 -echo "merge forward" >> file1 -cvscall -Q tag unmerged -cvsci -m"fix file1" -cvscall -Q update -A -filterpath cvscall -Q update -junmerged -jv1_1 -# note the typo in the commit log message -cvsci -m"fix file1 [MERGE from v1-1]" -cvs -Q tag -d unmerged - -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 % graphical log -hg -R proj.hg glog --template="$template" diff -r 873ca83d6cfd -r 539480ce1c89 tests/test-convert-cvs-detectmerge.out --- a/tests/test-convert-cvs-detectmerge.out Sun Sep 26 15:33:09 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -% 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 -% fix bug on v1_1, merge to trunk with error -cvs -f -Q update -rv1_1 -cvs -f -Q tag unmerged -cvs -f ci -mfix file1 -cvs -f -Q update -A -cvs -f -Q update -junmerged -jv1_1 -RCS file: *REPO*/proj/file1,v -retrieving revision 1.1.4.2 -retrieving revision 1.1.4.3 -Merging differences between 1.1.4.2 and 1.1.4.3 into file1 -cvs -f ci -mfix file1 [MERGE from v1-1] -% convert to hg -warning: CVS commit message references non-existent branch 'v1-1': -fix file1 [MERGE from v1-1] -initializing destination proj.hg repository -connecting to *REPO* -scanning source... -collecting CVS rlog -12 log entries -creating changesets -10 changeset entries -sorting... -converting... -9 add file1 on trunk -8 add text -7 unrelated change -6 add text [MERGE from v1_0] -5 add text [MERGE from v1_1] -4 add file2 on trunk -3 add other text -2 add other text [MERGE from HEAD] -1 fix file1 -0 fix file1 [MERGE from v1-1] -% complete log -9: '' fix file1 [MERGE from v1-1] -8: 'v1_1' fix file1 -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 -% graphical log -o 9: '' fix file1 [MERGE from v1-1] -| -| o 8: 'v1_1' fix file1 -| | -| o 7: 'v1_1' add other text [MERGE from HEAD] -|/| -o | 6: '' add other text -| | -o | 5: '' add file2 on trunk -| | -o | 4: '' add text [MERGE from v1_1] -|\| -| o 3: 'v1_1' add text [MERGE from v1_0] -| |\ -+---o 2: 'v1_1' unrelated change -| | -| o 1: 'v1_0' add text -|/ -o 0: '' add file1 on trunk - diff -r 873ca83d6cfd -r 539480ce1c89 tests/test-convert-cvs-detectmerge.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-cvs-detectmerge.t Sun Sep 26 15:42:48 2010 -0500 @@ -0,0 +1,231 @@ +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 + $ CVSROOT=`pwd`/cvsrepo + $ export CVSROOT + + $ cvscall() + > { + > cvs -f "$@" + > } + +output of 'cvs ci' varies unpredictably, so just discard it +XXX copied from test-convert-cvs-synthetic + + $ cvsci() + > { + > cvs -f ci "$@" > /dev/null + > } + +XXX copied from test-convert-cvs-synthetic + + $ echo "[extensions]" >> $HGRCPATH + $ echo "convert = " >> $HGRCPATH + $ echo "graphlog = " >> $HGRCPATH + $ echo "[convert]" >> $HGRCPATH + $ echo "cvsps.cache=0" >> $HGRCPATH + $ echo "cvsps.mergefrom=\[MERGE from (\S+)\]" >> $HGRCPATH + +create cvs repository with one project + + $ mkdir cvsrepo + $ cvscall -q -d "$CVSROOT" init + $ mkdir cvsrepo/proj + +populate cvs repository + + $ cvscall -Q co proj + $ cd proj + $ touch file1 + $ cvscall -Q add file1 + $ cvsci -m"add file1 on trunk" + cvs commit: Examining . + +create two release branches + + $ cvscall -q tag -b v1_0 + T file1 + $ cvscall -q tag -b v1_1 + T file1 + +modify file1 on branch v1_0 + + $ cvscall -Q update -rv1_0 + $ echo "change" >> file1 + $ cvsci -m"add text" + cvs commit: Examining . + +make unrelated change on v1_1 + + $ cvscall -Q update -rv1_1 + $ touch unrelated + $ cvscall -Q add unrelated + $ cvsci -m"unrelated change" + cvs commit: Examining . + +merge file1 to v1_1 + + $ cvscall -Q update -jv1_0 + RCS file: */cvsrepo/proj/file1,v (glob) + retrieving revision 1.1 + retrieving revision 1.1.2.1 + Merging differences between 1.1 and 1.1.2.1 into file1 + $ cvsci -m"add text [MERGE from v1_0]" + cvs commit: Examining . + +merge change to trunk + + $ cvscall -Q update -A + $ cvscall -Q update -jv1_1 + RCS file: */cvsrepo/proj/file1,v (glob) + retrieving revision 1.1 + retrieving revision 1.1.4.1 + Merging differences between 1.1 and 1.1.4.1 into file1 + $ cvsci -m"add text [MERGE from v1_1]" + cvs commit: Examining . + +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 +change on trunk to backport + + $ echo "backport me" >> file1 + $ cvsci -m"add other text" file1 + $ cvscall log file1 + + RCS file: */cvsrepo/proj/file1,v (glob) + Working file: file1 + head: 1.3 + branch: + locks: strict + access list: + symbolic names: + v1_1: 1.1.0.4 + v1_0: 1.1.0.2 + keyword substitution: kv + total revisions: 5; selected revisions: 5 + description: + ---------------------------- + revision 1.3 + date: * (glob) + add other text + ---------------------------- + revision 1.2 + date: * (glob) + add text [MERGE from v1_1] + ---------------------------- + revision 1.1 + date: * (glob) + branches: 1.1.2; 1.1.4; + add file1 on trunk + ---------------------------- + revision 1.1.4.1 + date: * (glob) + add text [MERGE from v1_0] + ---------------------------- + revision 1.1.2.1 + date: * (glob) + add text + ============================================================================= + +XXX how many ways are there to spell "trunk" with CVS? +backport trunk change to v1_1 + + $ cvscall -Q update -rv1_1 + $ cvscall -Q update -j1.2 -j1.3 file1 + RCS file: */cvsrepo/proj/file1,v (glob) + retrieving revision 1.2 + retrieving revision 1.3 + Merging differences between 1.2 and 1.3 into file1 + $ cvsci -m"add other text [MERGE from HEAD]" file1 + +fix bug on v1_1, merge to trunk with error + + $ cvscall -Q update -rv1_1 + $ echo "merge forward" >> file1 + $ cvscall -Q tag unmerged + $ cvsci -m"fix file1" + cvs commit: Examining . + $ cvscall -Q update -A + $ cvscall -Q update -junmerged -jv1_1 + RCS file: */cvsrepo/proj/file1,v (glob) + retrieving revision 1.1.4.2 + retrieving revision 1.1.4.3 + Merging differences between 1.1.4.2 and 1.1.4.3 into file1 + +note the typo in the commit log message + + $ cvsci -m"fix file1 [MERGE from v1-1]" + cvs commit: Examining . + $ cvs -Q tag -d unmerged + +convert to hg + + $ cd .. + $ hg convert proj proj.hg + initializing destination proj.hg repository + connecting to */cvsrepo (glob) + scanning source... + collecting CVS rlog + 12 log entries + creating changesets + warning: CVS commit message references non-existent branch 'v1-1': + fix file1 [MERGE from v1-1] + 10 changeset entries + sorting... + converting... + 9 add file1 on trunk + 8 add text + 7 unrelated change + 6 add text [MERGE from v1_0] + 5 add text [MERGE from v1_1] + 4 add file2 on trunk + 3 add other text + 2 add other text [MERGE from HEAD] + 1 fix file1 + 0 fix file1 [MERGE from v1-1] + +complete log + + $ template="{rev}: '{branches}' {desc}\n" + $ hg -R proj.hg log --template="$template" + 9: '' fix file1 [MERGE from v1-1] + 8: 'v1_1' fix file1 + 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 + +graphical log + + $ hg -R proj.hg glog --template="$template" + o 9: '' fix file1 [MERGE from v1-1] + | + | o 8: 'v1_1' fix file1 + | | + | o 7: 'v1_1' add other text [MERGE from HEAD] + |/| + o | 6: '' add other text + | | + o | 5: '' add file2 on trunk + | | + o | 4: '' add text [MERGE from v1_1] + |\| + | o 3: 'v1_1' add text [MERGE from v1_0] + | |\ + +---o 2: 'v1_1' unrelated change + | | + | o 1: 'v1_0' add text + |/ + o 0: '' add file1 on trunk +