bookmarks: Adds support for a --non-bookmarked option to push
authorStefan Rusek <stefan@rusek.org>
Fri, 05 Dec 2008 09:38:17 +0100
changeset 7478 4c3e0ad58c5b
parent 7318 95e1260b8134
child 7479 cae586246331
child 7488 e80a734ba1fc
bookmarks: Adds support for a --non-bookmarked option to push
hgext/bookmarks.py
--- a/hgext/bookmarks.py	Thu Nov 06 10:39:52 2008 +0100
+++ b/hgext/bookmarks.py	Fri Dec 05 09:38:17 2008 +0100
@@ -17,6 +17,7 @@
 '''
 
 from mercurial.commands import templateopts, hex, short
+from mercurial import extensions
 from mercurial.i18n import _
 from mercurial import cmdutil, util, commands, changelog
 from mercurial.node import nullid, nullrev
@@ -220,6 +221,24 @@
 
     repo.__class__ = bookmark_repo
 
+def pushnonbookmarked(orig, ui, repo, *args, **opts):
+    'Call push with only the heads that are not bookmarked'
+    if opts.get('non_bookmarked'):
+        if opts.get('rev'):
+            heads = [repo.lookup(r) for r in opts.get('rev')]
+        else:
+            heads = repo.heads()
+
+	markheads = parse(repo).values()
+        opts['rev'] = [head for head in heads if not(head in markheads)]
+        
+    orig(ui, repo, *args, **opts)
+
+def uisetup(ui):
+    'Replace push with a decorator to provide --non-bookmarked option'
+    entry = extensions.wrapcommand(commands.table, 'push', pushnonbookmarked)
+    entry[1].append(('', 'non-bookmarked', None, _("push all heads that are not bookmarked")))
+
 cmdtable = {
     "bookmarks":
         (bookmark,