diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -765,16 +765,35 @@ def addbookmarks(repo, tr, names, rev=No deactivate(repo) marks.recordchange(tr) +def _printbookmarks(ui, repo, bmarks, **opts): + """private method to print bookmarks + + Provides a way for extensions to control how bookmarks are printed (e.g. + prepend or postpend names) + """ + fm = ui.formatter('bookmarks', opts) + hexfn = fm.hexfunc + if len(bmarks) == 0 and fm.isplain(): + ui.status(_("no bookmarks set\n")) + for bmark, (n, prefix, label) in sorted(bmarks.iteritems()): + 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=(activebookmarklabel in label)) + fm.plain('\n') + fm.end() + 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")) + bmarks = {} for bmark, n in sorted(marks.iteritems()): active = repo._activebookmark if bmark == active: @@ -782,13 +801,5 @@ def printbookmarks(ui, repo, **opts): 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() + bmarks[bmark] = (n, prefix, label) + _printbookmarks(ui, repo, bmarks, **opts)