--- /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