##// 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 # The overridden function filters the unknown files by removing any
265 # The overridden function filters the unknown files by removing any
266 # largefiles. This makes the merge proceed and we can then handle this
266 # largefiles. This makes the merge proceed and we can then handle this
267 # case further in the overridden manifestmerge function below.
267 # case further in the overridden manifestmerge function below.
268 def override_checkunknown(origfn, wctx, mctx, folding):
268 def override_checkunknownfile(origfn, repo, wctx, mctx, f):
269 origunknown = wctx.unknown()
269 if lfutil.standin(f) in wctx:
270 wctx._unknown = filter(lambda f: lfutil.standin(f) not in wctx, origunknown)
270 return False
271 try:
271 return origfn(repo, wctx, mctx, f)
272 return origfn(wctx, mctx, folding)
273 finally:
274 wctx._unknown = origunknown
275
272
276 # The manifest merge handles conflicts on the manifest level. We want
273 # The manifest merge handles conflicts on the manifest level. We want
277 # to handle changes in largefile-ness of files at this level too.
274 # to handle changes in largefile-ness of files at this level too.
@@ -64,8 +64,8 b' def uisetup(ui):'
64 overrides.override_update)
64 overrides.override_update)
65 entry = extensions.wrapcommand(commands.table, 'pull',
65 entry = extensions.wrapcommand(commands.table, 'pull',
66 overrides.override_pull)
66 overrides.override_pull)
67 entry = extensions.wrapfunction(merge, '_checkunknown',
67 entry = extensions.wrapfunction(merge, '_checkunknownfile',
68 overrides.override_checkunknown)
68 overrides.override_checkunknownfile)
69 entry = extensions.wrapfunction(merge, 'manifestmerge',
69 entry = extensions.wrapfunction(merge, 'manifestmerge',
70 overrides.override_manifestmerge)
70 overrides.override_manifestmerge)
71 entry = extensions.wrapfunction(filemerge, 'filemerge',
71 entry = extensions.wrapfunction(filemerge, 'filemerge',
@@ -81,22 +81,19 b' class mergestate(object):'
81 self.mark(dfile, 'r')
81 self.mark(dfile, 'r')
82 return r
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 "check for collisions between unknown files and files in mctx"
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 error = False
92 error = False
95 for fn in wctx.unknown():
93 for f in mctx:
96 f = foldf(fn)
94 if f not in wctx and _checkunknownfile(repo, wctx, mctx, f):
97 if f in folded and mctx[folded[f]].cmp(wctx[f]):
98 error = True
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 if error:
97 if error:
101 raise util.Abort(_("untracked files in working directory differ "
98 raise util.Abort(_("untracked files in working directory differ "
102 "from files in requested revision"))
99 "from files in requested revision"))
@@ -565,7 +562,7 b' def update(repo, node, branchmerge, forc'
565 wc.status(unknown=True) # prime cache
562 wc.status(unknown=True) # prime cache
566 folding = not util.checkcase(repo.path)
563 folding = not util.checkcase(repo.path)
567 if not force:
564 if not force:
568 _checkunknown(wc, p2, folding)
565 _checkunknown(repo, wc, p2)
569 if folding:
566 if folding:
570 _checkcollision(p2, branchmerge and p1)
567 _checkcollision(p2, branchmerge and p1)
571 action += _forgetremoved(wc, p2, branchmerge)
568 action += _forgetremoved(wc, p2, branchmerge)
General Comments 0
You need to be logged in to leave comments. Login now