--- 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