log: add a status template

It appears that git users like having a --name-status option on `git
log`. There exist at least three questions on StackOverflow on how to
do this for hg. The desired output is not difficult to build with
templates, and since this is something that svn users might also want,
it seems desirable to have this as another standard template.

This mimics the output of `hg status` and adds it to the log output.
It also follows status's convention of displaying copies with a -C
option. Brief example:

    $ hg log -T status -C
    changeset:   24883:7d1b9b7ac9fd
    bookmark:    statustemplate
    tag:         tip
    parent:      24864:a08f05e3a9cf
    user:        Jordi Gutiérrez Hermoso <jordigh@octave.org>
    date:        Wed Apr 22 14:05:04 2015 -0400
    summary:     log: add a status template
    files:
    A added
    A copied
      original
    M modified
    R removed

Of course, everything is also coloured correctly, and there are tests
to prove it.
This commit is contained in:
Jordi Gutiérrez Hermoso 2015-05-10 14:04:43 -04:00
parent 442532d14b
commit da35c599bb
3 changed files with 169 additions and 3 deletions

View File

@ -0,0 +1,25 @@
%include map-cmdline.default
# Override base templates
changeset = '{cset}{branches}{bookmarks}{tags}{parents}{user}{ldate}{summary}{lfiles}\n'
changeset_verbose = '{cset}{branches}{bookmarks}{tags}{parents}{user}{ldate}{description}{lfiles}\n'
changeset_debug = '{fullcset}{branches}{bookmarks}{tags}{lphase}{parents}{manifest}{user}{ldate}{extras}{description}{lfiles}\n'
# Override the file templates
lfiles = '{if(files,
label('ui.note log.files',
'files:\n'))}{lfile_mods}{lfile_adds}{lfile_copies_switch}{lfile_dels}'
# Exclude copied files, will display those in lfile_copies_switch
lfile_adds = '{file_adds % "{ifcontains(file, file_copies_switch,
'',
'{lfile_add}')}"}'
lfile_add = '{label("status.added", "A {file}\n")}'
lfile_copies_switch = '{file_copies_switch % "{lfile_copy_orig}{lfile_copy_dest}"'
lfile_copy_orig = '{label("status.added", "A {name}\n")}'
lfile_copy_dest = '{label("status.copied", " {source}\n")}'
lfile_mods = '{file_mods % "{label('status.modified', 'M {file}\n')}"}'
lfile_dels = '{file_dels % "{label('status.removed', 'R {file}\n')}"}'

View File

@ -992,11 +992,11 @@ Error if no style:
$ hg log --style notexist
abort: style 'notexist' not found
(available styles: bisect, changelog, compact, default, phases, xml)
(available styles: bisect, changelog, compact, default, phases, status, xml)
[255]
$ hg log -T list
available styles: bisect, changelog, compact, default, phases, xml
available styles: bisect, changelog, compact, default, phases, status, xml
abort: specify a template
[255]
@ -2013,6 +2013,147 @@ Add a commit that does all possible modifications at once
$ hg rm a
$ hg ci -m "Modify, add, remove, rename"
Check the status template
$ cat <<EOF >> $HGRCPATH
> [extensions]
> color=
> EOF
$ hg log -T status -r 10
changeset: 10:0f9759ec227a
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Modify, add, remove, rename
files:
M third
A b
A fifth
R a
R fourth
$ hg log -T status -C -r 10
changeset: 10:0f9759ec227a
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Modify, add, remove, rename
files:
M third
A b
A fifth
fourth
R a
R fourth
$ hg log -T status -C -r 10 -v
changeset: 10:0f9759ec227a
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
description:
Modify, add, remove, rename
files:
M third
A b
A fifth
fourth
R a
R fourth
$ hg log -T status -C -r 10 --debug
changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c
tag: tip
phase: secret
parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066
parent: -1:0000000000000000000000000000000000000000
manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567
user: test
date: Thu Jan 01 00:00:00 1970 +0000
extra: branch=default
description:
Modify, add, remove, rename
files:
M third
A b
A fifth
fourth
R a
R fourth
$ hg log -T status -C -r 10 --quiet
10:0f9759ec227a
$ hg --color=debug log -T status -r 10
[log.changeset changeset.secret|changeset: 10:0f9759ec227a]
[log.tag|tag: tip]
[log.user|user: test]
[log.date|date: Thu Jan 01 00:00:00 1970 +0000]
[log.summary|summary: Modify, add, remove, rename]
[ui.note log.files|files:]
[status.modified|M third]
[status.added|A b]
[status.added|A fifth]
[status.removed|R a]
[status.removed|R fourth]
$ hg --color=debug log -T status -C -r 10
[log.changeset changeset.secret|changeset: 10:0f9759ec227a]
[log.tag|tag: tip]
[log.user|user: test]
[log.date|date: Thu Jan 01 00:00:00 1970 +0000]
[log.summary|summary: Modify, add, remove, rename]
[ui.note log.files|files:]
[status.modified|M third]
[status.added|A b]
[status.added|A fifth]
[status.copied| fourth]
[status.removed|R a]
[status.removed|R fourth]
$ hg --color=debug log -T status -C -r 10 -v
[log.changeset changeset.secret|changeset: 10:0f9759ec227a]
[log.tag|tag: tip]
[log.user|user: test]
[log.date|date: Thu Jan 01 00:00:00 1970 +0000]
[ui.note log.description|description:]
[ui.note log.description|Modify, add, remove, rename]
[ui.note log.files|files:]
[status.modified|M third]
[status.added|A b]
[status.added|A fifth]
[status.copied| fourth]
[status.removed|R a]
[status.removed|R fourth]
$ hg --color=debug log -T status -C -r 10 --debug
[log.changeset changeset.secret|changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c]
[log.tag|tag: tip]
[log.phase|phase: secret]
[log.parent changeset.secret|parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066]
[log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
[ui.debug log.manifest|manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567]
[log.user|user: test]
[log.date|date: Thu Jan 01 00:00:00 1970 +0000]
[ui.debug log.extra|extra: branch=default]
[ui.note log.description|description:]
[ui.note log.description|Modify, add, remove, rename]
[ui.note log.files|files:]
[status.modified|M third]
[status.added|A b]
[status.added|A fifth]
[status.copied| fourth]
[status.removed|R a]
[status.removed|R fourth]
$ hg --color=debug log -T status -C -r 10 --quiet
[log.node|10:0f9759ec227a]
Error on syntax:
$ echo 'x = "f' >> t

View File

@ -148,7 +148,7 @@ log on directory
$ hg log -f -l1 --style something
abort: style 'something' not found
(available styles: bisect, changelog, compact, default, phases, xml)
(available styles: bisect, changelog, compact, default, phases, status, xml)
[255]
-f, phases style