[PATCH 3 of 6] log: add a status template
Jordi Gutiérrez Hermoso
jordigh at octave.org
Sat May 2 04:56:18 UTC 2015
# HG changeset patch
# User Jordi Gutiérrez Hermoso <jordigh at octave.org>
# Date 1430070569 14400
# Sun Apr 26 13:49:29 2015 -0400
# Node ID 824b9b5a5521bfdb5325fe3bb2498f8c3a5fbc94
# Parent 384995922773c4c2e7086a1843afd91b94b259ef
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:c63f278895cd
bookmark: statustemplate
tag: tip
parent: 24864:c560d8c68791
user: Jordi Gutiérrez Hermoso <jordigh at 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.
diff --git a/mercurial/templates/map-cmdline.status b/mercurial/templates/map-cmdline.status
new file mode 100644
--- /dev/null
+++ b/mercurial/templates/map-cmdline.status
@@ -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')}"}'
diff --git a/tests/test-command-template.t b/tests/test-command-template.t
--- a/tests/test-command-template.t
+++ b/tests/test-command-template.t
@@ -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]
@@ -1993,6 +1993,154 @@ Upper/lower filters:
abort: template filter 'upper' is not compatible with keyword 'date'
[255]
+Check the status template
+
+ $ echo modify >> third
+ $ touch b
+ $ hg add b
+ $ hg mv fourth fifth
+ $ hg rm a
+ $ hg ci -m "Modify, add, remove, rename"
+
+ $ cat <<EOF >> $HGRCPATH
+ > [extensions]
+ > color=
+ > EOF
+
+ $ hg log -T status -r 10
+ changeset: 10:a36687bc872d
+ 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:a36687bc872d
+ 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:a36687bc872d
+ 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:a36687bc872d9ad08feae013c15438019648982e
+ tag: tip
+ phase: secret
+ parent: 9:7bd832dcd4d46e0861bb7831ef95a11fc5ce7910
+ parent: -1:0000000000000000000000000000000000000000
+ manifest: 8:143566811bab77de98a9e38aa77caa859c429bbe
+ 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:a36687bc872d
+ $ hg --color=debug log -T status -r 10
+ [log.changeset changeset.secret|changeset: 10:a36687bc872d]
+ [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:a36687bc872d]
+ [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:a36687bc872d]
+ [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:a36687bc872d9ad08feae013c15438019648982e]
+ [log.tag|tag: tip]
+ [log.phase|phase: secret]
+ [log.parent changeset.secret|parent: 9:7bd832dcd4d46e0861bb7831ef95a11fc5ce7910]
+ [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
+ [ui.debug log.manifest|manifest: 8:143566811bab77de98a9e38aa77caa859c429bbe]
+ [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:a36687bc872d]
+
+
Error on syntax:
$ echo 'x = "f' >> t
@@ -2547,7 +2695,9 @@ Test stringify on sub expressions
Test splitlines
$ hg log -Gv -R a --template "{splitlines(desc) % 'foo {line}\n'}"
- @ foo future
+ @ foo Modify, add, remove, rename
+ |
+ o foo future
|
o foo third
|
@@ -2581,6 +2731,8 @@ Test startswith
o
|
o
+ |
+ o
o
|\
@@ -2606,7 +2758,9 @@ Test bad template with better error mess
Test word function (including index out of bounds graceful failure)
$ hg log -Gv -R a --template "{word('1', desc)}"
- @
+ @ add,
+ |
+ o
|
o
|
@@ -2630,7 +2784,9 @@ Test word function (including index out
Test word third parameter used as splitter
$ hg log -Gv -R a --template "{word('0', desc, 'o')}"
- @ future
+ @ M
+ |
+ o future
|
o third
|
More information about the Mercurial-devel
mailing list