contrib/nopushpublish.py
author Pulkit Goyal <7895pulkit@gmail.com>
Sat, 27 Jan 2018 16:13:19 +0530
changeset 3458 210132852a3d
parent 1670 4f5e915ddb71
permissions -rw-r--r--
evolve: make the _solve* functions return a tuple This patch makes _solve* functions return a tuple which will contain information about whether we were able to solve the instability and if yes, then what was the newnode. For more details about tuple, look the fn docs added. There was some refactoring required in next command because of change in return values. This also leds to omitting the wdir update message in case of dry-run which is good.

# Extension which prevent changeset to be turn public by push operation
#
# Copyright 2011 Logilab SA        <contact@logilab.fr>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.


from mercurial import extensions, util
from mercurial import discovery

def checkpublish(orig, repo, remote, outgoing, *args):

    # is remote publishing?
    publish = True
    if 'phases' in remote.listkeys('namespaces'):
        remotephases = remote.listkeys('phases')
        publish = remotephases.get('publishing', False)

    npublish = 0
    if publish:
        for rev in outgoing.missing:
            if repo[rev].phase():
                npublish += 1
    if npublish:
        repo.ui.warn("Push would publish %s changesets" % npublish)

    ret = orig(repo, remote, outgoing, *args)
    if npublish:
        raise util.Abort("Publishing push forbidden",
                         hint="Use `hg phase -p <rev>` to manually publish them")

    return ret

def uisetup(ui):
    extensions.wrapfunction(discovery, 'checkheads', checkpublish)