tests/pullext.py
author Pulkit Goyal <7895pulkit@gmail.com>
Sat, 29 Feb 2020 12:58:13 +0530
changeset 44544 13da36d77a3f
parent 43506 9f70512ae2cf
child 45372 77b8588dd84e
permissions -rw-r--r--
scmutil: add option to register summary callbacks as transaction validators We have a list of summary callbacks which are run after the transaction is closed to show what has changed and what not. This patch makes it possible to register those callbacks as transaction validators so that we can show summary before committing the transaction and prompt user to accept the changes. The goal of this is to implement `pull --confirm`. Differential Revision: https://phab.mercurial-scm.org/D8199

# pullext.py - Simple extension to test pulling
#
# Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com>
#
# 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 (
    commands,
    error,
    extensions,
    localrepo,
)
from mercurial.interfaces import repository


def clonecommand(orig, ui, repo, *args, **kwargs):
    if kwargs.get('include') or kwargs.get('exclude'):
        kwargs['narrow'] = True

    if kwargs.get('depth'):
        try:
            kwargs['depth'] = int(kwargs['depth'])
        except ValueError:
            raise error.Abort(_('--depth must be an integer'))

    return orig(ui, repo, *args, **kwargs)


def featuresetup(ui, features):
    features.add(repository.NARROW_REQUIREMENT)


def extsetup(ui):
    entry = extensions.wrapcommand(commands.table, b'clone', clonecommand)

    hasinclude = any(x[1] == b'include' for x in entry[1])
    hasdepth = any(x[1] == b'depth' for x in entry[1])

    if not hasinclude:
        entry[1].append(
            (b'', b'include', [], _(b'pattern of file/directory to clone'))
        )
        entry[1].append(
            (b'', b'exclude', [], _(b'pattern of file/directory to not clone'))
        )

    if not hasdepth:
        entry[1].append(
            (b'', b'depth', b'', _(b'ancestry depth of changesets to fetch'))
        )

    localrepo.featuresetupfuncs.add(featuresetup)