add nopushpublish extension.
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Mon, 30 Jul 2012 14:45:42 +0200
changeset 403 c2ef47fce3f9
parent 399 4d63f8a00787 (current diff)
parent 402 8ef1096ee5ab (diff)
child 405 b5b1bf5166a2
add nopushpublish extension.
--- /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)