--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-issue660.t Fri Sep 03 23:34:37 2010 +0200
@@ -0,0 +1,140 @@
+# http://mercurial.selenic.com/bts/issue660
+
+ $ hg init
+ $ echo a > a
+ $ mkdir b
+ $ echo b > b/b
+ $ hg commit -A -m "a is file, b is dir"
+ adding a
+ adding b/b
+
+File replaced with directory:
+
+ $ rm a
+ $ mkdir a
+ $ echo a > a/a
+
+Should fail - would corrupt dirstate:
+
+ $ hg add a/a
+ abort: file 'a' in dirstate clashes with 'a/a'
+
+Removing shadow:
+
+ $ hg rm --after a
+
+Should succeed - shadow removed:
+
+ $ hg add a/a
+
+Directory replaced with file:
+
+ $ rm -r b
+ $ echo b > b
+
+Should fail - would corrupt dirstate:
+
+ $ hg add b
+ abort: directory 'b' already in dirstate
+
+Removing shadow:
+
+ $ hg rm --after b/b
+
+Should succeed - shadow removed:
+
+ $ hg add b
+
+Look what we got:
+
+ $ hg st
+ A a/a
+ A b
+ R a
+ R b/b
+
+Revert reintroducing shadow - should fail:
+
+ $ rm -r a b
+ $ hg revert b/b
+ abort: file 'b' in dirstate clashes with 'b/b'
+
+Revert all - should succeed:
+
+ $ hg revert --all
+ undeleting a
+ forgetting a/a
+ forgetting b
+ undeleting b/b
+
+ $ hg st
+
+addremove:
+
+ $ rm -r a b
+ $ mkdir a
+ $ echo a > a/a
+ $ echo b > b
+
+ $ hg addremove -s 0
+ removing a
+ adding a/a
+ adding b
+ removing b/b
+
+ $ hg st
+ A a/a
+ A b
+ R a
+ R b/b
+
+commit:
+
+ $ hg ci -A -m "a is dir, b is file"
+ $ hg st --all
+ C a/a
+ C b
+
+Long directory replaced with file:
+
+ $ mkdir d
+ $ mkdir d/d
+ $ echo d > d/d/d
+ $ hg commit -A -m "d is long directory"
+ adding d/d/d
+
+ $ rm -r d
+ $ echo d > d
+
+Should fail - would corrupt dirstate:
+
+ $ hg add d
+ abort: directory 'd' already in dirstate
+
+Removing shadow:
+
+ $ hg rm --after d/d/d
+
+Should succeed - shadow removed:
+
+ $ hg add d
+ $ hg ci -md
+
+Update should work at least with clean working directory:
+
+ $ rm -r a b d
+ $ hg up -r 0
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg st --all
+ C a
+ C b/b
+
+ $ rm -r a b
+ $ hg up -r 1
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg st --all
+ C a/a
+ C b
+