On Sun, 12 Mar 2017 21:38:00 -0700, Gregory Szorc wrote: > # HG changeset patch > # User Gregory Szorc <gregory.sz...@gmail.com> > # Date 1489378362 25200 > # Sun Mar 12 21:12:42 2017 -0700 > # Node ID d30057d358076cbe7d632cd573095af97543f932 > # Parent 1c3352d7eaf24533ad52d4b8a024211e9189fb0b > show: new extension for displaying various repository data
The idea sounds nice to me. I just checked minor implementation details about formatter. > +@command('show', commands.formatteropts, _('[VIEW]')) > +def show(ui, repo, view=None, template=None): > + """show various repository information > + > + A requested view of repository data is displayed. > + > + If no view is requested, the list of available views is shown. > + > + .. note:: > + > + The default output from this command is not covered under Mercurial's > + default backwards-compatible mechanism (which puts an emphasis on > + not changing behavior). This means output from this command may change > + in any future release. However, the values fed to the formatter are > + covered under the default backwards-compatible mechanism. > + > + Automated consumers of this command should specify an explicit > template > + via ``-T/--template`` to guarantee output is stable. > + > + List of available views: > + > + """ > + views = showview._table > + > + if not view: > + ui.write(_('available views:\n')) > + ui.write('\n') > + > + for name, func in sorted(views.items()): > + ui.write(_('%s\n') % func.__doc__) > + > + ui.write('\n') > + raise error.Abort(_('no view requested'), > + hint=_('use `hg show <view>` to choose a view')) > + > + if view not in views: > + raise error.Abort(_('unknown view: %s') % view, > + hint=_('run `hg show` to see available views')) > + > + template = template or 'show' > + fmtopic = views[view]._formatter > + formatter = ui.formatter(fmtopic, {'template': template}) > + > + return views[view](ui, repo, formatter) s/formatter/fm/ seems better for consistency. Also, I prefer calling fm.end() here as it should be paired with the construction. with ui.formatter(...) as fm: return views[view](...) > +@showview('bookmarks', formatter='bookmarks') s/formatter=/topic=/ or /fmtopic=/ ? If this 'bookmarks' template can't be compatible with the default template used by "hg bookmarks" command, we'll need another topic name. > +def showbookmarks(ui, repo, fm): > + """bookmarks and their associated changeset""" > + marks = repo._bookmarks > + if not len(marks): > + ui.write_err('(no bookmarks set)\n') > + return 0 If this is an error, it should error out. Otherwise, use fm.plain(). > + active = repo._activebookmark > + longest = max(len(b) for b in marks) > + > + for bm, node in sorted(marks.items()): > + fm.startitem() > + fm.write('bookmark', '%s', bm) > + fm.write('node', fm.hexfunc(node), fm.hexfunc(node)) > + fm.data(ctx=repo[node], > + active=bm == active, > + longestlen=longest) As changectx can't be serialized, it shouldn't be passed to e.g. jsonformatter. fm.context(ctx=repo[node]) can be used. It's unfortunate that 'longestlen' appears in JSON output, but I have no better idea other than abusing fm.context(). _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel