Mercurial > hg
view hgext/narrow/narrowmerge.py @ 36652:8381126bf43c
url: more bytes/unicodes fussing in url.py around auth handling
Once again, these methods are a little annoying to handle because they
can get unicodes or bytes depending on who's calling. I think we can
probably clean this up a TON once we can run something like pytype and
do typechecking of our Python, but until then this is going to be the
easy way out. This fixes test-http-bundle1.t.
Differential Revision: https://phab.mercurial-scm.org/D2599
author | Augie Fackler <augie@google.com> |
---|---|
date | Sat, 03 Mar 2018 14:28:51 -0500 |
parents | d0d5eef57fb0 |
children | 8f37b5fc5abf |
line wrap: on
line source
# 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)