On Mon, Aug 22, 2016 at 11:44:37PM +0900, Yuya Nishihara wrote: > # HG changeset patch > # User Yuya Nishihara <y...@tcha.org> > # Date 1471331947 -32400 > # Tue Aug 16 16:19:07 2016 +0900 > # Node ID fc30d32758af268847d2b9b200071c7b58cd6050 > # Parent f6e34ad8025ba31a7ef463205c14a450c44baea6 > version: add formatter support
Nice, queued. I think I'd like to eventually see the fm.nested() stuff as a context manager, but there also isn't really a rush on that. > > The license message isn't exported, which I don't think is useful and I > couldn't find a way to restructure it for JSON or template outputs. > > diff --git a/mercurial/commands.py b/mercurial/commands.py > --- a/mercurial/commands.py > +++ b/mercurial/commands.py > @@ -7241,36 +7241,49 @@ def verify(ui, repo): > """ > return hg.verify(repo) > > -@command('version', [], norepo=True) > -def version_(ui): > +@command('version', [] + formatteropts, norepo=True) > +def version_(ui, **opts): > """output version and copyright information""" > - ui.write(_("Mercurial Distributed SCM (version %s)\n") > - % util.version()) > - ui.status(_( > + fm = ui.formatter("version", opts) > + fm.startitem() > + fm.write("ver", _("Mercurial Distributed SCM (version %s)\n"), > + util.version()) > + license = _( > "(see https://mercurial-scm.org for more information)\n" > "\nCopyright (C) 2005-2016 Matt Mackall and others\n" > "This is free software; see the source for copying conditions. " > "There is NO\nwarranty; " > "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" > - )) > - > - ui.note(_("\nEnabled extensions:\n\n")) > + ) > + if not ui.quiet: > + fm.plain(license) > + > + if ui.verbose: > + fm.plain(_("\nEnabled extensions:\n\n")) > # format names and versions into columns > names = [] > vers = [] > isinternals = [] > for name, module in extensions.extensions(): > names.append(name) > - vers.append(extensions.moduleversion(module)) > + vers.append(extensions.moduleversion(module) or None) > isinternals.append(extensions.ismoduleinternal(module)) > + fn = fm.nested("extensions") > if names: > - maxnamelen = max(len(n) for n in names) > - places = [_("external"), _("internal")] > - for i, name in enumerate(names): > - p = isinternals[i] > + namefmt = " %%-%ds " % max(len(n) for n in names) > + if fn: > + places = ["external", "internal"] > + else: > + places = [_("external"), _("internal")] > + for n, v, p in zip(names, vers, isinternals): > + fn.startitem() > + fn.condwrite(ui.verbose, "name", namefmt, n) > + fn.condwrite(ui.verbose, "place", "%s ", places[p]) > + fn.condwrite(ui.verbose and v, "ver", "%s", v) > if ui.verbose: > - ui.write(" %-*s %s %s\n" % > - (maxnamelen, name, places[p], vers[i])) > + fn.plain("\n") > + fn.end() > + fm.end() > > def loadcmdtable(ui, name, cmdtable): > """Load command functions from specified cmdtable > diff --git a/tests/test-completion.t b/tests/test-completion.t > --- a/tests/test-completion.t > +++ b/tests/test-completion.t > @@ -301,7 +301,7 @@ Show all commands + options > tip: patch, git, style, template > unbundle: update > verify: > - version: > + version: template > > $ hg init a > $ cd a > diff --git a/tests/test-extension.t b/tests/test-extension.t > --- a/tests/test-extension.t > +++ b/tests/test-extension.t > @@ -1240,6 +1240,39 @@ Test version number support in 'hg versi > $ hg version -q --config extensions.throw=throw.py > Mercurial Distributed SCM (version *) (glob) > > +Test JSON output of version: > + > + $ hg version -Tjson > + [ > + { > + "extensions": [], > + "ver": "*" (glob) > + } > + ] > + > + $ hg version --config extensions.throw=throw.py -Tjson > + [ > + { > + "extensions": [{"name": "throw", "place": "external", "ver": > "1.twentythree"}], > + "ver": "3.2.2" > + } > + ] > + > + $ LANGUAGE= LC_ALL=ja_JP.UTF-8 hg version --config extensions.strip= -Tjson > + [ > + { > + "extensions": [{"name": "strip", "place": "internal", "ver": null}], > + "ver": "*" (glob) > + } > + ] > + > +Test template output of version: > + > + $ hg version --config extensions.throw=throw.py --config extensions.strip= > \ > + > -T'{extensions % "{name} {pad(ver, 16)} ({place})\n"}' > + throw 1.twentythree (external) > + strip (internal) > + > Refuse to load extensions with minimum version requirements > > $ cat > minversion1.py << EOF > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel