contrib/nopushpublish.py
author Greg Ward <greg@gerg.ca>
Tue, 14 Apr 2015 12:53:12 -0400
branchstable
changeset 1261 56cc2eb5995a
parent 413 984be08ef504
child 1670 4f5e915ddb71
permissions -rw-r--r--
docs: add code review scenario to sharing guide The idea is to demonstrate a simpler multiple-developer situation that does not involve getting into trouble. The final scenario illustrates Alice and Bob getting into trouble with bumped and divergent changesets by amending each other's history. The required tests and text are all written, but will need to be heavily revised because of the inserted scenario.

# 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 forbiden",
                         hint="Use `hg phase -p <rev>` to manually publish them")

    return ret

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