2010-09-14 21:31:00 +04:00
|
|
|
$ hg init a
|
|
|
|
$ cd a
|
|
|
|
$ echo a > a
|
|
|
|
$ hg add a
|
|
|
|
$ echo line 1 > b
|
|
|
|
$ echo line 2 >> b
|
|
|
|
$ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
|
|
|
|
|
|
|
|
$ hg add b
|
|
|
|
$ echo other 1 > c
|
|
|
|
$ echo other 2 >> c
|
|
|
|
$ echo >> c
|
|
|
|
$ echo other 3 >> c
|
|
|
|
$ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
|
|
|
|
|
|
|
|
$ hg add c
|
|
|
|
$ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
|
|
|
|
$ echo c >> c
|
|
|
|
$ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
|
|
|
|
|
|
|
|
$ echo foo > .hg/branch
|
|
|
|
$ hg commit -m 'new branch' -d '1400000 0' -u 'person'
|
|
|
|
|
|
|
|
$ hg co -q 3
|
|
|
|
$ echo other 4 >> d
|
|
|
|
$ hg add d
|
|
|
|
$ hg commit -m 'new head' -d '1500000 0' -u 'person'
|
|
|
|
|
|
|
|
$ hg merge -q foo
|
|
|
|
$ hg commit -m 'merge' -d '1500001 0' -u 'person'
|
|
|
|
|
|
|
|
Second branch starting at nullrev:
|
|
|
|
|
|
|
|
$ hg update null
|
|
|
|
0 files updated, 0 files merged, 4 files removed, 0 files unresolved
|
|
|
|
$ echo second > second
|
|
|
|
$ hg add second
|
|
|
|
$ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
|
|
|
|
created new head
|
|
|
|
|
|
|
|
$ echo third > third
|
|
|
|
$ hg add third
|
|
|
|
$ hg mv second fourth
|
|
|
|
$ hg commit -m third -d "2020-01-01 10:01"
|
|
|
|
|
2013-04-16 18:44:29 +04:00
|
|
|
$ hg log --template '{join(file_copies, ",\n")}\n' -r .
|
|
|
|
fourth (second)
|
2014-03-09 01:27:25 +04:00
|
|
|
$ hg log -T '{file_copies % "{source} -> {name}\n"}' -r .
|
2013-02-22 23:45:46 +04:00
|
|
|
second -> fourth
|
|
|
|
|
2012-05-13 00:12:54 +04:00
|
|
|
Quoting for ui.logtemplate
|
|
|
|
|
|
|
|
$ hg tip --config "ui.logtemplate={rev}\n"
|
|
|
|
8
|
|
|
|
$ hg tip --config "ui.logtemplate='{rev}\n'"
|
|
|
|
8
|
|
|
|
$ hg tip --config 'ui.logtemplate="{rev}\n"'
|
|
|
|
8
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Make sure user/global hgrc does not affect tests
|
|
|
|
|
|
|
|
$ echo '[ui]' > .hg/hgrc
|
|
|
|
$ echo 'logtemplate =' >> .hg/hgrc
|
|
|
|
$ echo 'style =' >> .hg/hgrc
|
|
|
|
|
2014-03-09 03:38:50 +04:00
|
|
|
Add some simple styles to settings
|
|
|
|
|
|
|
|
$ echo '[templates]' >> .hg/hgrc
|
|
|
|
$ printf 'simple = "{rev}\\n"\n' >> .hg/hgrc
|
|
|
|
$ printf 'simple2 = {rev}\\n\n' >> .hg/hgrc
|
|
|
|
|
|
|
|
$ hg log -l1 -Tsimple
|
|
|
|
8
|
|
|
|
$ hg log -l1 -Tsimple2
|
|
|
|
8
|
|
|
|
|
|
|
|
Test templates and style maps in files:
|
|
|
|
|
|
|
|
$ echo "{rev}" > tmpl
|
|
|
|
$ hg log -l1 -T./tmpl
|
|
|
|
8
|
|
|
|
$ hg log -l1 -Tblah/blah
|
|
|
|
blah/blah (no-eol)
|
|
|
|
|
|
|
|
$ printf 'changeset = "{rev}\\n"\n' > map-simple
|
|
|
|
$ hg log -l1 -T./map-simple
|
|
|
|
8
|
|
|
|
|
2014-09-30 18:15:56 +04:00
|
|
|
Template should precede style option
|
|
|
|
|
|
|
|
$ hg log -l1 --style default -T '{rev}\n'
|
|
|
|
8
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Default style is like normal output:
|
|
|
|
|
|
|
|
$ hg log > log.out
|
|
|
|
$ hg log --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
|
|
|
|
$ hg log -v > log.out
|
|
|
|
$ hg log -v --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
|
|
|
|
$ hg log --debug > log.out
|
|
|
|
$ hg log --debug --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
|
log: rewrite default template to use labels (issue2866)
This is a complete rewrite of the default template to use labels. This
seems ultimately useless to me in most cases. The biggest benefit of
this patch to me seems to be a fairly complicated example of the
templating engine. It was a lot of hard work to figure out the precise
acceptable syntax, since it's almost undocumented. Hat tip to Steve
Losh's smartlog template, which helped me figure out a lot of the
syntax. Hopefully later I can use the present default log template
as an example for documenting the templating engine.
A test is attached. My goal was to match the --color=debug output,
which may differ slightly in newlines from the actual ANSI escape
codes output. I consider this an acceptable invisible deviation.
There seems to be a considerable slowdown with this rewrite.
Before:
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.882s
user 0m0.812s
sys 0m0.064s
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.872s
user 0m0.796s
sys 0m0.068s
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.917s
user 0m0.836s
sys 0m0.076s
After:
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.480s
user 0m1.392s
sys 0m0.072s
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.500s
user 0m1.400s
sys 0m0.088s
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.462s
user 0m1.364s
sys 0m0.092s
Following the maxim, "make it work, profile, make it faster, in that
order", I deem this slowdown acceptable for now.
I suspect but have not confirmed that a big slowdown comes from
calling keywords twice in the file templates, once to test the
existence of output and again to actually list the output. If so, a
simple speedup might be to improve the templating engine to cache
keywords when called more than once on the same revision.
TODO: I found a bug while working on this. The following stack traces:
hg log -r . -T '{ifcontains(phase, "secret public", "lol", "omg")}\n'
2014-10-04 03:48:56 +04:00
|
|
|
Default style should also preserve color information (issue2866):
|
|
|
|
|
|
|
|
$ cp $HGRCPATH $HGRCPATH-bak
|
|
|
|
$ cat <<EOF >> $HGRCPATH
|
|
|
|
> [extensions]
|
|
|
|
> color=
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg --color=debug log > log.out
|
|
|
|
$ hg --color=debug log --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
$ hg --color=debug -v log > log.out
|
|
|
|
$ hg --color=debug -v log --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
$ hg --color=debug --debug log > log.out
|
|
|
|
$ hg --color=debug --debug log --style default > style.out
|
|
|
|
$ cmp log.out style.out || diff -u log.out style.out
|
|
|
|
|
|
|
|
$ mv $HGRCPATH-bak $HGRCPATH
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Revision with no copies (used to print a traceback):
|
|
|
|
|
|
|
|
$ hg tip -v --template '\n'
|
|
|
|
|
|
|
|
|
|
|
|
Compact style works:
|
|
|
|
|
2014-03-09 03:38:50 +04:00
|
|
|
$ hg log -Tcompact
|
2010-09-14 21:31:00 +04:00
|
|
|
8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
|
|
|
|
third
|
|
|
|
|
|
|
|
7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
|
|
|
|
second
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
merge
|
|
|
|
|
|
|
|
5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
|
|
|
|
new head
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
4 bbe44766e73d 1970-01-17 04:53 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
new branch
|
|
|
|
|
|
|
|
3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
|
|
|
|
no user, no domain
|
|
|
|
|
|
|
|
2 97054abb4ab8 1970-01-14 21:20 +0000 other
|
|
|
|
no person
|
|
|
|
|
|
|
|
1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
|
|
|
|
other 1
|
|
|
|
|
|
|
|
0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
|
|
|
|
line 1
|
|
|
|
|
|
|
|
|
|
|
|
$ hg log -v --style compact
|
|
|
|
8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
|
|
|
|
third
|
|
|
|
|
|
|
|
7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
|
|
|
|
second
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
merge
|
|
|
|
|
|
|
|
5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
|
|
|
|
new head
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
4 bbe44766e73d 1970-01-17 04:53 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
new branch
|
|
|
|
|
|
|
|
3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
|
|
|
|
no user, no domain
|
|
|
|
|
|
|
|
2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
|
|
|
|
no person
|
|
|
|
|
|
|
|
1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
|
|
|
|
other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
|
|
|
|
0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
|
|
|
|
line 1
|
|
|
|
line 2
|
|
|
|
|
|
|
|
|
|
|
|
$ hg log --debug --style compact
|
|
|
|
8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
|
|
|
|
third
|
|
|
|
|
|
|
|
7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
|
|
|
|
second
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
merge
|
|
|
|
|
|
|
|
5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
|
|
|
|
new head
|
|
|
|
|
2011-05-02 21:20:29 +04:00
|
|
|
4:3,-1 bbe44766e73d 1970-01-17 04:53 +0000 person
|
2010-09-14 21:31:00 +04:00
|
|
|
new branch
|
|
|
|
|
|
|
|
3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
|
|
|
|
no user, no domain
|
|
|
|
|
|
|
|
2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
|
|
|
|
no person
|
|
|
|
|
|
|
|
1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
|
|
|
|
other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
|
|
|
|
0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
|
|
|
|
line 1
|
|
|
|
line 2
|
|
|
|
|
|
|
|
|
|
|
|
Test xml styles:
|
|
|
|
|
|
|
|
$ hg log --style xml
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<log>
|
|
|
|
<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
|
|
|
|
<tag>tip</tag>
|
|
|
|
<author email="test">test</author>
|
|
|
|
<date>2020-01-01T10:01:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">third</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">second</msg>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
|
2010-09-14 21:31:00 +04:00
|
|
|
<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
|
2011-05-02 21:20:29 +04:00
|
|
|
<parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
|
2010-09-14 21:31:00 +04:00
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:01+00:00</date>
|
|
|
|
<msg xml:space="preserve">merge</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
|
|
|
|
<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">new head</msg>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
|
2010-09-14 21:31:00 +04:00
|
|
|
<branch>foo</branch>
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-17T04:53:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">new branch</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-16T01:06:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">no user, no domain</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
|
|
|
|
<author email="other@place">other</author>
|
|
|
|
<date>1970-01-14T21:20:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">no person</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
|
|
|
|
<author email="other@place">A. N. Other</author>
|
|
|
|
<date>1970-01-13T17:33:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3</msg>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">line 1
|
|
|
|
line 2</msg>
|
|
|
|
</logentry>
|
|
|
|
</log>
|
|
|
|
|
|
|
|
$ hg log -v --style xml
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<log>
|
|
|
|
<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
|
|
|
|
<tag>tip</tag>
|
|
|
|
<author email="test">test</author>
|
|
|
|
<date>2020-01-01T10:01:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">third</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">fourth</path>
|
|
|
|
<path action="A">third</path>
|
|
|
|
<path action="R">second</path>
|
|
|
|
</paths>
|
|
|
|
<copies>
|
|
|
|
<copy source="second">fourth</copy>
|
|
|
|
</copies>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">second</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">second</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
|
2010-09-14 21:31:00 +04:00
|
|
|
<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
|
2011-05-02 21:20:29 +04:00
|
|
|
<parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
|
2010-09-14 21:31:00 +04:00
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:01+00:00</date>
|
|
|
|
<msg xml:space="preserve">merge</msg>
|
|
|
|
<paths>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
|
|
|
|
<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">new head</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">d</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
|
2010-09-14 21:31:00 +04:00
|
|
|
<branch>foo</branch>
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-17T04:53:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">new branch</msg>
|
|
|
|
<paths>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-16T01:06:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">no user, no domain</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="M">c</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
|
|
|
|
<author email="other@place">other</author>
|
|
|
|
<date>1970-01-14T21:20:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">no person</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">c</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
|
|
|
|
<author email="other@place">A. N. Other</author>
|
|
|
|
<date>1970-01-13T17:33:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">b</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">line 1
|
|
|
|
line 2</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">a</path>
|
|
|
|
</paths>
|
|
|
|
</logentry>
|
|
|
|
</log>
|
|
|
|
|
|
|
|
$ hg log --debug --style xml
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
<log>
|
|
|
|
<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
|
|
|
|
<tag>tip</tag>
|
|
|
|
<parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="test">test</author>
|
|
|
|
<date>2020-01-01T10:01:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">third</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">fourth</path>
|
|
|
|
<path action="A">third</path>
|
|
|
|
<path action="R">second</path>
|
|
|
|
</paths>
|
|
|
|
<copies>
|
|
|
|
<copy source="second">fourth</copy>
|
|
|
|
</copies>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">second</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">second</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
|
2010-09-14 21:31:00 +04:00
|
|
|
<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
|
2011-05-02 21:20:29 +04:00
|
|
|
<parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
|
2010-09-14 21:31:00 +04:00
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:01+00:00</date>
|
|
|
|
<msg xml:space="preserve">merge</msg>
|
|
|
|
<paths>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
|
|
|
|
<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-18T08:40:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">new head</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">d</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
2011-05-02 21:20:29 +04:00
|
|
|
<logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
|
2010-09-14 21:31:00 +04:00
|
|
|
<branch>foo</branch>
|
|
|
|
<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-17T04:53:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">new branch</msg>
|
|
|
|
<paths>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">foo</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
|
|
|
|
<parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="person">person</author>
|
|
|
|
<date>1970-01-16T01:06:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">no user, no domain</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="M">c</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
|
|
|
|
<parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="other@place">other</author>
|
|
|
|
<date>1970-01-14T21:20:00+00:00</date>
|
|
|
|
<msg xml:space="preserve">no person</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">c</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
|
|
|
|
<parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="other@place">A. N. Other</author>
|
|
|
|
<date>1970-01-13T17:33:20+00:00</date>
|
|
|
|
<msg xml:space="preserve">other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">b</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<parent revision="-1" node="0000000000000000000000000000000000000000" />
|
|
|
|
<author email="user@hostname">User Name</author>
|
|
|
|
<date>1970-01-12T13:46:40+00:00</date>
|
|
|
|
<msg xml:space="preserve">line 1
|
|
|
|
line 2</msg>
|
|
|
|
<paths>
|
|
|
|
<path action="A">a</path>
|
|
|
|
</paths>
|
|
|
|
<extra key="branch">default</extra>
|
|
|
|
</logentry>
|
|
|
|
</log>
|
|
|
|
|
|
|
|
|
2014-09-15 22:11:13 +04:00
|
|
|
Test JSON style:
|
|
|
|
|
|
|
|
$ hg log -k nosuch -Tjson
|
|
|
|
[]
|
|
|
|
|
|
|
|
$ hg log -qr . -Tjson
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
$ hg log -vpr . -Tjson --stat
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "test",
|
|
|
|
"date": [1577872860, 0],
|
|
|
|
"desc": "third",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": ["tip"],
|
|
|
|
"parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
|
|
|
|
"files": ["fourth", "second", "third"],
|
|
|
|
"diffstat": " fourth | 1 +\n second | 1 -\n third | 1 +\n 3 files changed, 2 insertions(+), 1 deletions(-)\n",
|
|
|
|
"diff": "diff -r 29114dbae42b -r 95c24699272e fourth\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/fourth\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+second\ndiff -r 29114dbae42b -r 95c24699272e second\n--- a/second\tMon Jan 12 13:46:40 1970 +0000\n+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n@@ -1,1 +0,0 @@\n-second\ndiff -r 29114dbae42b -r 95c24699272e third\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/third\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+third\n"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
2014-11-19 09:13:05 +03:00
|
|
|
honor --git but not format-breaking diffopts
|
|
|
|
$ hg --config diff.noprefix=True log --git -vpr . -Tjson
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "test",
|
|
|
|
"date": [1577872860, 0],
|
|
|
|
"desc": "third",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": ["tip"],
|
|
|
|
"parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
|
|
|
|
"files": ["fourth", "second", "third"],
|
|
|
|
"diff": "diff --git a/second b/fourth\nrename from second\nrename to fourth\ndiff --git a/third b/third\nnew file mode 100644\n--- /dev/null\n+++ b/third\n@@ -0,0 +1,1 @@\n+third\n"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
2014-09-15 22:11:13 +04:00
|
|
|
$ hg log -T json
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "test",
|
|
|
|
"date": [1577872860, 0],
|
|
|
|
"desc": "third",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": ["tip"],
|
|
|
|
"parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 7,
|
|
|
|
"node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "User Name <user@hostname>",
|
|
|
|
"date": [1000000, 0],
|
|
|
|
"desc": "second",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["0000000000000000000000000000000000000000"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 6,
|
|
|
|
"node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1500001, 0],
|
|
|
|
"desc": "merge",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 5,
|
|
|
|
"node": "13207e5a10d9fd28ec424934298e176197f2c67f",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1500000, 0],
|
|
|
|
"desc": "new head",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 4,
|
|
|
|
"node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
|
|
|
|
"branch": "foo",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1400000, 0],
|
|
|
|
"desc": "new branch",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 3,
|
|
|
|
"node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1300000, 0],
|
|
|
|
"desc": "no user, no domain",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["97054abb4ab824450e9164180baf491ae0078465"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 2,
|
|
|
|
"node": "97054abb4ab824450e9164180baf491ae0078465",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "other@place",
|
|
|
|
"date": [1200000, 0],
|
|
|
|
"desc": "no person",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 1,
|
|
|
|
"node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "A. N. Other <other@place>",
|
|
|
|
"date": [1100000, 0],
|
|
|
|
"desc": "other 1\nother 2\n\nother 3",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 0,
|
|
|
|
"node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "User Name <user@hostname>",
|
|
|
|
"date": [1000000, 0],
|
|
|
|
"desc": "line 1\nline 2",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["0000000000000000000000000000000000000000"]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
$ hg heads -v -Tjson
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "test",
|
|
|
|
"date": [1577872860, 0],
|
|
|
|
"desc": "third",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": ["tip"],
|
|
|
|
"parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
|
|
|
|
"files": ["fourth", "second", "third"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 6,
|
|
|
|
"node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1500001, 0],
|
|
|
|
"desc": "merge",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
|
|
|
|
"files": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 4,
|
|
|
|
"node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
|
|
|
|
"branch": "foo",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1400000, 0],
|
|
|
|
"desc": "new branch",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
|
|
|
|
"files": []
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
$ hg log --debug -Tjson
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"rev": 8,
|
|
|
|
"node": "95c24699272ef57d062b8bccc32c878bf841784a",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "test",
|
|
|
|
"date": [1577872860, 0],
|
|
|
|
"desc": "third",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": ["tip"],
|
|
|
|
"parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
|
|
|
|
"manifest": "94961b75a2da554b4df6fb599e5bfc7d48de0c64",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["fourth", "third"],
|
|
|
|
"removed": ["second"]
|
2014-09-15 22:11:13 +04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 7,
|
|
|
|
"node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "User Name <user@hostname>",
|
|
|
|
"date": [1000000, 0],
|
|
|
|
"desc": "second",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["0000000000000000000000000000000000000000"],
|
|
|
|
"manifest": "f2dbc354b94e5ec0b4f10680ee0cee816101d0bf",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["second"],
|
|
|
|
"removed": []
|
2014-09-15 22:11:13 +04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 6,
|
|
|
|
"node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1500001, 0],
|
|
|
|
"desc": "merge",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
|
|
|
|
"manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
|
|
|
"added": [],
|
|
|
|
"removed": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 5,
|
|
|
|
"node": "13207e5a10d9fd28ec424934298e176197f2c67f",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1500000, 0],
|
|
|
|
"desc": "new head",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
|
|
|
|
"manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["d"],
|
|
|
|
"removed": []
|
2014-09-15 22:11:13 +04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 4,
|
|
|
|
"node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
|
|
|
|
"branch": "foo",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1400000, 0],
|
|
|
|
"desc": "new branch",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
|
|
|
|
"manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
|
|
|
|
"extra": {"branch": "foo"},
|
|
|
|
"modified": [],
|
|
|
|
"added": [],
|
|
|
|
"removed": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 3,
|
|
|
|
"node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "person",
|
|
|
|
"date": [1300000, 0],
|
|
|
|
"desc": "no user, no domain",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["97054abb4ab824450e9164180baf491ae0078465"],
|
|
|
|
"manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": ["c"],
|
|
|
|
"added": [],
|
|
|
|
"removed": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 2,
|
|
|
|
"node": "97054abb4ab824450e9164180baf491ae0078465",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "other@place",
|
|
|
|
"date": [1200000, 0],
|
|
|
|
"desc": "no person",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"],
|
|
|
|
"manifest": "6e0e82995c35d0d57a52aca8da4e56139e06b4b1",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["c"],
|
|
|
|
"removed": []
|
2014-09-15 22:11:13 +04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 1,
|
|
|
|
"node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "A. N. Other <other@place>",
|
|
|
|
"date": [1100000, 0],
|
|
|
|
"desc": "other 1\nother 2\n\nother 3",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"],
|
|
|
|
"manifest": "4e8d705b1e53e3f9375e0e60dc7b525d8211fe55",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["b"],
|
|
|
|
"removed": []
|
2014-09-15 22:11:13 +04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"rev": 0,
|
|
|
|
"node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
|
|
|
|
"branch": "default",
|
|
|
|
"phase": "draft",
|
|
|
|
"user": "User Name <user@hostname>",
|
|
|
|
"date": [1000000, 0],
|
|
|
|
"desc": "line 1\nline 2",
|
|
|
|
"bookmarks": [],
|
|
|
|
"tags": [],
|
|
|
|
"parents": ["0000000000000000000000000000000000000000"],
|
|
|
|
"manifest": "a0c8bcbbb45c63b90b70ad007bf38961f64f2af0",
|
|
|
|
"extra": {"branch": "default"},
|
|
|
|
"modified": [],
|
2015-01-06 09:18:55 +03:00
|
|
|
"added": ["a"],
|
|
|
|
"removed": []
|
2014-09-15 22:11:13 +04:00
|
|
|
}
|
|
|
|
]
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Error if style not readable:
|
|
|
|
|
2013-11-15 04:07:43 +04:00
|
|
|
#if unix-permissions no-root
|
2010-09-14 21:31:00 +04:00
|
|
|
$ touch q
|
|
|
|
$ chmod 0 q
|
|
|
|
$ hg log --style ./q
|
|
|
|
abort: Permission denied: ./q
|
2010-09-17 02:51:32 +04:00
|
|
|
[255]
|
2012-06-11 21:18:36 +04:00
|
|
|
#endif
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
Error if no style:
|
|
|
|
|
|
|
|
$ hg log --style notexist
|
2013-05-03 05:41:22 +04:00
|
|
|
abort: style 'notexist' not found
|
|
|
|
(available styles: bisect, changelog, compact, default, phases, xml)
|
2010-09-17 02:51:32 +04:00
|
|
|
[255]
|
2010-09-14 21:31:00 +04:00
|
|
|
|
2014-07-26 00:35:09 +04:00
|
|
|
$ hg log -T list
|
|
|
|
available styles: bisect, changelog, compact, default, phases, xml
|
|
|
|
abort: specify a template
|
|
|
|
[255]
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Error if style missing key:
|
|
|
|
|
|
|
|
$ echo 'q = q' > t
|
|
|
|
$ hg log --style ./t
|
2010-12-20 21:09:00 +03:00
|
|
|
abort: "changeset" not in template map
|
2010-09-17 02:51:32 +04:00
|
|
|
[255]
|
2010-09-14 21:31:00 +04:00
|
|
|
|
2012-08-04 16:37:17 +04:00
|
|
|
Error if style missing value:
|
|
|
|
|
|
|
|
$ echo 'changeset =' > t
|
|
|
|
$ hg log --style t
|
|
|
|
abort: t:1: missing value
|
|
|
|
[255]
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Error if include fails:
|
|
|
|
|
|
|
|
$ echo 'changeset = q' >> t
|
2013-11-15 04:07:43 +04:00
|
|
|
#if unix-permissions no-root
|
2010-09-14 21:31:00 +04:00
|
|
|
$ hg log --style ./t
|
|
|
|
abort: template file ./q: Permission denied
|
2010-09-17 02:51:32 +04:00
|
|
|
[255]
|
2012-06-11 21:18:36 +04:00
|
|
|
$ rm q
|
|
|
|
#endif
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
Include works:
|
|
|
|
|
|
|
|
$ echo '{rev}' > q
|
|
|
|
$ hg log --style ./t
|
|
|
|
8
|
|
|
|
7
|
|
|
|
6
|
|
|
|
5
|
|
|
|
4
|
|
|
|
3
|
|
|
|
2
|
|
|
|
1
|
|
|
|
0
|
|
|
|
|
2014-10-04 06:03:31 +04:00
|
|
|
Check that {phase} works correctly on parents:
|
|
|
|
|
|
|
|
$ cat << EOF > parentphase
|
|
|
|
> changeset_debug = '{rev} ({phase}):{parents}\n'
|
|
|
|
> parent = ' {rev} ({phase})'
|
|
|
|
> EOF
|
|
|
|
$ hg phase -r 5 --public
|
|
|
|
$ hg phase -r 7 --secret --force
|
|
|
|
$ hg log --debug -G --style ./parentphase
|
|
|
|
@ 8 (secret): 7 (secret) -1 (public)
|
|
|
|
|
|
|
|
|
o 7 (secret): -1 (public) -1 (public)
|
|
|
|
|
|
|
|
o 6 (draft): 5 (public) 4 (draft)
|
|
|
|
|\
|
|
|
|
| o 5 (public): 3 (public) -1 (public)
|
|
|
|
| |
|
|
|
|
o | 4 (draft): 3 (public) -1 (public)
|
|
|
|
|/
|
|
|
|
o 3 (public): 2 (public) -1 (public)
|
|
|
|
|
|
|
|
|
o 2 (public): 1 (public) -1 (public)
|
|
|
|
|
|
|
|
|
o 1 (public): 0 (public) -1 (public)
|
|
|
|
|
|
|
|
|
o 0 (public): -1 (public) -1 (public)
|
|
|
|
|
|
|
|
|
2013-09-22 13:52:18 +04:00
|
|
|
Missing non-standard names give no error (backward compatibility):
|
|
|
|
|
|
|
|
$ echo "changeset = '{c}'" > t
|
|
|
|
$ hg log --style ./t
|
|
|
|
|
|
|
|
Defining non-standard name works:
|
|
|
|
|
|
|
|
$ cat <<EOF > t
|
|
|
|
> changeset = '{c}'
|
|
|
|
> c = q
|
|
|
|
> EOF
|
|
|
|
$ hg log --style ./t
|
|
|
|
8
|
|
|
|
7
|
|
|
|
6
|
|
|
|
5
|
|
|
|
4
|
|
|
|
3
|
|
|
|
2
|
|
|
|
1
|
|
|
|
0
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
ui.style works:
|
|
|
|
|
|
|
|
$ echo '[ui]' > .hg/hgrc
|
|
|
|
$ echo 'style = t' >> .hg/hgrc
|
|
|
|
$ hg log
|
|
|
|
8
|
|
|
|
7
|
|
|
|
6
|
|
|
|
5
|
|
|
|
4
|
|
|
|
3
|
|
|
|
2
|
|
|
|
1
|
|
|
|
0
|
|
|
|
|
|
|
|
|
|
|
|
Issue338:
|
|
|
|
|
|
|
|
$ hg log --style=changelog > changelog
|
|
|
|
|
|
|
|
$ cat changelog
|
|
|
|
2020-01-01 test <test>
|
|
|
|
|
|
|
|
* fourth, second, third:
|
|
|
|
third
|
|
|
|
[95c24699272e] [tip]
|
|
|
|
|
|
|
|
1970-01-12 User Name <user@hostname>
|
|
|
|
|
|
|
|
* second:
|
|
|
|
second
|
|
|
|
[29114dbae42b]
|
|
|
|
|
|
|
|
1970-01-18 person <person>
|
|
|
|
|
|
|
|
* merge
|
2011-05-02 21:20:29 +04:00
|
|
|
[d41e714fe50d]
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
* d:
|
|
|
|
new head
|
|
|
|
[13207e5a10d9]
|
|
|
|
|
|
|
|
1970-01-17 person <person>
|
|
|
|
|
|
|
|
* new branch
|
2011-05-02 21:20:29 +04:00
|
|
|
[bbe44766e73d] <foo>
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
1970-01-16 person <person>
|
|
|
|
|
|
|
|
* c:
|
|
|
|
no user, no domain
|
|
|
|
[10e46f2dcbf4]
|
|
|
|
|
|
|
|
1970-01-14 other <other@place>
|
|
|
|
|
|
|
|
* c:
|
|
|
|
no person
|
|
|
|
[97054abb4ab8]
|
|
|
|
|
|
|
|
1970-01-13 A. N. Other <other@place>
|
|
|
|
|
|
|
|
* b:
|
|
|
|
other 1 other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
[b608e9d1a3f0]
|
|
|
|
|
|
|
|
1970-01-12 User Name <user@hostname>
|
|
|
|
|
|
|
|
* a:
|
|
|
|
line 1 line 2
|
|
|
|
[1e4e1b8f71e0]
|
|
|
|
|
|
|
|
|
2010-09-24 12:13:49 +04:00
|
|
|
Issue2130: xml output for 'hg heads' is malformed
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
$ hg heads --style changelog
|
|
|
|
2020-01-01 test <test>
|
|
|
|
|
|
|
|
* fourth, second, third:
|
|
|
|
third
|
|
|
|
[95c24699272e] [tip]
|
|
|
|
|
|
|
|
1970-01-18 person <person>
|
|
|
|
|
|
|
|
* merge
|
2011-05-02 21:20:29 +04:00
|
|
|
[d41e714fe50d]
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
1970-01-17 person <person>
|
|
|
|
|
|
|
|
* new branch
|
2011-05-02 21:20:29 +04:00
|
|
|
[bbe44766e73d] <foo>
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
|
|
|
|
Keys work:
|
|
|
|
|
2010-12-13 18:30:15 +03:00
|
|
|
$ for key in author branch branches date desc file_adds file_dels file_mods \
|
2010-09-14 21:31:00 +04:00
|
|
|
> file_copies file_copies_switch files \
|
2012-07-10 19:43:32 +04:00
|
|
|
> manifest node parents rev tags diffstat extras \
|
|
|
|
> p1rev p2rev p1node p2node; do
|
2010-09-14 21:31:00 +04:00
|
|
|
> for mode in '' --verbose --debug; do
|
|
|
|
> hg log $mode --template "$key$mode: {$key}\n"
|
|
|
|
> done
|
|
|
|
> done
|
|
|
|
author: test
|
|
|
|
author: User Name <user@hostname>
|
|
|
|
author: person
|
|
|
|
author: person
|
|
|
|
author: person
|
|
|
|
author: person
|
|
|
|
author: other@place
|
|
|
|
author: A. N. Other <other@place>
|
|
|
|
author: User Name <user@hostname>
|
|
|
|
author--verbose: test
|
|
|
|
author--verbose: User Name <user@hostname>
|
|
|
|
author--verbose: person
|
|
|
|
author--verbose: person
|
|
|
|
author--verbose: person
|
|
|
|
author--verbose: person
|
|
|
|
author--verbose: other@place
|
|
|
|
author--verbose: A. N. Other <other@place>
|
|
|
|
author--verbose: User Name <user@hostname>
|
|
|
|
author--debug: test
|
|
|
|
author--debug: User Name <user@hostname>
|
|
|
|
author--debug: person
|
|
|
|
author--debug: person
|
|
|
|
author--debug: person
|
|
|
|
author--debug: person
|
|
|
|
author--debug: other@place
|
|
|
|
author--debug: A. N. Other <other@place>
|
|
|
|
author--debug: User Name <user@hostname>
|
2010-12-13 18:30:15 +03:00
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch: foo
|
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: foo
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--verbose: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: foo
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
|
|
|
branch--debug: default
|
2010-09-14 21:31:00 +04:00
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches: foo
|
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose: foo
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--verbose:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug: foo
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
branches--debug:
|
|
|
|
date: 1577872860.00
|
|
|
|
date: 1000000.00
|
|
|
|
date: 1500001.00
|
|
|
|
date: 1500000.00
|
|
|
|
date: 1400000.00
|
|
|
|
date: 1300000.00
|
|
|
|
date: 1200000.00
|
|
|
|
date: 1100000.00
|
|
|
|
date: 1000000.00
|
|
|
|
date--verbose: 1577872860.00
|
|
|
|
date--verbose: 1000000.00
|
|
|
|
date--verbose: 1500001.00
|
|
|
|
date--verbose: 1500000.00
|
|
|
|
date--verbose: 1400000.00
|
|
|
|
date--verbose: 1300000.00
|
|
|
|
date--verbose: 1200000.00
|
|
|
|
date--verbose: 1100000.00
|
|
|
|
date--verbose: 1000000.00
|
|
|
|
date--debug: 1577872860.00
|
|
|
|
date--debug: 1000000.00
|
|
|
|
date--debug: 1500001.00
|
|
|
|
date--debug: 1500000.00
|
|
|
|
date--debug: 1400000.00
|
|
|
|
date--debug: 1300000.00
|
|
|
|
date--debug: 1200000.00
|
|
|
|
date--debug: 1100000.00
|
|
|
|
date--debug: 1000000.00
|
|
|
|
desc: third
|
|
|
|
desc: second
|
|
|
|
desc: merge
|
|
|
|
desc: new head
|
|
|
|
desc: new branch
|
|
|
|
desc: no user, no domain
|
|
|
|
desc: no person
|
|
|
|
desc: other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
desc: line 1
|
|
|
|
line 2
|
|
|
|
desc--verbose: third
|
|
|
|
desc--verbose: second
|
|
|
|
desc--verbose: merge
|
|
|
|
desc--verbose: new head
|
|
|
|
desc--verbose: new branch
|
|
|
|
desc--verbose: no user, no domain
|
|
|
|
desc--verbose: no person
|
|
|
|
desc--verbose: other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
desc--verbose: line 1
|
|
|
|
line 2
|
|
|
|
desc--debug: third
|
|
|
|
desc--debug: second
|
|
|
|
desc--debug: merge
|
|
|
|
desc--debug: new head
|
|
|
|
desc--debug: new branch
|
|
|
|
desc--debug: no user, no domain
|
|
|
|
desc--debug: no person
|
|
|
|
desc--debug: other 1
|
|
|
|
other 2
|
|
|
|
|
|
|
|
other 3
|
|
|
|
desc--debug: line 1
|
|
|
|
line 2
|
|
|
|
file_adds: fourth third
|
|
|
|
file_adds: second
|
|
|
|
file_adds:
|
|
|
|
file_adds: d
|
|
|
|
file_adds:
|
|
|
|
file_adds:
|
|
|
|
file_adds: c
|
|
|
|
file_adds: b
|
|
|
|
file_adds: a
|
|
|
|
file_adds--verbose: fourth third
|
|
|
|
file_adds--verbose: second
|
|
|
|
file_adds--verbose:
|
|
|
|
file_adds--verbose: d
|
|
|
|
file_adds--verbose:
|
|
|
|
file_adds--verbose:
|
|
|
|
file_adds--verbose: c
|
|
|
|
file_adds--verbose: b
|
|
|
|
file_adds--verbose: a
|
|
|
|
file_adds--debug: fourth third
|
|
|
|
file_adds--debug: second
|
|
|
|
file_adds--debug:
|
|
|
|
file_adds--debug: d
|
|
|
|
file_adds--debug:
|
|
|
|
file_adds--debug:
|
|
|
|
file_adds--debug: c
|
|
|
|
file_adds--debug: b
|
|
|
|
file_adds--debug: a
|
|
|
|
file_dels: second
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels:
|
|
|
|
file_dels--verbose: second
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--verbose:
|
|
|
|
file_dels--debug: second
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_dels--debug:
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods: c
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose: c
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--verbose:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug: c
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_mods--debug:
|
|
|
|
file_copies: fourth (second)
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies:
|
|
|
|
file_copies--verbose: fourth (second)
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--verbose:
|
|
|
|
file_copies--debug: fourth (second)
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies--debug:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--verbose:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
file_copies_switch--debug:
|
|
|
|
files: fourth second third
|
|
|
|
files: second
|
|
|
|
files:
|
|
|
|
files: d
|
|
|
|
files:
|
|
|
|
files: c
|
|
|
|
files: c
|
|
|
|
files: b
|
|
|
|
files: a
|
|
|
|
files--verbose: fourth second third
|
|
|
|
files--verbose: second
|
|
|
|
files--verbose:
|
|
|
|
files--verbose: d
|
|
|
|
files--verbose:
|
|
|
|
files--verbose: c
|
|
|
|
files--verbose: c
|
|
|
|
files--verbose: b
|
|
|
|
files--verbose: a
|
|
|
|
files--debug: fourth second third
|
|
|
|
files--debug: second
|
|
|
|
files--debug:
|
|
|
|
files--debug: d
|
|
|
|
files--debug:
|
|
|
|
files--debug: c
|
|
|
|
files--debug: c
|
|
|
|
files--debug: b
|
|
|
|
files--debug: a
|
2011-05-02 21:20:29 +04:00
|
|
|
manifest: 6:94961b75a2da
|
|
|
|
manifest: 5:f2dbc354b94e
|
|
|
|
manifest: 4:4dc3def4f9b4
|
|
|
|
manifest: 4:4dc3def4f9b4
|
|
|
|
manifest: 3:cb5a1327723b
|
2010-09-14 21:31:00 +04:00
|
|
|
manifest: 3:cb5a1327723b
|
|
|
|
manifest: 2:6e0e82995c35
|
|
|
|
manifest: 1:4e8d705b1e53
|
|
|
|
manifest: 0:a0c8bcbbb45c
|
2011-05-02 21:20:29 +04:00
|
|
|
manifest--verbose: 6:94961b75a2da
|
|
|
|
manifest--verbose: 5:f2dbc354b94e
|
|
|
|
manifest--verbose: 4:4dc3def4f9b4
|
|
|
|
manifest--verbose: 4:4dc3def4f9b4
|
|
|
|
manifest--verbose: 3:cb5a1327723b
|
2010-09-14 21:31:00 +04:00
|
|
|
manifest--verbose: 3:cb5a1327723b
|
|
|
|
manifest--verbose: 2:6e0e82995c35
|
|
|
|
manifest--verbose: 1:4e8d705b1e53
|
|
|
|
manifest--verbose: 0:a0c8bcbbb45c
|
2011-05-02 21:20:29 +04:00
|
|
|
manifest--debug: 6:94961b75a2da554b4df6fb599e5bfc7d48de0c64
|
|
|
|
manifest--debug: 5:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
|
|
|
|
manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
|
|
|
|
manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
|
|
|
|
manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
|
2010-09-14 21:31:00 +04:00
|
|
|
manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
|
|
|
|
manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
|
|
|
|
manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
|
|
|
|
manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
|
|
|
|
node: 95c24699272ef57d062b8bccc32c878bf841784a
|
|
|
|
node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
2011-05-02 21:20:29 +04:00
|
|
|
node: d41e714fe50d9e4a5f11b4d595d543481b5f980b
|
2010-09-14 21:31:00 +04:00
|
|
|
node: 13207e5a10d9fd28ec424934298e176197f2c67f
|
2011-05-02 21:20:29 +04:00
|
|
|
node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
2010-09-14 21:31:00 +04:00
|
|
|
node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
node: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
node: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
|
|
|
|
node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
2011-05-02 21:20:29 +04:00
|
|
|
node--verbose: d41e714fe50d9e4a5f11b4d595d543481b5f980b
|
2010-09-14 21:31:00 +04:00
|
|
|
node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
|
2011-05-02 21:20:29 +04:00
|
|
|
node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
2010-09-14 21:31:00 +04:00
|
|
|
node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
node--verbose: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
|
|
|
|
node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
2011-05-02 21:20:29 +04:00
|
|
|
node--debug: d41e714fe50d9e4a5f11b4d595d543481b5f980b
|
2010-09-14 21:31:00 +04:00
|
|
|
node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
|
2011-05-02 21:20:29 +04:00
|
|
|
node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
2010-09-14 21:31:00 +04:00
|
|
|
node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
node--debug: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
parents:
|
|
|
|
parents: -1:000000000000
|
2011-05-02 21:20:29 +04:00
|
|
|
parents: 5:13207e5a10d9 4:bbe44766e73d
|
2010-09-14 21:31:00 +04:00
|
|
|
parents: 3:10e46f2dcbf4
|
|
|
|
parents:
|
|
|
|
parents:
|
|
|
|
parents:
|
|
|
|
parents:
|
|
|
|
parents:
|
|
|
|
parents--verbose:
|
|
|
|
parents--verbose: -1:000000000000
|
2011-05-02 21:20:29 +04:00
|
|
|
parents--verbose: 5:13207e5a10d9 4:bbe44766e73d
|
2010-09-14 21:31:00 +04:00
|
|
|
parents--verbose: 3:10e46f2dcbf4
|
|
|
|
parents--verbose:
|
|
|
|
parents--verbose:
|
|
|
|
parents--verbose:
|
|
|
|
parents--verbose:
|
|
|
|
parents--verbose:
|
|
|
|
parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
|
2011-05-02 21:20:29 +04:00
|
|
|
parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
2010-09-14 21:31:00 +04:00
|
|
|
parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
|
|
|
|
parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
|
|
|
|
rev: 8
|
|
|
|
rev: 7
|
|
|
|
rev: 6
|
|
|
|
rev: 5
|
|
|
|
rev: 4
|
|
|
|
rev: 3
|
|
|
|
rev: 2
|
|
|
|
rev: 1
|
|
|
|
rev: 0
|
|
|
|
rev--verbose: 8
|
|
|
|
rev--verbose: 7
|
|
|
|
rev--verbose: 6
|
|
|
|
rev--verbose: 5
|
|
|
|
rev--verbose: 4
|
|
|
|
rev--verbose: 3
|
|
|
|
rev--verbose: 2
|
|
|
|
rev--verbose: 1
|
|
|
|
rev--verbose: 0
|
|
|
|
rev--debug: 8
|
|
|
|
rev--debug: 7
|
|
|
|
rev--debug: 6
|
|
|
|
rev--debug: 5
|
|
|
|
rev--debug: 4
|
|
|
|
rev--debug: 3
|
|
|
|
rev--debug: 2
|
|
|
|
rev--debug: 1
|
|
|
|
rev--debug: 0
|
|
|
|
tags: tip
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags:
|
|
|
|
tags--verbose: tip
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--verbose:
|
|
|
|
tags--debug: tip
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
tags--debug:
|
|
|
|
diffstat: 3: +2/-1
|
|
|
|
diffstat: 1: +1/-0
|
|
|
|
diffstat: 0: +0/-0
|
|
|
|
diffstat: 1: +1/-0
|
|
|
|
diffstat: 0: +0/-0
|
|
|
|
diffstat: 1: +1/-0
|
|
|
|
diffstat: 1: +4/-0
|
|
|
|
diffstat: 1: +2/-0
|
|
|
|
diffstat: 1: +1/-0
|
|
|
|
diffstat--verbose: 3: +2/-1
|
|
|
|
diffstat--verbose: 1: +1/-0
|
|
|
|
diffstat--verbose: 0: +0/-0
|
|
|
|
diffstat--verbose: 1: +1/-0
|
|
|
|
diffstat--verbose: 0: +0/-0
|
|
|
|
diffstat--verbose: 1: +1/-0
|
|
|
|
diffstat--verbose: 1: +4/-0
|
|
|
|
diffstat--verbose: 1: +2/-0
|
|
|
|
diffstat--verbose: 1: +1/-0
|
|
|
|
diffstat--debug: 3: +2/-1
|
|
|
|
diffstat--debug: 1: +1/-0
|
|
|
|
diffstat--debug: 0: +0/-0
|
|
|
|
diffstat--debug: 1: +1/-0
|
|
|
|
diffstat--debug: 0: +0/-0
|
|
|
|
diffstat--debug: 1: +1/-0
|
|
|
|
diffstat--debug: 1: +4/-0
|
|
|
|
diffstat--debug: 1: +2/-0
|
|
|
|
diffstat--debug: 1: +1/-0
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=foo
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=foo
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--verbose: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=foo
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
|
|
|
extras--debug: branch=default
|
2012-07-10 19:43:32 +04:00
|
|
|
p1rev: 7
|
|
|
|
p1rev: -1
|
|
|
|
p1rev: 5
|
|
|
|
p1rev: 3
|
|
|
|
p1rev: 3
|
|
|
|
p1rev: 2
|
|
|
|
p1rev: 1
|
|
|
|
p1rev: 0
|
|
|
|
p1rev: -1
|
|
|
|
p1rev--verbose: 7
|
|
|
|
p1rev--verbose: -1
|
|
|
|
p1rev--verbose: 5
|
|
|
|
p1rev--verbose: 3
|
|
|
|
p1rev--verbose: 3
|
|
|
|
p1rev--verbose: 2
|
|
|
|
p1rev--verbose: 1
|
|
|
|
p1rev--verbose: 0
|
|
|
|
p1rev--verbose: -1
|
|
|
|
p1rev--debug: 7
|
|
|
|
p1rev--debug: -1
|
|
|
|
p1rev--debug: 5
|
|
|
|
p1rev--debug: 3
|
|
|
|
p1rev--debug: 3
|
|
|
|
p1rev--debug: 2
|
|
|
|
p1rev--debug: 1
|
|
|
|
p1rev--debug: 0
|
|
|
|
p1rev--debug: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: 4
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: 4
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--verbose: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: 4
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p2rev--debug: -1
|
|
|
|
p1node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
|
|
|
p1node: 0000000000000000000000000000000000000000
|
|
|
|
p1node: 13207e5a10d9fd28ec424934298e176197f2c67f
|
|
|
|
p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
p1node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
p1node: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
p1node: 0000000000000000000000000000000000000000
|
|
|
|
p1node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
|
|
|
p1node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p1node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
|
|
|
|
p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node--verbose: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
p1node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
p1node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
p1node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p1node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
|
|
|
|
p1node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p1node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
|
|
|
|
p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
|
|
|
|
p1node--debug: 97054abb4ab824450e9164180baf491ae0078465
|
|
|
|
p1node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
|
|
|
|
p1node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
p1node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--verbose: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
|
|
|
p2node--debug: 0000000000000000000000000000000000000000
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
Filters work:
|
|
|
|
|
|
|
|
$ hg log --template '{author|domain}\n'
|
|
|
|
|
|
|
|
hostname
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
place
|
|
|
|
place
|
|
|
|
hostname
|
|
|
|
|
|
|
|
$ hg log --template '{author|person}\n'
|
|
|
|
test
|
|
|
|
User Name
|
|
|
|
person
|
|
|
|
person
|
|
|
|
person
|
|
|
|
person
|
|
|
|
other
|
|
|
|
A. N. Other
|
|
|
|
User Name
|
|
|
|
|
|
|
|
$ hg log --template '{author|user}\n'
|
|
|
|
test
|
|
|
|
user
|
|
|
|
person
|
|
|
|
person
|
|
|
|
person
|
|
|
|
person
|
|
|
|
other
|
|
|
|
other
|
|
|
|
user
|
|
|
|
|
|
|
|
$ hg log --template '{date|date}\n'
|
|
|
|
Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
Mon Jan 12 13:46:40 1970 +0000
|
|
|
|
Sun Jan 18 08:40:01 1970 +0000
|
|
|
|
Sun Jan 18 08:40:00 1970 +0000
|
|
|
|
Sat Jan 17 04:53:20 1970 +0000
|
|
|
|
Fri Jan 16 01:06:40 1970 +0000
|
|
|
|
Wed Jan 14 21:20:00 1970 +0000
|
|
|
|
Tue Jan 13 17:33:20 1970 +0000
|
|
|
|
Mon Jan 12 13:46:40 1970 +0000
|
|
|
|
|
|
|
|
$ hg log --template '{date|isodate}\n'
|
|
|
|
2020-01-01 10:01 +0000
|
|
|
|
1970-01-12 13:46 +0000
|
|
|
|
1970-01-18 08:40 +0000
|
|
|
|
1970-01-18 08:40 +0000
|
|
|
|
1970-01-17 04:53 +0000
|
|
|
|
1970-01-16 01:06 +0000
|
|
|
|
1970-01-14 21:20 +0000
|
|
|
|
1970-01-13 17:33 +0000
|
|
|
|
1970-01-12 13:46 +0000
|
|
|
|
|
|
|
|
$ hg log --template '{date|isodatesec}\n'
|
|
|
|
2020-01-01 10:01:00 +0000
|
|
|
|
1970-01-12 13:46:40 +0000
|
|
|
|
1970-01-18 08:40:01 +0000
|
|
|
|
1970-01-18 08:40:00 +0000
|
|
|
|
1970-01-17 04:53:20 +0000
|
|
|
|
1970-01-16 01:06:40 +0000
|
|
|
|
1970-01-14 21:20:00 +0000
|
|
|
|
1970-01-13 17:33:20 +0000
|
|
|
|
1970-01-12 13:46:40 +0000
|
|
|
|
|
|
|
|
$ hg log --template '{date|rfc822date}\n'
|
|
|
|
Wed, 01 Jan 2020 10:01:00 +0000
|
|
|
|
Mon, 12 Jan 1970 13:46:40 +0000
|
|
|
|
Sun, 18 Jan 1970 08:40:01 +0000
|
|
|
|
Sun, 18 Jan 1970 08:40:00 +0000
|
|
|
|
Sat, 17 Jan 1970 04:53:20 +0000
|
|
|
|
Fri, 16 Jan 1970 01:06:40 +0000
|
|
|
|
Wed, 14 Jan 1970 21:20:00 +0000
|
|
|
|
Tue, 13 Jan 1970 17:33:20 +0000
|
|
|
|
Mon, 12 Jan 1970 13:46:40 +0000
|
|
|
|
|
|
|
|
$ hg log --template '{desc|firstline}\n'
|
|
|
|
third
|
|
|
|
second
|
|
|
|
merge
|
|
|
|
new head
|
|
|
|
new branch
|
|
|
|
no user, no domain
|
|
|
|
no person
|
|
|
|
other 1
|
|
|
|
line 1
|
|
|
|
|
|
|
|
$ hg log --template '{node|short}\n'
|
|
|
|
95c24699272e
|
|
|
|
29114dbae42b
|
2011-05-02 21:20:29 +04:00
|
|
|
d41e714fe50d
|
2010-09-14 21:31:00 +04:00
|
|
|
13207e5a10d9
|
2011-05-02 21:20:29 +04:00
|
|
|
bbe44766e73d
|
2010-09-14 21:31:00 +04:00
|
|
|
10e46f2dcbf4
|
|
|
|
97054abb4ab8
|
|
|
|
b608e9d1a3f0
|
|
|
|
1e4e1b8f71e0
|
|
|
|
|
|
|
|
$ hg log --template '<changeset author="{author|xmlescape}"/>\n'
|
|
|
|
<changeset author="test"/>
|
|
|
|
<changeset author="User Name <user@hostname>"/>
|
|
|
|
<changeset author="person"/>
|
|
|
|
<changeset author="person"/>
|
|
|
|
<changeset author="person"/>
|
|
|
|
<changeset author="person"/>
|
|
|
|
<changeset author="other@place"/>
|
|
|
|
<changeset author="A. N. Other <other@place>"/>
|
|
|
|
<changeset author="User Name <user@hostname>"/>
|
|
|
|
|
|
|
|
$ hg log --template '{rev}: {children}\n'
|
|
|
|
8:
|
|
|
|
7: 8:95c24699272e
|
|
|
|
6:
|
2011-05-02 21:20:29 +04:00
|
|
|
5: 6:d41e714fe50d
|
|
|
|
4: 6:d41e714fe50d
|
|
|
|
3: 4:bbe44766e73d 5:13207e5a10d9
|
2010-09-14 21:31:00 +04:00
|
|
|
2: 3:10e46f2dcbf4
|
|
|
|
1: 2:97054abb4ab8
|
|
|
|
0: 1:b608e9d1a3f0
|
|
|
|
|
|
|
|
Formatnode filter works:
|
|
|
|
|
|
|
|
$ hg -q log -r 0 --template '{node|formatnode}\n'
|
|
|
|
1e4e1b8f71e0
|
|
|
|
|
|
|
|
$ hg log -r 0 --template '{node|formatnode}\n'
|
|
|
|
1e4e1b8f71e0
|
|
|
|
|
|
|
|
$ hg -v log -r 0 --template '{node|formatnode}\n'
|
|
|
|
1e4e1b8f71e0
|
|
|
|
|
|
|
|
$ hg --debug log -r 0 --template '{node|formatnode}\n'
|
|
|
|
1e4e1b8f71e05681d422154f5421e385fec3454f
|
|
|
|
|
2012-01-11 18:18:20 +04:00
|
|
|
Age filter:
|
|
|
|
|
|
|
|
$ hg log --template '{date|age}\n' > /dev/null || exit 1
|
|
|
|
|
2013-01-02 16:59:07 +04:00
|
|
|
>>> from datetime import datetime, timedelta
|
2012-01-11 18:18:20 +04:00
|
|
|
>>> fp = open('a', 'w')
|
2013-01-02 16:59:07 +04:00
|
|
|
>>> n = datetime.now() + timedelta(366 * 7)
|
|
|
|
>>> fp.write('%d-%d-%d 00:00' % (n.year, n.month, n.day))
|
2012-01-11 18:18:20 +04:00
|
|
|
>>> fp.close()
|
|
|
|
$ hg add a
|
|
|
|
$ hg commit -m future -d "`cat a`"
|
|
|
|
|
2012-08-08 20:10:16 +04:00
|
|
|
$ hg log -l1 --template '{date|age}\n'
|
2012-01-11 18:18:20 +04:00
|
|
|
7 years from now
|
|
|
|
|
templater: add count template filter, plus tests
Previously there was no way of telling how much children or bookmarks or tags a
certain changeset has in a template. It was possible to tell if a changeset has
either 0 or not 0 bookmarks, but not to tell if it has 1 or 2 of them, for
example.
This filter, simply named count, makes it possible to count the number of items
in a list or the length of a string (or, anything that python's len can count).
E.g.: {children|count}, {bookmarks|count}, {file_adds|count}.
Testing the filter on node hash and shortened node hash is chosen because they
both have defined length.
As for lists of strings - children, tags and file_adds are used, because they
provide some variety and also prove that what's counted is the number of string
items in the list, and not the list stringified (they are lists of non-empty,
multi-character strings).
Additionally, revset template function is used for testing the filter, since
the combination is very flexible and will possibly be used together a lot.
(The previous version of this patch had an incorrect email subject and was
apparently lost - patchwork says the patch has been accepted, but it's not so.
The changes between that and this patch are minimal: now the filter does not
disturb the alphabetical order of function definitions and dict keys.)
2014-09-09 17:14:13 +04:00
|
|
|
Count filter:
|
|
|
|
|
|
|
|
$ hg log -l1 --template '{node|count} {node|short|count}\n'
|
|
|
|
40 12
|
|
|
|
|
|
|
|
$ hg log -l1 --template '{revset("null^")|count} {revset(".")|count} {revset("0::3")|count}\n'
|
|
|
|
0 1 4
|
|
|
|
|
|
|
|
$ hg log -G --template '{rev}: children: {children|count}, \
|
|
|
|
> tags: {tags|count}, file_adds: {file_adds|count}, \
|
|
|
|
> ancestors: {revset("ancestors(%s)", rev)|count}'
|
|
|
|
@ 9: children: 0, tags: 1, file_adds: 1, ancestors: 3
|
|
|
|
|
|
|
|
|
o 8: children: 1, tags: 0, file_adds: 2, ancestors: 2
|
|
|
|
|
|
|
|
|
o 7: children: 1, tags: 0, file_adds: 1, ancestors: 1
|
|
|
|
|
|
|
|
o 6: children: 0, tags: 0, file_adds: 0, ancestors: 7
|
|
|
|
|\
|
|
|
|
| o 5: children: 1, tags: 0, file_adds: 1, ancestors: 5
|
|
|
|
| |
|
|
|
|
o | 4: children: 1, tags: 0, file_adds: 0, ancestors: 5
|
|
|
|
|/
|
|
|
|
o 3: children: 2, tags: 0, file_adds: 0, ancestors: 4
|
|
|
|
|
|
|
|
|
o 2: children: 1, tags: 0, file_adds: 1, ancestors: 3
|
|
|
|
|
|
|
|
|
o 1: children: 1, tags: 0, file_adds: 1, ancestors: 2
|
|
|
|
|
|
|
|
|
o 0: children: 1, tags: 0, file_adds: 1, ancestors: 1
|
|
|
|
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
Error on syntax:
|
|
|
|
|
|
|
|
$ echo 'x = "f' >> t
|
|
|
|
$ hg log
|
|
|
|
abort: t:3: unmatched quotes
|
2010-09-17 02:51:32 +04:00
|
|
|
[255]
|
2010-09-14 21:31:00 +04:00
|
|
|
|
2012-08-18 02:12:01 +04:00
|
|
|
Behind the scenes, this will throw TypeError
|
|
|
|
|
|
|
|
$ hg log -l 3 --template '{date|obfuscate}\n'
|
2012-08-24 23:52:45 +04:00
|
|
|
abort: template filter 'obfuscate' is not compatible with keyword 'date'
|
2012-08-18 02:12:01 +04:00
|
|
|
[255]
|
|
|
|
|
|
|
|
Behind the scenes, this will throw a ValueError
|
|
|
|
|
|
|
|
$ hg log -l 3 --template 'line: {desc|shortdate}\n'
|
2012-08-24 23:52:45 +04:00
|
|
|
abort: template filter 'shortdate' is not compatible with keyword 'desc'
|
2012-08-18 02:12:01 +04:00
|
|
|
[255]
|
|
|
|
|
|
|
|
Behind the scenes, this will throw AttributeError
|
|
|
|
|
|
|
|
$ hg log -l 3 --template 'line: {date|escape}\n'
|
2012-08-24 23:52:45 +04:00
|
|
|
abort: template filter 'escape' is not compatible with keyword 'date'
|
2012-08-18 02:12:01 +04:00
|
|
|
[255]
|
|
|
|
|
|
|
|
Behind the scenes, this will throw ValueError
|
|
|
|
|
|
|
|
$ hg tip --template '{author|email|date}\n'
|
2012-08-24 23:52:45 +04:00
|
|
|
abort: template filter 'datefilter' is not compatible with keyword 'author'
|
2012-08-18 02:12:01 +04:00
|
|
|
[255]
|
|
|
|
|
2014-03-28 02:21:27 +04:00
|
|
|
Thrown an error if a template function doesn't exist
|
|
|
|
|
|
|
|
$ hg tip --template '{foo()}\n'
|
|
|
|
hg: parse error: unknown function 'foo'
|
|
|
|
[255]
|
|
|
|
|
2014-08-28 17:45:36 +04:00
|
|
|
Test diff function:
|
|
|
|
|
|
|
|
$ hg diff -c 8
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e fourth
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/fourth Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+second
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e second
|
|
|
|
--- a/second Mon Jan 12 13:46:40 1970 +0000
|
|
|
|
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
@@ -1,1 +0,0 @@
|
|
|
|
-second
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e third
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/third Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+third
|
|
|
|
|
|
|
|
$ hg log -r 8 -T "{diff()}"
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e fourth
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/fourth Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+second
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e second
|
|
|
|
--- a/second Mon Jan 12 13:46:40 1970 +0000
|
|
|
|
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
@@ -1,1 +0,0 @@
|
|
|
|
-second
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e third
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/third Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+third
|
|
|
|
|
|
|
|
$ hg log -r 8 -T "{diff('glob:f*')}"
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e fourth
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/fourth Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+second
|
|
|
|
|
|
|
|
$ hg log -r 8 -T "{diff('', 'glob:f*')}"
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e second
|
|
|
|
--- a/second Mon Jan 12 13:46:40 1970 +0000
|
|
|
|
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
@@ -1,1 +0,0 @@
|
|
|
|
-second
|
|
|
|
diff -r 29114dbae42b -r 95c24699272e third
|
|
|
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
+++ b/third Wed Jan 01 10:01:00 2020 +0000
|
|
|
|
@@ -0,0 +1,1 @@
|
|
|
|
+third
|
|
|
|
|
2010-09-14 21:31:00 +04:00
|
|
|
$ cd ..
|
|
|
|
|
|
|
|
|
|
|
|
latesttag:
|
|
|
|
|
|
|
|
$ hg init latesttag
|
|
|
|
$ cd latesttag
|
|
|
|
|
|
|
|
$ echo a > file
|
|
|
|
$ hg ci -Am a -d '0 0'
|
|
|
|
adding file
|
|
|
|
|
|
|
|
$ echo b >> file
|
|
|
|
$ hg ci -m b -d '1 0'
|
|
|
|
|
|
|
|
$ echo c >> head1
|
|
|
|
$ hg ci -Am h1c -d '2 0'
|
|
|
|
adding head1
|
|
|
|
|
|
|
|
$ hg update -q 1
|
|
|
|
$ echo d >> head2
|
|
|
|
$ hg ci -Am h2d -d '3 0'
|
|
|
|
adding head2
|
|
|
|
created new head
|
|
|
|
|
|
|
|
$ echo e >> head2
|
|
|
|
$ hg ci -m h2e -d '4 0'
|
|
|
|
|
|
|
|
$ hg merge -q
|
2013-11-08 01:24:23 +04:00
|
|
|
$ hg ci -m merge -d '5 -3600'
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
No tag set:
|
|
|
|
|
|
|
|
$ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
|
|
|
|
5: null+5
|
|
|
|
4: null+4
|
|
|
|
3: null+3
|
|
|
|
2: null+3
|
|
|
|
1: null+2
|
|
|
|
0: null+1
|
|
|
|
|
2014-04-13 21:01:00 +04:00
|
|
|
One common tag: longest path wins:
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
$ hg tag -r 1 -m t1 -d '6 0' t1
|
|
|
|
$ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
|
|
|
|
6: t1+4
|
|
|
|
5: t1+3
|
|
|
|
4: t1+2
|
|
|
|
3: t1+1
|
|
|
|
2: t1+1
|
|
|
|
1: t1+0
|
|
|
|
0: null+1
|
|
|
|
|
|
|
|
One ancestor tag: more recent wins:
|
|
|
|
|
|
|
|
$ hg tag -r 2 -m t2 -d '7 0' t2
|
|
|
|
$ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
|
|
|
|
7: t2+3
|
|
|
|
6: t2+2
|
|
|
|
5: t2+1
|
|
|
|
4: t1+2
|
|
|
|
3: t1+1
|
|
|
|
2: t2+0
|
|
|
|
1: t1+0
|
|
|
|
0: null+1
|
|
|
|
|
|
|
|
Two branch tags: more recent wins:
|
|
|
|
|
|
|
|
$ hg tag -r 3 -m t3 -d '8 0' t3
|
|
|
|
$ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
|
|
|
|
8: t3+5
|
|
|
|
7: t3+4
|
|
|
|
6: t3+3
|
|
|
|
5: t3+2
|
|
|
|
4: t3+1
|
|
|
|
3: t3+0
|
|
|
|
2: t2+0
|
|
|
|
1: t1+0
|
|
|
|
0: null+1
|
|
|
|
|
|
|
|
Merged tag overrides:
|
|
|
|
|
|
|
|
$ hg tag -r 5 -m t5 -d '9 0' t5
|
|
|
|
$ hg tag -r 3 -m at3 -d '10 0' at3
|
|
|
|
$ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
|
|
|
|
10: t5+5
|
|
|
|
9: t5+4
|
|
|
|
8: t5+3
|
|
|
|
7: t5+2
|
|
|
|
6: t5+1
|
|
|
|
5: t5+0
|
|
|
|
4: at3:t3+1
|
|
|
|
3: at3:t3+0
|
|
|
|
2: t2+0
|
|
|
|
1: t1+0
|
|
|
|
0: null+1
|
|
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
|
|
|
2010-09-24 12:13:49 +04:00
|
|
|
Style path expansion: issue1948 - ui.style option doesn't work on OSX
|
|
|
|
if it is a relative path
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
$ mkdir -p home/styles
|
|
|
|
|
|
|
|
$ cat > home/styles/teststyle <<EOF
|
|
|
|
> changeset = 'test {rev}:{node|short}\n'
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ HOME=`pwd`/home; export HOME
|
|
|
|
|
|
|
|
$ cat > latesttag/.hg/hgrc <<EOF
|
|
|
|
> [ui]
|
|
|
|
> style = ~/styles/teststyle
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg -R latesttag tip
|
2013-11-08 01:24:23 +04:00
|
|
|
test 10:9b4a630e5f5f
|
2010-09-14 21:31:00 +04:00
|
|
|
|
|
|
|
Test recursive showlist template (issue1989):
|
|
|
|
|
|
|
|
$ cat > style1989 <<EOF
|
|
|
|
> changeset = '{file_mods}{manifest}{extras}'
|
|
|
|
> file_mod = 'M|{author|person}\n'
|
|
|
|
> manifest = '{rev},{author}\n'
|
|
|
|
> extra = '{key}: {author}\n'
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg -R latesttag log -r tip --style=style1989
|
|
|
|
M|test
|
|
|
|
10,test
|
|
|
|
branch: test
|
|
|
|
|
2012-09-22 03:54:00 +04:00
|
|
|
Test new-style inline templating:
|
|
|
|
|
|
|
|
$ hg log -R latesttag -r tip --template 'modified files: {file_mods % " {file}\n"}\n'
|
|
|
|
modified files: .hgtags
|
|
|
|
|
2013-04-11 04:27:49 +04:00
|
|
|
Test the sub function of templating for expansion:
|
|
|
|
|
|
|
|
$ hg log -R latesttag -r 10 --template '{sub("[0-9]", "x", "{rev}")}\n'
|
|
|
|
xx
|
2013-06-25 21:02:22 +04:00
|
|
|
|
|
|
|
Test the strip function with chars specified:
|
|
|
|
|
|
|
|
$ hg log -R latesttag --template '{desc}\n'
|
|
|
|
at3
|
|
|
|
t5
|
|
|
|
t3
|
|
|
|
t2
|
|
|
|
t1
|
|
|
|
merge
|
|
|
|
h2e
|
|
|
|
h2d
|
|
|
|
h1c
|
|
|
|
b
|
|
|
|
a
|
|
|
|
|
|
|
|
$ hg log -R latesttag --template '{strip(desc, "te")}\n'
|
|
|
|
at3
|
|
|
|
5
|
|
|
|
3
|
|
|
|
2
|
|
|
|
1
|
|
|
|
merg
|
|
|
|
h2
|
|
|
|
h2d
|
|
|
|
h1c
|
|
|
|
b
|
|
|
|
a
|
2013-11-08 01:24:23 +04:00
|
|
|
|
|
|
|
Test date format:
|
|
|
|
|
|
|
|
$ hg log -R latesttag --template 'date: {date(date, "%y %m %d %S %z")}\n'
|
|
|
|
date: 70 01 01 10 +0000
|
|
|
|
date: 70 01 01 09 +0000
|
|
|
|
date: 70 01 01 08 +0000
|
|
|
|
date: 70 01 01 07 +0000
|
|
|
|
date: 70 01 01 06 +0000
|
|
|
|
date: 70 01 01 05 +0100
|
|
|
|
date: 70 01 01 04 +0000
|
|
|
|
date: 70 01 01 03 +0000
|
|
|
|
date: 70 01 01 02 +0000
|
|
|
|
date: 70 01 01 01 +0000
|
|
|
|
date: 70 01 01 00 +0000
|
2013-11-18 23:02:26 +04:00
|
|
|
|
2013-11-19 20:29:56 +04:00
|
|
|
Test string escaping:
|
2013-11-22 00:47:03 +04:00
|
|
|
|
2013-11-18 23:02:26 +04:00
|
|
|
$ hg log -R latesttag -r 0 --template '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
|
|
|
|
>
|
|
|
|
<>\n<[>
|
|
|
|
<>\n<]>
|
|
|
|
<>\n<
|
2013-11-19 00:37:09 +04:00
|
|
|
|
templater: make strings in template expressions be "string-escape"-ed correctly
Changeset 83ff877959a6 (released with 2.8.1) fixed "recursively
evaluate string literals as templates" problem (issue4102) by moving
the location of "string-escape"-ing from "tokenizer()" to
"compiletemplate()".
But some parts in template expressions below are not processed by
"compiletemplate()", and it may cause unexpected result.
- 'expr' of 'if(expr, then, else)'
- 'expr's of 'ifeq(expr, expr, then, else)'
- 'sep' of 'join(list, sep)'
- 'text' and 'style' of 'rstdoc(text, style)'
- 'text' and 'chars' of 'strip(text, chars)'
- 'pat' and 'repl' of 'sub(pat, repl, expr)'
For example, '\n' of "{join(extras, '\n')}" is not "string-escape"-ed
and treated as a literal '\n'. This breaks "Display the contents of
the 'extra' field, one per line" example in "hg help templates".
Just "string-escape"-ing on each parts above may not work correctly,
because inside expression of nested ones already applies
"string-escape" on string literals. For example:
- "{join(files, '\n')}" doesn't return "string-escape"-ed string, but
- "{join(files, if(branch, '\n', '\n'))}" does
To fix this problem, this patch does:
- introduce "rawstring" token and "runrawstring" method to handle
strings not to be "string-escape"-ed correctly, and
- make "runstring" method return "string-escape"-ed string, and
delay "string-escape"-ing until evaluation
This patch invokes "compiletemplate()" with "strtoken=exp[0]" in
"gettemplate()", because "exp[1]" is not yet evaluated. This code path
is tested via mapping ("expr % '{template}'").
In the other hand, this patch invokes it with "strtoken='rawstring'"
in "_evalifliteral()", because "t" is the result of "arg" evaluation
and it should be "string-escape"-ed if "arg" is "string" expression.
This patch doesn't test "string-escape"-ing on 'expr' of 'if(expr,
then, else)', because it doesn't affect the result.
2014-03-09 20:01:43 +04:00
|
|
|
"string-escape"-ed "\x5c\x786e" becomes r"\x6e" (once) or r"n" (twice)
|
|
|
|
|
|
|
|
$ hg log -R a -r 0 --template '{if("1", "\x5c\x786e", "NG")}\n'
|
|
|
|
\x6e
|
|
|
|
$ hg log -R a -r 0 --template '{if("1", r"\x5c\x786e", "NG")}\n'
|
|
|
|
\x5c\x786e
|
|
|
|
$ hg log -R a -r 0 --template '{if("", "NG", "\x5c\x786e")}\n'
|
|
|
|
\x6e
|
|
|
|
$ hg log -R a -r 0 --template '{if("", "NG", r"\x5c\x786e")}\n'
|
|
|
|
\x5c\x786e
|
|
|
|
|
|
|
|
$ hg log -R a -r 2 --template '{ifeq("no perso\x6e", desc, "\x5c\x786e", "NG")}\n'
|
|
|
|
\x6e
|
|
|
|
$ hg log -R a -r 2 --template '{ifeq(r"no perso\x6e", desc, "NG", r"\x5c\x786e")}\n'
|
|
|
|
\x5c\x786e
|
|
|
|
$ hg log -R a -r 2 --template '{ifeq(desc, "no perso\x6e", "\x5c\x786e", "NG")}\n'
|
|
|
|
\x6e
|
|
|
|
$ hg log -R a -r 2 --template '{ifeq(desc, r"no perso\x6e", "NG", r"\x5c\x786e")}\n'
|
|
|
|
\x5c\x786e
|
|
|
|
|
|
|
|
$ hg log -R a -r 8 --template '{join(files, "\n")}\n'
|
|
|
|
fourth
|
|
|
|
second
|
|
|
|
third
|
|
|
|
$ hg log -R a -r 8 --template '{join(files, r"\n")}\n'
|
|
|
|
fourth\nsecond\nthird
|
|
|
|
|
|
|
|
$ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", "htm\x6c")}'
|
|
|
|
<p>
|
|
|
|
1st
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
2nd
|
|
|
|
</p>
|
|
|
|
$ hg log -R a -r 2 --template '{rstdoc(r"1st\n\n2nd", "html")}'
|
|
|
|
<p>
|
|
|
|
1st\n\n2nd
|
|
|
|
</p>
|
|
|
|
$ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", r"htm\x6c")}'
|
|
|
|
1st
|
|
|
|
|
|
|
|
2nd
|
|
|
|
|
|
|
|
$ hg log -R a -r 2 --template '{strip(desc, "\x6e")}\n'
|
|
|
|
o perso
|
|
|
|
$ hg log -R a -r 2 --template '{strip(desc, r"\x6e")}\n'
|
|
|
|
no person
|
|
|
|
$ hg log -R a -r 2 --template '{strip("no perso\x6e", "\x6e")}\n'
|
|
|
|
o perso
|
|
|
|
$ hg log -R a -r 2 --template '{strip(r"no perso\x6e", r"\x6e")}\n'
|
|
|
|
no perso
|
|
|
|
|
|
|
|
$ hg log -R a -r 2 --template '{sub("\\x6e", "\x2d", desc)}\n'
|
|
|
|
-o perso-
|
|
|
|
$ hg log -R a -r 2 --template '{sub(r"\\x6e", "-", desc)}\n'
|
|
|
|
no person
|
|
|
|
$ hg log -R a -r 2 --template '{sub("n", r"\x2d", desc)}\n'
|
|
|
|
\x2do perso\x2d
|
|
|
|
$ hg log -R a -r 2 --template '{sub("n", "\x2d", "no perso\x6e")}\n'
|
|
|
|
-o perso-
|
|
|
|
$ hg log -R a -r 2 --template '{sub("n", r"\x2d", r"no perso\x6e")}\n'
|
|
|
|
\x2do perso\x6e
|
|
|
|
|
|
|
|
$ hg log -R a -r 8 --template '{files % "{file}\n"}'
|
|
|
|
fourth
|
|
|
|
second
|
|
|
|
third
|
|
|
|
$ hg log -R a -r 8 --template '{files % r"{file}\n"}\n'
|
|
|
|
fourth\nsecond\nthird\n
|
|
|
|
|
2014-04-13 21:01:00 +04:00
|
|
|
Test string escaping in nested expression:
|
templater: make strings in template expressions be "string-escape"-ed correctly
Changeset 83ff877959a6 (released with 2.8.1) fixed "recursively
evaluate string literals as templates" problem (issue4102) by moving
the location of "string-escape"-ing from "tokenizer()" to
"compiletemplate()".
But some parts in template expressions below are not processed by
"compiletemplate()", and it may cause unexpected result.
- 'expr' of 'if(expr, then, else)'
- 'expr's of 'ifeq(expr, expr, then, else)'
- 'sep' of 'join(list, sep)'
- 'text' and 'style' of 'rstdoc(text, style)'
- 'text' and 'chars' of 'strip(text, chars)'
- 'pat' and 'repl' of 'sub(pat, repl, expr)'
For example, '\n' of "{join(extras, '\n')}" is not "string-escape"-ed
and treated as a literal '\n'. This breaks "Display the contents of
the 'extra' field, one per line" example in "hg help templates".
Just "string-escape"-ing on each parts above may not work correctly,
because inside expression of nested ones already applies
"string-escape" on string literals. For example:
- "{join(files, '\n')}" doesn't return "string-escape"-ed string, but
- "{join(files, if(branch, '\n', '\n'))}" does
To fix this problem, this patch does:
- introduce "rawstring" token and "runrawstring" method to handle
strings not to be "string-escape"-ed correctly, and
- make "runstring" method return "string-escape"-ed string, and
delay "string-escape"-ing until evaluation
This patch invokes "compiletemplate()" with "strtoken=exp[0]" in
"gettemplate()", because "exp[1]" is not yet evaluated. This code path
is tested via mapping ("expr % '{template}'").
In the other hand, this patch invokes it with "strtoken='rawstring'"
in "_evalifliteral()", because "t" is the result of "arg" evaluation
and it should be "string-escape"-ed if "arg" is "string" expression.
This patch doesn't test "string-escape"-ing on 'expr' of 'if(expr,
then, else)', because it doesn't affect the result.
2014-03-09 20:01:43 +04:00
|
|
|
|
|
|
|
$ hg log -R a -r 8 --template '{ifeq(r"\x6e", if("1", "\x5c\x786e"), join(files, "\x5c\x786e"))}\n'
|
|
|
|
fourth\x6esecond\x6ethird
|
|
|
|
$ hg log -R a -r 8 --template '{ifeq(if("1", r"\x6e"), "\x5c\x786e", join(files, "\x5c\x786e"))}\n'
|
|
|
|
fourth\x6esecond\x6ethird
|
|
|
|
|
|
|
|
$ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", "\x5c\x786e"))}\n'
|
|
|
|
fourth\x6esecond\x6ethird
|
|
|
|
$ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", r"\x5c\x786e"))}\n'
|
|
|
|
fourth\x5c\x786esecond\x5c\x786ethird
|
|
|
|
|
|
|
|
$ hg log -R a -r 3:4 --template '{rev}:{sub(if("1", "\x6e"), ifeq(branch, "foo", r"\x5c\x786e", "\x5c\x786e"), desc)}\n'
|
|
|
|
3:\x6eo user, \x6eo domai\x6e
|
|
|
|
4:\x5c\x786eew bra\x5c\x786ech
|
|
|
|
|
2013-11-19 00:37:09 +04:00
|
|
|
Test recursive evaluation:
|
|
|
|
|
|
|
|
$ hg init r
|
|
|
|
$ cd r
|
|
|
|
$ echo a > a
|
|
|
|
$ hg ci -Am '{rev}'
|
|
|
|
adding a
|
|
|
|
$ hg log -r 0 --template '{if(rev, desc)}\n'
|
|
|
|
{rev}
|
|
|
|
$ hg log -r 0 --template '{if(rev, "{author} {rev}")}\n'
|
|
|
|
test 0
|
2013-11-21 21:30:52 +04:00
|
|
|
|
2014-03-09 20:01:42 +04:00
|
|
|
$ hg branch -q 'text.{rev}'
|
|
|
|
$ echo aa >> aa
|
|
|
|
$ hg ci -u '{node|short}' -m 'desc to be wrapped desc to be wrapped'
|
|
|
|
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log -l1 --template '{fill(desc, "20", author, branch)}'
|
2014-03-09 20:01:42 +04:00
|
|
|
{node|short}desc to
|
|
|
|
text.{rev}be wrapped
|
|
|
|
text.{rev}desc to be
|
|
|
|
text.{rev}wrapped (no-eol)
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log -l1 --template '{fill(desc, "20", "{node|short}:", "text.{rev}:")}'
|
2014-03-09 20:01:42 +04:00
|
|
|
bcc7ff960b8e:desc to
|
|
|
|
text.1:be wrapped
|
|
|
|
text.1:desc to be
|
|
|
|
text.1:wrapped (no-eol)
|
|
|
|
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log -l 1 --template '{sub(r"[0-9]", "-", author)}'
|
2014-03-09 20:01:42 +04:00
|
|
|
{node|short} (no-eol)
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log -l 1 --template '{sub(r"[0-9]", "-", "{node|short}")}'
|
2014-03-09 20:01:42 +04:00
|
|
|
bcc-ff---b-e (no-eol)
|
|
|
|
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
|
|
> [extensions]
|
|
|
|
> color=
|
|
|
|
> [color]
|
|
|
|
> mode=ansi
|
|
|
|
> text.{rev} = red
|
|
|
|
> text.1 = green
|
|
|
|
> EOF
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log --color=always -l 1 --template '{label(branch, "text\n")}'
|
2014-03-09 20:01:42 +04:00
|
|
|
\x1b[0;31mtext\x1b[0m (esc)
|
2014-03-12 01:19:08 +04:00
|
|
|
$ hg log --color=always -l 1 --template '{label("text.{rev}", "text\n")}'
|
2014-03-09 20:01:42 +04:00
|
|
|
\x1b[0;32mtext\x1b[0m (esc)
|
|
|
|
|
2013-11-21 21:30:52 +04:00
|
|
|
Test branches inside if statement:
|
|
|
|
|
|
|
|
$ hg log -r 0 --template '{if(branches, "yes", "no")}\n'
|
|
|
|
no
|
2014-01-17 12:10:37 +04:00
|
|
|
|
|
|
|
Test shortest(node) function:
|
|
|
|
|
|
|
|
$ echo b > b
|
|
|
|
$ hg ci -qAm b
|
|
|
|
$ hg log --template '{shortest(node)}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
e777
|
|
|
|
bcc7
|
2014-01-17 12:10:37 +04:00
|
|
|
f776
|
|
|
|
$ hg log --template '{shortest(node, 10)}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
e777603221
|
|
|
|
bcc7ff960b
|
2014-01-17 12:10:37 +04:00
|
|
|
f7769ec2ab
|
2014-01-17 12:16:48 +04:00
|
|
|
|
|
|
|
Test pad function
|
|
|
|
|
|
|
|
$ hg log --template '{pad(rev, 20)} {author|user}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2 test
|
|
|
|
1 {node|short}
|
2014-01-17 12:16:48 +04:00
|
|
|
0 test
|
|
|
|
|
|
|
|
$ hg log --template '{pad(rev, 20, " ", True)} {author|user}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2 test
|
|
|
|
1 {node|short}
|
2014-01-17 12:16:48 +04:00
|
|
|
0 test
|
|
|
|
|
|
|
|
$ hg log --template '{pad(rev, 20, "-", False)} {author|user}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2------------------- test
|
|
|
|
1------------------- {node|short}
|
2014-01-17 12:16:48 +04:00
|
|
|
0------------------- test
|
2014-02-12 09:10:00 +04:00
|
|
|
|
|
|
|
Test ifcontains function
|
|
|
|
|
2014-10-10 20:38:00 +04:00
|
|
|
$ hg log --template '{rev} {ifcontains(rev, "2 two 0", "is in the string", "is not")}\n'
|
|
|
|
2 is in the string
|
|
|
|
1 is not
|
|
|
|
0 is in the string
|
|
|
|
|
2014-02-12 09:10:00 +04:00
|
|
|
$ hg log --template '{rev} {ifcontains("a", file_adds, "added a", "did not add a")}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2 did not add a
|
2014-02-12 09:10:00 +04:00
|
|
|
1 did not add a
|
|
|
|
0 added a
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
|
|
|
|
Test revset function
|
|
|
|
|
|
|
|
$ hg log --template '{rev} {ifcontains(rev, revset("."), "current rev", "not current rev")}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2 current rev
|
|
|
|
1 not current rev
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
0 not current rev
|
|
|
|
|
2014-05-24 03:25:55 +04:00
|
|
|
$ hg log --template '{rev} {ifcontains(rev, revset(". + .^"), "match rev", "not match rev")}\n'
|
|
|
|
2 match rev
|
|
|
|
1 match rev
|
|
|
|
0 not match rev
|
|
|
|
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
$ hg log --template '{rev} Parents: {revset("parents(%s)", rev)}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
2 Parents: 1
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
1 Parents: 0
|
|
|
|
0 Parents:
|
|
|
|
|
2014-08-23 16:23:02 +04:00
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
|
|
> [revsetalias]
|
|
|
|
> myparents(\$1) = parents(\$1)
|
|
|
|
> EOF
|
|
|
|
$ hg log --template '{rev} Parents: {revset("myparents(%s)", rev)}\n'
|
|
|
|
2 Parents: 1
|
|
|
|
1 Parents: 0
|
|
|
|
0 Parents:
|
|
|
|
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
$ hg log --template 'Rev: {rev}\n{revset("::%s", rev) % "Ancestor: {revision}\n"}\n'
|
2014-03-12 01:19:08 +04:00
|
|
|
Rev: 2
|
|
|
|
Ancestor: 0
|
|
|
|
Ancestor: 1
|
|
|
|
Ancestor: 2
|
|
|
|
|
template: add revset() template function
Adds a template function that executes a revset and returns the list of
revisions as the result. It has the signature 'revset(query [, args...])'. The
args are optional and are applied to the query string using the standard
python string.format(args) pattern. This allows things like:
'{revset("parents({0})", rev)}' to produce the parents of each individual
commit in the log output. If no args are specified, the revset result is
cached for the duration of the templater; so it's better to not use args if
performance is a concern.
By itself, revset() can be used to print commit parents, print the common
ancestor of a commit with the main branch, etc.
It can be used with the ifcontains() function to do things like
'{ifcontains(rev, revset('.'), label(...), ...)}' to color the working copy
parent, to color certain branches, to color draft commits, etc.
2014-02-12 09:04:12 +04:00
|
|
|
Rev: 1
|
|
|
|
Ancestor: 0
|
|
|
|
Ancestor: 1
|
|
|
|
|
|
|
|
Rev: 0
|
|
|
|
Ancestor: 0
|
|
|
|
|
2014-02-12 09:40:33 +04:00
|
|
|
Test current bookmark templating
|
|
|
|
|
|
|
|
$ hg book foo
|
|
|
|
$ hg book bar
|
|
|
|
$ hg log --template "{rev} {bookmarks % '{bookmark}{ifeq(bookmark, current, \"*\")} '}\n"
|
2014-03-12 01:19:08 +04:00
|
|
|
2 bar* foo
|
|
|
|
1
|
2014-02-12 09:40:33 +04:00
|
|
|
0
|
2014-07-15 18:34:13 +04:00
|
|
|
$ hg log --template "{rev} {currentbookmark}\n"
|
|
|
|
2 bar
|
|
|
|
1
|
|
|
|
0
|
|
|
|
$ hg bookmarks --inactive bar
|
|
|
|
$ hg log --template "{rev} {currentbookmark}\n"
|
|
|
|
2
|
|
|
|
1
|
|
|
|
0
|
2014-03-09 20:01:43 +04:00
|
|
|
|
|
|
|
Test stringify on sub expressions
|
|
|
|
|
2014-03-12 01:19:08 +04:00
|
|
|
$ cd ..
|
2014-03-09 20:01:43 +04:00
|
|
|
$ hg log -R a -r 8 --template '{join(files, if("1", if("1", ", ")))}\n'
|
|
|
|
fourth, second, third
|
|
|
|
$ hg log -R a -r 8 --template '{strip(if("1", if("1", "-abc-")), if("1", if("1", "-")))}\n'
|
|
|
|
abc
|
2014-03-12 01:19:08 +04:00
|
|
|
|
2014-06-13 04:45:41 +04:00
|
|
|
Test splitlines
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{splitlines(desc) % 'foo {line}\n'}"
|
|
|
|
@ foo future
|
|
|
|
|
|
|
|
|
o foo third
|
|
|
|
|
|
|
|
|
o foo second
|
|
|
|
|
|
|
|
o foo merge
|
|
|
|
|\
|
|
|
|
| o foo new head
|
|
|
|
| |
|
|
|
|
o | foo new branch
|
|
|
|
|/
|
|
|
|
o foo no user, no domain
|
|
|
|
|
|
|
|
|
o foo no person
|
|
|
|
|
|
|
|
|
o foo other 1
|
|
|
|
| foo other 2
|
|
|
|
| foo
|
|
|
|
| foo other 3
|
|
|
|
o foo line 1
|
|
|
|
foo line 2
|
2014-06-13 04:53:37 +04:00
|
|
|
|
|
|
|
Test startswith
|
|
|
|
$ hg log -Gv -R a --template "{startswith(desc)}"
|
|
|
|
hg: parse error: startswith expects two arguments
|
|
|
|
[255]
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{startswith('line', desc)}"
|
|
|
|
@
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
o
|
|
|
|
|\
|
|
|
|
| o
|
|
|
|
| |
|
|
|
|
o |
|
|
|
|
|/
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o line 1
|
|
|
|
line 2
|
2014-06-13 05:07:21 +04:00
|
|
|
|
|
|
|
Test bad template with better error message
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template '{desc|user()}'
|
|
|
|
hg: parse error: expected a symbol, got 'func'
|
|
|
|
[255]
|
2014-06-13 05:02:23 +04:00
|
|
|
|
|
|
|
Test word function (including index out of bounds graceful failure)
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{word('1', desc)}"
|
|
|
|
@
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
o
|
|
|
|
|\
|
|
|
|
| o head
|
|
|
|
| |
|
|
|
|
o | branch
|
|
|
|
|/
|
|
|
|
o user,
|
|
|
|
|
|
|
|
|
o person
|
|
|
|
|
|
|
|
|
o 1
|
|
|
|
|
|
|
|
|
o 1
|
|
|
|
|
|
|
|
|
|
|
|
Test word third parameter used as splitter
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{word('0', desc, 'o')}"
|
|
|
|
@ future
|
|
|
|
|
|
|
|
|
o third
|
|
|
|
|
|
|
|
|
o sec
|
|
|
|
|
|
|
|
o merge
|
|
|
|
|\
|
|
|
|
| o new head
|
|
|
|
| |
|
|
|
|
o | new branch
|
|
|
|
|/
|
|
|
|
o n
|
|
|
|
|
|
|
|
|
o n
|
|
|
|
|
|
|
|
|
o
|
|
|
|
|
|
|
|
|
o line 1
|
|
|
|
line 2
|
|
|
|
|
|
|
|
Test word error messages for not enough and too many arguments
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{word('0')}"
|
|
|
|
hg: parse error: word expects two or three arguments, got 1
|
|
|
|
[255]
|
|
|
|
|
|
|
|
$ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}"
|
|
|
|
hg: parse error: word expects two or three arguments, got 7
|
|
|
|
[255]
|