changeset 8170:6c4fdde87f90

cvsps: add test for merge detection (issue1615). Currently only testing convert.cvsps.mergefrom; this script should also probably test convert.cvsps.mergeto.
author Greg Ward <greg-hg@gerg.ca>
date Sun, 19 Apr 2009 12:20:39 -0400
parents 6584953be356
children 4e5bd9b97bb3
files tests/test-convert-cvs-detectmerge tests/test-convert-cvs-detectmerge.out
diffstat 2 files changed, 209 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvs-detectmerge	Sun Apr 19 12:20:39 2009 -0400
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvs-detectmerge.out	Sun Apr 19 12:20:39 2009 -0400
@@ -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