hgext/narrow/narrowmerge.py
branchstable
changeset 38739 7acec9408e1c
parent 38615 443029011990
parent 38738 faea9b1980d9
child 38740 c08ea1e219c0
--- a/hgext/narrow/narrowmerge.py	Sun Jul 01 23:36:53 2018 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-# narrowmerge.py - extensions to mercurial merge module to support narrow clones
-#
-# Copyright 2017 Google, Inc.
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2 or any later version.
-
-from __future__ import absolute_import
-
-from mercurial.i18n import _
-from mercurial import (
-    copies,
-    error,
-    extensions,
-    merge,
-)
-
-def setup():
-    def _manifestmerge(orig, repo, wctx, p2, pa, branchmerge, *args, **kwargs):
-        """Filter updates to only lay out files that match the narrow spec."""
-        actions, diverge, renamedelete = orig(
-            repo, wctx, p2, pa, branchmerge, *args, **kwargs)
-
-        narrowmatch = repo.narrowmatch()
-        if narrowmatch.always():
-            return actions, diverge, renamedelete
-
-        nooptypes = set(['k']) # TODO: handle with nonconflicttypes
-        nonconflicttypes = set('a am c cm f g r e'.split())
-        # We mutate the items in the dict during iteration, so iterate
-        # over a copy.
-        for f, action in list(actions.items()):
-            if narrowmatch(f):
-                pass
-            elif not branchmerge:
-                del actions[f] # just updating, ignore changes outside clone
-            elif action[0] in nooptypes:
-                del actions[f] # merge does not affect file
-            elif action[0] in nonconflicttypes:
-                raise error.Abort(_('merge affects file \'%s\' outside narrow, '
-                                    'which is not yet supported') % f,
-                                  hint=_('merging in the other direction '
-                                         'may work'))
-            else:
-                raise error.Abort(_('conflict in file \'%s\' is outside '
-                                    'narrow clone') % f)
-
-        return actions, diverge, renamedelete
-
-    extensions.wrapfunction(merge, 'manifestmerge', _manifestmerge)
-
-    def _checkcollision(orig, repo, wmf, actions):
-        narrowmatch = repo.narrowmatch()
-        if not narrowmatch.always():
-            wmf = wmf.matches(narrowmatch)
-            if actions:
-                narrowactions = {}
-                for m, actionsfortype in actions.iteritems():
-                    narrowactions[m] = []
-                    for (f, args, msg) in actionsfortype:
-                        if narrowmatch(f):
-                            narrowactions[m].append((f, args, msg))
-                actions = narrowactions
-        return orig(repo, wmf, actions)
-
-    extensions.wrapfunction(merge, '_checkcollision', _checkcollision)
-
-    def _computenonoverlap(orig, repo, *args, **kwargs):
-        u1, u2 = orig(repo, *args, **kwargs)
-        narrowmatch = repo.narrowmatch()
-        if narrowmatch.always():
-            return u1, u2
-
-        u1 = [f for f in u1 if narrowmatch(f)]
-        u2 = [f for f in u2 if narrowmatch(f)]
-        return u1, u2
-    extensions.wrapfunction(copies, '_computenonoverlap', _computenonoverlap)