##// END OF EJS Templates
merge: don't overwrite untracked file at directory rename target...
Martin von Zweigbergk -
r23653:0297d846 default
parent child Browse files
Show More
@@ -405,10 +405,10 b' def overrideupdate(orig, ui, repo, *pats'
405 405 # The overridden function filters the unknown files by removing any
406 406 # largefiles. This makes the merge proceed and we can then handle this
407 407 # case further in the overridden calculateupdates function below.
408 def overridecheckunknownfile(origfn, repo, wctx, mctx, f):
408 def overridecheckunknownfile(origfn, repo, wctx, mctx, f, f2=None):
409 409 if lfutil.standin(repo.dirstate.normalize(f)) in wctx:
410 410 return False
411 return origfn(repo, wctx, mctx, f)
411 return origfn(repo, wctx, mctx, f, f2)
412 412
413 413 # The manifest merge handles conflicts on the manifest level. We want
414 414 # to handle changes in largefile-ness of files at this level too.
@@ -297,11 +297,13 b' class mergestate(object):'
297 297 self.mark(dfile, 'r')
298 298 return r
299 299
300 def _checkunknownfile(repo, wctx, mctx, f):
300 def _checkunknownfile(repo, wctx, mctx, f, f2=None):
301 if f2 is None:
302 f2 = f
301 303 return (os.path.isfile(repo.wjoin(f))
302 304 and repo.wopener.audit.check(f)
303 305 and repo.dirstate.normalize(f) not in repo.dirstate
304 and mctx[f].cmp(wctx[f]))
306 and mctx[f2].cmp(wctx[f]))
305 307
306 308 def _forgetremoved(wctx, mctx, branchmerge):
307 309 """
@@ -517,6 +519,9 b' def manifestmerge(repo, wctx, p2, pa, br'
517 519 if m in ('c', 'dc'):
518 520 if _checkunknownfile(repo, wctx, p2, f):
519 521 aborts.append(f)
522 elif m == 'dg':
523 if _checkunknownfile(repo, wctx, p2, f, args[0]):
524 aborts.append(f)
520 525
521 526 for f in sorted(aborts):
522 527 repo.ui.warn(_("%s: untracked file differs\n") % f)
@@ -108,21 +108,23 b''
108 108 Local directory rename with conflicting file added in remote source directory
109 109 and untracked in local target directory.
110 110
111 BROKEN: the uncommitted file is overwritten; we should abort
112
113 111 $ hg co -qC 1
114 112 $ echo target > b/c
115 113 $ hg merge 2
114 b/c: untracked file differs
115 abort: untracked files in working directory differ from files in requested revision
116 [255]
117 $ cat b/c
118 target
119 but it should succeed if the content matches
120 $ hg cat -r 2 a/c > b/c
121 $ hg merge 2
116 122 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
117 123 (branch merge, don't forget to commit)
118 $ hg st -A
124 $ hg st -C
119 125 A b/c
120 126 a/c
121 127 ? a/d
122 C b/a
123 C b/b
124 $ cat b/c
125 baz
126 128
127 129 Local directory rename with conflicting file added in remote source directory
128 130 and committed in local target directory.
General Comments 0
You need to be logged in to leave comments. Login now