##// END OF EJS Templates
template: add showbranch template for {branch}...
Eric Eisner -
r13156:d79fdff5 default
parent child Browse files
Show More
@@ -1,269 +1,273
1 # templatekw.py - common changeset template keywords
1 # templatekw.py - common changeset template keywords
2 #
2 #
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from node import hex
8 from node import hex
9 import encoding, patch, util, error
9 import encoding, patch, util, error
10
10
11 def showlist(name, values, plural=None, **args):
11 def showlist(name, values, plural=None, **args):
12 '''expand set of values.
12 '''expand set of values.
13 name is name of key in template map.
13 name is name of key in template map.
14 values is list of strings or dicts.
14 values is list of strings or dicts.
15 plural is plural of name, if not simply name + 's'.
15 plural is plural of name, if not simply name + 's'.
16
16
17 expansion works like this, given name 'foo'.
17 expansion works like this, given name 'foo'.
18
18
19 if values is empty, expand 'no_foos'.
19 if values is empty, expand 'no_foos'.
20
20
21 if 'foo' not in template map, return values as a string,
21 if 'foo' not in template map, return values as a string,
22 joined by space.
22 joined by space.
23
23
24 expand 'start_foos'.
24 expand 'start_foos'.
25
25
26 for each value, expand 'foo'. if 'last_foo' in template
26 for each value, expand 'foo'. if 'last_foo' in template
27 map, expand it instead of 'foo' for last key.
27 map, expand it instead of 'foo' for last key.
28
28
29 expand 'end_foos'.
29 expand 'end_foos'.
30 '''
30 '''
31 templ = args['templ']
31 templ = args['templ']
32 if plural:
32 if plural:
33 names = plural
33 names = plural
34 else: names = name + 's'
34 else: names = name + 's'
35 if not values:
35 if not values:
36 noname = 'no_' + names
36 noname = 'no_' + names
37 if noname in templ:
37 if noname in templ:
38 yield templ(noname, **args)
38 yield templ(noname, **args)
39 return
39 return
40 if name not in templ:
40 if name not in templ:
41 if isinstance(values[0], str):
41 if isinstance(values[0], str):
42 yield ' '.join(values)
42 yield ' '.join(values)
43 else:
43 else:
44 for v in values:
44 for v in values:
45 yield dict(v, **args)
45 yield dict(v, **args)
46 return
46 return
47 startname = 'start_' + names
47 startname = 'start_' + names
48 if startname in templ:
48 if startname in templ:
49 yield templ(startname, **args)
49 yield templ(startname, **args)
50 vargs = args.copy()
50 vargs = args.copy()
51 def one(v, tag=name):
51 def one(v, tag=name):
52 try:
52 try:
53 vargs.update(v)
53 vargs.update(v)
54 except (AttributeError, ValueError):
54 except (AttributeError, ValueError):
55 try:
55 try:
56 for a, b in v:
56 for a, b in v:
57 vargs[a] = b
57 vargs[a] = b
58 except ValueError:
58 except ValueError:
59 vargs[name] = v
59 vargs[name] = v
60 return templ(tag, **vargs)
60 return templ(tag, **vargs)
61 lastname = 'last_' + name
61 lastname = 'last_' + name
62 if lastname in templ:
62 if lastname in templ:
63 last = values.pop()
63 last = values.pop()
64 else:
64 else:
65 last = None
65 last = None
66 for v in values:
66 for v in values:
67 yield one(v)
67 yield one(v)
68 if last is not None:
68 if last is not None:
69 yield one(last, tag=lastname)
69 yield one(last, tag=lastname)
70 endname = 'end_' + names
70 endname = 'end_' + names
71 if endname in templ:
71 if endname in templ:
72 yield templ(endname, **args)
72 yield templ(endname, **args)
73
73
74 def getfiles(repo, ctx, revcache):
74 def getfiles(repo, ctx, revcache):
75 if 'files' not in revcache:
75 if 'files' not in revcache:
76 revcache['files'] = repo.status(ctx.parents()[0].node(),
76 revcache['files'] = repo.status(ctx.parents()[0].node(),
77 ctx.node())[:3]
77 ctx.node())[:3]
78 return revcache['files']
78 return revcache['files']
79
79
80 def getlatesttags(repo, ctx, cache):
80 def getlatesttags(repo, ctx, cache):
81 '''return date, distance and name for the latest tag of rev'''
81 '''return date, distance and name for the latest tag of rev'''
82
82
83 if 'latesttags' not in cache:
83 if 'latesttags' not in cache:
84 # Cache mapping from rev to a tuple with tag date, tag
84 # Cache mapping from rev to a tuple with tag date, tag
85 # distance and tag name
85 # distance and tag name
86 cache['latesttags'] = {-1: (0, 0, 'null')}
86 cache['latesttags'] = {-1: (0, 0, 'null')}
87 latesttags = cache['latesttags']
87 latesttags = cache['latesttags']
88
88
89 rev = ctx.rev()
89 rev = ctx.rev()
90 todo = [rev]
90 todo = [rev]
91 while todo:
91 while todo:
92 rev = todo.pop()
92 rev = todo.pop()
93 if rev in latesttags:
93 if rev in latesttags:
94 continue
94 continue
95 ctx = repo[rev]
95 ctx = repo[rev]
96 tags = [t for t in ctx.tags() if repo.tagtype(t) == 'global']
96 tags = [t for t in ctx.tags() if repo.tagtype(t) == 'global']
97 if tags:
97 if tags:
98 latesttags[rev] = ctx.date()[0], 0, ':'.join(sorted(tags))
98 latesttags[rev] = ctx.date()[0], 0, ':'.join(sorted(tags))
99 continue
99 continue
100 try:
100 try:
101 # The tuples are laid out so the right one can be found by
101 # The tuples are laid out so the right one can be found by
102 # comparison.
102 # comparison.
103 pdate, pdist, ptag = max(
103 pdate, pdist, ptag = max(
104 latesttags[p.rev()] for p in ctx.parents())
104 latesttags[p.rev()] for p in ctx.parents())
105 except KeyError:
105 except KeyError:
106 # Cache miss - recurse
106 # Cache miss - recurse
107 todo.append(rev)
107 todo.append(rev)
108 todo.extend(p.rev() for p in ctx.parents())
108 todo.extend(p.rev() for p in ctx.parents())
109 continue
109 continue
110 latesttags[rev] = pdate, pdist + 1, ptag
110 latesttags[rev] = pdate, pdist + 1, ptag
111 return latesttags[rev]
111 return latesttags[rev]
112
112
113 def getrenamedfn(repo, endrev=None):
113 def getrenamedfn(repo, endrev=None):
114 rcache = {}
114 rcache = {}
115 if endrev is None:
115 if endrev is None:
116 endrev = len(repo)
116 endrev = len(repo)
117
117
118 def getrenamed(fn, rev):
118 def getrenamed(fn, rev):
119 '''looks up all renames for a file (up to endrev) the first
119 '''looks up all renames for a file (up to endrev) the first
120 time the file is given. It indexes on the changerev and only
120 time the file is given. It indexes on the changerev and only
121 parses the manifest if linkrev != changerev.
121 parses the manifest if linkrev != changerev.
122 Returns rename info for fn at changerev rev.'''
122 Returns rename info for fn at changerev rev.'''
123 if fn not in rcache:
123 if fn not in rcache:
124 rcache[fn] = {}
124 rcache[fn] = {}
125 fl = repo.file(fn)
125 fl = repo.file(fn)
126 for i in fl:
126 for i in fl:
127 lr = fl.linkrev(i)
127 lr = fl.linkrev(i)
128 renamed = fl.renamed(fl.node(i))
128 renamed = fl.renamed(fl.node(i))
129 rcache[fn][lr] = renamed
129 rcache[fn][lr] = renamed
130 if lr >= endrev:
130 if lr >= endrev:
131 break
131 break
132 if rev in rcache[fn]:
132 if rev in rcache[fn]:
133 return rcache[fn][rev]
133 return rcache[fn][rev]
134
134
135 # If linkrev != rev (i.e. rev not found in rcache) fallback to
135 # If linkrev != rev (i.e. rev not found in rcache) fallback to
136 # filectx logic.
136 # filectx logic.
137 try:
137 try:
138 return repo[rev][fn].renamed()
138 return repo[rev][fn].renamed()
139 except error.LookupError:
139 except error.LookupError:
140 return None
140 return None
141
141
142 return getrenamed
142 return getrenamed
143
143
144
144
145 def showauthor(repo, ctx, templ, **args):
145 def showauthor(repo, ctx, templ, **args):
146 return ctx.user()
146 return ctx.user()
147
147
148 def showbranch(**args):
149 return args['ctx'].branch()
150
148 def showbranches(**args):
151 def showbranches(**args):
149 branch = args['ctx'].branch()
152 branch = args['ctx'].branch()
150 if branch != 'default':
153 if branch != 'default':
151 return showlist('branch', [branch], plural='branches', **args)
154 return showlist('branch', [branch], plural='branches', **args)
152
155
153 def showchildren(**args):
156 def showchildren(**args):
154 ctx = args['ctx']
157 ctx = args['ctx']
155 childrevs = ['%d:%s' % (cctx, cctx) for cctx in ctx.children()]
158 childrevs = ['%d:%s' % (cctx, cctx) for cctx in ctx.children()]
156 return showlist('children', childrevs, **args)
159 return showlist('children', childrevs, **args)
157
160
158 def showdate(repo, ctx, templ, **args):
161 def showdate(repo, ctx, templ, **args):
159 return ctx.date()
162 return ctx.date()
160
163
161 def showdescription(repo, ctx, templ, **args):
164 def showdescription(repo, ctx, templ, **args):
162 return ctx.description().strip()
165 return ctx.description().strip()
163
166
164 def showdiffstat(repo, ctx, templ, **args):
167 def showdiffstat(repo, ctx, templ, **args):
165 files, adds, removes = 0, 0, 0
168 files, adds, removes = 0, 0, 0
166 for i in patch.diffstatdata(util.iterlines(ctx.diff())):
169 for i in patch.diffstatdata(util.iterlines(ctx.diff())):
167 files += 1
170 files += 1
168 adds += i[1]
171 adds += i[1]
169 removes += i[2]
172 removes += i[2]
170 return '%s: +%s/-%s' % (files, adds, removes)
173 return '%s: +%s/-%s' % (files, adds, removes)
171
174
172 def showextras(**args):
175 def showextras(**args):
173 templ = args['templ']
176 templ = args['templ']
174 for key, value in sorted(args['ctx'].extra().items()):
177 for key, value in sorted(args['ctx'].extra().items()):
175 args = args.copy()
178 args = args.copy()
176 args.update(dict(key=key, value=value))
179 args.update(dict(key=key, value=value))
177 yield templ('extra', **args)
180 yield templ('extra', **args)
178
181
179 def showfileadds(**args):
182 def showfileadds(**args):
180 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
183 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
181 return showlist('file_add', getfiles(repo, ctx, revcache)[1], **args)
184 return showlist('file_add', getfiles(repo, ctx, revcache)[1], **args)
182
185
183 def showfilecopies(**args):
186 def showfilecopies(**args):
184 cache, ctx = args['cache'], args['ctx']
187 cache, ctx = args['cache'], args['ctx']
185 copies = args['revcache'].get('copies')
188 copies = args['revcache'].get('copies')
186 if copies is None:
189 if copies is None:
187 if 'getrenamed' not in cache:
190 if 'getrenamed' not in cache:
188 cache['getrenamed'] = getrenamedfn(args['repo'])
191 cache['getrenamed'] = getrenamedfn(args['repo'])
189 copies = []
192 copies = []
190 getrenamed = cache['getrenamed']
193 getrenamed = cache['getrenamed']
191 for fn in ctx.files():
194 for fn in ctx.files():
192 rename = getrenamed(fn, ctx.rev())
195 rename = getrenamed(fn, ctx.rev())
193 if rename:
196 if rename:
194 copies.append((fn, rename[0]))
197 copies.append((fn, rename[0]))
195
198
196 c = [{'name': x[0], 'source': x[1]} for x in copies]
199 c = [{'name': x[0], 'source': x[1]} for x in copies]
197 return showlist('file_copy', c, plural='file_copies', **args)
200 return showlist('file_copy', c, plural='file_copies', **args)
198
201
199 # showfilecopiesswitch() displays file copies only if copy records are
202 # showfilecopiesswitch() displays file copies only if copy records are
200 # provided before calling the templater, usually with a --copies
203 # provided before calling the templater, usually with a --copies
201 # command line switch.
204 # command line switch.
202 def showfilecopiesswitch(**args):
205 def showfilecopiesswitch(**args):
203 copies = args['revcache'].get('copies') or []
206 copies = args['revcache'].get('copies') or []
204 c = [{'name': x[0], 'source': x[1]} for x in copies]
207 c = [{'name': x[0], 'source': x[1]} for x in copies]
205 return showlist('file_copy', c, plural='file_copies', **args)
208 return showlist('file_copy', c, plural='file_copies', **args)
206
209
207 def showfiledels(**args):
210 def showfiledels(**args):
208 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
211 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
209 return showlist('file_del', getfiles(repo, ctx, revcache)[2], **args)
212 return showlist('file_del', getfiles(repo, ctx, revcache)[2], **args)
210
213
211 def showfilemods(**args):
214 def showfilemods(**args):
212 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
215 repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
213 return showlist('file_mod', getfiles(repo, ctx, revcache)[0], **args)
216 return showlist('file_mod', getfiles(repo, ctx, revcache)[0], **args)
214
217
215 def showfiles(**args):
218 def showfiles(**args):
216 return showlist('file', args['ctx'].files(), **args)
219 return showlist('file', args['ctx'].files(), **args)
217
220
218 def showlatesttag(repo, ctx, templ, cache, **args):
221 def showlatesttag(repo, ctx, templ, cache, **args):
219 return getlatesttags(repo, ctx, cache)[2]
222 return getlatesttags(repo, ctx, cache)[2]
220
223
221 def showlatesttagdistance(repo, ctx, templ, cache, **args):
224 def showlatesttagdistance(repo, ctx, templ, cache, **args):
222 return getlatesttags(repo, ctx, cache)[1]
225 return getlatesttags(repo, ctx, cache)[1]
223
226
224 def showmanifest(**args):
227 def showmanifest(**args):
225 repo, ctx, templ = args['repo'], args['ctx'], args['templ']
228 repo, ctx, templ = args['repo'], args['ctx'], args['templ']
226 args = args.copy()
229 args = args.copy()
227 args.update(dict(rev=repo.manifest.rev(ctx.changeset()[0]),
230 args.update(dict(rev=repo.manifest.rev(ctx.changeset()[0]),
228 node=hex(ctx.changeset()[0])))
231 node=hex(ctx.changeset()[0])))
229 return templ('manifest', **args)
232 return templ('manifest', **args)
230
233
231 def shownode(repo, ctx, templ, **args):
234 def shownode(repo, ctx, templ, **args):
232 return ctx.hex()
235 return ctx.hex()
233
236
234 def showrev(repo, ctx, templ, **args):
237 def showrev(repo, ctx, templ, **args):
235 return ctx.rev()
238 return ctx.rev()
236
239
237 def showtags(**args):
240 def showtags(**args):
238 return showlist('tag', args['ctx'].tags(), **args)
241 return showlist('tag', args['ctx'].tags(), **args)
239
242
240 # keywords are callables like:
243 # keywords are callables like:
241 # fn(repo, ctx, templ, cache, revcache, **args)
244 # fn(repo, ctx, templ, cache, revcache, **args)
242 # with:
245 # with:
243 # repo - current repository instance
246 # repo - current repository instance
244 # ctx - the changectx being displayed
247 # ctx - the changectx being displayed
245 # templ - the templater instance
248 # templ - the templater instance
246 # cache - a cache dictionary for the whole templater run
249 # cache - a cache dictionary for the whole templater run
247 # revcache - a cache dictionary for the current revision
250 # revcache - a cache dictionary for the current revision
248 keywords = {
251 keywords = {
249 'author': showauthor,
252 'author': showauthor,
253 'branch': showbranch,
250 'branches': showbranches,
254 'branches': showbranches,
251 'children': showchildren,
255 'children': showchildren,
252 'date': showdate,
256 'date': showdate,
253 'desc': showdescription,
257 'desc': showdescription,
254 'diffstat': showdiffstat,
258 'diffstat': showdiffstat,
255 'extras': showextras,
259 'extras': showextras,
256 'file_adds': showfileadds,
260 'file_adds': showfileadds,
257 'file_copies': showfilecopies,
261 'file_copies': showfilecopies,
258 'file_copies_switch': showfilecopiesswitch,
262 'file_copies_switch': showfilecopiesswitch,
259 'file_dels': showfiledels,
263 'file_dels': showfiledels,
260 'file_mods': showfilemods,
264 'file_mods': showfilemods,
261 'files': showfiles,
265 'files': showfiles,
262 'latesttag': showlatesttag,
266 'latesttag': showlatesttag,
263 'latesttagdistance': showlatesttagdistance,
267 'latesttagdistance': showlatesttagdistance,
264 'manifest': showmanifest,
268 'manifest': showmanifest,
265 'node': shownode,
269 'node': shownode,
266 'rev': showrev,
270 'rev': showrev,
267 'tags': showtags,
271 'tags': showtags,
268 }
272 }
269
273
@@ -1,1333 +1,1360
1 $ hg init a
1 $ hg init a
2 $ cd a
2 $ cd a
3 $ echo a > a
3 $ echo a > a
4 $ hg add a
4 $ hg add a
5 $ echo line 1 > b
5 $ echo line 1 > b
6 $ echo line 2 >> b
6 $ echo line 2 >> b
7 $ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
7 $ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
8
8
9 $ hg add b
9 $ hg add b
10 $ echo other 1 > c
10 $ echo other 1 > c
11 $ echo other 2 >> c
11 $ echo other 2 >> c
12 $ echo >> c
12 $ echo >> c
13 $ echo other 3 >> c
13 $ echo other 3 >> c
14 $ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
14 $ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
15
15
16 $ hg add c
16 $ hg add c
17 $ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
17 $ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
18 $ echo c >> c
18 $ echo c >> c
19 $ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
19 $ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
20
20
21 $ echo foo > .hg/branch
21 $ echo foo > .hg/branch
22 $ hg commit -m 'new branch' -d '1400000 0' -u 'person'
22 $ hg commit -m 'new branch' -d '1400000 0' -u 'person'
23
23
24 $ hg co -q 3
24 $ hg co -q 3
25 $ echo other 4 >> d
25 $ echo other 4 >> d
26 $ hg add d
26 $ hg add d
27 $ hg commit -m 'new head' -d '1500000 0' -u 'person'
27 $ hg commit -m 'new head' -d '1500000 0' -u 'person'
28
28
29 $ hg merge -q foo
29 $ hg merge -q foo
30 $ hg commit -m 'merge' -d '1500001 0' -u 'person'
30 $ hg commit -m 'merge' -d '1500001 0' -u 'person'
31
31
32 Second branch starting at nullrev:
32 Second branch starting at nullrev:
33
33
34 $ hg update null
34 $ hg update null
35 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
35 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
36 $ echo second > second
36 $ echo second > second
37 $ hg add second
37 $ hg add second
38 $ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
38 $ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
39 created new head
39 created new head
40
40
41 $ echo third > third
41 $ echo third > third
42 $ hg add third
42 $ hg add third
43 $ hg mv second fourth
43 $ hg mv second fourth
44 $ hg commit -m third -d "2020-01-01 10:01"
44 $ hg commit -m third -d "2020-01-01 10:01"
45
45
46 Make sure user/global hgrc does not affect tests
46 Make sure user/global hgrc does not affect tests
47
47
48 $ echo '[ui]' > .hg/hgrc
48 $ echo '[ui]' > .hg/hgrc
49 $ echo 'logtemplate =' >> .hg/hgrc
49 $ echo 'logtemplate =' >> .hg/hgrc
50 $ echo 'style =' >> .hg/hgrc
50 $ echo 'style =' >> .hg/hgrc
51
51
52 Default style is like normal output:
52 Default style is like normal output:
53
53
54 $ hg log > log.out
54 $ hg log > log.out
55 $ hg log --style default > style.out
55 $ hg log --style default > style.out
56 $ cmp log.out style.out || diff -u log.out style.out
56 $ cmp log.out style.out || diff -u log.out style.out
57
57
58 $ hg log -v > log.out
58 $ hg log -v > log.out
59 $ hg log -v --style default > style.out
59 $ hg log -v --style default > style.out
60 $ cmp log.out style.out || diff -u log.out style.out
60 $ cmp log.out style.out || diff -u log.out style.out
61
61
62 $ hg log --debug > log.out
62 $ hg log --debug > log.out
63 $ hg log --debug --style default > style.out
63 $ hg log --debug --style default > style.out
64 $ cmp log.out style.out || diff -u log.out style.out
64 $ cmp log.out style.out || diff -u log.out style.out
65
65
66 Revision with no copies (used to print a traceback):
66 Revision with no copies (used to print a traceback):
67
67
68 $ hg tip -v --template '\n'
68 $ hg tip -v --template '\n'
69
69
70
70
71 Compact style works:
71 Compact style works:
72
72
73 $ hg log --style compact
73 $ hg log --style compact
74 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
74 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
75 third
75 third
76
76
77 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
77 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
78 second
78 second
79
79
80 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
80 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
81 merge
81 merge
82
82
83 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
83 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
84 new head
84 new head
85
85
86 4 32a18f097fcc 1970-01-17 04:53 +0000 person
86 4 32a18f097fcc 1970-01-17 04:53 +0000 person
87 new branch
87 new branch
88
88
89 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
89 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
90 no user, no domain
90 no user, no domain
91
91
92 2 97054abb4ab8 1970-01-14 21:20 +0000 other
92 2 97054abb4ab8 1970-01-14 21:20 +0000 other
93 no person
93 no person
94
94
95 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
95 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
96 other 1
96 other 1
97
97
98 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
98 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
99 line 1
99 line 1
100
100
101
101
102 $ hg log -v --style compact
102 $ hg log -v --style compact
103 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
103 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
104 third
104 third
105
105
106 7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
106 7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
107 second
107 second
108
108
109 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
109 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
110 merge
110 merge
111
111
112 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
112 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
113 new head
113 new head
114
114
115 4 32a18f097fcc 1970-01-17 04:53 +0000 person
115 4 32a18f097fcc 1970-01-17 04:53 +0000 person
116 new branch
116 new branch
117
117
118 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
118 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
119 no user, no domain
119 no user, no domain
120
120
121 2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
121 2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
122 no person
122 no person
123
123
124 1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
124 1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
125 other 1
125 other 1
126 other 2
126 other 2
127
127
128 other 3
128 other 3
129
129
130 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
130 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
131 line 1
131 line 1
132 line 2
132 line 2
133
133
134
134
135 $ hg log --debug --style compact
135 $ hg log --debug --style compact
136 8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
136 8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
137 third
137 third
138
138
139 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
139 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
140 second
140 second
141
141
142 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
142 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
143 merge
143 merge
144
144
145 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
145 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
146 new head
146 new head
147
147
148 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
148 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
149 new branch
149 new branch
150
150
151 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
151 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
152 no user, no domain
152 no user, no domain
153
153
154 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
154 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
155 no person
155 no person
156
156
157 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
157 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
158 other 1
158 other 1
159 other 2
159 other 2
160
160
161 other 3
161 other 3
162
162
163 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
163 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
164 line 1
164 line 1
165 line 2
165 line 2
166
166
167
167
168 Test xml styles:
168 Test xml styles:
169
169
170 $ hg log --style xml
170 $ hg log --style xml
171 <?xml version="1.0"?>
171 <?xml version="1.0"?>
172 <log>
172 <log>
173 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
173 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
174 <tag>tip</tag>
174 <tag>tip</tag>
175 <author email="test">test</author>
175 <author email="test">test</author>
176 <date>2020-01-01T10:01:00+00:00</date>
176 <date>2020-01-01T10:01:00+00:00</date>
177 <msg xml:space="preserve">third</msg>
177 <msg xml:space="preserve">third</msg>
178 </logentry>
178 </logentry>
179 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
179 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
180 <parent revision="-1" node="0000000000000000000000000000000000000000" />
180 <parent revision="-1" node="0000000000000000000000000000000000000000" />
181 <author email="user@hostname">User Name</author>
181 <author email="user@hostname">User Name</author>
182 <date>1970-01-12T13:46:40+00:00</date>
182 <date>1970-01-12T13:46:40+00:00</date>
183 <msg xml:space="preserve">second</msg>
183 <msg xml:space="preserve">second</msg>
184 </logentry>
184 </logentry>
185 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
185 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
186 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
186 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
187 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
187 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
188 <author email="person">person</author>
188 <author email="person">person</author>
189 <date>1970-01-18T08:40:01+00:00</date>
189 <date>1970-01-18T08:40:01+00:00</date>
190 <msg xml:space="preserve">merge</msg>
190 <msg xml:space="preserve">merge</msg>
191 </logentry>
191 </logentry>
192 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
192 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
193 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
193 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
194 <author email="person">person</author>
194 <author email="person">person</author>
195 <date>1970-01-18T08:40:00+00:00</date>
195 <date>1970-01-18T08:40:00+00:00</date>
196 <msg xml:space="preserve">new head</msg>
196 <msg xml:space="preserve">new head</msg>
197 </logentry>
197 </logentry>
198 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
198 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
199 <branch>foo</branch>
199 <branch>foo</branch>
200 <author email="person">person</author>
200 <author email="person">person</author>
201 <date>1970-01-17T04:53:20+00:00</date>
201 <date>1970-01-17T04:53:20+00:00</date>
202 <msg xml:space="preserve">new branch</msg>
202 <msg xml:space="preserve">new branch</msg>
203 </logentry>
203 </logentry>
204 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
204 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
205 <author email="person">person</author>
205 <author email="person">person</author>
206 <date>1970-01-16T01:06:40+00:00</date>
206 <date>1970-01-16T01:06:40+00:00</date>
207 <msg xml:space="preserve">no user, no domain</msg>
207 <msg xml:space="preserve">no user, no domain</msg>
208 </logentry>
208 </logentry>
209 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
209 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
210 <author email="other@place">other</author>
210 <author email="other@place">other</author>
211 <date>1970-01-14T21:20:00+00:00</date>
211 <date>1970-01-14T21:20:00+00:00</date>
212 <msg xml:space="preserve">no person</msg>
212 <msg xml:space="preserve">no person</msg>
213 </logentry>
213 </logentry>
214 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
214 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
215 <author email="other@place">A. N. Other</author>
215 <author email="other@place">A. N. Other</author>
216 <date>1970-01-13T17:33:20+00:00</date>
216 <date>1970-01-13T17:33:20+00:00</date>
217 <msg xml:space="preserve">other 1
217 <msg xml:space="preserve">other 1
218 other 2
218 other 2
219
219
220 other 3</msg>
220 other 3</msg>
221 </logentry>
221 </logentry>
222 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
222 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
223 <author email="user@hostname">User Name</author>
223 <author email="user@hostname">User Name</author>
224 <date>1970-01-12T13:46:40+00:00</date>
224 <date>1970-01-12T13:46:40+00:00</date>
225 <msg xml:space="preserve">line 1
225 <msg xml:space="preserve">line 1
226 line 2</msg>
226 line 2</msg>
227 </logentry>
227 </logentry>
228 </log>
228 </log>
229
229
230 $ hg log -v --style xml
230 $ hg log -v --style xml
231 <?xml version="1.0"?>
231 <?xml version="1.0"?>
232 <log>
232 <log>
233 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
233 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
234 <tag>tip</tag>
234 <tag>tip</tag>
235 <author email="test">test</author>
235 <author email="test">test</author>
236 <date>2020-01-01T10:01:00+00:00</date>
236 <date>2020-01-01T10:01:00+00:00</date>
237 <msg xml:space="preserve">third</msg>
237 <msg xml:space="preserve">third</msg>
238 <paths>
238 <paths>
239 <path action="A">fourth</path>
239 <path action="A">fourth</path>
240 <path action="A">third</path>
240 <path action="A">third</path>
241 <path action="R">second</path>
241 <path action="R">second</path>
242 </paths>
242 </paths>
243 <copies>
243 <copies>
244 <copy source="second">fourth</copy>
244 <copy source="second">fourth</copy>
245 </copies>
245 </copies>
246 </logentry>
246 </logentry>
247 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
247 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
248 <parent revision="-1" node="0000000000000000000000000000000000000000" />
248 <parent revision="-1" node="0000000000000000000000000000000000000000" />
249 <author email="user@hostname">User Name</author>
249 <author email="user@hostname">User Name</author>
250 <date>1970-01-12T13:46:40+00:00</date>
250 <date>1970-01-12T13:46:40+00:00</date>
251 <msg xml:space="preserve">second</msg>
251 <msg xml:space="preserve">second</msg>
252 <paths>
252 <paths>
253 <path action="A">second</path>
253 <path action="A">second</path>
254 </paths>
254 </paths>
255 </logentry>
255 </logentry>
256 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
256 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
257 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
257 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
258 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
258 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
259 <author email="person">person</author>
259 <author email="person">person</author>
260 <date>1970-01-18T08:40:01+00:00</date>
260 <date>1970-01-18T08:40:01+00:00</date>
261 <msg xml:space="preserve">merge</msg>
261 <msg xml:space="preserve">merge</msg>
262 <paths>
262 <paths>
263 </paths>
263 </paths>
264 </logentry>
264 </logentry>
265 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
265 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
266 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
266 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
267 <author email="person">person</author>
267 <author email="person">person</author>
268 <date>1970-01-18T08:40:00+00:00</date>
268 <date>1970-01-18T08:40:00+00:00</date>
269 <msg xml:space="preserve">new head</msg>
269 <msg xml:space="preserve">new head</msg>
270 <paths>
270 <paths>
271 <path action="A">d</path>
271 <path action="A">d</path>
272 </paths>
272 </paths>
273 </logentry>
273 </logentry>
274 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
274 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
275 <branch>foo</branch>
275 <branch>foo</branch>
276 <author email="person">person</author>
276 <author email="person">person</author>
277 <date>1970-01-17T04:53:20+00:00</date>
277 <date>1970-01-17T04:53:20+00:00</date>
278 <msg xml:space="preserve">new branch</msg>
278 <msg xml:space="preserve">new branch</msg>
279 <paths>
279 <paths>
280 </paths>
280 </paths>
281 </logentry>
281 </logentry>
282 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
282 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
283 <author email="person">person</author>
283 <author email="person">person</author>
284 <date>1970-01-16T01:06:40+00:00</date>
284 <date>1970-01-16T01:06:40+00:00</date>
285 <msg xml:space="preserve">no user, no domain</msg>
285 <msg xml:space="preserve">no user, no domain</msg>
286 <paths>
286 <paths>
287 <path action="M">c</path>
287 <path action="M">c</path>
288 </paths>
288 </paths>
289 </logentry>
289 </logentry>
290 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
290 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
291 <author email="other@place">other</author>
291 <author email="other@place">other</author>
292 <date>1970-01-14T21:20:00+00:00</date>
292 <date>1970-01-14T21:20:00+00:00</date>
293 <msg xml:space="preserve">no person</msg>
293 <msg xml:space="preserve">no person</msg>
294 <paths>
294 <paths>
295 <path action="A">c</path>
295 <path action="A">c</path>
296 </paths>
296 </paths>
297 </logentry>
297 </logentry>
298 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
298 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
299 <author email="other@place">A. N. Other</author>
299 <author email="other@place">A. N. Other</author>
300 <date>1970-01-13T17:33:20+00:00</date>
300 <date>1970-01-13T17:33:20+00:00</date>
301 <msg xml:space="preserve">other 1
301 <msg xml:space="preserve">other 1
302 other 2
302 other 2
303
303
304 other 3</msg>
304 other 3</msg>
305 <paths>
305 <paths>
306 <path action="A">b</path>
306 <path action="A">b</path>
307 </paths>
307 </paths>
308 </logentry>
308 </logentry>
309 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
309 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
310 <author email="user@hostname">User Name</author>
310 <author email="user@hostname">User Name</author>
311 <date>1970-01-12T13:46:40+00:00</date>
311 <date>1970-01-12T13:46:40+00:00</date>
312 <msg xml:space="preserve">line 1
312 <msg xml:space="preserve">line 1
313 line 2</msg>
313 line 2</msg>
314 <paths>
314 <paths>
315 <path action="A">a</path>
315 <path action="A">a</path>
316 </paths>
316 </paths>
317 </logentry>
317 </logentry>
318 </log>
318 </log>
319
319
320 $ hg log --debug --style xml
320 $ hg log --debug --style xml
321 <?xml version="1.0"?>
321 <?xml version="1.0"?>
322 <log>
322 <log>
323 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
323 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
324 <tag>tip</tag>
324 <tag>tip</tag>
325 <parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
325 <parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
326 <parent revision="-1" node="0000000000000000000000000000000000000000" />
326 <parent revision="-1" node="0000000000000000000000000000000000000000" />
327 <author email="test">test</author>
327 <author email="test">test</author>
328 <date>2020-01-01T10:01:00+00:00</date>
328 <date>2020-01-01T10:01:00+00:00</date>
329 <msg xml:space="preserve">third</msg>
329 <msg xml:space="preserve">third</msg>
330 <paths>
330 <paths>
331 <path action="A">fourth</path>
331 <path action="A">fourth</path>
332 <path action="A">third</path>
332 <path action="A">third</path>
333 <path action="R">second</path>
333 <path action="R">second</path>
334 </paths>
334 </paths>
335 <copies>
335 <copies>
336 <copy source="second">fourth</copy>
336 <copy source="second">fourth</copy>
337 </copies>
337 </copies>
338 <extra key="branch">default</extra>
338 <extra key="branch">default</extra>
339 </logentry>
339 </logentry>
340 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
340 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
341 <parent revision="-1" node="0000000000000000000000000000000000000000" />
341 <parent revision="-1" node="0000000000000000000000000000000000000000" />
342 <parent revision="-1" node="0000000000000000000000000000000000000000" />
342 <parent revision="-1" node="0000000000000000000000000000000000000000" />
343 <author email="user@hostname">User Name</author>
343 <author email="user@hostname">User Name</author>
344 <date>1970-01-12T13:46:40+00:00</date>
344 <date>1970-01-12T13:46:40+00:00</date>
345 <msg xml:space="preserve">second</msg>
345 <msg xml:space="preserve">second</msg>
346 <paths>
346 <paths>
347 <path action="A">second</path>
347 <path action="A">second</path>
348 </paths>
348 </paths>
349 <extra key="branch">default</extra>
349 <extra key="branch">default</extra>
350 </logentry>
350 </logentry>
351 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
351 <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
352 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
352 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
353 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
353 <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
354 <author email="person">person</author>
354 <author email="person">person</author>
355 <date>1970-01-18T08:40:01+00:00</date>
355 <date>1970-01-18T08:40:01+00:00</date>
356 <msg xml:space="preserve">merge</msg>
356 <msg xml:space="preserve">merge</msg>
357 <paths>
357 <paths>
358 </paths>
358 </paths>
359 <extra key="branch">default</extra>
359 <extra key="branch">default</extra>
360 </logentry>
360 </logentry>
361 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
361 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
362 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
362 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
363 <parent revision="-1" node="0000000000000000000000000000000000000000" />
363 <parent revision="-1" node="0000000000000000000000000000000000000000" />
364 <author email="person">person</author>
364 <author email="person">person</author>
365 <date>1970-01-18T08:40:00+00:00</date>
365 <date>1970-01-18T08:40:00+00:00</date>
366 <msg xml:space="preserve">new head</msg>
366 <msg xml:space="preserve">new head</msg>
367 <paths>
367 <paths>
368 <path action="A">d</path>
368 <path action="A">d</path>
369 </paths>
369 </paths>
370 <extra key="branch">default</extra>
370 <extra key="branch">default</extra>
371 </logentry>
371 </logentry>
372 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
372 <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
373 <branch>foo</branch>
373 <branch>foo</branch>
374 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
374 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
375 <parent revision="-1" node="0000000000000000000000000000000000000000" />
375 <parent revision="-1" node="0000000000000000000000000000000000000000" />
376 <author email="person">person</author>
376 <author email="person">person</author>
377 <date>1970-01-17T04:53:20+00:00</date>
377 <date>1970-01-17T04:53:20+00:00</date>
378 <msg xml:space="preserve">new branch</msg>
378 <msg xml:space="preserve">new branch</msg>
379 <paths>
379 <paths>
380 </paths>
380 </paths>
381 <extra key="branch">foo</extra>
381 <extra key="branch">foo</extra>
382 </logentry>
382 </logentry>
383 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
383 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
384 <parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
384 <parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
385 <parent revision="-1" node="0000000000000000000000000000000000000000" />
385 <parent revision="-1" node="0000000000000000000000000000000000000000" />
386 <author email="person">person</author>
386 <author email="person">person</author>
387 <date>1970-01-16T01:06:40+00:00</date>
387 <date>1970-01-16T01:06:40+00:00</date>
388 <msg xml:space="preserve">no user, no domain</msg>
388 <msg xml:space="preserve">no user, no domain</msg>
389 <paths>
389 <paths>
390 <path action="M">c</path>
390 <path action="M">c</path>
391 </paths>
391 </paths>
392 <extra key="branch">default</extra>
392 <extra key="branch">default</extra>
393 </logentry>
393 </logentry>
394 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
394 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
395 <parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
395 <parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
396 <parent revision="-1" node="0000000000000000000000000000000000000000" />
396 <parent revision="-1" node="0000000000000000000000000000000000000000" />
397 <author email="other@place">other</author>
397 <author email="other@place">other</author>
398 <date>1970-01-14T21:20:00+00:00</date>
398 <date>1970-01-14T21:20:00+00:00</date>
399 <msg xml:space="preserve">no person</msg>
399 <msg xml:space="preserve">no person</msg>
400 <paths>
400 <paths>
401 <path action="A">c</path>
401 <path action="A">c</path>
402 </paths>
402 </paths>
403 <extra key="branch">default</extra>
403 <extra key="branch">default</extra>
404 </logentry>
404 </logentry>
405 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
405 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
406 <parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
406 <parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
407 <parent revision="-1" node="0000000000000000000000000000000000000000" />
407 <parent revision="-1" node="0000000000000000000000000000000000000000" />
408 <author email="other@place">A. N. Other</author>
408 <author email="other@place">A. N. Other</author>
409 <date>1970-01-13T17:33:20+00:00</date>
409 <date>1970-01-13T17:33:20+00:00</date>
410 <msg xml:space="preserve">other 1
410 <msg xml:space="preserve">other 1
411 other 2
411 other 2
412
412
413 other 3</msg>
413 other 3</msg>
414 <paths>
414 <paths>
415 <path action="A">b</path>
415 <path action="A">b</path>
416 </paths>
416 </paths>
417 <extra key="branch">default</extra>
417 <extra key="branch">default</extra>
418 </logentry>
418 </logentry>
419 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
419 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
420 <parent revision="-1" node="0000000000000000000000000000000000000000" />
420 <parent revision="-1" node="0000000000000000000000000000000000000000" />
421 <parent revision="-1" node="0000000000000000000000000000000000000000" />
421 <parent revision="-1" node="0000000000000000000000000000000000000000" />
422 <author email="user@hostname">User Name</author>
422 <author email="user@hostname">User Name</author>
423 <date>1970-01-12T13:46:40+00:00</date>
423 <date>1970-01-12T13:46:40+00:00</date>
424 <msg xml:space="preserve">line 1
424 <msg xml:space="preserve">line 1
425 line 2</msg>
425 line 2</msg>
426 <paths>
426 <paths>
427 <path action="A">a</path>
427 <path action="A">a</path>
428 </paths>
428 </paths>
429 <extra key="branch">default</extra>
429 <extra key="branch">default</extra>
430 </logentry>
430 </logentry>
431 </log>
431 </log>
432
432
433
433
434 Error if style not readable:
434 Error if style not readable:
435
435
436 $ touch q
436 $ touch q
437 $ chmod 0 q
437 $ chmod 0 q
438 $ hg log --style ./q
438 $ hg log --style ./q
439 abort: Permission denied: ./q
439 abort: Permission denied: ./q
440 [255]
440 [255]
441
441
442 Error if no style:
442 Error if no style:
443
443
444 $ hg log --style notexist
444 $ hg log --style notexist
445 abort: style not found: notexist
445 abort: style not found: notexist
446 [255]
446 [255]
447
447
448 Error if style missing key:
448 Error if style missing key:
449
449
450 $ echo 'q = q' > t
450 $ echo 'q = q' > t
451 $ hg log --style ./t
451 $ hg log --style ./t
452 abort: ./t: no key named 'changeset'
452 abort: ./t: no key named 'changeset'
453 [255]
453 [255]
454
454
455 Error if include fails:
455 Error if include fails:
456
456
457 $ echo 'changeset = q' >> t
457 $ echo 'changeset = q' >> t
458 $ hg log --style ./t
458 $ hg log --style ./t
459 abort: template file ./q: Permission denied
459 abort: template file ./q: Permission denied
460 [255]
460 [255]
461
461
462 Include works:
462 Include works:
463
463
464 $ rm q
464 $ rm q
465 $ echo '{rev}' > q
465 $ echo '{rev}' > q
466 $ hg log --style ./t
466 $ hg log --style ./t
467 8
467 8
468 7
468 7
469 6
469 6
470 5
470 5
471 4
471 4
472 3
472 3
473 2
473 2
474 1
474 1
475 0
475 0
476
476
477 ui.style works:
477 ui.style works:
478
478
479 $ echo '[ui]' > .hg/hgrc
479 $ echo '[ui]' > .hg/hgrc
480 $ echo 'style = t' >> .hg/hgrc
480 $ echo 'style = t' >> .hg/hgrc
481 $ hg log
481 $ hg log
482 8
482 8
483 7
483 7
484 6
484 6
485 5
485 5
486 4
486 4
487 3
487 3
488 2
488 2
489 1
489 1
490 0
490 0
491
491
492
492
493 Issue338:
493 Issue338:
494
494
495 $ hg log --style=changelog > changelog
495 $ hg log --style=changelog > changelog
496
496
497 $ cat changelog
497 $ cat changelog
498 2020-01-01 test <test>
498 2020-01-01 test <test>
499
499
500 * fourth, second, third:
500 * fourth, second, third:
501 third
501 third
502 [95c24699272e] [tip]
502 [95c24699272e] [tip]
503
503
504 1970-01-12 User Name <user@hostname>
504 1970-01-12 User Name <user@hostname>
505
505
506 * second:
506 * second:
507 second
507 second
508 [29114dbae42b]
508 [29114dbae42b]
509
509
510 1970-01-18 person <person>
510 1970-01-18 person <person>
511
511
512 * merge
512 * merge
513 [c7b487c6c50e]
513 [c7b487c6c50e]
514
514
515 * d:
515 * d:
516 new head
516 new head
517 [13207e5a10d9]
517 [13207e5a10d9]
518
518
519 1970-01-17 person <person>
519 1970-01-17 person <person>
520
520
521 * new branch
521 * new branch
522 [32a18f097fcc] <foo>
522 [32a18f097fcc] <foo>
523
523
524 1970-01-16 person <person>
524 1970-01-16 person <person>
525
525
526 * c:
526 * c:
527 no user, no domain
527 no user, no domain
528 [10e46f2dcbf4]
528 [10e46f2dcbf4]
529
529
530 1970-01-14 other <other@place>
530 1970-01-14 other <other@place>
531
531
532 * c:
532 * c:
533 no person
533 no person
534 [97054abb4ab8]
534 [97054abb4ab8]
535
535
536 1970-01-13 A. N. Other <other@place>
536 1970-01-13 A. N. Other <other@place>
537
537
538 * b:
538 * b:
539 other 1 other 2
539 other 1 other 2
540
540
541 other 3
541 other 3
542 [b608e9d1a3f0]
542 [b608e9d1a3f0]
543
543
544 1970-01-12 User Name <user@hostname>
544 1970-01-12 User Name <user@hostname>
545
545
546 * a:
546 * a:
547 line 1 line 2
547 line 1 line 2
548 [1e4e1b8f71e0]
548 [1e4e1b8f71e0]
549
549
550
550
551 Issue2130: xml output for 'hg heads' is malformed
551 Issue2130: xml output for 'hg heads' is malformed
552
552
553 $ hg heads --style changelog
553 $ hg heads --style changelog
554 2020-01-01 test <test>
554 2020-01-01 test <test>
555
555
556 * fourth, second, third:
556 * fourth, second, third:
557 third
557 third
558 [95c24699272e] [tip]
558 [95c24699272e] [tip]
559
559
560 1970-01-18 person <person>
560 1970-01-18 person <person>
561
561
562 * merge
562 * merge
563 [c7b487c6c50e]
563 [c7b487c6c50e]
564
564
565 1970-01-17 person <person>
565 1970-01-17 person <person>
566
566
567 * new branch
567 * new branch
568 [32a18f097fcc] <foo>
568 [32a18f097fcc] <foo>
569
569
570
570
571 Keys work:
571 Keys work:
572
572
573 $ for key in author branches date desc file_adds file_dels file_mods \
573 $ for key in author branch branches date desc file_adds file_dels file_mods \
574 > file_copies file_copies_switch files \
574 > file_copies file_copies_switch files \
575 > manifest node parents rev tags diffstat extras; do
575 > manifest node parents rev tags diffstat extras; do
576 > for mode in '' --verbose --debug; do
576 > for mode in '' --verbose --debug; do
577 > hg log $mode --template "$key$mode: {$key}\n"
577 > hg log $mode --template "$key$mode: {$key}\n"
578 > done
578 > done
579 > done
579 > done
580 author: test
580 author: test
581 author: User Name <user@hostname>
581 author: User Name <user@hostname>
582 author: person
582 author: person
583 author: person
583 author: person
584 author: person
584 author: person
585 author: person
585 author: person
586 author: other@place
586 author: other@place
587 author: A. N. Other <other@place>
587 author: A. N. Other <other@place>
588 author: User Name <user@hostname>
588 author: User Name <user@hostname>
589 author--verbose: test
589 author--verbose: test
590 author--verbose: User Name <user@hostname>
590 author--verbose: User Name <user@hostname>
591 author--verbose: person
591 author--verbose: person
592 author--verbose: person
592 author--verbose: person
593 author--verbose: person
593 author--verbose: person
594 author--verbose: person
594 author--verbose: person
595 author--verbose: other@place
595 author--verbose: other@place
596 author--verbose: A. N. Other <other@place>
596 author--verbose: A. N. Other <other@place>
597 author--verbose: User Name <user@hostname>
597 author--verbose: User Name <user@hostname>
598 author--debug: test
598 author--debug: test
599 author--debug: User Name <user@hostname>
599 author--debug: User Name <user@hostname>
600 author--debug: person
600 author--debug: person
601 author--debug: person
601 author--debug: person
602 author--debug: person
602 author--debug: person
603 author--debug: person
603 author--debug: person
604 author--debug: other@place
604 author--debug: other@place
605 author--debug: A. N. Other <other@place>
605 author--debug: A. N. Other <other@place>
606 author--debug: User Name <user@hostname>
606 author--debug: User Name <user@hostname>
607 branch: default
608 branch: default
609 branch: default
610 branch: default
611 branch: foo
612 branch: default
613 branch: default
614 branch: default
615 branch: default
616 branch--verbose: default
617 branch--verbose: default
618 branch--verbose: default
619 branch--verbose: default
620 branch--verbose: foo
621 branch--verbose: default
622 branch--verbose: default
623 branch--verbose: default
624 branch--verbose: default
625 branch--debug: default
626 branch--debug: default
627 branch--debug: default
628 branch--debug: default
629 branch--debug: foo
630 branch--debug: default
631 branch--debug: default
632 branch--debug: default
633 branch--debug: default
607 branches:
634 branches:
608 branches:
635 branches:
609 branches:
636 branches:
610 branches:
637 branches:
611 branches: foo
638 branches: foo
612 branches:
639 branches:
613 branches:
640 branches:
614 branches:
641 branches:
615 branches:
642 branches:
616 branches--verbose:
643 branches--verbose:
617 branches--verbose:
644 branches--verbose:
618 branches--verbose:
645 branches--verbose:
619 branches--verbose:
646 branches--verbose:
620 branches--verbose: foo
647 branches--verbose: foo
621 branches--verbose:
648 branches--verbose:
622 branches--verbose:
649 branches--verbose:
623 branches--verbose:
650 branches--verbose:
624 branches--verbose:
651 branches--verbose:
625 branches--debug:
652 branches--debug:
626 branches--debug:
653 branches--debug:
627 branches--debug:
654 branches--debug:
628 branches--debug:
655 branches--debug:
629 branches--debug: foo
656 branches--debug: foo
630 branches--debug:
657 branches--debug:
631 branches--debug:
658 branches--debug:
632 branches--debug:
659 branches--debug:
633 branches--debug:
660 branches--debug:
634 date: 1577872860.00
661 date: 1577872860.00
635 date: 1000000.00
662 date: 1000000.00
636 date: 1500001.00
663 date: 1500001.00
637 date: 1500000.00
664 date: 1500000.00
638 date: 1400000.00
665 date: 1400000.00
639 date: 1300000.00
666 date: 1300000.00
640 date: 1200000.00
667 date: 1200000.00
641 date: 1100000.00
668 date: 1100000.00
642 date: 1000000.00
669 date: 1000000.00
643 date--verbose: 1577872860.00
670 date--verbose: 1577872860.00
644 date--verbose: 1000000.00
671 date--verbose: 1000000.00
645 date--verbose: 1500001.00
672 date--verbose: 1500001.00
646 date--verbose: 1500000.00
673 date--verbose: 1500000.00
647 date--verbose: 1400000.00
674 date--verbose: 1400000.00
648 date--verbose: 1300000.00
675 date--verbose: 1300000.00
649 date--verbose: 1200000.00
676 date--verbose: 1200000.00
650 date--verbose: 1100000.00
677 date--verbose: 1100000.00
651 date--verbose: 1000000.00
678 date--verbose: 1000000.00
652 date--debug: 1577872860.00
679 date--debug: 1577872860.00
653 date--debug: 1000000.00
680 date--debug: 1000000.00
654 date--debug: 1500001.00
681 date--debug: 1500001.00
655 date--debug: 1500000.00
682 date--debug: 1500000.00
656 date--debug: 1400000.00
683 date--debug: 1400000.00
657 date--debug: 1300000.00
684 date--debug: 1300000.00
658 date--debug: 1200000.00
685 date--debug: 1200000.00
659 date--debug: 1100000.00
686 date--debug: 1100000.00
660 date--debug: 1000000.00
687 date--debug: 1000000.00
661 desc: third
688 desc: third
662 desc: second
689 desc: second
663 desc: merge
690 desc: merge
664 desc: new head
691 desc: new head
665 desc: new branch
692 desc: new branch
666 desc: no user, no domain
693 desc: no user, no domain
667 desc: no person
694 desc: no person
668 desc: other 1
695 desc: other 1
669 other 2
696 other 2
670
697
671 other 3
698 other 3
672 desc: line 1
699 desc: line 1
673 line 2
700 line 2
674 desc--verbose: third
701 desc--verbose: third
675 desc--verbose: second
702 desc--verbose: second
676 desc--verbose: merge
703 desc--verbose: merge
677 desc--verbose: new head
704 desc--verbose: new head
678 desc--verbose: new branch
705 desc--verbose: new branch
679 desc--verbose: no user, no domain
706 desc--verbose: no user, no domain
680 desc--verbose: no person
707 desc--verbose: no person
681 desc--verbose: other 1
708 desc--verbose: other 1
682 other 2
709 other 2
683
710
684 other 3
711 other 3
685 desc--verbose: line 1
712 desc--verbose: line 1
686 line 2
713 line 2
687 desc--debug: third
714 desc--debug: third
688 desc--debug: second
715 desc--debug: second
689 desc--debug: merge
716 desc--debug: merge
690 desc--debug: new head
717 desc--debug: new head
691 desc--debug: new branch
718 desc--debug: new branch
692 desc--debug: no user, no domain
719 desc--debug: no user, no domain
693 desc--debug: no person
720 desc--debug: no person
694 desc--debug: other 1
721 desc--debug: other 1
695 other 2
722 other 2
696
723
697 other 3
724 other 3
698 desc--debug: line 1
725 desc--debug: line 1
699 line 2
726 line 2
700 file_adds: fourth third
727 file_adds: fourth third
701 file_adds: second
728 file_adds: second
702 file_adds:
729 file_adds:
703 file_adds: d
730 file_adds: d
704 file_adds:
731 file_adds:
705 file_adds:
732 file_adds:
706 file_adds: c
733 file_adds: c
707 file_adds: b
734 file_adds: b
708 file_adds: a
735 file_adds: a
709 file_adds--verbose: fourth third
736 file_adds--verbose: fourth third
710 file_adds--verbose: second
737 file_adds--verbose: second
711 file_adds--verbose:
738 file_adds--verbose:
712 file_adds--verbose: d
739 file_adds--verbose: d
713 file_adds--verbose:
740 file_adds--verbose:
714 file_adds--verbose:
741 file_adds--verbose:
715 file_adds--verbose: c
742 file_adds--verbose: c
716 file_adds--verbose: b
743 file_adds--verbose: b
717 file_adds--verbose: a
744 file_adds--verbose: a
718 file_adds--debug: fourth third
745 file_adds--debug: fourth third
719 file_adds--debug: second
746 file_adds--debug: second
720 file_adds--debug:
747 file_adds--debug:
721 file_adds--debug: d
748 file_adds--debug: d
722 file_adds--debug:
749 file_adds--debug:
723 file_adds--debug:
750 file_adds--debug:
724 file_adds--debug: c
751 file_adds--debug: c
725 file_adds--debug: b
752 file_adds--debug: b
726 file_adds--debug: a
753 file_adds--debug: a
727 file_dels: second
754 file_dels: second
728 file_dels:
755 file_dels:
729 file_dels:
756 file_dels:
730 file_dels:
757 file_dels:
731 file_dels:
758 file_dels:
732 file_dels:
759 file_dels:
733 file_dels:
760 file_dels:
734 file_dels:
761 file_dels:
735 file_dels:
762 file_dels:
736 file_dels--verbose: second
763 file_dels--verbose: second
737 file_dels--verbose:
764 file_dels--verbose:
738 file_dels--verbose:
765 file_dels--verbose:
739 file_dels--verbose:
766 file_dels--verbose:
740 file_dels--verbose:
767 file_dels--verbose:
741 file_dels--verbose:
768 file_dels--verbose:
742 file_dels--verbose:
769 file_dels--verbose:
743 file_dels--verbose:
770 file_dels--verbose:
744 file_dels--verbose:
771 file_dels--verbose:
745 file_dels--debug: second
772 file_dels--debug: second
746 file_dels--debug:
773 file_dels--debug:
747 file_dels--debug:
774 file_dels--debug:
748 file_dels--debug:
775 file_dels--debug:
749 file_dels--debug:
776 file_dels--debug:
750 file_dels--debug:
777 file_dels--debug:
751 file_dels--debug:
778 file_dels--debug:
752 file_dels--debug:
779 file_dels--debug:
753 file_dels--debug:
780 file_dels--debug:
754 file_mods:
781 file_mods:
755 file_mods:
782 file_mods:
756 file_mods:
783 file_mods:
757 file_mods:
784 file_mods:
758 file_mods:
785 file_mods:
759 file_mods: c
786 file_mods: c
760 file_mods:
787 file_mods:
761 file_mods:
788 file_mods:
762 file_mods:
789 file_mods:
763 file_mods--verbose:
790 file_mods--verbose:
764 file_mods--verbose:
791 file_mods--verbose:
765 file_mods--verbose:
792 file_mods--verbose:
766 file_mods--verbose:
793 file_mods--verbose:
767 file_mods--verbose:
794 file_mods--verbose:
768 file_mods--verbose: c
795 file_mods--verbose: c
769 file_mods--verbose:
796 file_mods--verbose:
770 file_mods--verbose:
797 file_mods--verbose:
771 file_mods--verbose:
798 file_mods--verbose:
772 file_mods--debug:
799 file_mods--debug:
773 file_mods--debug:
800 file_mods--debug:
774 file_mods--debug:
801 file_mods--debug:
775 file_mods--debug:
802 file_mods--debug:
776 file_mods--debug:
803 file_mods--debug:
777 file_mods--debug: c
804 file_mods--debug: c
778 file_mods--debug:
805 file_mods--debug:
779 file_mods--debug:
806 file_mods--debug:
780 file_mods--debug:
807 file_mods--debug:
781 file_copies: fourth (second)
808 file_copies: fourth (second)
782 file_copies:
809 file_copies:
783 file_copies:
810 file_copies:
784 file_copies:
811 file_copies:
785 file_copies:
812 file_copies:
786 file_copies:
813 file_copies:
787 file_copies:
814 file_copies:
788 file_copies:
815 file_copies:
789 file_copies:
816 file_copies:
790 file_copies--verbose: fourth (second)
817 file_copies--verbose: fourth (second)
791 file_copies--verbose:
818 file_copies--verbose:
792 file_copies--verbose:
819 file_copies--verbose:
793 file_copies--verbose:
820 file_copies--verbose:
794 file_copies--verbose:
821 file_copies--verbose:
795 file_copies--verbose:
822 file_copies--verbose:
796 file_copies--verbose:
823 file_copies--verbose:
797 file_copies--verbose:
824 file_copies--verbose:
798 file_copies--verbose:
825 file_copies--verbose:
799 file_copies--debug: fourth (second)
826 file_copies--debug: fourth (second)
800 file_copies--debug:
827 file_copies--debug:
801 file_copies--debug:
828 file_copies--debug:
802 file_copies--debug:
829 file_copies--debug:
803 file_copies--debug:
830 file_copies--debug:
804 file_copies--debug:
831 file_copies--debug:
805 file_copies--debug:
832 file_copies--debug:
806 file_copies--debug:
833 file_copies--debug:
807 file_copies--debug:
834 file_copies--debug:
808 file_copies_switch:
835 file_copies_switch:
809 file_copies_switch:
836 file_copies_switch:
810 file_copies_switch:
837 file_copies_switch:
811 file_copies_switch:
838 file_copies_switch:
812 file_copies_switch:
839 file_copies_switch:
813 file_copies_switch:
840 file_copies_switch:
814 file_copies_switch:
841 file_copies_switch:
815 file_copies_switch:
842 file_copies_switch:
816 file_copies_switch:
843 file_copies_switch:
817 file_copies_switch--verbose:
844 file_copies_switch--verbose:
818 file_copies_switch--verbose:
845 file_copies_switch--verbose:
819 file_copies_switch--verbose:
846 file_copies_switch--verbose:
820 file_copies_switch--verbose:
847 file_copies_switch--verbose:
821 file_copies_switch--verbose:
848 file_copies_switch--verbose:
822 file_copies_switch--verbose:
849 file_copies_switch--verbose:
823 file_copies_switch--verbose:
850 file_copies_switch--verbose:
824 file_copies_switch--verbose:
851 file_copies_switch--verbose:
825 file_copies_switch--verbose:
852 file_copies_switch--verbose:
826 file_copies_switch--debug:
853 file_copies_switch--debug:
827 file_copies_switch--debug:
854 file_copies_switch--debug:
828 file_copies_switch--debug:
855 file_copies_switch--debug:
829 file_copies_switch--debug:
856 file_copies_switch--debug:
830 file_copies_switch--debug:
857 file_copies_switch--debug:
831 file_copies_switch--debug:
858 file_copies_switch--debug:
832 file_copies_switch--debug:
859 file_copies_switch--debug:
833 file_copies_switch--debug:
860 file_copies_switch--debug:
834 file_copies_switch--debug:
861 file_copies_switch--debug:
835 files: fourth second third
862 files: fourth second third
836 files: second
863 files: second
837 files:
864 files:
838 files: d
865 files: d
839 files:
866 files:
840 files: c
867 files: c
841 files: c
868 files: c
842 files: b
869 files: b
843 files: a
870 files: a
844 files--verbose: fourth second third
871 files--verbose: fourth second third
845 files--verbose: second
872 files--verbose: second
846 files--verbose:
873 files--verbose:
847 files--verbose: d
874 files--verbose: d
848 files--verbose:
875 files--verbose:
849 files--verbose: c
876 files--verbose: c
850 files--verbose: c
877 files--verbose: c
851 files--verbose: b
878 files--verbose: b
852 files--verbose: a
879 files--verbose: a
853 files--debug: fourth second third
880 files--debug: fourth second third
854 files--debug: second
881 files--debug: second
855 files--debug:
882 files--debug:
856 files--debug: d
883 files--debug: d
857 files--debug:
884 files--debug:
858 files--debug: c
885 files--debug: c
859 files--debug: c
886 files--debug: c
860 files--debug: b
887 files--debug: b
861 files--debug: a
888 files--debug: a
862 manifest: 8:94961b75a2da
889 manifest: 8:94961b75a2da
863 manifest: 7:f2dbc354b94e
890 manifest: 7:f2dbc354b94e
864 manifest: 6:91015e9dbdd7
891 manifest: 6:91015e9dbdd7
865 manifest: 5:4dc3def4f9b4
892 manifest: 5:4dc3def4f9b4
866 manifest: 4:90ae8dda64e1
893 manifest: 4:90ae8dda64e1
867 manifest: 3:cb5a1327723b
894 manifest: 3:cb5a1327723b
868 manifest: 2:6e0e82995c35
895 manifest: 2:6e0e82995c35
869 manifest: 1:4e8d705b1e53
896 manifest: 1:4e8d705b1e53
870 manifest: 0:a0c8bcbbb45c
897 manifest: 0:a0c8bcbbb45c
871 manifest--verbose: 8:94961b75a2da
898 manifest--verbose: 8:94961b75a2da
872 manifest--verbose: 7:f2dbc354b94e
899 manifest--verbose: 7:f2dbc354b94e
873 manifest--verbose: 6:91015e9dbdd7
900 manifest--verbose: 6:91015e9dbdd7
874 manifest--verbose: 5:4dc3def4f9b4
901 manifest--verbose: 5:4dc3def4f9b4
875 manifest--verbose: 4:90ae8dda64e1
902 manifest--verbose: 4:90ae8dda64e1
876 manifest--verbose: 3:cb5a1327723b
903 manifest--verbose: 3:cb5a1327723b
877 manifest--verbose: 2:6e0e82995c35
904 manifest--verbose: 2:6e0e82995c35
878 manifest--verbose: 1:4e8d705b1e53
905 manifest--verbose: 1:4e8d705b1e53
879 manifest--verbose: 0:a0c8bcbbb45c
906 manifest--verbose: 0:a0c8bcbbb45c
880 manifest--debug: 8:94961b75a2da554b4df6fb599e5bfc7d48de0c64
907 manifest--debug: 8:94961b75a2da554b4df6fb599e5bfc7d48de0c64
881 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
908 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
882 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
909 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
883 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
910 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
884 manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
911 manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
885 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
912 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
886 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
913 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
887 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
914 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
888 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
915 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
889 node: 95c24699272ef57d062b8bccc32c878bf841784a
916 node: 95c24699272ef57d062b8bccc32c878bf841784a
890 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
917 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
891 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
918 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
892 node: 13207e5a10d9fd28ec424934298e176197f2c67f
919 node: 13207e5a10d9fd28ec424934298e176197f2c67f
893 node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
920 node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
894 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
921 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
895 node: 97054abb4ab824450e9164180baf491ae0078465
922 node: 97054abb4ab824450e9164180baf491ae0078465
896 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
923 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
897 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
924 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
898 node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
925 node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
899 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
926 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
900 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
927 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
901 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
928 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
902 node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
929 node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
903 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
930 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
904 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
931 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
905 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
932 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
906 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
933 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
907 node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
934 node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
908 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
935 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
909 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
936 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
910 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
937 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
911 node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
938 node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
912 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
939 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
913 node--debug: 97054abb4ab824450e9164180baf491ae0078465
940 node--debug: 97054abb4ab824450e9164180baf491ae0078465
914 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
941 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
915 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
942 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
916 parents:
943 parents:
917 parents: -1:000000000000
944 parents: -1:000000000000
918 parents: 5:13207e5a10d9 4:32a18f097fcc
945 parents: 5:13207e5a10d9 4:32a18f097fcc
919 parents: 3:10e46f2dcbf4
946 parents: 3:10e46f2dcbf4
920 parents:
947 parents:
921 parents:
948 parents:
922 parents:
949 parents:
923 parents:
950 parents:
924 parents:
951 parents:
925 parents--verbose:
952 parents--verbose:
926 parents--verbose: -1:000000000000
953 parents--verbose: -1:000000000000
927 parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
954 parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
928 parents--verbose: 3:10e46f2dcbf4
955 parents--verbose: 3:10e46f2dcbf4
929 parents--verbose:
956 parents--verbose:
930 parents--verbose:
957 parents--verbose:
931 parents--verbose:
958 parents--verbose:
932 parents--verbose:
959 parents--verbose:
933 parents--verbose:
960 parents--verbose:
934 parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
961 parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
935 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
962 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
936 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
963 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
937 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
964 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
938 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
965 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
939 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
966 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
940 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
967 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
941 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
968 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
942 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
969 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
943 rev: 8
970 rev: 8
944 rev: 7
971 rev: 7
945 rev: 6
972 rev: 6
946 rev: 5
973 rev: 5
947 rev: 4
974 rev: 4
948 rev: 3
975 rev: 3
949 rev: 2
976 rev: 2
950 rev: 1
977 rev: 1
951 rev: 0
978 rev: 0
952 rev--verbose: 8
979 rev--verbose: 8
953 rev--verbose: 7
980 rev--verbose: 7
954 rev--verbose: 6
981 rev--verbose: 6
955 rev--verbose: 5
982 rev--verbose: 5
956 rev--verbose: 4
983 rev--verbose: 4
957 rev--verbose: 3
984 rev--verbose: 3
958 rev--verbose: 2
985 rev--verbose: 2
959 rev--verbose: 1
986 rev--verbose: 1
960 rev--verbose: 0
987 rev--verbose: 0
961 rev--debug: 8
988 rev--debug: 8
962 rev--debug: 7
989 rev--debug: 7
963 rev--debug: 6
990 rev--debug: 6
964 rev--debug: 5
991 rev--debug: 5
965 rev--debug: 4
992 rev--debug: 4
966 rev--debug: 3
993 rev--debug: 3
967 rev--debug: 2
994 rev--debug: 2
968 rev--debug: 1
995 rev--debug: 1
969 rev--debug: 0
996 rev--debug: 0
970 tags: tip
997 tags: tip
971 tags:
998 tags:
972 tags:
999 tags:
973 tags:
1000 tags:
974 tags:
1001 tags:
975 tags:
1002 tags:
976 tags:
1003 tags:
977 tags:
1004 tags:
978 tags:
1005 tags:
979 tags--verbose: tip
1006 tags--verbose: tip
980 tags--verbose:
1007 tags--verbose:
981 tags--verbose:
1008 tags--verbose:
982 tags--verbose:
1009 tags--verbose:
983 tags--verbose:
1010 tags--verbose:
984 tags--verbose:
1011 tags--verbose:
985 tags--verbose:
1012 tags--verbose:
986 tags--verbose:
1013 tags--verbose:
987 tags--verbose:
1014 tags--verbose:
988 tags--debug: tip
1015 tags--debug: tip
989 tags--debug:
1016 tags--debug:
990 tags--debug:
1017 tags--debug:
991 tags--debug:
1018 tags--debug:
992 tags--debug:
1019 tags--debug:
993 tags--debug:
1020 tags--debug:
994 tags--debug:
1021 tags--debug:
995 tags--debug:
1022 tags--debug:
996 tags--debug:
1023 tags--debug:
997 diffstat: 3: +2/-1
1024 diffstat: 3: +2/-1
998 diffstat: 1: +1/-0
1025 diffstat: 1: +1/-0
999 diffstat: 0: +0/-0
1026 diffstat: 0: +0/-0
1000 diffstat: 1: +1/-0
1027 diffstat: 1: +1/-0
1001 diffstat: 0: +0/-0
1028 diffstat: 0: +0/-0
1002 diffstat: 1: +1/-0
1029 diffstat: 1: +1/-0
1003 diffstat: 1: +4/-0
1030 diffstat: 1: +4/-0
1004 diffstat: 1: +2/-0
1031 diffstat: 1: +2/-0
1005 diffstat: 1: +1/-0
1032 diffstat: 1: +1/-0
1006 diffstat--verbose: 3: +2/-1
1033 diffstat--verbose: 3: +2/-1
1007 diffstat--verbose: 1: +1/-0
1034 diffstat--verbose: 1: +1/-0
1008 diffstat--verbose: 0: +0/-0
1035 diffstat--verbose: 0: +0/-0
1009 diffstat--verbose: 1: +1/-0
1036 diffstat--verbose: 1: +1/-0
1010 diffstat--verbose: 0: +0/-0
1037 diffstat--verbose: 0: +0/-0
1011 diffstat--verbose: 1: +1/-0
1038 diffstat--verbose: 1: +1/-0
1012 diffstat--verbose: 1: +4/-0
1039 diffstat--verbose: 1: +4/-0
1013 diffstat--verbose: 1: +2/-0
1040 diffstat--verbose: 1: +2/-0
1014 diffstat--verbose: 1: +1/-0
1041 diffstat--verbose: 1: +1/-0
1015 diffstat--debug: 3: +2/-1
1042 diffstat--debug: 3: +2/-1
1016 diffstat--debug: 1: +1/-0
1043 diffstat--debug: 1: +1/-0
1017 diffstat--debug: 0: +0/-0
1044 diffstat--debug: 0: +0/-0
1018 diffstat--debug: 1: +1/-0
1045 diffstat--debug: 1: +1/-0
1019 diffstat--debug: 0: +0/-0
1046 diffstat--debug: 0: +0/-0
1020 diffstat--debug: 1: +1/-0
1047 diffstat--debug: 1: +1/-0
1021 diffstat--debug: 1: +4/-0
1048 diffstat--debug: 1: +4/-0
1022 diffstat--debug: 1: +2/-0
1049 diffstat--debug: 1: +2/-0
1023 diffstat--debug: 1: +1/-0
1050 diffstat--debug: 1: +1/-0
1024 extras: branch=default
1051 extras: branch=default
1025 extras: branch=default
1052 extras: branch=default
1026 extras: branch=default
1053 extras: branch=default
1027 extras: branch=default
1054 extras: branch=default
1028 extras: branch=foo
1055 extras: branch=foo
1029 extras: branch=default
1056 extras: branch=default
1030 extras: branch=default
1057 extras: branch=default
1031 extras: branch=default
1058 extras: branch=default
1032 extras: branch=default
1059 extras: branch=default
1033 extras--verbose: branch=default
1060 extras--verbose: branch=default
1034 extras--verbose: branch=default
1061 extras--verbose: branch=default
1035 extras--verbose: branch=default
1062 extras--verbose: branch=default
1036 extras--verbose: branch=default
1063 extras--verbose: branch=default
1037 extras--verbose: branch=foo
1064 extras--verbose: branch=foo
1038 extras--verbose: branch=default
1065 extras--verbose: branch=default
1039 extras--verbose: branch=default
1066 extras--verbose: branch=default
1040 extras--verbose: branch=default
1067 extras--verbose: branch=default
1041 extras--verbose: branch=default
1068 extras--verbose: branch=default
1042 extras--debug: branch=default
1069 extras--debug: branch=default
1043 extras--debug: branch=default
1070 extras--debug: branch=default
1044 extras--debug: branch=default
1071 extras--debug: branch=default
1045 extras--debug: branch=default
1072 extras--debug: branch=default
1046 extras--debug: branch=foo
1073 extras--debug: branch=foo
1047 extras--debug: branch=default
1074 extras--debug: branch=default
1048 extras--debug: branch=default
1075 extras--debug: branch=default
1049 extras--debug: branch=default
1076 extras--debug: branch=default
1050 extras--debug: branch=default
1077 extras--debug: branch=default
1051
1078
1052
1079
1053 Filters work:
1080 Filters work:
1054
1081
1055 $ hg log --template '{author|domain}\n'
1082 $ hg log --template '{author|domain}\n'
1056
1083
1057 hostname
1084 hostname
1058
1085
1059
1086
1060
1087
1061
1088
1062 place
1089 place
1063 place
1090 place
1064 hostname
1091 hostname
1065
1092
1066 $ hg log --template '{author|person}\n'
1093 $ hg log --template '{author|person}\n'
1067 test
1094 test
1068 User Name
1095 User Name
1069 person
1096 person
1070 person
1097 person
1071 person
1098 person
1072 person
1099 person
1073 other
1100 other
1074 A. N. Other
1101 A. N. Other
1075 User Name
1102 User Name
1076
1103
1077 $ hg log --template '{author|user}\n'
1104 $ hg log --template '{author|user}\n'
1078 test
1105 test
1079 user
1106 user
1080 person
1107 person
1081 person
1108 person
1082 person
1109 person
1083 person
1110 person
1084 other
1111 other
1085 other
1112 other
1086 user
1113 user
1087
1114
1088 $ hg log --template '{date|age}\n' > /dev/null || exit 1
1115 $ hg log --template '{date|age}\n' > /dev/null || exit 1
1089
1116
1090 $ hg log -l1 --template '{date|age}\n'
1117 $ hg log -l1 --template '{date|age}\n'
1091 in the future
1118 in the future
1092 $ hg log --template '{date|date}\n'
1119 $ hg log --template '{date|date}\n'
1093 Wed Jan 01 10:01:00 2020 +0000
1120 Wed Jan 01 10:01:00 2020 +0000
1094 Mon Jan 12 13:46:40 1970 +0000
1121 Mon Jan 12 13:46:40 1970 +0000
1095 Sun Jan 18 08:40:01 1970 +0000
1122 Sun Jan 18 08:40:01 1970 +0000
1096 Sun Jan 18 08:40:00 1970 +0000
1123 Sun Jan 18 08:40:00 1970 +0000
1097 Sat Jan 17 04:53:20 1970 +0000
1124 Sat Jan 17 04:53:20 1970 +0000
1098 Fri Jan 16 01:06:40 1970 +0000
1125 Fri Jan 16 01:06:40 1970 +0000
1099 Wed Jan 14 21:20:00 1970 +0000
1126 Wed Jan 14 21:20:00 1970 +0000
1100 Tue Jan 13 17:33:20 1970 +0000
1127 Tue Jan 13 17:33:20 1970 +0000
1101 Mon Jan 12 13:46:40 1970 +0000
1128 Mon Jan 12 13:46:40 1970 +0000
1102
1129
1103 $ hg log --template '{date|isodate}\n'
1130 $ hg log --template '{date|isodate}\n'
1104 2020-01-01 10:01 +0000
1131 2020-01-01 10:01 +0000
1105 1970-01-12 13:46 +0000
1132 1970-01-12 13:46 +0000
1106 1970-01-18 08:40 +0000
1133 1970-01-18 08:40 +0000
1107 1970-01-18 08:40 +0000
1134 1970-01-18 08:40 +0000
1108 1970-01-17 04:53 +0000
1135 1970-01-17 04:53 +0000
1109 1970-01-16 01:06 +0000
1136 1970-01-16 01:06 +0000
1110 1970-01-14 21:20 +0000
1137 1970-01-14 21:20 +0000
1111 1970-01-13 17:33 +0000
1138 1970-01-13 17:33 +0000
1112 1970-01-12 13:46 +0000
1139 1970-01-12 13:46 +0000
1113
1140
1114 $ hg log --template '{date|isodatesec}\n'
1141 $ hg log --template '{date|isodatesec}\n'
1115 2020-01-01 10:01:00 +0000
1142 2020-01-01 10:01:00 +0000
1116 1970-01-12 13:46:40 +0000
1143 1970-01-12 13:46:40 +0000
1117 1970-01-18 08:40:01 +0000
1144 1970-01-18 08:40:01 +0000
1118 1970-01-18 08:40:00 +0000
1145 1970-01-18 08:40:00 +0000
1119 1970-01-17 04:53:20 +0000
1146 1970-01-17 04:53:20 +0000
1120 1970-01-16 01:06:40 +0000
1147 1970-01-16 01:06:40 +0000
1121 1970-01-14 21:20:00 +0000
1148 1970-01-14 21:20:00 +0000
1122 1970-01-13 17:33:20 +0000
1149 1970-01-13 17:33:20 +0000
1123 1970-01-12 13:46:40 +0000
1150 1970-01-12 13:46:40 +0000
1124
1151
1125 $ hg log --template '{date|rfc822date}\n'
1152 $ hg log --template '{date|rfc822date}\n'
1126 Wed, 01 Jan 2020 10:01:00 +0000
1153 Wed, 01 Jan 2020 10:01:00 +0000
1127 Mon, 12 Jan 1970 13:46:40 +0000
1154 Mon, 12 Jan 1970 13:46:40 +0000
1128 Sun, 18 Jan 1970 08:40:01 +0000
1155 Sun, 18 Jan 1970 08:40:01 +0000
1129 Sun, 18 Jan 1970 08:40:00 +0000
1156 Sun, 18 Jan 1970 08:40:00 +0000
1130 Sat, 17 Jan 1970 04:53:20 +0000
1157 Sat, 17 Jan 1970 04:53:20 +0000
1131 Fri, 16 Jan 1970 01:06:40 +0000
1158 Fri, 16 Jan 1970 01:06:40 +0000
1132 Wed, 14 Jan 1970 21:20:00 +0000
1159 Wed, 14 Jan 1970 21:20:00 +0000
1133 Tue, 13 Jan 1970 17:33:20 +0000
1160 Tue, 13 Jan 1970 17:33:20 +0000
1134 Mon, 12 Jan 1970 13:46:40 +0000
1161 Mon, 12 Jan 1970 13:46:40 +0000
1135
1162
1136 $ hg log --template '{desc|firstline}\n'
1163 $ hg log --template '{desc|firstline}\n'
1137 third
1164 third
1138 second
1165 second
1139 merge
1166 merge
1140 new head
1167 new head
1141 new branch
1168 new branch
1142 no user, no domain
1169 no user, no domain
1143 no person
1170 no person
1144 other 1
1171 other 1
1145 line 1
1172 line 1
1146
1173
1147 $ hg log --template '{node|short}\n'
1174 $ hg log --template '{node|short}\n'
1148 95c24699272e
1175 95c24699272e
1149 29114dbae42b
1176 29114dbae42b
1150 c7b487c6c50e
1177 c7b487c6c50e
1151 13207e5a10d9
1178 13207e5a10d9
1152 32a18f097fcc
1179 32a18f097fcc
1153 10e46f2dcbf4
1180 10e46f2dcbf4
1154 97054abb4ab8
1181 97054abb4ab8
1155 b608e9d1a3f0
1182 b608e9d1a3f0
1156 1e4e1b8f71e0
1183 1e4e1b8f71e0
1157
1184
1158 $ hg log --template '<changeset author="{author|xmlescape}"/>\n'
1185 $ hg log --template '<changeset author="{author|xmlescape}"/>\n'
1159 <changeset author="test"/>
1186 <changeset author="test"/>
1160 <changeset author="User Name &lt;user@hostname&gt;"/>
1187 <changeset author="User Name &lt;user@hostname&gt;"/>
1161 <changeset author="person"/>
1188 <changeset author="person"/>
1162 <changeset author="person"/>
1189 <changeset author="person"/>
1163 <changeset author="person"/>
1190 <changeset author="person"/>
1164 <changeset author="person"/>
1191 <changeset author="person"/>
1165 <changeset author="other@place"/>
1192 <changeset author="other@place"/>
1166 <changeset author="A. N. Other &lt;other@place&gt;"/>
1193 <changeset author="A. N. Other &lt;other@place&gt;"/>
1167 <changeset author="User Name &lt;user@hostname&gt;"/>
1194 <changeset author="User Name &lt;user@hostname&gt;"/>
1168
1195
1169 $ hg log --template '{rev}: {children}\n'
1196 $ hg log --template '{rev}: {children}\n'
1170 8:
1197 8:
1171 7: 8:95c24699272e
1198 7: 8:95c24699272e
1172 6:
1199 6:
1173 5: 6:c7b487c6c50e
1200 5: 6:c7b487c6c50e
1174 4: 6:c7b487c6c50e
1201 4: 6:c7b487c6c50e
1175 3: 4:32a18f097fcc 5:13207e5a10d9
1202 3: 4:32a18f097fcc 5:13207e5a10d9
1176 2: 3:10e46f2dcbf4
1203 2: 3:10e46f2dcbf4
1177 1: 2:97054abb4ab8
1204 1: 2:97054abb4ab8
1178 0: 1:b608e9d1a3f0
1205 0: 1:b608e9d1a3f0
1179
1206
1180 Formatnode filter works:
1207 Formatnode filter works:
1181
1208
1182 $ hg -q log -r 0 --template '{node|formatnode}\n'
1209 $ hg -q log -r 0 --template '{node|formatnode}\n'
1183 1e4e1b8f71e0
1210 1e4e1b8f71e0
1184
1211
1185 $ hg log -r 0 --template '{node|formatnode}\n'
1212 $ hg log -r 0 --template '{node|formatnode}\n'
1186 1e4e1b8f71e0
1213 1e4e1b8f71e0
1187
1214
1188 $ hg -v log -r 0 --template '{node|formatnode}\n'
1215 $ hg -v log -r 0 --template '{node|formatnode}\n'
1189 1e4e1b8f71e0
1216 1e4e1b8f71e0
1190
1217
1191 $ hg --debug log -r 0 --template '{node|formatnode}\n'
1218 $ hg --debug log -r 0 --template '{node|formatnode}\n'
1192 1e4e1b8f71e05681d422154f5421e385fec3454f
1219 1e4e1b8f71e05681d422154f5421e385fec3454f
1193
1220
1194 Error on syntax:
1221 Error on syntax:
1195
1222
1196 $ echo 'x = "f' >> t
1223 $ echo 'x = "f' >> t
1197 $ hg log
1224 $ hg log
1198 abort: t:3: unmatched quotes
1225 abort: t:3: unmatched quotes
1199 [255]
1226 [255]
1200
1227
1201 $ cd ..
1228 $ cd ..
1202
1229
1203
1230
1204 latesttag:
1231 latesttag:
1205
1232
1206 $ hg init latesttag
1233 $ hg init latesttag
1207 $ cd latesttag
1234 $ cd latesttag
1208
1235
1209 $ echo a > file
1236 $ echo a > file
1210 $ hg ci -Am a -d '0 0'
1237 $ hg ci -Am a -d '0 0'
1211 adding file
1238 adding file
1212
1239
1213 $ echo b >> file
1240 $ echo b >> file
1214 $ hg ci -m b -d '1 0'
1241 $ hg ci -m b -d '1 0'
1215
1242
1216 $ echo c >> head1
1243 $ echo c >> head1
1217 $ hg ci -Am h1c -d '2 0'
1244 $ hg ci -Am h1c -d '2 0'
1218 adding head1
1245 adding head1
1219
1246
1220 $ hg update -q 1
1247 $ hg update -q 1
1221 $ echo d >> head2
1248 $ echo d >> head2
1222 $ hg ci -Am h2d -d '3 0'
1249 $ hg ci -Am h2d -d '3 0'
1223 adding head2
1250 adding head2
1224 created new head
1251 created new head
1225
1252
1226 $ echo e >> head2
1253 $ echo e >> head2
1227 $ hg ci -m h2e -d '4 0'
1254 $ hg ci -m h2e -d '4 0'
1228
1255
1229 $ hg merge -q
1256 $ hg merge -q
1230 $ hg ci -m merge -d '5 0'
1257 $ hg ci -m merge -d '5 0'
1231
1258
1232 No tag set:
1259 No tag set:
1233
1260
1234 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1261 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1235 5: null+5
1262 5: null+5
1236 4: null+4
1263 4: null+4
1237 3: null+3
1264 3: null+3
1238 2: null+3
1265 2: null+3
1239 1: null+2
1266 1: null+2
1240 0: null+1
1267 0: null+1
1241
1268
1242 One common tag: longuest path wins:
1269 One common tag: longuest path wins:
1243
1270
1244 $ hg tag -r 1 -m t1 -d '6 0' t1
1271 $ hg tag -r 1 -m t1 -d '6 0' t1
1245 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1272 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1246 6: t1+4
1273 6: t1+4
1247 5: t1+3
1274 5: t1+3
1248 4: t1+2
1275 4: t1+2
1249 3: t1+1
1276 3: t1+1
1250 2: t1+1
1277 2: t1+1
1251 1: t1+0
1278 1: t1+0
1252 0: null+1
1279 0: null+1
1253
1280
1254 One ancestor tag: more recent wins:
1281 One ancestor tag: more recent wins:
1255
1282
1256 $ hg tag -r 2 -m t2 -d '7 0' t2
1283 $ hg tag -r 2 -m t2 -d '7 0' t2
1257 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1284 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1258 7: t2+3
1285 7: t2+3
1259 6: t2+2
1286 6: t2+2
1260 5: t2+1
1287 5: t2+1
1261 4: t1+2
1288 4: t1+2
1262 3: t1+1
1289 3: t1+1
1263 2: t2+0
1290 2: t2+0
1264 1: t1+0
1291 1: t1+0
1265 0: null+1
1292 0: null+1
1266
1293
1267 Two branch tags: more recent wins:
1294 Two branch tags: more recent wins:
1268
1295
1269 $ hg tag -r 3 -m t3 -d '8 0' t3
1296 $ hg tag -r 3 -m t3 -d '8 0' t3
1270 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1297 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1271 8: t3+5
1298 8: t3+5
1272 7: t3+4
1299 7: t3+4
1273 6: t3+3
1300 6: t3+3
1274 5: t3+2
1301 5: t3+2
1275 4: t3+1
1302 4: t3+1
1276 3: t3+0
1303 3: t3+0
1277 2: t2+0
1304 2: t2+0
1278 1: t1+0
1305 1: t1+0
1279 0: null+1
1306 0: null+1
1280
1307
1281 Merged tag overrides:
1308 Merged tag overrides:
1282
1309
1283 $ hg tag -r 5 -m t5 -d '9 0' t5
1310 $ hg tag -r 5 -m t5 -d '9 0' t5
1284 $ hg tag -r 3 -m at3 -d '10 0' at3
1311 $ hg tag -r 3 -m at3 -d '10 0' at3
1285 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1312 $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
1286 10: t5+5
1313 10: t5+5
1287 9: t5+4
1314 9: t5+4
1288 8: t5+3
1315 8: t5+3
1289 7: t5+2
1316 7: t5+2
1290 6: t5+1
1317 6: t5+1
1291 5: t5+0
1318 5: t5+0
1292 4: at3:t3+1
1319 4: at3:t3+1
1293 3: at3:t3+0
1320 3: at3:t3+0
1294 2: t2+0
1321 2: t2+0
1295 1: t1+0
1322 1: t1+0
1296 0: null+1
1323 0: null+1
1297
1324
1298 $ cd ..
1325 $ cd ..
1299
1326
1300
1327
1301 Style path expansion: issue1948 - ui.style option doesn't work on OSX
1328 Style path expansion: issue1948 - ui.style option doesn't work on OSX
1302 if it is a relative path
1329 if it is a relative path
1303
1330
1304 $ mkdir -p home/styles
1331 $ mkdir -p home/styles
1305
1332
1306 $ cat > home/styles/teststyle <<EOF
1333 $ cat > home/styles/teststyle <<EOF
1307 > changeset = 'test {rev}:{node|short}\n'
1334 > changeset = 'test {rev}:{node|short}\n'
1308 > EOF
1335 > EOF
1309
1336
1310 $ HOME=`pwd`/home; export HOME
1337 $ HOME=`pwd`/home; export HOME
1311
1338
1312 $ cat > latesttag/.hg/hgrc <<EOF
1339 $ cat > latesttag/.hg/hgrc <<EOF
1313 > [ui]
1340 > [ui]
1314 > style = ~/styles/teststyle
1341 > style = ~/styles/teststyle
1315 > EOF
1342 > EOF
1316
1343
1317 $ hg -R latesttag tip
1344 $ hg -R latesttag tip
1318 test 10:dee8f28249af
1345 test 10:dee8f28249af
1319
1346
1320 Test recursive showlist template (issue1989):
1347 Test recursive showlist template (issue1989):
1321
1348
1322 $ cat > style1989 <<EOF
1349 $ cat > style1989 <<EOF
1323 > changeset = '{file_mods}{manifest}{extras}'
1350 > changeset = '{file_mods}{manifest}{extras}'
1324 > file_mod = 'M|{author|person}\n'
1351 > file_mod = 'M|{author|person}\n'
1325 > manifest = '{rev},{author}\n'
1352 > manifest = '{rev},{author}\n'
1326 > extra = '{key}: {author}\n'
1353 > extra = '{key}: {author}\n'
1327 > EOF
1354 > EOF
1328
1355
1329 $ hg -R latesttag log -r tip --style=style1989
1356 $ hg -R latesttag log -r tip --style=style1989
1330 M|test
1357 M|test
1331 10,test
1358 10,test
1332 branch: test
1359 branch: test
1333
1360
General Comments 0
You need to be logged in to leave comments. Login now