[PATCH 2 of 9 mergedriver] filemerge: turn filemerge.filemerge into a class
Augie Fackler
raf at durin42.com
Wed Oct 7 13:04:02 CDT 2015
On Wed, Oct 07, 2015 at 12:33:37AM -0700, Siddharth Agarwal wrote:
> # 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"""
it looks like this docstring lost its way and wants to live on
mergectx.merge()? and then this type wants to be documented as a state
container for merges or something like that
>
> - 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]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list