[PATCH 8 of 9 bm-refactor] bookmarks: factor out bookmark printing from commands

Sean Farley sean at farley.io
Tue Jun 20 20:29:31 EDT 2017


# HG changeset patch
# User Sean Farley <sean at farley.io>
# Date 1498001785 25200
#      Tue Jun 20 16:36:25 2017 -0700
# Branch bm-refactor
# Node ID e9cbc8f652302c0f69c8b05dc7fa6ec2b7eadd8e
# Parent  c81183c6280a88dd02587b0c8106aa8632236003
bookmarks: factor out bookmark printing from commands

diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
index cc91ebc..b8d31fb 100644
--- a/mercurial/bookmarks.py
+++ b/mercurial/bookmarks.py
@@ -767,5 +767,33 @@ def addbookmarks(repo, names, rev=None, 
         if not inactive and cur == marks[newact] and not rev:
             activate(repo, newact)
         elif cur != tgt and newact == repo._activebookmark:
             deactivate(repo)
         marks.recordchange(tr)
+
+def printbookmarks(ui, repo, **opts):
+    """print bookmarks to a formatter
+
+    Provides a way for extensions to control how bookmarks are printed.
+    """
+    fm = ui.formatter('bookmarks', opts)
+    hexfn = fm.hexfunc
+    marks = repo._bookmarks
+    if len(marks) == 0 and fm.isplain():
+        ui.status(_("no bookmarks set\n"))
+    for bmark, n in sorted(marks.iteritems()):
+        active = repo._activebookmark
+        if bmark == active:
+            prefix, label = '*', activebookmarklabel
+        else:
+            prefix, label = ' ', ''
+
+        fm.startitem()
+        if not ui.quiet:
+            fm.plain(' %s ' % prefix, label=label)
+        fm.write('bookmark', '%s', bmark, label=label)
+        pad = " " * (25 - encoding.colwidth(bmark))
+        fm.condwrite(not ui.quiet, 'rev node', pad + ' %d:%s',
+                     repo.changelog.rev(n), hexfn(n), label=label)
+        fm.data(active=(bmark == active))
+        fm.plain('\n')
+    fm.end()
diff --git a/mercurial/commands.py b/mercurial/commands.py
index c3a3a64..9d5b9e2 100644
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -977,32 +977,11 @@ def bookmark(ui, repo, *names, **opts):
             elif not repo._activebookmark:
                 ui.status(_("no active bookmark\n"))
             else:
                 bookmarks.deactivate(repo)
     else: # show bookmarks
-        fm = ui.formatter('bookmarks', opts)
-        hexfn = fm.hexfunc
-        marks = repo._bookmarks
-        if len(marks) == 0 and fm.isplain():
-            ui.status(_("no bookmarks set\n"))
-        for bmark, n in sorted(marks.iteritems()):
-            active = repo._activebookmark
-            if bmark == active:
-                prefix, label = '*', bookmarks.activebookmarklabel
-            else:
-                prefix, label = ' ', ''
-
-            fm.startitem()
-            if not ui.quiet:
-                fm.plain(' %s ' % prefix, label=label)
-            fm.write('bookmark', '%s', bmark, label=label)
-            pad = " " * (25 - encoding.colwidth(bmark))
-            fm.condwrite(not ui.quiet, 'rev node', pad + ' %d:%s',
-                         repo.changelog.rev(n), hexfn(n), label=label)
-            fm.data(active=(bmark == active))
-            fm.plain('\n')
-        fm.end()
+        bookmarks.printbookmarks(ui, repo, **opts)
 
 @command('branch',
     [('f', 'force', None,
      _('set branch name even if it shadows an existing branch')),
     ('C', 'clean', None, _('reset branch name to parent branch name'))],


More information about the Mercurial-devel mailing list