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