diff --git a/tests/test-convert-mtn.out b/tests/test-convert-mtn.out deleted file mode 100644 --- a/tests/test-convert-mtn.out +++ /dev/null @@ -1,199 +0,0 @@ -% tedious monotone keys configuration -% create monotone repository -mtn: adding a to workspace manifest -mtn: adding bin to workspace manifest -mtn: adding c to workspace manifest -mtn: adding dir to workspace manifest -mtn: adding dir/b to workspace manifest -mtn: adding dir/d to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 0f6e5e4f2e7d2a8ef312408f57618abf026afd90 -% update monotone working directory -mtn: skipping dir, already accounted for in workspace -mtn: renaming a to dir/a in workspace manifest -mtn: dropping c from workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 51d0a982464573a2a2cf5ee2c9219c652aaebeff -% convert once -assuming destination repo.mtn-hg -initializing destination repo.mtn-hg repository -scanning source... -sorting... -converting... -1 initialize -0 update1 -mtn: adding e to workspace manifest -mtn: dropping dir/b from workspace manifest -mtn: renaming bin to bin2 in workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision ebe58335d85d8cb176b6d0a12be04f5314b998da -% test directory move -mtn: adding dir1 to workspace manifest -mtn: adding dir1/subdir1 to workspace manifest -mtn: adding dir1/subdir1/file1 to workspace manifest -mtn: adding dir1/subdir2_other to workspace manifest -mtn: adding dir1/subdir2_other/file1 to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision a8d62bc04fee4d2936d28e98bbcc81686dd74306 -mtn: skipping dir1, already accounted for in workspace -mtn: renaming dir1/subdir1 to dir1/subdir2 in workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 2c3d241bbbfe538b1b51d910f5676407e3f4d3a6 -% test subdirectory move -mtn: renaming dir to dir2 in workspace manifest -mtn: dropping dir2/d from workspace manifest -mtn: adding dir2/newfile to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision fdb5a02dae8bfce3a79b3393680af471016e1b4c -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 8bbf76d717001d24964e4604739fdcd0f539fc88 -mtn: dropping dir2/dir/subdir/f from workspace manifest -mtn: dropping dir2/dir/subdir from workspace manifest -mtn: dropping dir2/dir/emptydir from workspace manifest -mtn: dropping dir2/dir from workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 2323d4bc324e6c82628dc04d47a9fd32ad24e322 -% test directory and file move -mtn: adding dir3 to workspace manifest -mtn: adding dir3/a to workspace manifest -mtn: adding dir3/d1 to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 47b192f720faa622f48c68d1eb075b26d405aa8b -mtn: skipping dir3/d1, already accounted for in workspace -mtn: renaming dir3/a to dir3/d1/a in workspace manifest -mtn: skipping dir3, already accounted for in workspace -mtn: renaming dir3/d1 to dir3/d2 in workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 8b543a400d3ee7f6d4bb1835b9b9e3747c8cb632 -% test directory move into another directory move -mtn: adding dir4 to workspace manifest -mtn: adding dir4/a to workspace manifest -mtn: adding dir5 to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 466e0b2afc7a55aa2b4ab2f57cb240bb6cd66fc7 -mtn: renaming dir5 to dir6 in workspace manifest -mtn: skipping dir6, already accounted for in workspace -mtn: renaming dir4 to dir6/dir4 in workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 3d1f77ebad0c23a5d14911be3b670f990991b749 -% test diverging directory moves -mtn: adding dir7 to workspace manifest -mtn: adding dir7/c to workspace manifest -mtn: adding dir7/dir9 to workspace manifest -mtn: adding dir7/dir9/b to workspace manifest -mtn: adding dir7/dir9/dir8 to workspace manifest -mtn: adding dir7/dir9/dir8/a to workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 08a08511f18b428d840199b062de90d0396bc2ed -mtn: renaming dir7 to dir7-2 in workspace manifest -mtn: renaming dir7-2/dir9 to dir9-2 in workspace manifest -mtn: renaming dir9-2/dir8 to dir8-2 in workspace manifest -mtn: beginning commit on branch 'com.selenic.test' -mtn: committed revision 4a736634505795f17786fffdf2c9cbf5b11df6f6 -% convert incrementally -assuming destination repo.mtn-hg -scanning source... -sorting... -converting... -11 update2 "with" quotes -10 createdir1 -9 movedir1 -8 movedir -7 emptydir -6 dropdirectory -5 dirfilemove -4 dirfilemove2 -3 dirdirmove -2 dirdirmove2 -1 divergentdirmove -0 divergentdirmove2 -11 files updated, 0 files merged, 0 files removed, 0 files unresolved -@ 13 "divergentdirmove2" files: dir7-2/c dir7/c dir7/dir9/b dir7/dir9/dir8/a dir8-2/a dir9-2/b -| -o 12 "divergentdirmove" files: dir7/c dir7/dir9/b dir7/dir9/dir8/a -| -o 11 "dirdirmove2" files: dir4/a dir6/dir4/a -| -o 10 "dirdirmove" files: dir4/a -| -o 9 "dirfilemove2" files: dir3/a dir3/d2/a -| -o 8 "dirfilemove" files: dir3/a -| -o 7 "dropdirectory" files: dir2/dir/subdir/f -| -o 6 "emptydir" files: dir2/dir/subdir/f -| -o 5 "movedir" files: dir/a dir/d dir2/a dir2/newfile -| -o 4 "movedir1" files: dir1/subdir1/file1 dir1/subdir2/file1 -| -o 3 "createdir1" files: dir1/subdir1/file1 dir1/subdir2_other/file1 -| -o 2 "update2 "with" quotes" files: bin bin2 dir/b e -| -o 1 "update1" files: a bin c dir/a dir/b -| -o 0 "initialize" files: a bin c dir/b dir/d - -% manifest -bin2 -dir1/subdir2/file1 -dir1/subdir2_other/file1 -dir2/a -dir2/newfile -dir3/d2/a -dir6/dir4/a -dir7-2/c -dir8-2/a -dir9-2/b -e -% contents -a -a -% file move -copies: dir/a (a) -% check directory move -bin2 -dir/a -dir/d -dir1/subdir2/file1 -dir1/subdir2_other/file1 -e -copies: dir1/subdir2/file1 (dir1/subdir1/file1) -% check file remove with directory move -bin2 -dir1/subdir2/file1 -dir1/subdir2_other/file1 -dir2/a -dir2/newfile -e -% check file move with directory move -bin2 -dir1/subdir2/file1 -dir1/subdir2_other/file1 -dir2/a -dir2/newfile -dir3/d2/a -e -% check file directory directory move -bin2 -dir1/subdir2/file1 -dir1/subdir2_other/file1 -dir2/a -dir2/newfile -dir3/d2/a -dir6/dir4/a -e -% check divergent directory moves -bin2 -dir1/subdir2/file1 -dir1/subdir2_other/file1 -dir2/a -dir2/newfile -dir3/d2/a -dir6/dir4/a -dir7-2/c -dir8-2/a -dir9-2/b -e diff --git a/tests/test-convert-mtn b/tests/test-convert-mtn.t old mode 100755 new mode 100644 rename from tests/test-convert-mtn rename to tests/test-convert-mtn.t --- a/tests/test-convert-mtn +++ b/tests/test-convert-mtn.t @@ -1,146 +1,358 @@ -#!/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 -"$TESTDIR/hghave" mtn || exit 80 +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 < passphrase + > passphrase + > EOF + $ cat >> $HOME/$mtndir/monotonerc < function get_passphrase(keypair_id) + > return "passphrase" + > end + > EOF + +create monotone repository -# 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 + $ 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: adding a to workspace manifest + mtn: adding bin to workspace manifest + mtn: adding c to workspace manifest + mtn: adding dir to workspace manifest + mtn: adding dir/b to workspace manifest + mtn: adding dir/d to workspace manifest + $ mtn ci -m initialize + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 0f6e5e4f2e7d2a8ef312408f57618abf026afd90 -HOME=`pwd`/do_not_use_HOME_mtn; export HOME -# Windows version of monotone home -APPDATA=$HOME; export APPDATA +update monotone working directory + + $ mtn mv a dir/a + mtn: skipping dir, already accounted for in workspace + mtn: renaming a to dir/a in workspace manifest + $ echo a >> dir/a + $ echo b >> dir/b + $ mtn drop c + mtn: dropping c from workspace manifest + $ python -c 'file("bin", "wb").write("b\\x00c")' + $ mtn ci -m update1 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 51d0a982464573a2a2cf5ee2c9219c652aaebeff + $ cd .. + +convert once -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 < e + $ mtn add e + mtn: adding e to workspace manifest + $ mtn drop dir/b + mtn: dropping dir/b from workspace manifest + $ mtn mv bin bin2 + mtn: renaming bin to bin2 in workspace manifest + $ mtn ci -m 'update2 "with" quotes' + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision ebe58335d85d8cb176b6d0a12be04f5314b998da + +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: adding dir1 to workspace manifest + mtn: adding dir1/subdir1 to workspace manifest + mtn: adding dir1/subdir1/file1 to workspace manifest + mtn: adding dir1/subdir2_other to workspace manifest + mtn: adding dir1/subdir2_other/file1 to workspace manifest + $ mtn ci -m createdir1 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision a8d62bc04fee4d2936d28e98bbcc81686dd74306 + $ mtn rename dir1/subdir1 dir1/subdir2 + mtn: skipping dir1, already accounted for in workspace + mtn: renaming dir1/subdir1 to dir1/subdir2 in workspace manifest + $ mtn ci -m movedir1 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 2c3d241bbbfe538b1b51d910f5676407e3f4d3a6 + +test subdirectory move -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 .. + $ mtn mv dir dir2 + mtn: renaming dir to dir2 in workspace manifest + $ echo newfile > dir2/newfile + $ mtn drop dir2/d + mtn: dropping dir2/d from workspace manifest + $ mtn add dir2/newfile + mtn: adding dir2/newfile to workspace manifest + $ mtn ci -m movedir + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision fdb5a02dae8bfce3a79b3393680af471016e1b4c + +Test directory removal with empty directory -echo % convert once -hg convert -s mtn repo.mtn + $ 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: beginning commit on branch 'com.selenic.test' + mtn: committed revision 8bbf76d717001d24964e4604739fdcd0f539fc88 + $ mtn drop -R dir2/dir + mtn: dropping dir2/dir/subdir/f from workspace manifest + mtn: dropping dir2/dir/subdir from workspace manifest + mtn: dropping dir2/dir/emptydir from workspace manifest + mtn: dropping dir2/dir from workspace manifest + $ mtn ci -m dropdirectory + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 2323d4bc324e6c82628dc04d47a9fd32ad24e322 + +test directory and file move + + $ mkdir -p dir3/d1 + $ echo a > dir3/a + $ mtn add dir3/a dir3/d1 + mtn: adding dir3 to workspace manifest + mtn: adding dir3/a to workspace manifest + mtn: adding dir3/d1 to workspace manifest + $ mtn ci -m dirfilemove + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 47b192f720faa622f48c68d1eb075b26d405aa8b + $ mtn mv dir3/a dir3/d1/a + mtn: skipping dir3/d1, already accounted for in workspace + mtn: renaming dir3/a to dir3/d1/a in workspace manifest + $ mtn mv dir3/d1 dir3/d2 + mtn: skipping dir3, already accounted for in workspace + mtn: renaming dir3/d1 to dir3/d2 in workspace manifest + $ mtn ci -m dirfilemove2 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 8b543a400d3ee7f6d4bb1835b9b9e3747c8cb632 + +test directory move into another directory move -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 .. + $ mkdir dir4 + $ mkdir dir5 + $ echo a > dir4/a + $ mtn add dir4/a dir5 + mtn: adding dir4 to workspace manifest + mtn: adding dir4/a to workspace manifest + mtn: adding dir5 to workspace manifest + $ mtn ci -m dirdirmove + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 466e0b2afc7a55aa2b4ab2f57cb240bb6cd66fc7 + $ mtn mv dir5 dir6 + mtn: renaming dir5 to dir6 in workspace manifest + $ mtn mv dir4 dir6/dir4 + mtn: skipping dir6, already accounted for in workspace + mtn: renaming dir4 to dir6/dir4 in workspace manifest + $ mtn ci -m dirdirmove2 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 3d1f77ebad0c23a5d14911be3b670f990991b749 + +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: adding dir7 to workspace manifest + mtn: adding dir7/c to workspace manifest + mtn: adding dir7/dir9 to workspace manifest + mtn: adding dir7/dir9/b to workspace manifest + mtn: adding dir7/dir9/dir8 to workspace manifest + mtn: adding dir7/dir9/dir8/a to workspace manifest + $ mtn ci -m divergentdirmove + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 08a08511f18b428d840199b062de90d0396bc2ed + $ mtn mv dir7 dir7-2 + mtn: renaming dir7 to dir7-2 in workspace manifest + $ mtn mv dir7-2/dir9 dir9-2 + mtn: renaming dir7-2/dir9 to dir9-2 in workspace manifest + $ mtn mv dir9-2/dir8 dir8-2 + mtn: renaming dir9-2/dir8 to dir8-2 in workspace manifest + $ mtn ci -m divergentdirmove2 + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision 4a736634505795f17786fffdf2c9cbf5b11df6f6 + $ cd .. + +convert incrementally -echo % convert incrementally -hg convert -s mtn repo.mtn - -glog() -{ - hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@" -} + $ hg convert -s mtn repo.mtn + assuming destination repo.mtn-hg + scanning source... + sorting... + converting... + 11 update2 "with" quotes + 10 createdir1 + 9 movedir1 + 8 movedir + 7 emptydir + 6 dropdirectory + 5 dirfilemove + 4 dirfilemove2 + 3 dirdirmove + 2 dirdirmove2 + 1 divergentdirmove + 0 divergentdirmove2 + $ glog() + > { + > hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@" + > } + $ cd repo.mtn-hg + $ hg up -C + 11 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ glog + @ 13 "divergentdirmove2" files: dir7-2/c dir7/c dir7/dir9/b dir7/dir9/dir8/a dir8-2/a dir9-2/b + | + o 12 "divergentdirmove" files: dir7/c dir7/dir9/b dir7/dir9/dir8/a + | + o 11 "dirdirmove2" files: dir4/a dir6/dir4/a + | + o 10 "dirdirmove" files: dir4/a + | + o 9 "dirfilemove2" files: dir3/a dir3/d2/a + | + o 8 "dirfilemove" files: dir3/a + | + o 7 "dropdirectory" files: dir2/dir/subdir/f + | + o 6 "emptydir" files: dir2/dir/subdir/f + | + o 5 "movedir" files: dir/a dir/d dir2/a dir2/newfile + | + o 4 "movedir1" files: dir1/subdir1/file1 dir1/subdir2/file1 + | + o 3 "createdir1" files: dir1/subdir1/file1 dir1/subdir2_other/file1 + | + o 2 "update2 "with" quotes" files: bin bin2 dir/b e + | + o 1 "update1" files: a bin c dir/a dir/b + | + o 0 "initialize" files: a bin c dir/b dir/d + -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!' +manifest + + $ hg manifest + bin2 + dir1/subdir2/file1 + dir1/subdir2_other/file1 + dir2/a + dir2/newfile + dir3/d2/a + dir6/dir4/a + dir7-2/c + dir8-2/a + dir9-2/b + e + +contents -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 + $ cat dir2/a + a + a + $ test -d dir2/dir && echo 'removed dir2/dir is still there!' + [1] + +file move + + $ hg log -v -C -r 1 | grep copies + copies: dir/a (a) + +check directory move + + $ hg manifest -r 4 + bin2 + dir/a + dir/d + dir1/subdir2/file1 + dir1/subdir2_other/file1 + e + $ test -d dir1/subdir2 || echo 'new dir1/subdir2 does not exist!' + $ test -d dir1/subdir1 && echo 'renamed dir1/subdir1 is still there!' + [1] + $ hg log -v -C -r 4 | grep copies + copies: dir1/subdir2/file1 (dir1/subdir1/file1) + +check file remove with directory move + + $ hg manifest -r 5 + bin2 + dir1/subdir2/file1 + dir1/subdir2_other/file1 + dir2/a + dir2/newfile + e +check file move with directory move + + $ hg manifest -r 9 + bin2 + dir1/subdir2/file1 + dir1/subdir2_other/file1 + dir2/a + dir2/newfile + dir3/d2/a + e + +check file directory directory move + + $ hg manifest -r 11 + bin2 + dir1/subdir2/file1 + dir1/subdir2_other/file1 + dir2/a + dir2/newfile + dir3/d2/a + dir6/dir4/a + e + +check divergent directory moves + + $ hg manifest -r 13 + bin2 + dir1/subdir2/file1 + dir1/subdir2_other/file1 + dir2/a + dir2/newfile + dir3/d2/a + dir6/dir4/a + dir7-2/c + dir8-2/a + dir9-2/b + e