tests/test-convert-cvs-detectmerge
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
Wed, 18 Nov 2009 12:47:58 +0100
changeset 9881 54b518fc6671
parent 9543 56a5f80556f5
permissions -rwxr-xr-x
httprepo: suppress the `real URL is...' message in safe, common cases. When the actual and requested URL only differ by trailing slashes, there is no need to warn. As an example, this easily happens when accessing repositories on Bitbucket over HTTP(S). As far as I could tell, there were no existing tests for this behaviour.

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