Below is the file 'tests/t_pivot_root.at' from this revision. You can also download the file.

AT_SETUP([pivot_root])
MONOTONE_SETUP

# possible problems:
#   -- the new root doesn't exist
#   -- the new root is not a dir
#   -- the new root has an MT in it
#   -- the directory the old root is supposed to end up in doesn't exist
#   -- the directory the old root is supposed to end up in is not a directory
#   -- the directory the old root is supposed to end up in already
#      contains something with the given name
# then make sure --execute puts things in the right place...

AT_CHECK(mkdir workspace)
AT_CHECK(cd workspace/ && MONOTONE setup . -b testbranch, [], [ignore], [ignore])

AT_CHECK(mkdir workspace/dir1)
AT_CHECK(mkdir workspace/dir1/dir2)
AT_DATA(workspace/dir1/file1, [blah blah
])
AT_CHECK(mkdir workspace/dir3)
AT_CHECK(mkdir workspace/dir3/MT)
AT_CHECK(cd workspace/ && MONOTONE add ., [], [ignore], [ignore])

AT_CHECK(cd workspace/ && MONOTONE commit -m foo, [], [ignore], [ignore])

AT_CHECK(cd workspace/ && MONOTONE pivot_root nosuchdir foo, [1], [ignore], [ignore])
AT_CHECK(cd workspace/ && MONOTONE pivot_root dir1/file1 foo, [1], [ignore], [ignore])
AT_CHECK(cd workspace/ && MONOTONE pivot_root dir3 old_root, [1], [ignore], [ignore])
AT_CHECK(cd workspace/ && MONOTONE pivot_root dir1 nosuchdir/old_root, [1], [ignore], [ignore])
AT_CHECK(cd workspace/ && MONOTONE pivot_root dir1 file1/old_root, [1], [ignore], [ignore])
AT_CHECK(cd workspace/ && MONOTONE pivot_root dir1 dir2, [1], [ignore], [ignore])

AT_CHECK(cd workspace/ && MONOTONE ls changed, [], [], [])
AT_CHECK(cd workspace/ && MONOTONE ls missing, [], [], [])
AT_CHECK(cd workspace/ && MONOTONE ls unknown, [], [], [])

AT_CHECK(cd workspace/ && MONOTONE pivot_root --execute dir1 old_root, [], [ignore], [ignore])

AT_CHECK(test -d workspace/MT)
AT_CHECK(test -d workspace/dir2)
AT_CHECK(test -f workspace/file1)
AT_CHECK(test -d workspace/old_root)
AT_CHECK(test -d workspace/old_root/dir3)
AT_CHECK(test -d workspace/old_root/dir3/MT)

AT_CHECK(cd workspace/ && MONOTONE ls missing, [], [], [])
AT_CHECK(cd workspace/ && MONOTONE ls unknown, [], [], [])

AT_CHECK(cd workspace/ && MONOTONE commit -m foo, [], [ignore], [ignore])

AT_CLEANUP