tests/test-convert-mtn
author Patrick Mezard <pmezard@gmail.com>
Sat, 11 Apr 2009 23:12:42 +0200
changeset 8050 087cc65bebff
parent 6873 39b4db2ea6ed
child 8099 3cdf4872941a
permissions -rwxr-xr-x
convert/mtn: record changes from directory renames (issue1587) Bug report and initial path by Pavel Volkovitskiy <int@mtx.ru>

#!/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 'hgext.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
python -c 'file("bin", "wb").write("a\\x00b")'
echo c > c
mtn add a dir/b 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
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
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
exit 0