version: add formatter support
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.
--- a/mercurial/commands.py Tue Aug 16 16:09:12 2016 +0900
+++ b/mercurial/commands.py Thu Aug 25 01:00:26 2016 -0400
@@ -7241,36 +7241,49 @@
"""
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
--- a/tests/test-completion.t Tue Aug 16 16:09:12 2016 +0900
+++ b/tests/test-completion.t Thu Aug 25 01:00:26 2016 -0400
@@ -301,7 +301,7 @@
tip: patch, git, style, template
unbundle: update
verify:
- version:
+ version: template
$ hg init a
$ cd a
--- a/tests/test-extension.t Tue Aug 16 16:09:12 2016 +0900
+++ b/tests/test-extension.t Thu Aug 25 01:00:26 2016 -0400
@@ -1240,6 +1240,39 @@
$ 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