bookmarks: Add -B option to incoming/outgoing to compare bookmarks stable
authorDavid Soria Parra <dsp@php.net>
Sun, 20 Jun 2010 12:26:48 +0200
branchstable
changeset 11431 cac256790aa4
parent 11430 6bee25d51a7d
child 11432 0d548beb9bca
bookmarks: Add -B option to incoming/outgoing to compare bookmarks We add a -B/--bookmarks option to hg incmoing and hg outgoing. If the option is passed we compare bookmarks instead of changesets. This can be used to see which bookmarks do not exists on the remote site.
hgext/bookmarks.py
--- a/hgext/bookmarks.py	Tue Jun 22 15:33:58 2010 -0500
+++ b/hgext/bookmarks.py	Sun Jun 20 12:26:48 2010 +0200
@@ -30,7 +30,7 @@
 
 from mercurial.i18n import _
 from mercurial.node import nullid, nullrev, hex, short
-from mercurial import util, commands, repair, extensions, pushkey, hg
+from mercurial import util, commands, repair, extensions, pushkey, hg, url
 import os
 
 def write(repo):
@@ -445,6 +445,37 @@
 
     return result
 
+def diffbookmarks(ui, repo, remote):
+    ui.status(_("searching for changes\n"))
+
+    lmarks = repo.listkeys('bookmarks')
+    rmarks = remote.listkeys('bookmarks')
+
+    diff = set(rmarks) - set(lmarks)
+    for k in diff:
+        ui.write("   %-25s %s\n" % (k, rmarks[k][:12]))
+
+    if len(diff) <= 0:
+        ui.status(_("no changes found\n"))
+
+def incoming(oldincoming, ui, repo, source="default", **opts):
+    if opts.get('bookmarks'):
+        source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
+        other = hg.repository(hg.remoteui(repo, opts), source)
+        ui.status(_('comparing with %s\n') % url.hidepassword(source))
+        diffbookmarks(ui, repo, other)
+    else:
+        oldincoming(ui, repo, source, **opts)
+
+def outgoing(oldoutgoing, ui, repo, source="default", **opts):
+    if opts.get('bookmarks'):
+        source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
+        other = hg.repository(hg.remoteui(repo, opts), source)
+        ui.status(_('comparing with %s\n') % url.hidepassword(source))
+        diffbookmarks(ui, other, repo)
+    else:
+        oldoutgoing(ui, repo, source, **opts)
+
 def uisetup(ui):
     extensions.wrapfunction(repair, "strip", strip)
     if ui.configbool('bookmarks', 'track.current'):
@@ -456,6 +487,12 @@
     entry = extensions.wrapcommand(commands.table, 'push', push)
     entry[1].append(('B', 'bookmark', [],
                      _("bookmark to export")))
+    entry = extensions.wrapcommand(commands.table, 'incoming', incoming)
+    entry[1].append(('B', 'bookmarks', False,
+                     _("compare bookmark")))
+    entry = extensions.wrapcommand(commands.table, 'outgoing', outgoing)
+    entry[1].append(('B', 'bookmarks', False,
+                     _("compare bookmark")))
 
     pushkey.register('bookmarks', pushbookmark, listbookmarks)