# HG changeset patch # User Siddharth Agarwal # Date 2013-11-06 18:20:18 # Node ID ba6486076429e5c20d910b8a5d4f8acf1e9dc1b1 # Parent ea81f8b2364e2e643577d18ef8369fce4c67f47e 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. diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -384,7 +384,7 @@ def manifestmerge(repo, wctx, p2, pa, br 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 diff --git a/tests/test-add.t b/tests/test-add.t --- a/tests/test-add.t +++ b/tests/test-add.t @@ -136,5 +136,23 @@ Issue683: peculiarity with hg revert of 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 ..