view hgext/narrow/narrowpatch.py @ 37908:8808d5d401ee

templates: split getgraphnode() body into two functions getgraphnodecurrent() is checking if the node is currently checked out and getgraphnodesymbol() is checking properties that have more to do with the stored data and the DAG.
author Anton Shestakov <av6@dwimlabs.net>
date Tue, 08 May 2018 17:54:57 +0800
parents d0d5eef57fb0
children
line wrap: on
line source

# 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."""
        narrowmatch = repo.narrowmatch()
        if not narrowmatch.always():
            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):
        narrowmatch = repo.narrowmatch()
        if not narrowmatch.always():
            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)]
            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)