Mercurial > evolve
changeset 403:c2ef47fce3f9
add nopushpublish extension.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Mon, 30 Jul 2012 14:45:42 +0200 |
parents | 4d63f8a00787 (current diff) 8ef1096ee5ab (diff) |
children | b5b1bf5166a2 |
files | |
diffstat | 1 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/nopushpublish.py Mon Jul 30 14:45:42 2012 +0200 @@ -0,0 +1,30 @@ +# Extension which prevent changeset to be turn public by push operation + +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)