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