changeset 24400:03c84c966ef5

bookmarks: rewrite comparing bookmarks in commands.summary() by compare() This patch adds utility function "summary()", to replace comparing bookmarks in "commands.summary()". This replacement finishes centralizing the logic to compare bookmarks into "bookmarks.compare()". This patch also adds test to check summary output with incoming/outgoing bookmarks, because "hg summary --remote" is not tested yet on the repository with incoming/outgoing bookmarks. This test uses "(glob)" to ignore summary about incoming/outgoing changesets.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Thu, 19 Mar 2015 23:36:06 +0900
parents 3993eb47ea49
children e6e023d57e94
files mercurial/bookmarks.py mercurial/commands.py tests/test-bookmarks-pushpull.t
diffstat 3 files changed, 22 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/bookmarks.py	Thu Mar 19 23:36:05 2015 +0900
+++ b/mercurial/bookmarks.py	Thu Mar 19 23:36:06 2015 +0900
@@ -498,6 +498,16 @@
 
     return 0
 
+def summary(repo, other):
+    '''Compare bookmarks between repo and other for "hg summary" output
+
+    This returns "(# of incoming, # of outgoing)" tuple.
+    '''
+    r = compare(repo, other.listkeys('bookmarks'), repo._bookmarks,
+                dsthex=hex)
+    addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
+    return (len(addsrc), len(adddst))
+
 def validdest(repo, old, new):
     """Is the new bookmark destination a valid update from the old one"""
     repo = repo.unfiltered()
--- a/mercurial/commands.py	Thu Mar 19 23:36:05 2015 +0900
+++ b/mercurial/commands.py	Thu Mar 19 23:36:06 2015 +0900
@@ -5982,14 +5982,11 @@
             t.append(_('%d outgoing') % len(o))
         other = dother or sother
         if 'bookmarks' in other.listkeys('namespaces'):
-            lmarks = repo.listkeys('bookmarks')
-            rmarks = other.listkeys('bookmarks')
-            diff = set(rmarks) - set(lmarks)
-            if len(diff) > 0:
-                t.append(_('%d incoming bookmarks') % len(diff))
-            diff = set(lmarks) - set(rmarks)
-            if len(diff) > 0:
-                t.append(_('%d outgoing bookmarks') % len(diff))
+            counts = bookmarks.summary(repo, other)
+            if counts[0] > 0:
+                t.append(_('%d incoming bookmarks') % counts[0])
+            if counts[1] > 0:
+                t.append(_('%d outgoing bookmarks') % counts[1])
 
         if t:
             # i18n: column positioning for "hg summary"
--- a/tests/test-bookmarks-pushpull.t	Thu Mar 19 23:36:05 2015 +0900
+++ b/tests/test-bookmarks-pushpull.t	Thu Mar 19 23:36:06 2015 +0900
@@ -494,6 +494,13 @@
   $ hg -R ../b id -r W
   cc978a373a53 tip W
 
+Check summary output for incoming/outgoing bookmarks
+
+  $ hg bookmarks -d X
+  $ hg bookmarks -d Y
+  $ hg summary --remote | grep '^remote:'
+  remote: *, 2 incoming bookmarks, 1 outgoing bookmarks (glob)
+
   $ cd ..
 
 pushing an unchanged bookmark should result in no changes