diff options
Diffstat (limited to 'tests/test-convert-mtn.t')
-rw-r--r-- | tests/test-convert-mtn.t | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/tests/test-convert-mtn.t b/tests/test-convert-mtn.t new file mode 100644 index 0000000..17083ee --- /dev/null +++ b/tests/test-convert-mtn.t @@ -0,0 +1,388 @@ + + $ "$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 + +Windows version of monotone home + + $ APPDATA=$HOME; export APPDATA + +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 + +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: 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 + +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 + + $ hg convert -s mtn repo.mtn + assuming destination repo.mtn-hg + initializing destination repo.mtn-hg repository + scanning source... + sorting... + converting... + 1 initialize + 0 update1 + $ cd workingdir + $ echo e > 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 + + $ 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 + + $ 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 + + $ 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 + +test large file support (> 32kB) + + $ python -c 'for x in range(10000): print x' > large-file + $ $TESTDIR/md5sum.py large-file + 5d6de8a95c3b6bf9e0ffb808ba5299c1 large-file + $ mtn add large-file + mtn: adding 'large-file' to workspace manifest + $ mtn ci -m largefile + mtn: beginning commit on branch 'com.selenic.test' + mtn: committed revision f0a20fecd10dc4392d18fe69a03f1f4919d3387b + +test suspending (closing a branch) + + $ mtn suspend f0a20fecd10dc4392d18fe69a03f1f4919d3387b 2> /dev/null + $ cd .. + +convert incrementally + + $ hg convert -s mtn repo.mtn + assuming destination repo.mtn-hg + scanning source... + sorting... + converting... + 12 update2 "with" quotes + 11 createdir1 + 10 movedir1 + 9 movedir + 8 emptydir + 7 dropdirectory + 6 dirfilemove + 5 dirfilemove2 + 4 dirdirmove + 3 dirdirmove2 + 2 divergentdirmove + 1 divergentdirmove2 + 0 largefile + $ glog() + > { + > hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@" + > } + $ cd repo.mtn-hg + $ hg up -C + 12 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ glog + @ 14 "largefile" files: large-file + | + o 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 + + $ 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 + large-file + +contents + + $ 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 + +test large file support (> 32kB) + + $ $TESTDIR/md5sum.py large-file + 5d6de8a95c3b6bf9e0ffb808ba5299c1 large-file + +check branch closing + + $ hg branches -a + $ hg branches -c + com.selenic.test 14:* (closed) (glob) + |