mercurial/bookmarks.py
changeset 33010 f5f4c72de71a
parent 33009 4b81776baa7a
child 33011 8299eb9b08c7
--- a/mercurial/bookmarks.py	Tue Jun 20 15:56:29 2017 -0700
+++ b/mercurial/bookmarks.py	Tue Jun 20 16:36:25 2017 -0700
@@ -764,3 +764,31 @@
     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()