Question about a general tempting plan

Matt Mackall mpm at selenic.com
Mon Feb 29 17:00:09 EST 2016


On Mon, 2016-02-29 at 21:19 +0000, Kostia Balytskyi wrote:
> 
> 
> 
> 
> On 2/29/16, 8:01 PM, "Matt Mackall" <mpm at selenic.com> wrote:
> 
> > On Fri, 2016-02-26 at 16:39 +0000, Kostia Balytskyi wrote:
> > > Guys,
> > > 
> > > I have a question related to this topic: https://urldefense.proofpoint.com
> > > /v2/url?u=https-3A__www.mercurial-
> > > 2Dscm.org_wiki_Ge&d=CwIDaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=Pp-
> > > gQYFgs4tKlSFPF5kfCw&m=yzRzFBVjzsTCKWTnOk23iSCfiNe_iJWhsBxu7SXjt3M&s=wA98fJ
> > > CBStx1RLI9EIuNWUCNj9orGF3TSOjVEkF5VuY&e= 
> > > nericTemplatingPlan
> > > 
> > > Let's say I want to implement a command. This command can be done as a
> > > version
> > > of `hg log` with a special enforced template.
> > 
> > Then how will the _user_ control the output to meet their needs? Because
> > that is
> > the whole point of the templater/formatter: giving the user more
> > flexibility.
> 
> Sorry, I made a mistake here, I was thinking of enforced revset and predefined
> template.
> As in, I want to make a command that does the same as other commands do, but
> requires
> less keystrokes (like `hg parents`). Surely, user-supplied template will have
> priority over
> the predefined one.

Ok, but consider:

hg evolve --list -Tjson

If the underlying command is just "log".. then -Tjson is going to show you the
things that "hg log -Tjson" shows you (a pretty generic subset of the available
template data):

$ hg log -l1 -Tjson
[
 {
  "rev": 34619,
  "node": "4591cd6b679474a3d1b40c362843bf761fb3e168",
  "branch": "default",
  "phase": "draft",
  "user": "timeless <timeless at mozdev.org>",
  "date": [1456419254, 0],
  "desc": "tests: rename regression tests",
  "bookmarks": [],
  "tags": ["tip"],
  "parents": ["6d0d11731e1c9cf103703d9bbc0293b2d9893057"]
 }
]

...and a user will have to "rediscover" the "evolve --list" magic by grovelling
through the templating help. Whereas if you use the formatter, you'll have the
ability to say "this is what's important in this context" and a user can
discover the available elements just by dumping one of the machine-readable
forms. See for instance:

$ hg branches -Tjson
[
 {
  "active": true,
  "branch": "default",
  "closed": false,
  "current": true,
  "node": "4591cd6b679474a3d1b40c362843bf761fb3e168",
  "rev": 34619
 },
 {
  "active": true,
  "branch": "stable",
  "closed": false,
  "current": false,
  "node": "b966e35aad78dfa3e132291261b7a77f4a0b9ff5",
  "rev": 34568
 }
]

The formatter, as the very much newer API, should be viewed as "the right way to
do things today".

-- 
Mathematics is the supreme nostalgia of our time.



More information about the Mercurial-devel mailing list