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)