view tests/test-convert-cvs-detectmerge @ 11109:a2bc2f2d77a9

subrepo: normalize path part of URLs so that pulling subrepos from webdir works For a "all projects at root" repo layout eg: /main /sub Where subrepos are used such that a clone of main has this layout: ./main/ ./main/.hgsub ./main/sub/ And the .hgsub content is: sub = ../sub This allows a pull from a hgweb where main and sub are exposed at the root (or same directory level) The current code doesn't normalize the path component of a pull url. this results in trying to pull from http://server.com/hg/main/../sub Current hgweb implementation doesn't reduce the path component so this results in a 404 error though everything is setup logically. This patch adresses this 404 error on the puller side normalizing the URLs used for pulling sub repos. For this example, the URL would be reduced to http://server.com/hg/sub Fix + test
author Edouard Gomez <ed.gomez@free.fr>
date Sat, 01 May 2010 23:05:19 +0200
parents 56a5f80556f5
children
line wrap: on
line source

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