##// END OF EJS Templates
merge: refactor unknown file conflict checking...
Matt Mackall -
r16093:7e30f5f2 default
parent child Browse files
Show More
@@ -265,13 +265,10 b' def override_update(orig, ui, repo, *pat'
265 265 # The overridden function filters the unknown files by removing any
266 266 # largefiles. This makes the merge proceed and we can then handle this
267 267 # case further in the overridden manifestmerge function below.
268 def override_checkunknown(origfn, wctx, mctx, folding):
269 origunknown = wctx.unknown()
270 wctx._unknown = filter(lambda f: lfutil.standin(f) not in wctx, origunknown)
271 try:
272 return origfn(wctx, mctx, folding)
273 finally:
274 wctx._unknown = origunknown
268 def override_checkunknownfile(origfn, repo, wctx, mctx, f):
269 if lfutil.standin(f) in wctx:
270 return False
271 return origfn(repo, wctx, mctx, f)
275 272
276 273 # The manifest merge handles conflicts on the manifest level. We want
277 274 # to handle changes in largefile-ness of files at this level too.
@@ -64,8 +64,8 b' def uisetup(ui):'
64 64 overrides.override_update)
65 65 entry = extensions.wrapcommand(commands.table, 'pull',
66 66 overrides.override_pull)
67 entry = extensions.wrapfunction(merge, '_checkunknown',
68 overrides.override_checkunknown)
67 entry = extensions.wrapfunction(merge, '_checkunknownfile',
68 overrides.override_checkunknownfile)
69 69 entry = extensions.wrapfunction(merge, 'manifestmerge',
70 70 overrides.override_manifestmerge)
71 71 entry = extensions.wrapfunction(filemerge, 'filemerge',
@@ -81,22 +81,19 b' class mergestate(object):'
81 81 self.mark(dfile, 'r')
82 82 return r
83 83
84 def _checkunknown(wctx, mctx, folding):
84 def _checkunknownfile(repo, wctx, mctx, f):
85 return (not repo.dirstate._ignore(f)
86 and os.path.exists(repo.wjoin(f))
87 and mctx[f].cmp(wctx[f]))
88
89 def _checkunknown(repo, wctx, mctx):
85 90 "check for collisions between unknown files and files in mctx"
86 if folding:
87 foldf = util.normcase
88 else:
89 foldf = lambda fn: fn
90 folded = {}
91 for fn in mctx:
92 folded[foldf(fn)] = fn
93 91
94 92 error = False
95 for fn in wctx.unknown():
96 f = foldf(fn)
97 if f in folded and mctx[folded[f]].cmp(wctx[f]):
93 for f in mctx:
94 if f not in wctx and _checkunknownfile(repo, wctx, mctx, f):
98 95 error = True
99 wctx._repo.ui.warn(_("%s: untracked file differs\n") % fn)
96 wctx._repo.ui.warn(_("%s: untracked file differs\n") % f)
100 97 if error:
101 98 raise util.Abort(_("untracked files in working directory differ "
102 99 "from files in requested revision"))
@@ -565,7 +562,7 b' def update(repo, node, branchmerge, forc'
565 562 wc.status(unknown=True) # prime cache
566 563 folding = not util.checkcase(repo.path)
567 564 if not force:
568 _checkunknown(wc, p2, folding)
565 _checkunknown(repo, wc, p2)
569 566 if folding:
570 567 _checkcollision(p2, branchmerge and p1)
571 568 action += _forgetremoved(wc, p2, branchmerge)
General Comments 0
You need to be logged in to leave comments. Login now