[PATCH 2 of 9 mergedriver] filemerge: turn filemerge.filemerge into a class
Siddharth Agarwal
sid0 at fb.com
Wed Oct 7 02:33:37 CDT 2015
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1444181292 25200
# Tue Oct 06 18:28:12 2015 -0700
# Node ID 3225fccf647a4c45e86b84746a1768ef408e96c7
# Parent c9e8d74f140234d28d5af30927731223d7496431
filemerge: turn filemerge.filemerge into a class
We're going to store a bunch of state in between function calls on objects of
this class.
diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -536,9 +536,15 @@ def mergerecordupdates(orig, repo, actio
# Override filemerge to prompt the user about how they wish to merge
# largefiles. This will handle identical edits without prompting the user.
-def overridefilemerge(origfn, repo, mynode, orig, fcd, fco, fca, labels=None):
+def overridefilemerge(origfn, mergectx):
+ orig = mergectx._orig
if not lfutil.isstandin(orig):
- return origfn(repo, mynode, orig, fcd, fco, fca, labels=labels)
+ return origfn(mergectx)
+
+ fca = mergectx._fca
+ fcd = mergectx._fcd
+ fco = mergectx._fco
+ repo = mergectx._repo
ahash = fca.data().strip().lower()
dhash = fcd.data().strip().lower()
diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py
--- a/hgext/largefiles/uisetup.py
+++ b/hgext/largefiles/uisetup.py
@@ -102,7 +102,7 @@ def uisetup(ui):
overrides.mergerecordupdates)
entry = extensions.wrapfunction(merge, 'update',
overrides.mergeupdate)
- entry = extensions.wrapfunction(filemerge, 'filemerge',
+ entry = extensions.wrapfunction(filemerge.mergectx, 'merge',
overrides.overridefilemerge)
entry = extensions.wrapfunction(cmdutil, 'copy',
overrides.overridecopy)
diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -431,17 +431,25 @@ def _formatlabels(repo, fcd, fco, fca, l
newlabels.append(_formatconflictmarker(repo, ca, tmpl, labels[2], pad))
return newlabels
-def filemerge(repo, mynode, orig, fcd, fco, fca, labels=None):
- """perform a 3-way merge in the working directory
+class mergectx(object):
+ """perform a 3-way merge in the working directory"""
- mynode = parent node before merge
- orig = original local filename before merge
- fco = other file context
- fca = ancestor file context
- fcd = local file context for current/destination file
- """
+ def __init__(self, repo, mynode, orig, fcd, fco, fca, labels=None):
+ """
+ mynode = parent node before merge
+ orig = original local filename before merge
+ fco = other file context
+ fca = ancestor file context
+ fcd = local file context for current/destination file"""
+ self._repo = repo
+ self._mynode = mynode
+ self._orig = orig
+ self._fcd = fcd
+ self._fco = fco
+ self._fca = fca
+ self._labels = labels
- if True:
+ def merge(self):
def temp(prefix, ctx):
pre = "%s~%s." % (os.path.basename(ctx.path()), prefix)
(fd, name) = tempfile.mkstemp(prefix=pre)
@@ -451,6 +459,14 @@ def filemerge(repo, mynode, orig, fcd, f
f.close()
return name
+ repo = self._repo
+ mynode = self._mynode
+ orig = self._orig
+ fcd = self._fcd
+ fco = self._fco
+ fca = self._fca
+ labels = self._labels
+
if not fco.cmp(fcd): # files identical?
return None
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -308,8 +308,9 @@ class mergestate(object):
f = self._repo.vfs('merge/' + hash)
self._repo.wwrite(dfile, f.read(), flags)
f.close()
- r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca,
- labels=labels)
+ ctx = filemerge.mergectx(self._repo, self._local, lfile, fcd, fco, fca,
+ labels=labels)
+ r = ctx.merge()
if r is None:
# no real conflict
del self._state[dfile]
More information about the Mercurial-devel
mailing list