tests/test-convert-cvs-detectmerge.t
changeset 12521 539480ce1c89
parent 9543 56a5f80556f5
child 12585 385fd0eee005
--- /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
+