Mercurial > hg
view hgext/narrow/narrowmerge.py @ 36884:ece242db5000
hgweb: use templater on requestcontext instance
After this commit, all @webcommand function no longer use their
"tmpl" argument. Instead, they use the templater attached to the
requestcontext.
This is the same exact object. So there should be no difference in
behavior.
Differential Revision: https://phab.mercurial-scm.org/D2800
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 10 Mar 2018 20:38:28 -0800 |
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)