##// END OF EJS Templates
narrow: validate patterns returned by expandnarrow...
narrow: validate patterns returned by expandnarrow Remotes could supply malicious or invalid patterns. We should validate them as soon as possible. Differential Revision: https://phab.mercurial-scm.org/D4523

File last commit:

r36490:d0d5eef5 default
r39568:55eea298 default
Show More
narrowpatch.py
41 lines | 1.5 KiB | text/x-python | PythonLexer
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 # narrowpatch.py - extensions to mercurial patch 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 import (
extensions,
patch,
)
def setup(repo):
def _filepairs(orig, *args):
"""Only includes files within the narrow spec in the diff."""
Martin von Zweigbergk
narrow: drop safehasattr() checks for always-present repo.narrowmatch...
r36490 narrowmatch = repo.narrowmatch()
if not narrowmatch.always():
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 for x in orig(*args):
f1, f2, copyop = x
if ((not f1 or narrowmatch(f1)) and
(not f2 or narrowmatch(f2))):
yield x
else:
for x in orig(*args):
yield x
def trydiff(orig, repo, revs, ctx1, ctx2, modified, added, removed,
copy, getfilectx, *args, **kwargs):
Martin von Zweigbergk
narrow: drop safehasattr() checks for always-present repo.narrowmatch...
r36490 narrowmatch = repo.narrowmatch()
if not narrowmatch.always():
Augie Fackler
narrow: use list comprehension instead of filter for filtering lists...
r36363 modified = [f for f in modified if narrowmatch(f)]
added = [f for f in added if narrowmatch(f)]
removed = [f for f in removed if narrowmatch(f)]
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 copy = {k: v for k, v in copy.iteritems() if narrowmatch(k)}
return orig(repo, revs, ctx1, ctx2, modified, added, removed, copy,
getfilectx, *args, **kwargs)
extensions.wrapfunction(patch, '_filepairs', _filepairs)
extensions.wrapfunction(patch, 'trydiff', trydiff)