|
|
#!/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=builtin" >> $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"
|
|
|
|