convert: handle past or foreign partial svn copies
Subversion allows revisions to be composed of subparts coming from revisions
before the parent or from other part of the repository. There is no simple
representation for these now, keep the changes but do not track their origins.
#!/bin/sh
# http://www.selenic.com/mercurial/bts/issue660
hg init a
cd a
echo a > a
mkdir b
echo b > b/b
hg commit -A -m "a is file, b is dir"
echo % file replaced with directory
rm a
mkdir a
echo a > a/a
echo % should fail - would corrupt dirstate
hg add a/a
echo % removing shadow
hg rm --after a
echo % should succeed - shadow removed
hg add a/a
echo % directory replaced with file
rm -r b
echo b > b
echo % should fail - would corrupt dirstate
hg add b
echo % removing shadow
hg rm --after b/b
echo % should succeed - shadow removed
hg add b
echo % look what we got
hg st
echo % revert reintroducing shadow - should fail
rm -r a b
hg revert b/b
echo % revert all - should succeed
hg revert --all
hg st
echo % addremove
rm -r a b
mkdir a
echo a > a/a
echo b > b
hg addremove
hg st
echo % commit
hg ci -A -m "a is dir, b is file"
hg st --all
echo % long directory replaced with file
mkdir d
mkdir d/d
echo d > d/d/d
hg commit -A -m "d is long directory"
rm -r d
echo d > d
echo % should fail - would corrupt dirstate
hg add d
echo % removing shadow
hg rm --after d/d/d
echo % should succeed - shadow removed
hg add d
hg ci -md
echo % update should work at least with clean workdir
rm -r a b d
hg up -r 0
hg st --all
rm -r a b
hg up -r 1
hg st --all
exit 0