contrib/nopushpublish.py
author Durham Goode <durham@fb.com>
Tue, 07 Apr 2015 14:08:18 -0700
changeset 1293 dc5528e04c06
parent 413 984be08ef504
child 1670 4f5e915ddb71
permissions -rw-r--r--
inhibit: remove book -D dependency on cmdprune Bookmark -D was relying on the prune command to be registered, which isn't the case if we've disabled evolve commands. Instead, let's just hard code the arguments. The real fix would be to abstract away the 'I want to prune commits' functionality in evolve to a reusable function, but this will do for now.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
401
76df267fd76c some doc
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 400
diff changeset
     1
# Extension which prevent changeset to be turn public by push operation
413
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     2
#
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     3
# Copyright 2011 Logilab SA        <contact@logilab.fr>
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     4
#
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     5
# This software may be used and distributed according to the terms of the
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     6
# GNU General Public License version 2 or any later version.
984be08ef504 nopushpublish: add license en copyright notice
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 402
diff changeset
     7
400
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
     8
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
     9
from mercurial import extensions, util
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    10
from mercurial import discovery
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    11
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    12
def checkpublish(orig, repo, remote, outgoing, *args):
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    13
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    14
    # is remote publishing?
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    15
    publish = True
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    16
    if 'phases' in remote.listkeys('namespaces'):
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    17
        remotephases = remote.listkeys('phases')
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    18
        publish = remotephases.get('publishing', False)
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    19
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    20
    npublish = 0
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    21
    if publish:
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    22
        for rev in outgoing.missing:
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    23
            if repo[rev].phase():
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    24
                npublish += 1
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    25
    if npublish:
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    26
        repo.ui.warn("Push would publish %s changesets" % npublish)
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    27
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    28
    ret = orig(repo, remote, outgoing, *args)
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    29
    if npublish:
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    30
        raise util.Abort("Publishing push forbiden",
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    31
                         hint="Use `hg phase -p <rev>` to manually publish them")
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    32
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    33
    return ret
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    34
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    35
def uisetup(ui):
1e72a3cc2cc3 initial import
David Douard <david.douard@logilab.fr>
parents:
diff changeset
    36
    extensions.wrapfunction(discovery, 'checkheads', checkpublish)