changeset 12532:742bb15d94a8

tests: unify test-convert-mtn
author Matt Mackall <mpm@selenic.com>
date Sun, 26 Sep 2010 17:18:28 -0500
parents a1cbcc1a21f6
children 068449e515e2
files tests/test-convert-mtn tests/test-convert-mtn.out tests/test-convert-mtn.t
diffstat 3 files changed, 358 insertions(+), 345 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test-convert-mtn	Sun Sep 26 17:17:19 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-#!/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
-
--- a/tests/test-convert-mtn.out	Sun Sep 26 17:17:19 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-mtn.t	Sun Sep 26 17:18:28 2010 -0500
@@ -0,0 +1,358 @@
+
+  $ "$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
+
+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
+  $ cd ..
+
+convert incrementally
+
+  $ 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
+  
+
+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
+
+  $ 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