#!/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 <> $HOME/$mtndir/monotonerc < 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