changeset 19987:ba6486076429 stable

merge: move forgets to the beginning of the action list Forgets need to be in the beginning of the action list, same as removes. This lets us avoid clashes in the dirstate where a directory is forgotten and a file with the same name is added, or vice versa.
author Siddharth Agarwal <sid0@fb.com>
date Wed, 06 Nov 2013 10:20:18 -0800
parents ea81f8b2364e
children 8dc6f855f43d 8ac7b85bd8f9
files mercurial/merge.py tests/test-add.t
diffstat 2 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/merge.py	Fri Nov 01 17:08:06 2013 -0700
+++ b/mercurial/merge.py	Wed Nov 06 10:20:18 2013 -0800
@@ -384,7 +384,7 @@
     return actions
 
 def actionkey(a):
-    return a[1] == "r" and -1 or 0, a
+    return a[1] in "rf" and -1 or 0, a
 
 def getremove(repo, mctx, overwrite, args):
     """apply usually-non-interactive updates to the working directory
--- a/tests/test-add.t	Fri Nov 01 17:08:06 2013 -0700
+++ b/tests/test-add.t	Wed Nov 06 10:20:18 2013 -0800
@@ -136,5 +136,23 @@
   M a
   A c
   ? a.orig
+  $ hg up -C
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+forget and get should have the right order: added but missing dir should be
+forgotten before file with same name is added
+
+  $ echo file d > d
+  $ hg add d
+  $ hg ci -md
+  $ hg rm d
+  $ mkdir d
+  $ echo a > d/a
+  $ hg add d/a
+  $ rm -r d
+  $ hg up -C
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cat d
+  file d
 
   $ cd ..