merge with stable
authorMatt Mackall <mpm@selenic.com>
Sun, 09 Feb 2014 18:36:37 -0600
changeset 20421 98eadbfffa0e
parent 20420 62153c5d1ce2 (current diff)
parent 20415 e4d7cbc94219 (diff)
child 20423 ada289dfceb0
merge with stable
--- a/mercurial/merge.py	Fri Feb 07 17:29:37 2014 +0100
+++ b/mercurial/merge.py	Sun Feb 09 18:36:37 2014 -0600
@@ -343,7 +343,12 @@
                 else:
                     actions.append((f, "g", (fl2,), "remote created"))
         elif n2 and n2 != ma[f]:
-            prompts.append((f, "dc")) # prompt deleted/changed
+            different = _checkunknownfile(repo, wctx, p2, f)
+            if not force and different:
+                aborts.append((f, "ud"))
+            else:
+                # if different: old untracked f may be overwritten and lost
+                prompts.append((f, "dc")) # prompt deleted/changed
 
     for f, m in sorted(aborts):
         if m == "ud":
--- a/tests/test-merge-remove.t	Fri Feb 07 17:29:37 2014 +0100
+++ b/tests/test-merge-remove.t	Sun Feb 09 18:36:37 2014 -0600
@@ -85,3 +85,30 @@
 
   $ hg diff
 
+Merge should not overwrite local file that is untracked after remove
+
+  $ rm *
+  $ hg up -qC
+  $ hg rm bar
+  $ hg ci -m 'remove bar'
+  $ echo 'memories of buried pirate treasure' > bar
+  $ hg merge
+  bar: untracked file differs
+  abort: untracked files in working directory differ from files in requested revision
+  [255]
+  $ cat bar
+  memories of buried pirate treasure
+
+Those who use force will lose
+
+  $ hg merge -f
+  remote changed bar which local deleted
+  use (c)hanged version or leave (d)eleted? c
+  merging foo1 and foo to foo1
+  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ cat bar
+  bleh
+  $ hg st
+  M bar
+  M foo1