tests/test-convert-cvs-detectmerge
author Greg Ward <greg-hg@gerg.ca>
Sun, 31 May 2009 15:20:31 -0400
changeset 8674 0941ee76489e
parent 8350 1f0f01bc86a5
child 9543 56a5f80556f5
permissions -rwxr-xr-x
run-tests: redefine --with-hg so it takes the 'hg' script to run. - in parseargs(), check that --with-hg value is valid - add handy --local option for "--with-hg=../hg" - ensure that we always set PATH and PYTHONPATH (not just when doing a temporary install) - override any existing PYTHONPATH, so test success does not depend on whatever happens to be in the caller's environment - give tests a little more control by exporting $PYTHON to the environment; needed by test-convert and test-mergetool when they run hg with a stripped-down $PATH Also, add a big comment explaining all the corner cases to test for the next person who tries to modify this script.

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