view tests/test-convert-mtn @ 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 bb5ea66789e3
children
line wrap: on
line source

#!/bin/sh

"$TESTDIR/hghave" mtn || exit 80

# Monotone directory is called .monotone on *nix and monotone
# on Windows. Having a variable here ease test patching.
mtndir=.monotone
echo "[extensions]" >> $HGRCPATH
echo "convert=" >> $HGRCPATH
echo 'graphlog =' >> $HGRCPATH

HOME=`pwd`/do_not_use_HOME_mtn; export HOME
# Windows version of monotone home
APPDATA=$HOME; export APPDATA

echo % tedious monotone keys configuration
# The /dev/null redirection is necessary under Windows, or
# it complains about home directory permissions
mtn --quiet genkey test@selenic.com 1>/dev/null 2>&1 <<EOF
passphrase
passphrase
EOF
cat >> $HOME/$mtndir/monotonerc <<EOF
function get_passphrase(keypair_id)
    return "passphrase"
end
EOF

echo % create monotone repository
mtn db init --db=repo.mtn
mtn --db=repo.mtn --branch=com.selenic.test setup workingdir
cd workingdir
echo a > a
mkdir dir
echo b > dir/b
echo d > dir/d
python -c 'file("bin", "wb").write("a\\x00b")'
echo c > c
mtn add a dir/b dir/d c bin
mtn ci -m initialize
echo % update monotone working directory
mtn mv a dir/a
echo a >> dir/a
echo b >> dir/b
mtn drop c
python -c 'file("bin", "wb").write("b\\x00c")'
mtn ci -m update1
cd ..

echo % convert once
hg convert -s mtn repo.mtn

cd workingdir
echo e > e
mtn add e
mtn drop dir/b
mtn mv bin bin2
mtn ci -m 'update2 "with" quotes'
echo '% test directory move'
mkdir -p dir1/subdir1
mkdir -p dir1/subdir2_other
echo file1 > dir1/subdir1/file1
echo file2 > dir1/subdir2_other/file1
mtn add dir1/subdir1/file1 dir1/subdir2_other/file1
mtn ci -m createdir1
mtn rename dir1/subdir1 dir1/subdir2
mtn ci -m movedir1
echo '% test subdirectory move'
mtn mv dir dir2
echo newfile > dir2/newfile
mtn drop dir2/d
mtn add dir2/newfile
mtn ci -m movedir
# Test directory removal with empty directory
mkdir dir2/dir
mkdir dir2/dir/subdir
echo f > dir2/dir/subdir/f
mkdir dir2/dir/emptydir
mtn add --quiet -R dir2/dir
mtn ci -m emptydir
mtn drop -R dir2/dir
mtn ci -m dropdirectory
echo '% test directory and file move'
mkdir -p dir3/d1
echo a > dir3/a
mtn add dir3/a dir3/d1
mtn ci -m dirfilemove
mtn mv dir3/a dir3/d1/a
mtn mv dir3/d1 dir3/d2
mtn ci -m dirfilemove2
echo '% test directory move into another directory move'
mkdir dir4
mkdir dir5
echo a > dir4/a
mtn add dir4/a dir5
mtn ci -m dirdirmove
mtn mv dir5 dir6
mtn mv dir4 dir6/dir4
mtn ci -m dirdirmove2
echo '% test diverging directory moves'
mkdir -p dir7/dir9/dir8
echo a > dir7/dir9/dir8/a
echo b > dir7/dir9/b
echo c > dir7/c
mtn add -R dir7
mtn ci -m divergentdirmove
mtn mv dir7 dir7-2
mtn mv dir7-2/dir9 dir9-2
mtn mv dir9-2/dir8 dir8-2
mtn ci -m divergentdirmove2
cd ..

echo % convert incrementally
hg convert -s mtn repo.mtn

glog()
{
    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
}

cd repo.mtn-hg
hg up -C
glog
echo % manifest
hg manifest
echo % contents
cat dir2/a
test -d dir2/dir && echo 'removed dir2/dir is still there!'

echo % file move
hg log -v -C -r 1 | grep copies
echo % check directory move
hg manifest -r 4
test -d dir1/subdir2 || echo 'new dir1/subdir2 does not exist!'
test -d dir1/subdir1 && echo 'renamed dir1/subdir1 is still there!'
hg log -v -C -r 4 | grep copies
echo % check file remove with directory move
hg manifest -r 5
echo % check file move with directory move
hg manifest -r 9
echo % check file directory directory move
hg manifest -r 11
echo % check divergent directory moves
hg manifest -r 13
exit 0