##// END OF EJS Templates
graphlog: handle old-style --rev values...
Patrick Mezard -
r16316:0f1e621d default
parent child Browse files
Show More
@@ -1,511 +1,521 b''
1 1 # ASCII graph log extension for Mercurial
2 2 #
3 3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 '''command to view revision graphs from a shell
9 9
10 10 This extension adds a --graph option to the incoming, outgoing and log
11 11 commands. When this options is given, an ASCII representation of the
12 12 revision graph is also shown.
13 13 '''
14 14
15 15 from mercurial.cmdutil import show_changeset
16 16 from mercurial.commands import templateopts
17 17 from mercurial.i18n import _
18 18 from mercurial.node import nullrev
19 19 from mercurial import cmdutil, commands, extensions, scmutil
20 20 from mercurial import hg, util, graphmod, templatekw
21 from mercurial import revset as revsetmod
21 22
22 23 cmdtable = {}
23 24 command = cmdutil.command(cmdtable)
24 25
25 26 ASCIIDATA = 'ASC'
26 27
27 28 def asciiedges(type, char, lines, seen, rev, parents):
28 29 """adds edge info to changelog DAG walk suitable for ascii()"""
29 30 if rev not in seen:
30 31 seen.append(rev)
31 32 nodeidx = seen.index(rev)
32 33
33 34 knownparents = []
34 35 newparents = []
35 36 for parent in parents:
36 37 if parent in seen:
37 38 knownparents.append(parent)
38 39 else:
39 40 newparents.append(parent)
40 41
41 42 ncols = len(seen)
42 43 nextseen = seen[:]
43 44 nextseen[nodeidx:nodeidx + 1] = newparents
44 45 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
45 46
46 47 while len(newparents) > 2:
47 48 # ascii() only knows how to add or remove a single column between two
48 49 # calls. Nodes with more than two parents break this constraint so we
49 50 # introduce intermediate expansion lines to grow the active node list
50 51 # slowly.
51 52 edges.append((nodeidx, nodeidx))
52 53 edges.append((nodeidx, nodeidx + 1))
53 54 nmorecols = 1
54 55 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
55 56 char = '\\'
56 57 lines = []
57 58 nodeidx += 1
58 59 ncols += 1
59 60 edges = []
60 61 del newparents[0]
61 62
62 63 if len(newparents) > 0:
63 64 edges.append((nodeidx, nodeidx))
64 65 if len(newparents) > 1:
65 66 edges.append((nodeidx, nodeidx + 1))
66 67 nmorecols = len(nextseen) - ncols
67 68 seen[:] = nextseen
68 69 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
69 70
70 71 def fix_long_right_edges(edges):
71 72 for (i, (start, end)) in enumerate(edges):
72 73 if end > start:
73 74 edges[i] = (start, end + 1)
74 75
75 76 def get_nodeline_edges_tail(
76 77 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
77 78 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
78 79 # Still going in the same non-vertical direction.
79 80 if n_columns_diff == -1:
80 81 start = max(node_index + 1, p_node_index)
81 82 tail = ["|", " "] * (start - node_index - 1)
82 83 tail.extend(["/", " "] * (n_columns - start))
83 84 return tail
84 85 else:
85 86 return ["\\", " "] * (n_columns - node_index - 1)
86 87 else:
87 88 return ["|", " "] * (n_columns - node_index - 1)
88 89
89 90 def draw_edges(edges, nodeline, interline):
90 91 for (start, end) in edges:
91 92 if start == end + 1:
92 93 interline[2 * end + 1] = "/"
93 94 elif start == end - 1:
94 95 interline[2 * start + 1] = "\\"
95 96 elif start == end:
96 97 interline[2 * start] = "|"
97 98 else:
98 99 if 2 * end >= len(nodeline):
99 100 continue
100 101 nodeline[2 * end] = "+"
101 102 if start > end:
102 103 (start, end) = (end, start)
103 104 for i in range(2 * start + 1, 2 * end):
104 105 if nodeline[i] != "+":
105 106 nodeline[i] = "-"
106 107
107 108 def get_padding_line(ni, n_columns, edges):
108 109 line = []
109 110 line.extend(["|", " "] * ni)
110 111 if (ni, ni - 1) in edges or (ni, ni) in edges:
111 112 # (ni, ni - 1) (ni, ni)
112 113 # | | | | | | | |
113 114 # +---o | | o---+
114 115 # | | c | | c | |
115 116 # | |/ / | |/ /
116 117 # | | | | | |
117 118 c = "|"
118 119 else:
119 120 c = " "
120 121 line.extend([c, " "])
121 122 line.extend(["|", " "] * (n_columns - ni - 1))
122 123 return line
123 124
124 125 def asciistate():
125 126 """returns the initial value for the "state" argument to ascii()"""
126 127 return [0, 0]
127 128
128 129 def ascii(ui, state, type, char, text, coldata):
129 130 """prints an ASCII graph of the DAG
130 131
131 132 takes the following arguments (one call per node in the graph):
132 133
133 134 - ui to write to
134 135 - Somewhere to keep the needed state in (init to asciistate())
135 136 - Column of the current node in the set of ongoing edges.
136 137 - Type indicator of node data == ASCIIDATA.
137 138 - Payload: (char, lines):
138 139 - Character to use as node's symbol.
139 140 - List of lines to display as the node's text.
140 141 - Edges; a list of (col, next_col) indicating the edges between
141 142 the current node and its parents.
142 143 - Number of columns (ongoing edges) in the current revision.
143 144 - The difference between the number of columns (ongoing edges)
144 145 in the next revision and the number of columns (ongoing edges)
145 146 in the current revision. That is: -1 means one column removed;
146 147 0 means no columns added or removed; 1 means one column added.
147 148 """
148 149
149 150 idx, edges, ncols, coldiff = coldata
150 151 assert -2 < coldiff < 2
151 152 if coldiff == -1:
152 153 # Transform
153 154 #
154 155 # | | | | | |
155 156 # o | | into o---+
156 157 # |X / |/ /
157 158 # | | | |
158 159 fix_long_right_edges(edges)
159 160
160 161 # add_padding_line says whether to rewrite
161 162 #
162 163 # | | | | | | | |
163 164 # | o---+ into | o---+
164 165 # | / / | | | # <--- padding line
165 166 # o | | | / /
166 167 # o | |
167 168 add_padding_line = (len(text) > 2 and coldiff == -1 and
168 169 [x for (x, y) in edges if x + 1 < y])
169 170
170 171 # fix_nodeline_tail says whether to rewrite
171 172 #
172 173 # | | o | | | | o | |
173 174 # | | |/ / | | |/ /
174 175 # | o | | into | o / / # <--- fixed nodeline tail
175 176 # | |/ / | |/ /
176 177 # o | | o | |
177 178 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
178 179
179 180 # nodeline is the line containing the node character (typically o)
180 181 nodeline = ["|", " "] * idx
181 182 nodeline.extend([char, " "])
182 183
183 184 nodeline.extend(
184 185 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
185 186 state[0], fix_nodeline_tail))
186 187
187 188 # shift_interline is the line containing the non-vertical
188 189 # edges between this entry and the next
189 190 shift_interline = ["|", " "] * idx
190 191 if coldiff == -1:
191 192 n_spaces = 1
192 193 edge_ch = "/"
193 194 elif coldiff == 0:
194 195 n_spaces = 2
195 196 edge_ch = "|"
196 197 else:
197 198 n_spaces = 3
198 199 edge_ch = "\\"
199 200 shift_interline.extend(n_spaces * [" "])
200 201 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
201 202
202 203 # draw edges from the current node to its parents
203 204 draw_edges(edges, nodeline, shift_interline)
204 205
205 206 # lines is the list of all graph lines to print
206 207 lines = [nodeline]
207 208 if add_padding_line:
208 209 lines.append(get_padding_line(idx, ncols, edges))
209 210 lines.append(shift_interline)
210 211
211 212 # make sure that there are as many graph lines as there are
212 213 # log strings
213 214 while len(text) < len(lines):
214 215 text.append("")
215 216 if len(lines) < len(text):
216 217 extra_interline = ["|", " "] * (ncols + coldiff)
217 218 while len(lines) < len(text):
218 219 lines.append(extra_interline)
219 220
220 221 # print lines
221 222 indentation_level = max(ncols, ncols + coldiff)
222 223 for (line, logstr) in zip(lines, text):
223 224 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
224 225 ui.write(ln.rstrip() + '\n')
225 226
226 227 # ... and start over
227 228 state[0] = coldiff
228 229 state[1] = idx
229 230
230 231 def get_revs(repo, rev_opt):
231 232 if rev_opt:
232 233 revs = scmutil.revrange(repo, rev_opt)
233 234 if len(revs) == 0:
234 235 return (nullrev, nullrev)
235 236 return (max(revs), min(revs))
236 237 else:
237 238 return (len(repo) - 1, 0)
238 239
239 240 def check_unsupported_flags(pats, opts):
240 241 for op in ["newest_first"]:
241 242 if op in opts and opts[op]:
242 243 raise util.Abort(_("-G/--graph option is incompatible with --%s")
243 244 % op.replace("_", "-"))
244 245
245 246 def makefilematcher(repo, pats, followfirst):
246 247 # When displaying a revision with --patch --follow FILE, we have
247 248 # to know which file of the revision must be diffed. With
248 249 # --follow, we want the names of the ancestors of FILE in the
249 250 # revision, stored in "fcache". "fcache" is populated by
250 251 # reproducing the graph traversal already done by --follow revset
251 252 # and relating linkrevs to file names (which is not "correct" but
252 253 # good enough).
253 254 fcache = {}
254 255 fcacheready = [False]
255 256 pctx = repo['.']
256 257 wctx = repo[None]
257 258
258 259 def populate():
259 260 for fn in pats:
260 261 for i in ((pctx[fn],), pctx[fn].ancestors(followfirst=followfirst)):
261 262 for c in i:
262 263 fcache.setdefault(c.linkrev(), set()).add(c.path())
263 264
264 265 def filematcher(rev):
265 266 if not fcacheready[0]:
266 267 # Lazy initialization
267 268 fcacheready[0] = True
268 269 populate()
269 270 return scmutil.match(wctx, fcache.get(rev, []), default='path')
270 271
271 272 return filematcher
272 273
273 274 def revset(repo, pats, opts):
274 275 """Return (expr, filematcher) where expr is a revset string built
275 of revisions, log options and file patterns. If --stat or --patch
276 are not passed filematcher is None. Otherwise it a a callable
277 taking a revision number and returning a match objects filtering
278 the files to be detailed when displaying the revision.
276 log options and file patterns, or None. Note that --rev options
277 are ignored when building expr because we do not know if they are
278 proper revsets or legacy expressions like a 'foo-bar' tags. If
279 --stat or --patch are not passed filematcher is None. Otherwise it
280 a a callable taking a revision number and returning a match
281 objects filtering the files to be detailed when displaying the
282 revision.
279 283 """
280 284 opt2revset = {
281 285 'follow': ('follow()', None),
282 286 'follow_first': ('_followfirst()', None),
283 287 'no_merges': ('not merge()', None),
284 288 'only_merges': ('merge()', None),
289 '_matchfiles': ('_matchfiles(%(val)s)', None),
285 290 'date': ('date(%(val)r)', None),
286 291 'branch': ('branch(%(val)r)', ' or '),
287 292 '_patslog': ('filelog(%(val)r)', ' or '),
288 293 '_patsfollow': ('follow(%(val)r)', ' or '),
289 294 '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '),
290 295 'keyword': ('keyword(%(val)r)', ' or '),
291 296 'prune': ('not (%(val)r or ancestors(%(val)r))', ' and '),
292 297 'user': ('user(%(val)r)', ' or '),
293 'rev': ('%(val)s', ' or '),
294 298 }
295 299
296 300 opts = dict(opts)
297 301 # branch and only_branch are really aliases and must be handled at
298 302 # the same time
299 303 opts['branch'] = opts.get('branch', []) + opts.get('only_branch', [])
300 304 follow = opts.get('follow') or opts.get('follow_first')
301 305 followfirst = opts.get('follow_first')
302 306 if 'follow' in opts:
303 307 del opts['follow']
304 308 if 'follow_first' in opts:
305 309 del opts['follow_first']
306 310 # pats/include/exclude are passed to match.match() directly in
307 311 # _matchfile() revset but walkchangerevs() builds its matcher with
308 312 # scmutil.match(). The difference is input pats are globbed on
309 313 # platforms without shell expansion (windows).
310 314 pctx = repo[None]
311 315 match, pats = scmutil.matchandpats(pctx, pats, opts)
312 316 slowpath = match.anypats() or (match.files() and opts.get('removed'))
313 317 if not slowpath:
314 318 for f in match.files():
315 319 if follow and f not in pctx:
316 320 raise util.Abort(_('cannot follow file not in parent '
317 321 'revision: "%s"') % f)
318 322 filelog = repo.file(f)
319 323 if not len(filelog):
320 324 # A zero count may be a directory or deleted file, so
321 325 # try to find matching entries on the slow path.
322 326 if follow:
323 327 raise util.Abort(
324 328 _('cannot follow nonexistent file: "%s"') % f)
325 329 slowpath = True
326 330 if slowpath:
327 331 # See cmdutil.walkchangerevs() slow path.
328 332 #
329 333 if follow:
330 334 raise util.Abort(_('can only follow copies/renames for explicit '
331 335 'filenames'))
332 336 # pats/include/exclude cannot be represented as separate
333 337 # revset expressions as their filtering logic applies at file
334 338 # level. For instance "-I a -X a" matches a revision touching
335 339 # "a" and "b" while "file(a) and not file(b)" does
336 340 # not. Besides, filesets are evaluated against the working
337 341 # directory.
338 342 matchargs = ['r:']
339 343 for p in pats:
340 344 matchargs.append('p:' + p)
341 345 for p in opts.get('include', []):
342 346 matchargs.append('i:' + p)
343 347 for p in opts.get('exclude', []):
344 348 matchargs.append('x:' + p)
345 349 matchargs = ','.join(('%r' % p) for p in matchargs)
346 opts['rev'] = opts.get('rev', []) + ['_matchfiles(%s)' % matchargs]
350 opts['_matchfiles'] = matchargs
347 351 else:
348 352 if follow:
349 353 if followfirst:
350 354 if pats:
351 355 opts['_patsfollowfirst'] = list(pats)
352 356 else:
353 357 opts['follow_first'] = True
354 358 else:
355 359 if pats:
356 360 opts['_patsfollow'] = list(pats)
357 361 else:
358 362 opts['follow'] = True
359 363 else:
360 364 opts['_patslog'] = list(pats)
361 365
362 366 filematcher = None
363 367 if opts.get('patch') or opts.get('stat'):
364 368 if follow:
365 369 filematcher = makefilematcher(repo, pats, followfirst)
366 370 else:
367 371 filematcher = lambda rev: match
368 372
369 373 revset = []
370 374 for op, val in opts.iteritems():
371 375 if not val:
372 376 continue
373 377 if op not in opt2revset:
374 378 continue
375 379 revop, andor = opt2revset[op]
376 380 if '%(val)' not in revop:
377 381 revset.append(revop)
378 382 else:
379 383 if not isinstance(val, list):
380 384 expr = revop % {'val': val}
381 385 else:
382 386 expr = '(' + andor.join((revop % {'val': v}) for v in val) + ')'
383 387 revset.append(expr)
384 388
385 389 if revset:
386 390 revset = '(' + ' and '.join(revset) + ')'
387 391 else:
388 revset = 'all()'
392 revset = None
389 393 return revset, filematcher
390 394
391 395 def generate(ui, dag, displayer, showparents, edgefn, getrenamed=None,
392 396 filematcher=None):
393 397 seen, state = [], asciistate()
394 398 for rev, type, ctx, parents in dag:
395 399 char = ctx.node() in showparents and '@' or 'o'
396 400 copies = None
397 401 if getrenamed and ctx.rev():
398 402 copies = []
399 403 for fn in ctx.files():
400 404 rename = getrenamed(fn, ctx.rev())
401 405 if rename:
402 406 copies.append((fn, rename[0]))
403 407 revmatchfn = None
404 408 if filematcher is not None:
405 409 revmatchfn = filematcher(ctx.rev())
406 410 displayer.show(ctx, copies=copies, matchfn=revmatchfn)
407 411 lines = displayer.hunk.pop(rev).split('\n')[:-1]
408 412 displayer.flush(rev)
409 413 edges = edgefn(type, char, lines, seen, rev, parents)
410 414 for type, char, lines, coldata in edges:
411 415 ascii(ui, state, type, char, lines, coldata)
412 416 displayer.close()
413 417
414 418 @command('glog',
415 419 [('l', 'limit', '',
416 420 _('limit number of changes displayed'), _('NUM')),
417 421 ('p', 'patch', False, _('show patch')),
418 422 ('r', 'rev', [], _('show the specified revision or range'), _('REV')),
419 423 ] + templateopts,
420 424 _('hg glog [OPTION]... [FILE]'))
421 425 def graphlog(ui, repo, *pats, **opts):
422 426 """show revision history alongside an ASCII revision graph
423 427
424 428 Print a revision history alongside a revision graph drawn with
425 429 ASCII characters.
426 430
427 431 Nodes printed as an @ character are parents of the working
428 432 directory.
429 433 """
430 434
431 435 check_unsupported_flags(pats, opts)
432 436
433 437 expr, filematcher = revset(repo, pats, opts)
434 revs = sorted(scmutil.revrange(repo, [expr]), reverse=1)
438 if opts.get('rev'):
439 revs = scmutil.revrange(repo, opts['rev'])
440 else:
441 revs = range(len(repo))
442 if expr:
443 revs = revsetmod.match(repo.ui, expr)(repo, revs)
444 revs = sorted(revs, reverse=1)
435 445 limit = cmdutil.loglimit(opts)
436 446 if limit is not None:
437 447 revs = revs[:limit]
438 448 revdag = graphmod.dagwalker(repo, revs)
439 449
440 450 getrenamed = None
441 451 if opts.get('copies'):
442 452 endrev = None
443 453 if opts.get('rev'):
444 454 endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1
445 455 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
446 456 displayer = show_changeset(ui, repo, opts, buffered=True)
447 457 showparents = [ctx.node() for ctx in repo[None].parents()]
448 458 generate(ui, revdag, displayer, showparents, asciiedges, getrenamed,
449 459 filematcher)
450 460
451 461 def graphrevs(repo, nodes, opts):
452 462 limit = cmdutil.loglimit(opts)
453 463 nodes.reverse()
454 464 if limit is not None:
455 465 nodes = nodes[:limit]
456 466 return graphmod.nodes(repo, nodes)
457 467
458 468 def goutgoing(ui, repo, dest=None, **opts):
459 469 """show the outgoing changesets alongside an ASCII revision graph
460 470
461 471 Print the outgoing changesets alongside a revision graph drawn with
462 472 ASCII characters.
463 473
464 474 Nodes printed as an @ character are parents of the working
465 475 directory.
466 476 """
467 477
468 478 check_unsupported_flags([], opts)
469 479 o = hg._outgoing(ui, repo, dest, opts)
470 480 if o is None:
471 481 return
472 482
473 483 revdag = graphrevs(repo, o, opts)
474 484 displayer = show_changeset(ui, repo, opts, buffered=True)
475 485 showparents = [ctx.node() for ctx in repo[None].parents()]
476 486 generate(ui, revdag, displayer, showparents, asciiedges)
477 487
478 488 def gincoming(ui, repo, source="default", **opts):
479 489 """show the incoming changesets alongside an ASCII revision graph
480 490
481 491 Print the incoming changesets alongside a revision graph drawn with
482 492 ASCII characters.
483 493
484 494 Nodes printed as an @ character are parents of the working
485 495 directory.
486 496 """
487 497 def subreporecurse():
488 498 return 1
489 499
490 500 check_unsupported_flags([], opts)
491 501 def display(other, chlist, displayer):
492 502 revdag = graphrevs(other, chlist, opts)
493 503 showparents = [ctx.node() for ctx in repo[None].parents()]
494 504 generate(ui, revdag, displayer, showparents, asciiedges)
495 505
496 506 hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
497 507
498 508 def uisetup(ui):
499 509 '''Initialize the extension.'''
500 510 _wrapcmd('log', commands.table, graphlog)
501 511 _wrapcmd('incoming', commands.table, gincoming)
502 512 _wrapcmd('outgoing', commands.table, goutgoing)
503 513
504 514 def _wrapcmd(cmd, table, wrapfn):
505 515 '''wrap the command'''
506 516 def graph(orig, *args, **kwargs):
507 517 if kwargs['graph']:
508 518 return wrapfn(*args, **kwargs)
509 519 return orig(*args, **kwargs)
510 520 entry = extensions.wrapcommand(table, cmd, graph)
511 521 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
@@ -1,1923 +1,1932 b''
1 1 @ (34) head
2 2 |
3 3 | o (33) head
4 4 | |
5 5 o | (32) expand
6 6 |\ \
7 7 | o \ (31) expand
8 8 | |\ \
9 9 | | o \ (30) expand
10 10 | | |\ \
11 11 | | | o | (29) regular commit
12 12 | | | | |
13 13 | | o | | (28) merge zero known
14 14 | | |\ \ \
15 15 o | | | | | (27) collapse
16 16 |/ / / / /
17 17 | | o---+ (26) merge one known; far right
18 18 | | | | |
19 19 +---o | | (25) merge one known; far left
20 20 | | | | |
21 21 | | o | | (24) merge one known; immediate right
22 22 | | |\| |
23 23 | | o | | (23) merge one known; immediate left
24 24 | |/| | |
25 25 +---o---+ (22) merge two known; one far left, one far right
26 26 | | / /
27 27 o | | | (21) expand
28 28 |\ \ \ \
29 29 | o---+-+ (20) merge two known; two far right
30 30 | / / /
31 31 o | | | (19) expand
32 32 |\ \ \ \
33 33 +---+---o (18) merge two known; two far left
34 34 | | | |
35 35 | o | | (17) expand
36 36 | |\ \ \
37 37 | | o---+ (16) merge two known; one immediate right, one near right
38 38 | | |/ /
39 39 o | | | (15) expand
40 40 |\ \ \ \
41 41 | o-----+ (14) merge two known; one immediate right, one far right
42 42 | |/ / /
43 43 o | | | (13) expand
44 44 |\ \ \ \
45 45 +---o | | (12) merge two known; one immediate right, one far left
46 46 | | |/ /
47 47 | o | | (11) expand
48 48 | |\ \ \
49 49 | | o---+ (10) merge two known; one immediate left, one near right
50 50 | |/ / /
51 51 o | | | (9) expand
52 52 |\ \ \ \
53 53 | o-----+ (8) merge two known; one immediate left, one far right
54 54 |/ / / /
55 55 o | | | (7) expand
56 56 |\ \ \ \
57 57 +---o | | (6) merge two known; one immediate left, one far left
58 58 | |/ / /
59 59 | o | | (5) expand
60 60 | |\ \ \
61 61 | | o | | (4) merge two known; one immediate left, one immediate right
62 62 | |/|/ /
63 63 | o / / (3) collapse
64 64 |/ / /
65 65 o / / (2) collapse
66 66 |/ /
67 67 o / (1) collapse
68 68 |/
69 69 o (0) root
70 70
71 71
72 72 $ "$TESTDIR/hghave" no-outer-repo || exit 80
73 73
74 74 $ commit()
75 75 > {
76 76 > rev=$1
77 77 > msg=$2
78 78 > shift 2
79 79 > if [ "$#" -gt 0 ]; then
80 80 > hg debugsetparents "$@"
81 81 > fi
82 82 > echo $rev > a
83 83 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
84 84 > }
85 85
86 86 $ cat > printrevset.py <<EOF
87 87 > from mercurial import extensions, revset, commands
88 88 > from hgext import graphlog
89 89 >
90 90 > def uisetup(ui):
91 91 > def printrevset(orig, ui, repo, *pats, **opts):
92 92 > if opts.get('print_revset'):
93 93 > expr = graphlog.revset(repo, pats, opts)[0]
94 > tree = revset.parse(expr)[0]
95 > ui.write(revset.prettyformat(tree), "\n")
94 > if expr:
95 > tree = revset.parse(expr)[0]
96 > else:
97 > tree = []
98 > ui.write('%r\n' % (opts.get('rev', []),))
99 > ui.write(revset.prettyformat(tree) + '\n')
96 100 > return 0
97 101 > return orig(ui, repo, *pats, **opts)
98 102 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
99 103 > entry[1].append(('', 'print-revset', False,
100 104 > 'print generated revset and exit (DEPRECATED)'))
101 105 > EOF
102 106
103 107 $ echo "[extensions]" >> $HGRCPATH
104 108 $ echo "graphlog=" >> $HGRCPATH
105 109 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
106 110
107 111 $ hg init repo
108 112 $ cd repo
109 113
110 114 Empty repo:
111 115
112 116 $ hg glog
113 117
114 118
115 119 Building DAG:
116 120
117 121 $ commit 0 "root"
118 122 $ commit 1 "collapse" 0
119 123 $ commit 2 "collapse" 1
120 124 $ commit 3 "collapse" 2
121 125 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
122 126 $ commit 5 "expand" 3 4
123 127 $ commit 6 "merge two known; one immediate left, one far left" 2 5
124 128 $ commit 7 "expand" 2 5
125 129 $ commit 8 "merge two known; one immediate left, one far right" 0 7
126 130 $ commit 9 "expand" 7 8
127 131 $ commit 10 "merge two known; one immediate left, one near right" 0 6
128 132 $ commit 11 "expand" 6 10
129 133 $ commit 12 "merge two known; one immediate right, one far left" 1 9
130 134 $ commit 13 "expand" 9 11
131 135 $ commit 14 "merge two known; one immediate right, one far right" 0 12
132 136 $ commit 15 "expand" 13 14
133 137 $ commit 16 "merge two known; one immediate right, one near right" 0 1
134 138 $ commit 17 "expand" 12 16
135 139 $ commit 18 "merge two known; two far left" 1 15
136 140 $ commit 19 "expand" 15 17
137 141 $ commit 20 "merge two known; two far right" 0 18
138 142 $ commit 21 "expand" 19 20
139 143 $ commit 22 "merge two known; one far left, one far right" 18 21
140 144 $ commit 23 "merge one known; immediate left" 1 22
141 145 $ commit 24 "merge one known; immediate right" 0 23
142 146 $ commit 25 "merge one known; far left" 21 24
143 147 $ commit 26 "merge one known; far right" 18 25
144 148 $ commit 27 "collapse" 21
145 149 $ commit 28 "merge zero known" 1 26
146 150 $ commit 29 "regular commit" 0
147 151 $ commit 30 "expand" 28 29
148 152 $ commit 31 "expand" 21 30
149 153 $ commit 32 "expand" 27 31
150 154 $ commit 33 "head" 18
151 155 $ commit 34 "head" 32
152 156
153 157
154 158 $ hg glog -q
155 159 @ 34:fea3ac5810e0
156 160 |
157 161 | o 33:68608f5145f9
158 162 | |
159 163 o | 32:d06dffa21a31
160 164 |\ \
161 165 | o \ 31:621d83e11f67
162 166 | |\ \
163 167 | | o \ 30:6e11cd4b648f
164 168 | | |\ \
165 169 | | | o | 29:cd9bb2be7593
166 170 | | | | |
167 171 | | o | | 28:44ecd0b9ae99
168 172 | | |\ \ \
169 173 o | | | | | 27:886ed638191b
170 174 |/ / / / /
171 175 | | o---+ 26:7f25b6c2f0b9
172 176 | | | | |
173 177 +---o | | 25:91da8ed57247
174 178 | | | | |
175 179 | | o | | 24:a9c19a3d96b7
176 180 | | |\| |
177 181 | | o | | 23:a01cddf0766d
178 182 | |/| | |
179 183 +---o---+ 22:e0d9cccacb5d
180 184 | | / /
181 185 o | | | 21:d42a756af44d
182 186 |\ \ \ \
183 187 | o---+-+ 20:d30ed6450e32
184 188 | / / /
185 189 o | | | 19:31ddc2c1573b
186 190 |\ \ \ \
187 191 +---+---o 18:1aa84d96232a
188 192 | | | |
189 193 | o | | 17:44765d7c06e0
190 194 | |\ \ \
191 195 | | o---+ 16:3677d192927d
192 196 | | |/ /
193 197 o | | | 15:1dda3f72782d
194 198 |\ \ \ \
195 199 | o-----+ 14:8eac370358ef
196 200 | |/ / /
197 201 o | | | 13:22d8966a97e3
198 202 |\ \ \ \
199 203 +---o | | 12:86b91144a6e9
200 204 | | |/ /
201 205 | o | | 11:832d76e6bdf2
202 206 | |\ \ \
203 207 | | o---+ 10:74c64d036d72
204 208 | |/ / /
205 209 o | | | 9:7010c0af0a35
206 210 |\ \ \ \
207 211 | o-----+ 8:7a0b11f71937
208 212 |/ / / /
209 213 o | | | 7:b632bb1b1224
210 214 |\ \ \ \
211 215 +---o | | 6:b105a072e251
212 216 | |/ / /
213 217 | o | | 5:4409d547b708
214 218 | |\ \ \
215 219 | | o | | 4:26a8bac39d9f
216 220 | |/|/ /
217 221 | o / / 3:27eef8ed80b4
218 222 |/ / /
219 223 o / / 2:3d9a33b8d1e1
220 224 |/ /
221 225 o / 1:6db2ef61d156
222 226 |/
223 227 o 0:e6eb3150255d
224 228
225 229
226 230 $ hg glog
227 231 @ changeset: 34:fea3ac5810e0
228 232 | tag: tip
229 233 | parent: 32:d06dffa21a31
230 234 | user: test
231 235 | date: Thu Jan 01 00:00:34 1970 +0000
232 236 | summary: (34) head
233 237 |
234 238 | o changeset: 33:68608f5145f9
235 239 | | parent: 18:1aa84d96232a
236 240 | | user: test
237 241 | | date: Thu Jan 01 00:00:33 1970 +0000
238 242 | | summary: (33) head
239 243 | |
240 244 o | changeset: 32:d06dffa21a31
241 245 |\ \ parent: 27:886ed638191b
242 246 | | | parent: 31:621d83e11f67
243 247 | | | user: test
244 248 | | | date: Thu Jan 01 00:00:32 1970 +0000
245 249 | | | summary: (32) expand
246 250 | | |
247 251 | o | changeset: 31:621d83e11f67
248 252 | |\ \ parent: 21:d42a756af44d
249 253 | | | | parent: 30:6e11cd4b648f
250 254 | | | | user: test
251 255 | | | | date: Thu Jan 01 00:00:31 1970 +0000
252 256 | | | | summary: (31) expand
253 257 | | | |
254 258 | | o | changeset: 30:6e11cd4b648f
255 259 | | |\ \ parent: 28:44ecd0b9ae99
256 260 | | | | | parent: 29:cd9bb2be7593
257 261 | | | | | user: test
258 262 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
259 263 | | | | | summary: (30) expand
260 264 | | | | |
261 265 | | | o | changeset: 29:cd9bb2be7593
262 266 | | | | | parent: 0:e6eb3150255d
263 267 | | | | | user: test
264 268 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
265 269 | | | | | summary: (29) regular commit
266 270 | | | | |
267 271 | | o | | changeset: 28:44ecd0b9ae99
268 272 | | |\ \ \ parent: 1:6db2ef61d156
269 273 | | | | | | parent: 26:7f25b6c2f0b9
270 274 | | | | | | user: test
271 275 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
272 276 | | | | | | summary: (28) merge zero known
273 277 | | | | | |
274 278 o | | | | | changeset: 27:886ed638191b
275 279 |/ / / / / parent: 21:d42a756af44d
276 280 | | | | | user: test
277 281 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
278 282 | | | | | summary: (27) collapse
279 283 | | | | |
280 284 | | o---+ changeset: 26:7f25b6c2f0b9
281 285 | | | | | parent: 18:1aa84d96232a
282 286 | | | | | parent: 25:91da8ed57247
283 287 | | | | | user: test
284 288 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
285 289 | | | | | summary: (26) merge one known; far right
286 290 | | | | |
287 291 +---o | | changeset: 25:91da8ed57247
288 292 | | | | | parent: 21:d42a756af44d
289 293 | | | | | parent: 24:a9c19a3d96b7
290 294 | | | | | user: test
291 295 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
292 296 | | | | | summary: (25) merge one known; far left
293 297 | | | | |
294 298 | | o | | changeset: 24:a9c19a3d96b7
295 299 | | |\| | parent: 0:e6eb3150255d
296 300 | | | | | parent: 23:a01cddf0766d
297 301 | | | | | user: test
298 302 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
299 303 | | | | | summary: (24) merge one known; immediate right
300 304 | | | | |
301 305 | | o | | changeset: 23:a01cddf0766d
302 306 | |/| | | parent: 1:6db2ef61d156
303 307 | | | | | parent: 22:e0d9cccacb5d
304 308 | | | | | user: test
305 309 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
306 310 | | | | | summary: (23) merge one known; immediate left
307 311 | | | | |
308 312 +---o---+ changeset: 22:e0d9cccacb5d
309 313 | | | | parent: 18:1aa84d96232a
310 314 | | / / parent: 21:d42a756af44d
311 315 | | | | user: test
312 316 | | | | date: Thu Jan 01 00:00:22 1970 +0000
313 317 | | | | summary: (22) merge two known; one far left, one far right
314 318 | | | |
315 319 o | | | changeset: 21:d42a756af44d
316 320 |\ \ \ \ parent: 19:31ddc2c1573b
317 321 | | | | | parent: 20:d30ed6450e32
318 322 | | | | | user: test
319 323 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
320 324 | | | | | summary: (21) expand
321 325 | | | | |
322 326 | o---+-+ changeset: 20:d30ed6450e32
323 327 | | | | parent: 0:e6eb3150255d
324 328 | / / / parent: 18:1aa84d96232a
325 329 | | | | user: test
326 330 | | | | date: Thu Jan 01 00:00:20 1970 +0000
327 331 | | | | summary: (20) merge two known; two far right
328 332 | | | |
329 333 o | | | changeset: 19:31ddc2c1573b
330 334 |\ \ \ \ parent: 15:1dda3f72782d
331 335 | | | | | parent: 17:44765d7c06e0
332 336 | | | | | user: test
333 337 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
334 338 | | | | | summary: (19) expand
335 339 | | | | |
336 340 +---+---o changeset: 18:1aa84d96232a
337 341 | | | | parent: 1:6db2ef61d156
338 342 | | | | parent: 15:1dda3f72782d
339 343 | | | | user: test
340 344 | | | | date: Thu Jan 01 00:00:18 1970 +0000
341 345 | | | | summary: (18) merge two known; two far left
342 346 | | | |
343 347 | o | | changeset: 17:44765d7c06e0
344 348 | |\ \ \ parent: 12:86b91144a6e9
345 349 | | | | | parent: 16:3677d192927d
346 350 | | | | | user: test
347 351 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
348 352 | | | | | summary: (17) expand
349 353 | | | | |
350 354 | | o---+ changeset: 16:3677d192927d
351 355 | | | | | parent: 0:e6eb3150255d
352 356 | | |/ / parent: 1:6db2ef61d156
353 357 | | | | user: test
354 358 | | | | date: Thu Jan 01 00:00:16 1970 +0000
355 359 | | | | summary: (16) merge two known; one immediate right, one near right
356 360 | | | |
357 361 o | | | changeset: 15:1dda3f72782d
358 362 |\ \ \ \ parent: 13:22d8966a97e3
359 363 | | | | | parent: 14:8eac370358ef
360 364 | | | | | user: test
361 365 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
362 366 | | | | | summary: (15) expand
363 367 | | | | |
364 368 | o-----+ changeset: 14:8eac370358ef
365 369 | | | | | parent: 0:e6eb3150255d
366 370 | |/ / / parent: 12:86b91144a6e9
367 371 | | | | user: test
368 372 | | | | date: Thu Jan 01 00:00:14 1970 +0000
369 373 | | | | summary: (14) merge two known; one immediate right, one far right
370 374 | | | |
371 375 o | | | changeset: 13:22d8966a97e3
372 376 |\ \ \ \ parent: 9:7010c0af0a35
373 377 | | | | | parent: 11:832d76e6bdf2
374 378 | | | | | user: test
375 379 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
376 380 | | | | | summary: (13) expand
377 381 | | | | |
378 382 +---o | | changeset: 12:86b91144a6e9
379 383 | | |/ / parent: 1:6db2ef61d156
380 384 | | | | parent: 9:7010c0af0a35
381 385 | | | | user: test
382 386 | | | | date: Thu Jan 01 00:00:12 1970 +0000
383 387 | | | | summary: (12) merge two known; one immediate right, one far left
384 388 | | | |
385 389 | o | | changeset: 11:832d76e6bdf2
386 390 | |\ \ \ parent: 6:b105a072e251
387 391 | | | | | parent: 10:74c64d036d72
388 392 | | | | | user: test
389 393 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
390 394 | | | | | summary: (11) expand
391 395 | | | | |
392 396 | | o---+ changeset: 10:74c64d036d72
393 397 | | | | | parent: 0:e6eb3150255d
394 398 | |/ / / parent: 6:b105a072e251
395 399 | | | | user: test
396 400 | | | | date: Thu Jan 01 00:00:10 1970 +0000
397 401 | | | | summary: (10) merge two known; one immediate left, one near right
398 402 | | | |
399 403 o | | | changeset: 9:7010c0af0a35
400 404 |\ \ \ \ parent: 7:b632bb1b1224
401 405 | | | | | parent: 8:7a0b11f71937
402 406 | | | | | user: test
403 407 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
404 408 | | | | | summary: (9) expand
405 409 | | | | |
406 410 | o-----+ changeset: 8:7a0b11f71937
407 411 | | | | | parent: 0:e6eb3150255d
408 412 |/ / / / parent: 7:b632bb1b1224
409 413 | | | | user: test
410 414 | | | | date: Thu Jan 01 00:00:08 1970 +0000
411 415 | | | | summary: (8) merge two known; one immediate left, one far right
412 416 | | | |
413 417 o | | | changeset: 7:b632bb1b1224
414 418 |\ \ \ \ parent: 2:3d9a33b8d1e1
415 419 | | | | | parent: 5:4409d547b708
416 420 | | | | | user: test
417 421 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
418 422 | | | | | summary: (7) expand
419 423 | | | | |
420 424 +---o | | changeset: 6:b105a072e251
421 425 | |/ / / parent: 2:3d9a33b8d1e1
422 426 | | | | parent: 5:4409d547b708
423 427 | | | | user: test
424 428 | | | | date: Thu Jan 01 00:00:06 1970 +0000
425 429 | | | | summary: (6) merge two known; one immediate left, one far left
426 430 | | | |
427 431 | o | | changeset: 5:4409d547b708
428 432 | |\ \ \ parent: 3:27eef8ed80b4
429 433 | | | | | parent: 4:26a8bac39d9f
430 434 | | | | | user: test
431 435 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
432 436 | | | | | summary: (5) expand
433 437 | | | | |
434 438 | | o | | changeset: 4:26a8bac39d9f
435 439 | |/|/ / parent: 1:6db2ef61d156
436 440 | | | | parent: 3:27eef8ed80b4
437 441 | | | | user: test
438 442 | | | | date: Thu Jan 01 00:00:04 1970 +0000
439 443 | | | | summary: (4) merge two known; one immediate left, one immediate right
440 444 | | | |
441 445 | o | | changeset: 3:27eef8ed80b4
442 446 |/ / / user: test
443 447 | | | date: Thu Jan 01 00:00:03 1970 +0000
444 448 | | | summary: (3) collapse
445 449 | | |
446 450 o | | changeset: 2:3d9a33b8d1e1
447 451 |/ / user: test
448 452 | | date: Thu Jan 01 00:00:02 1970 +0000
449 453 | | summary: (2) collapse
450 454 | |
451 455 o | changeset: 1:6db2ef61d156
452 456 |/ user: test
453 457 | date: Thu Jan 01 00:00:01 1970 +0000
454 458 | summary: (1) collapse
455 459 |
456 460 o changeset: 0:e6eb3150255d
457 461 user: test
458 462 date: Thu Jan 01 00:00:00 1970 +0000
459 463 summary: (0) root
460 464
461 465
462 466 File glog:
463 467 $ hg glog a
464 468 @ changeset: 34:fea3ac5810e0
465 469 | tag: tip
466 470 | parent: 32:d06dffa21a31
467 471 | user: test
468 472 | date: Thu Jan 01 00:00:34 1970 +0000
469 473 | summary: (34) head
470 474 |
471 475 | o changeset: 33:68608f5145f9
472 476 | | parent: 18:1aa84d96232a
473 477 | | user: test
474 478 | | date: Thu Jan 01 00:00:33 1970 +0000
475 479 | | summary: (33) head
476 480 | |
477 481 o | changeset: 32:d06dffa21a31
478 482 |\ \ parent: 27:886ed638191b
479 483 | | | parent: 31:621d83e11f67
480 484 | | | user: test
481 485 | | | date: Thu Jan 01 00:00:32 1970 +0000
482 486 | | | summary: (32) expand
483 487 | | |
484 488 | o | changeset: 31:621d83e11f67
485 489 | |\ \ parent: 21:d42a756af44d
486 490 | | | | parent: 30:6e11cd4b648f
487 491 | | | | user: test
488 492 | | | | date: Thu Jan 01 00:00:31 1970 +0000
489 493 | | | | summary: (31) expand
490 494 | | | |
491 495 | | o | changeset: 30:6e11cd4b648f
492 496 | | |\ \ parent: 28:44ecd0b9ae99
493 497 | | | | | parent: 29:cd9bb2be7593
494 498 | | | | | user: test
495 499 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
496 500 | | | | | summary: (30) expand
497 501 | | | | |
498 502 | | | o | changeset: 29:cd9bb2be7593
499 503 | | | | | parent: 0:e6eb3150255d
500 504 | | | | | user: test
501 505 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
502 506 | | | | | summary: (29) regular commit
503 507 | | | | |
504 508 | | o | | changeset: 28:44ecd0b9ae99
505 509 | | |\ \ \ parent: 1:6db2ef61d156
506 510 | | | | | | parent: 26:7f25b6c2f0b9
507 511 | | | | | | user: test
508 512 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
509 513 | | | | | | summary: (28) merge zero known
510 514 | | | | | |
511 515 o | | | | | changeset: 27:886ed638191b
512 516 |/ / / / / parent: 21:d42a756af44d
513 517 | | | | | user: test
514 518 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
515 519 | | | | | summary: (27) collapse
516 520 | | | | |
517 521 | | o---+ changeset: 26:7f25b6c2f0b9
518 522 | | | | | parent: 18:1aa84d96232a
519 523 | | | | | parent: 25:91da8ed57247
520 524 | | | | | user: test
521 525 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
522 526 | | | | | summary: (26) merge one known; far right
523 527 | | | | |
524 528 +---o | | changeset: 25:91da8ed57247
525 529 | | | | | parent: 21:d42a756af44d
526 530 | | | | | parent: 24:a9c19a3d96b7
527 531 | | | | | user: test
528 532 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
529 533 | | | | | summary: (25) merge one known; far left
530 534 | | | | |
531 535 | | o | | changeset: 24:a9c19a3d96b7
532 536 | | |\| | parent: 0:e6eb3150255d
533 537 | | | | | parent: 23:a01cddf0766d
534 538 | | | | | user: test
535 539 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
536 540 | | | | | summary: (24) merge one known; immediate right
537 541 | | | | |
538 542 | | o | | changeset: 23:a01cddf0766d
539 543 | |/| | | parent: 1:6db2ef61d156
540 544 | | | | | parent: 22:e0d9cccacb5d
541 545 | | | | | user: test
542 546 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
543 547 | | | | | summary: (23) merge one known; immediate left
544 548 | | | | |
545 549 +---o---+ changeset: 22:e0d9cccacb5d
546 550 | | | | parent: 18:1aa84d96232a
547 551 | | / / parent: 21:d42a756af44d
548 552 | | | | user: test
549 553 | | | | date: Thu Jan 01 00:00:22 1970 +0000
550 554 | | | | summary: (22) merge two known; one far left, one far right
551 555 | | | |
552 556 o | | | changeset: 21:d42a756af44d
553 557 |\ \ \ \ parent: 19:31ddc2c1573b
554 558 | | | | | parent: 20:d30ed6450e32
555 559 | | | | | user: test
556 560 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
557 561 | | | | | summary: (21) expand
558 562 | | | | |
559 563 | o---+-+ changeset: 20:d30ed6450e32
560 564 | | | | parent: 0:e6eb3150255d
561 565 | / / / parent: 18:1aa84d96232a
562 566 | | | | user: test
563 567 | | | | date: Thu Jan 01 00:00:20 1970 +0000
564 568 | | | | summary: (20) merge two known; two far right
565 569 | | | |
566 570 o | | | changeset: 19:31ddc2c1573b
567 571 |\ \ \ \ parent: 15:1dda3f72782d
568 572 | | | | | parent: 17:44765d7c06e0
569 573 | | | | | user: test
570 574 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
571 575 | | | | | summary: (19) expand
572 576 | | | | |
573 577 +---+---o changeset: 18:1aa84d96232a
574 578 | | | | parent: 1:6db2ef61d156
575 579 | | | | parent: 15:1dda3f72782d
576 580 | | | | user: test
577 581 | | | | date: Thu Jan 01 00:00:18 1970 +0000
578 582 | | | | summary: (18) merge two known; two far left
579 583 | | | |
580 584 | o | | changeset: 17:44765d7c06e0
581 585 | |\ \ \ parent: 12:86b91144a6e9
582 586 | | | | | parent: 16:3677d192927d
583 587 | | | | | user: test
584 588 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
585 589 | | | | | summary: (17) expand
586 590 | | | | |
587 591 | | o---+ changeset: 16:3677d192927d
588 592 | | | | | parent: 0:e6eb3150255d
589 593 | | |/ / parent: 1:6db2ef61d156
590 594 | | | | user: test
591 595 | | | | date: Thu Jan 01 00:00:16 1970 +0000
592 596 | | | | summary: (16) merge two known; one immediate right, one near right
593 597 | | | |
594 598 o | | | changeset: 15:1dda3f72782d
595 599 |\ \ \ \ parent: 13:22d8966a97e3
596 600 | | | | | parent: 14:8eac370358ef
597 601 | | | | | user: test
598 602 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
599 603 | | | | | summary: (15) expand
600 604 | | | | |
601 605 | o-----+ changeset: 14:8eac370358ef
602 606 | | | | | parent: 0:e6eb3150255d
603 607 | |/ / / parent: 12:86b91144a6e9
604 608 | | | | user: test
605 609 | | | | date: Thu Jan 01 00:00:14 1970 +0000
606 610 | | | | summary: (14) merge two known; one immediate right, one far right
607 611 | | | |
608 612 o | | | changeset: 13:22d8966a97e3
609 613 |\ \ \ \ parent: 9:7010c0af0a35
610 614 | | | | | parent: 11:832d76e6bdf2
611 615 | | | | | user: test
612 616 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
613 617 | | | | | summary: (13) expand
614 618 | | | | |
615 619 +---o | | changeset: 12:86b91144a6e9
616 620 | | |/ / parent: 1:6db2ef61d156
617 621 | | | | parent: 9:7010c0af0a35
618 622 | | | | user: test
619 623 | | | | date: Thu Jan 01 00:00:12 1970 +0000
620 624 | | | | summary: (12) merge two known; one immediate right, one far left
621 625 | | | |
622 626 | o | | changeset: 11:832d76e6bdf2
623 627 | |\ \ \ parent: 6:b105a072e251
624 628 | | | | | parent: 10:74c64d036d72
625 629 | | | | | user: test
626 630 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
627 631 | | | | | summary: (11) expand
628 632 | | | | |
629 633 | | o---+ changeset: 10:74c64d036d72
630 634 | | | | | parent: 0:e6eb3150255d
631 635 | |/ / / parent: 6:b105a072e251
632 636 | | | | user: test
633 637 | | | | date: Thu Jan 01 00:00:10 1970 +0000
634 638 | | | | summary: (10) merge two known; one immediate left, one near right
635 639 | | | |
636 640 o | | | changeset: 9:7010c0af0a35
637 641 |\ \ \ \ parent: 7:b632bb1b1224
638 642 | | | | | parent: 8:7a0b11f71937
639 643 | | | | | user: test
640 644 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
641 645 | | | | | summary: (9) expand
642 646 | | | | |
643 647 | o-----+ changeset: 8:7a0b11f71937
644 648 | | | | | parent: 0:e6eb3150255d
645 649 |/ / / / parent: 7:b632bb1b1224
646 650 | | | | user: test
647 651 | | | | date: Thu Jan 01 00:00:08 1970 +0000
648 652 | | | | summary: (8) merge two known; one immediate left, one far right
649 653 | | | |
650 654 o | | | changeset: 7:b632bb1b1224
651 655 |\ \ \ \ parent: 2:3d9a33b8d1e1
652 656 | | | | | parent: 5:4409d547b708
653 657 | | | | | user: test
654 658 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
655 659 | | | | | summary: (7) expand
656 660 | | | | |
657 661 +---o | | changeset: 6:b105a072e251
658 662 | |/ / / parent: 2:3d9a33b8d1e1
659 663 | | | | parent: 5:4409d547b708
660 664 | | | | user: test
661 665 | | | | date: Thu Jan 01 00:00:06 1970 +0000
662 666 | | | | summary: (6) merge two known; one immediate left, one far left
663 667 | | | |
664 668 | o | | changeset: 5:4409d547b708
665 669 | |\ \ \ parent: 3:27eef8ed80b4
666 670 | | | | | parent: 4:26a8bac39d9f
667 671 | | | | | user: test
668 672 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
669 673 | | | | | summary: (5) expand
670 674 | | | | |
671 675 | | o | | changeset: 4:26a8bac39d9f
672 676 | |/|/ / parent: 1:6db2ef61d156
673 677 | | | | parent: 3:27eef8ed80b4
674 678 | | | | user: test
675 679 | | | | date: Thu Jan 01 00:00:04 1970 +0000
676 680 | | | | summary: (4) merge two known; one immediate left, one immediate right
677 681 | | | |
678 682 | o | | changeset: 3:27eef8ed80b4
679 683 |/ / / user: test
680 684 | | | date: Thu Jan 01 00:00:03 1970 +0000
681 685 | | | summary: (3) collapse
682 686 | | |
683 687 o | | changeset: 2:3d9a33b8d1e1
684 688 |/ / user: test
685 689 | | date: Thu Jan 01 00:00:02 1970 +0000
686 690 | | summary: (2) collapse
687 691 | |
688 692 o | changeset: 1:6db2ef61d156
689 693 |/ user: test
690 694 | date: Thu Jan 01 00:00:01 1970 +0000
691 695 | summary: (1) collapse
692 696 |
693 697 o changeset: 0:e6eb3150255d
694 698 user: test
695 699 date: Thu Jan 01 00:00:00 1970 +0000
696 700 summary: (0) root
697 701
698 702
699 703 File glog per revset:
700 704
701 705 $ hg glog -r 'file("a")'
702 706 @ changeset: 34:fea3ac5810e0
703 707 | tag: tip
704 708 | parent: 32:d06dffa21a31
705 709 | user: test
706 710 | date: Thu Jan 01 00:00:34 1970 +0000
707 711 | summary: (34) head
708 712 |
709 713 | o changeset: 33:68608f5145f9
710 714 | | parent: 18:1aa84d96232a
711 715 | | user: test
712 716 | | date: Thu Jan 01 00:00:33 1970 +0000
713 717 | | summary: (33) head
714 718 | |
715 719 o | changeset: 32:d06dffa21a31
716 720 |\ \ parent: 27:886ed638191b
717 721 | | | parent: 31:621d83e11f67
718 722 | | | user: test
719 723 | | | date: Thu Jan 01 00:00:32 1970 +0000
720 724 | | | summary: (32) expand
721 725 | | |
722 726 | o | changeset: 31:621d83e11f67
723 727 | |\ \ parent: 21:d42a756af44d
724 728 | | | | parent: 30:6e11cd4b648f
725 729 | | | | user: test
726 730 | | | | date: Thu Jan 01 00:00:31 1970 +0000
727 731 | | | | summary: (31) expand
728 732 | | | |
729 733 | | o | changeset: 30:6e11cd4b648f
730 734 | | |\ \ parent: 28:44ecd0b9ae99
731 735 | | | | | parent: 29:cd9bb2be7593
732 736 | | | | | user: test
733 737 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
734 738 | | | | | summary: (30) expand
735 739 | | | | |
736 740 | | | o | changeset: 29:cd9bb2be7593
737 741 | | | | | parent: 0:e6eb3150255d
738 742 | | | | | user: test
739 743 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
740 744 | | | | | summary: (29) regular commit
741 745 | | | | |
742 746 | | o | | changeset: 28:44ecd0b9ae99
743 747 | | |\ \ \ parent: 1:6db2ef61d156
744 748 | | | | | | parent: 26:7f25b6c2f0b9
745 749 | | | | | | user: test
746 750 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
747 751 | | | | | | summary: (28) merge zero known
748 752 | | | | | |
749 753 o | | | | | changeset: 27:886ed638191b
750 754 |/ / / / / parent: 21:d42a756af44d
751 755 | | | | | user: test
752 756 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
753 757 | | | | | summary: (27) collapse
754 758 | | | | |
755 759 | | o---+ changeset: 26:7f25b6c2f0b9
756 760 | | | | | parent: 18:1aa84d96232a
757 761 | | | | | parent: 25:91da8ed57247
758 762 | | | | | user: test
759 763 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
760 764 | | | | | summary: (26) merge one known; far right
761 765 | | | | |
762 766 +---o | | changeset: 25:91da8ed57247
763 767 | | | | | parent: 21:d42a756af44d
764 768 | | | | | parent: 24:a9c19a3d96b7
765 769 | | | | | user: test
766 770 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
767 771 | | | | | summary: (25) merge one known; far left
768 772 | | | | |
769 773 | | o | | changeset: 24:a9c19a3d96b7
770 774 | | |\| | parent: 0:e6eb3150255d
771 775 | | | | | parent: 23:a01cddf0766d
772 776 | | | | | user: test
773 777 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
774 778 | | | | | summary: (24) merge one known; immediate right
775 779 | | | | |
776 780 | | o | | changeset: 23:a01cddf0766d
777 781 | |/| | | parent: 1:6db2ef61d156
778 782 | | | | | parent: 22:e0d9cccacb5d
779 783 | | | | | user: test
780 784 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
781 785 | | | | | summary: (23) merge one known; immediate left
782 786 | | | | |
783 787 +---o---+ changeset: 22:e0d9cccacb5d
784 788 | | | | parent: 18:1aa84d96232a
785 789 | | / / parent: 21:d42a756af44d
786 790 | | | | user: test
787 791 | | | | date: Thu Jan 01 00:00:22 1970 +0000
788 792 | | | | summary: (22) merge two known; one far left, one far right
789 793 | | | |
790 794 o | | | changeset: 21:d42a756af44d
791 795 |\ \ \ \ parent: 19:31ddc2c1573b
792 796 | | | | | parent: 20:d30ed6450e32
793 797 | | | | | user: test
794 798 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
795 799 | | | | | summary: (21) expand
796 800 | | | | |
797 801 | o---+-+ changeset: 20:d30ed6450e32
798 802 | | | | parent: 0:e6eb3150255d
799 803 | / / / parent: 18:1aa84d96232a
800 804 | | | | user: test
801 805 | | | | date: Thu Jan 01 00:00:20 1970 +0000
802 806 | | | | summary: (20) merge two known; two far right
803 807 | | | |
804 808 o | | | changeset: 19:31ddc2c1573b
805 809 |\ \ \ \ parent: 15:1dda3f72782d
806 810 | | | | | parent: 17:44765d7c06e0
807 811 | | | | | user: test
808 812 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
809 813 | | | | | summary: (19) expand
810 814 | | | | |
811 815 +---+---o changeset: 18:1aa84d96232a
812 816 | | | | parent: 1:6db2ef61d156
813 817 | | | | parent: 15:1dda3f72782d
814 818 | | | | user: test
815 819 | | | | date: Thu Jan 01 00:00:18 1970 +0000
816 820 | | | | summary: (18) merge two known; two far left
817 821 | | | |
818 822 | o | | changeset: 17:44765d7c06e0
819 823 | |\ \ \ parent: 12:86b91144a6e9
820 824 | | | | | parent: 16:3677d192927d
821 825 | | | | | user: test
822 826 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
823 827 | | | | | summary: (17) expand
824 828 | | | | |
825 829 | | o---+ changeset: 16:3677d192927d
826 830 | | | | | parent: 0:e6eb3150255d
827 831 | | |/ / parent: 1:6db2ef61d156
828 832 | | | | user: test
829 833 | | | | date: Thu Jan 01 00:00:16 1970 +0000
830 834 | | | | summary: (16) merge two known; one immediate right, one near right
831 835 | | | |
832 836 o | | | changeset: 15:1dda3f72782d
833 837 |\ \ \ \ parent: 13:22d8966a97e3
834 838 | | | | | parent: 14:8eac370358ef
835 839 | | | | | user: test
836 840 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
837 841 | | | | | summary: (15) expand
838 842 | | | | |
839 843 | o-----+ changeset: 14:8eac370358ef
840 844 | | | | | parent: 0:e6eb3150255d
841 845 | |/ / / parent: 12:86b91144a6e9
842 846 | | | | user: test
843 847 | | | | date: Thu Jan 01 00:00:14 1970 +0000
844 848 | | | | summary: (14) merge two known; one immediate right, one far right
845 849 | | | |
846 850 o | | | changeset: 13:22d8966a97e3
847 851 |\ \ \ \ parent: 9:7010c0af0a35
848 852 | | | | | parent: 11:832d76e6bdf2
849 853 | | | | | user: test
850 854 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
851 855 | | | | | summary: (13) expand
852 856 | | | | |
853 857 +---o | | changeset: 12:86b91144a6e9
854 858 | | |/ / parent: 1:6db2ef61d156
855 859 | | | | parent: 9:7010c0af0a35
856 860 | | | | user: test
857 861 | | | | date: Thu Jan 01 00:00:12 1970 +0000
858 862 | | | | summary: (12) merge two known; one immediate right, one far left
859 863 | | | |
860 864 | o | | changeset: 11:832d76e6bdf2
861 865 | |\ \ \ parent: 6:b105a072e251
862 866 | | | | | parent: 10:74c64d036d72
863 867 | | | | | user: test
864 868 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
865 869 | | | | | summary: (11) expand
866 870 | | | | |
867 871 | | o---+ changeset: 10:74c64d036d72
868 872 | | | | | parent: 0:e6eb3150255d
869 873 | |/ / / parent: 6:b105a072e251
870 874 | | | | user: test
871 875 | | | | date: Thu Jan 01 00:00:10 1970 +0000
872 876 | | | | summary: (10) merge two known; one immediate left, one near right
873 877 | | | |
874 878 o | | | changeset: 9:7010c0af0a35
875 879 |\ \ \ \ parent: 7:b632bb1b1224
876 880 | | | | | parent: 8:7a0b11f71937
877 881 | | | | | user: test
878 882 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
879 883 | | | | | summary: (9) expand
880 884 | | | | |
881 885 | o-----+ changeset: 8:7a0b11f71937
882 886 | | | | | parent: 0:e6eb3150255d
883 887 |/ / / / parent: 7:b632bb1b1224
884 888 | | | | user: test
885 889 | | | | date: Thu Jan 01 00:00:08 1970 +0000
886 890 | | | | summary: (8) merge two known; one immediate left, one far right
887 891 | | | |
888 892 o | | | changeset: 7:b632bb1b1224
889 893 |\ \ \ \ parent: 2:3d9a33b8d1e1
890 894 | | | | | parent: 5:4409d547b708
891 895 | | | | | user: test
892 896 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
893 897 | | | | | summary: (7) expand
894 898 | | | | |
895 899 +---o | | changeset: 6:b105a072e251
896 900 | |/ / / parent: 2:3d9a33b8d1e1
897 901 | | | | parent: 5:4409d547b708
898 902 | | | | user: test
899 903 | | | | date: Thu Jan 01 00:00:06 1970 +0000
900 904 | | | | summary: (6) merge two known; one immediate left, one far left
901 905 | | | |
902 906 | o | | changeset: 5:4409d547b708
903 907 | |\ \ \ parent: 3:27eef8ed80b4
904 908 | | | | | parent: 4:26a8bac39d9f
905 909 | | | | | user: test
906 910 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
907 911 | | | | | summary: (5) expand
908 912 | | | | |
909 913 | | o | | changeset: 4:26a8bac39d9f
910 914 | |/|/ / parent: 1:6db2ef61d156
911 915 | | | | parent: 3:27eef8ed80b4
912 916 | | | | user: test
913 917 | | | | date: Thu Jan 01 00:00:04 1970 +0000
914 918 | | | | summary: (4) merge two known; one immediate left, one immediate right
915 919 | | | |
916 920 | o | | changeset: 3:27eef8ed80b4
917 921 |/ / / user: test
918 922 | | | date: Thu Jan 01 00:00:03 1970 +0000
919 923 | | | summary: (3) collapse
920 924 | | |
921 925 o | | changeset: 2:3d9a33b8d1e1
922 926 |/ / user: test
923 927 | | date: Thu Jan 01 00:00:02 1970 +0000
924 928 | | summary: (2) collapse
925 929 | |
926 930 o | changeset: 1:6db2ef61d156
927 931 |/ user: test
928 932 | date: Thu Jan 01 00:00:01 1970 +0000
929 933 | summary: (1) collapse
930 934 |
931 935 o changeset: 0:e6eb3150255d
932 936 user: test
933 937 date: Thu Jan 01 00:00:00 1970 +0000
934 938 summary: (0) root
935 939
936 940
937 941
938 942 File glog per revset (only merges):
939 943
940 944 $ hg log -G -r 'file("a")' -m
941 945 o changeset: 32:d06dffa21a31
942 946 |\ parent: 27:886ed638191b
943 947 | | parent: 31:621d83e11f67
944 948 | | user: test
945 949 | | date: Thu Jan 01 00:00:32 1970 +0000
946 950 | | summary: (32) expand
947 951 | |
948 952 o | changeset: 31:621d83e11f67
949 953 |\| parent: 21:d42a756af44d
950 954 | | parent: 30:6e11cd4b648f
951 955 | | user: test
952 956 | | date: Thu Jan 01 00:00:31 1970 +0000
953 957 | | summary: (31) expand
954 958 | |
955 959 o | changeset: 30:6e11cd4b648f
956 960 |\ \ parent: 28:44ecd0b9ae99
957 961 | | | parent: 29:cd9bb2be7593
958 962 | | | user: test
959 963 | | | date: Thu Jan 01 00:00:30 1970 +0000
960 964 | | | summary: (30) expand
961 965 | | |
962 966 o | | changeset: 28:44ecd0b9ae99
963 967 |\ \ \ parent: 1:6db2ef61d156
964 968 | | | | parent: 26:7f25b6c2f0b9
965 969 | | | | user: test
966 970 | | | | date: Thu Jan 01 00:00:28 1970 +0000
967 971 | | | | summary: (28) merge zero known
968 972 | | | |
969 973 o | | | changeset: 26:7f25b6c2f0b9
970 974 |\ \ \ \ parent: 18:1aa84d96232a
971 975 | | | | | parent: 25:91da8ed57247
972 976 | | | | | user: test
973 977 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
974 978 | | | | | summary: (26) merge one known; far right
975 979 | | | | |
976 980 | o-----+ changeset: 25:91da8ed57247
977 981 | | | | | parent: 21:d42a756af44d
978 982 | | | | | parent: 24:a9c19a3d96b7
979 983 | | | | | user: test
980 984 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
981 985 | | | | | summary: (25) merge one known; far left
982 986 | | | | |
983 987 | o | | | changeset: 24:a9c19a3d96b7
984 988 | |\ \ \ \ parent: 0:e6eb3150255d
985 989 | | | | | | parent: 23:a01cddf0766d
986 990 | | | | | | user: test
987 991 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
988 992 | | | | | | summary: (24) merge one known; immediate right
989 993 | | | | | |
990 994 | o---+ | | changeset: 23:a01cddf0766d
991 995 | | | | | | parent: 1:6db2ef61d156
992 996 | | | | | | parent: 22:e0d9cccacb5d
993 997 | | | | | | user: test
994 998 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
995 999 | | | | | | summary: (23) merge one known; immediate left
996 1000 | | | | | |
997 1001 | o-------+ changeset: 22:e0d9cccacb5d
998 1002 | | | | | | parent: 18:1aa84d96232a
999 1003 |/ / / / / parent: 21:d42a756af44d
1000 1004 | | | | | user: test
1001 1005 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
1002 1006 | | | | | summary: (22) merge two known; one far left, one far right
1003 1007 | | | | |
1004 1008 | | | | o changeset: 21:d42a756af44d
1005 1009 | | | | |\ parent: 19:31ddc2c1573b
1006 1010 | | | | | | parent: 20:d30ed6450e32
1007 1011 | | | | | | user: test
1008 1012 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
1009 1013 | | | | | | summary: (21) expand
1010 1014 | | | | | |
1011 1015 +-+-------o changeset: 20:d30ed6450e32
1012 1016 | | | | | parent: 0:e6eb3150255d
1013 1017 | | | | | parent: 18:1aa84d96232a
1014 1018 | | | | | user: test
1015 1019 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
1016 1020 | | | | | summary: (20) merge two known; two far right
1017 1021 | | | | |
1018 1022 | | | | o changeset: 19:31ddc2c1573b
1019 1023 | | | | |\ parent: 15:1dda3f72782d
1020 1024 | | | | | | parent: 17:44765d7c06e0
1021 1025 | | | | | | user: test
1022 1026 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
1023 1027 | | | | | | summary: (19) expand
1024 1028 | | | | | |
1025 1029 o---+---+ | changeset: 18:1aa84d96232a
1026 1030 | | | | | parent: 1:6db2ef61d156
1027 1031 / / / / / parent: 15:1dda3f72782d
1028 1032 | | | | | user: test
1029 1033 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
1030 1034 | | | | | summary: (18) merge two known; two far left
1031 1035 | | | | |
1032 1036 | | | | o changeset: 17:44765d7c06e0
1033 1037 | | | | |\ parent: 12:86b91144a6e9
1034 1038 | | | | | | parent: 16:3677d192927d
1035 1039 | | | | | | user: test
1036 1040 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
1037 1041 | | | | | | summary: (17) expand
1038 1042 | | | | | |
1039 1043 +-+-------o changeset: 16:3677d192927d
1040 1044 | | | | | parent: 0:e6eb3150255d
1041 1045 | | | | | parent: 1:6db2ef61d156
1042 1046 | | | | | user: test
1043 1047 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
1044 1048 | | | | | summary: (16) merge two known; one immediate right, one near right
1045 1049 | | | | |
1046 1050 | | | o | changeset: 15:1dda3f72782d
1047 1051 | | | |\ \ parent: 13:22d8966a97e3
1048 1052 | | | | | | parent: 14:8eac370358ef
1049 1053 | | | | | | user: test
1050 1054 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
1051 1055 | | | | | | summary: (15) expand
1052 1056 | | | | | |
1053 1057 +-------o | changeset: 14:8eac370358ef
1054 1058 | | | | |/ parent: 0:e6eb3150255d
1055 1059 | | | | | parent: 12:86b91144a6e9
1056 1060 | | | | | user: test
1057 1061 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
1058 1062 | | | | | summary: (14) merge two known; one immediate right, one far right
1059 1063 | | | | |
1060 1064 | | | o | changeset: 13:22d8966a97e3
1061 1065 | | | |\ \ parent: 9:7010c0af0a35
1062 1066 | | | | | | parent: 11:832d76e6bdf2
1063 1067 | | | | | | user: test
1064 1068 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
1065 1069 | | | | | | summary: (13) expand
1066 1070 | | | | | |
1067 1071 | +---+---o changeset: 12:86b91144a6e9
1068 1072 | | | | | parent: 1:6db2ef61d156
1069 1073 | | | | | parent: 9:7010c0af0a35
1070 1074 | | | | | user: test
1071 1075 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
1072 1076 | | | | | summary: (12) merge two known; one immediate right, one far left
1073 1077 | | | | |
1074 1078 | | | | o changeset: 11:832d76e6bdf2
1075 1079 | | | | |\ parent: 6:b105a072e251
1076 1080 | | | | | | parent: 10:74c64d036d72
1077 1081 | | | | | | user: test
1078 1082 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
1079 1083 | | | | | | summary: (11) expand
1080 1084 | | | | | |
1081 1085 +---------o changeset: 10:74c64d036d72
1082 1086 | | | | |/ parent: 0:e6eb3150255d
1083 1087 | | | | | parent: 6:b105a072e251
1084 1088 | | | | | user: test
1085 1089 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
1086 1090 | | | | | summary: (10) merge two known; one immediate left, one near right
1087 1091 | | | | |
1088 1092 | | | o | changeset: 9:7010c0af0a35
1089 1093 | | | |\ \ parent: 7:b632bb1b1224
1090 1094 | | | | | | parent: 8:7a0b11f71937
1091 1095 | | | | | | user: test
1092 1096 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
1093 1097 | | | | | | summary: (9) expand
1094 1098 | | | | | |
1095 1099 +-------o | changeset: 8:7a0b11f71937
1096 1100 | | | |/ / parent: 0:e6eb3150255d
1097 1101 | | | | | parent: 7:b632bb1b1224
1098 1102 | | | | | user: test
1099 1103 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
1100 1104 | | | | | summary: (8) merge two known; one immediate left, one far right
1101 1105 | | | | |
1102 1106 | | | o | changeset: 7:b632bb1b1224
1103 1107 | | | |\ \ parent: 2:3d9a33b8d1e1
1104 1108 | | | | | | parent: 5:4409d547b708
1105 1109 | | | | | | user: test
1106 1110 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
1107 1111 | | | | | | summary: (7) expand
1108 1112 | | | | | |
1109 1113 | | | +---o changeset: 6:b105a072e251
1110 1114 | | | | |/ parent: 2:3d9a33b8d1e1
1111 1115 | | | | | parent: 5:4409d547b708
1112 1116 | | | | | user: test
1113 1117 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
1114 1118 | | | | | summary: (6) merge two known; one immediate left, one far left
1115 1119 | | | | |
1116 1120 | | | o | changeset: 5:4409d547b708
1117 1121 | | | |\ \ parent: 3:27eef8ed80b4
1118 1122 | | | | | | parent: 4:26a8bac39d9f
1119 1123 | | | | | | user: test
1120 1124 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
1121 1125 | | | | | | summary: (5) expand
1122 1126 | | | | | |
1123 1127 | +---o | | changeset: 4:26a8bac39d9f
1124 1128 | | | |/ / parent: 1:6db2ef61d156
1125 1129 | | | | | parent: 3:27eef8ed80b4
1126 1130 | | | | | user: test
1127 1131 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
1128 1132 | | | | | summary: (4) merge two known; one immediate left, one immediate right
1129 1133 | | | | |
1130 1134
1131 1135
1132 1136 Empty revision range - display nothing:
1133 1137 $ hg glog -r 1..0
1134 1138
1135 1139 From outer space:
1136 1140 $ cd ..
1137 1141 $ hg glog -l1 repo
1138 1142 @ changeset: 34:fea3ac5810e0
1139 1143 | tag: tip
1140 1144 | parent: 32:d06dffa21a31
1141 1145 | user: test
1142 1146 | date: Thu Jan 01 00:00:34 1970 +0000
1143 1147 | summary: (34) head
1144 1148 |
1145 1149 $ hg glog -l1 repo/a
1146 1150 @ changeset: 34:fea3ac5810e0
1147 1151 | tag: tip
1148 1152 | parent: 32:d06dffa21a31
1149 1153 | user: test
1150 1154 | date: Thu Jan 01 00:00:34 1970 +0000
1151 1155 | summary: (34) head
1152 1156 |
1153 1157 $ hg glog -l1 repo/missing
1154 1158
1155 1159 File log with revs != cset revs:
1156 1160 $ hg init flog
1157 1161 $ cd flog
1158 1162 $ echo one >one
1159 1163 $ hg add one
1160 1164 $ hg commit -mone
1161 1165 $ echo two >two
1162 1166 $ hg add two
1163 1167 $ hg commit -mtwo
1164 1168 $ echo more >two
1165 1169 $ hg commit -mmore
1166 1170 $ hg glog two
1167 1171 @ changeset: 2:12c28321755b
1168 1172 | tag: tip
1169 1173 | user: test
1170 1174 | date: Thu Jan 01 00:00:00 1970 +0000
1171 1175 | summary: more
1172 1176 |
1173 1177 o changeset: 1:5ac72c0599bf
1174 1178 | user: test
1175 1179 | date: Thu Jan 01 00:00:00 1970 +0000
1176 1180 | summary: two
1177 1181 |
1178 1182
1179 1183 Issue1896: File log with explicit style
1180 1184 $ hg glog --style=default one
1181 1185 o changeset: 0:3d578b4a1f53
1182 1186 user: test
1183 1187 date: Thu Jan 01 00:00:00 1970 +0000
1184 1188 summary: one
1185 1189
1186 1190 Issue2395: glog --style header and footer
1187 1191 $ hg glog --style=xml one
1188 1192 <?xml version="1.0"?>
1189 1193 <log>
1190 1194 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1191 1195 <author email="test">test</author>
1192 1196 <date>1970-01-01T00:00:00+00:00</date>
1193 1197 <msg xml:space="preserve">one</msg>
1194 1198 </logentry>
1195 1199 </log>
1196 1200
1197 1201 $ cd ..
1198 1202
1199 1203 Incoming and outgoing:
1200 1204
1201 1205 $ hg clone -U -r31 repo repo2
1202 1206 adding changesets
1203 1207 adding manifests
1204 1208 adding file changes
1205 1209 added 31 changesets with 31 changes to 1 files
1206 1210 $ cd repo2
1207 1211
1208 1212 $ hg incoming --graph ../repo
1209 1213 comparing with ../repo
1210 1214 searching for changes
1211 1215 o changeset: 34:fea3ac5810e0
1212 1216 | tag: tip
1213 1217 | parent: 32:d06dffa21a31
1214 1218 | user: test
1215 1219 | date: Thu Jan 01 00:00:34 1970 +0000
1216 1220 | summary: (34) head
1217 1221 |
1218 1222 | o changeset: 33:68608f5145f9
1219 1223 | parent: 18:1aa84d96232a
1220 1224 | user: test
1221 1225 | date: Thu Jan 01 00:00:33 1970 +0000
1222 1226 | summary: (33) head
1223 1227 |
1224 1228 o changeset: 32:d06dffa21a31
1225 1229 | parent: 27:886ed638191b
1226 1230 | parent: 31:621d83e11f67
1227 1231 | user: test
1228 1232 | date: Thu Jan 01 00:00:32 1970 +0000
1229 1233 | summary: (32) expand
1230 1234 |
1231 1235 o changeset: 27:886ed638191b
1232 1236 parent: 21:d42a756af44d
1233 1237 user: test
1234 1238 date: Thu Jan 01 00:00:27 1970 +0000
1235 1239 summary: (27) collapse
1236 1240
1237 1241 $ cd ..
1238 1242
1239 1243 $ hg -R repo outgoing --graph repo2
1240 1244 comparing with repo2
1241 1245 searching for changes
1242 1246 @ changeset: 34:fea3ac5810e0
1243 1247 | tag: tip
1244 1248 | parent: 32:d06dffa21a31
1245 1249 | user: test
1246 1250 | date: Thu Jan 01 00:00:34 1970 +0000
1247 1251 | summary: (34) head
1248 1252 |
1249 1253 | o changeset: 33:68608f5145f9
1250 1254 | parent: 18:1aa84d96232a
1251 1255 | user: test
1252 1256 | date: Thu Jan 01 00:00:33 1970 +0000
1253 1257 | summary: (33) head
1254 1258 |
1255 1259 o changeset: 32:d06dffa21a31
1256 1260 | parent: 27:886ed638191b
1257 1261 | parent: 31:621d83e11f67
1258 1262 | user: test
1259 1263 | date: Thu Jan 01 00:00:32 1970 +0000
1260 1264 | summary: (32) expand
1261 1265 |
1262 1266 o changeset: 27:886ed638191b
1263 1267 parent: 21:d42a756af44d
1264 1268 user: test
1265 1269 date: Thu Jan 01 00:00:27 1970 +0000
1266 1270 summary: (27) collapse
1267 1271
1268 1272
1269 1273 File + limit with revs != cset revs:
1270 1274 $ cd repo
1271 1275 $ touch b
1272 1276 $ hg ci -Aqm0
1273 1277 $ hg glog -l2 a
1274 1278 o changeset: 34:fea3ac5810e0
1275 1279 | parent: 32:d06dffa21a31
1276 1280 | user: test
1277 1281 | date: Thu Jan 01 00:00:34 1970 +0000
1278 1282 | summary: (34) head
1279 1283 |
1280 1284 | o changeset: 33:68608f5145f9
1281 1285 | | parent: 18:1aa84d96232a
1282 1286 | | user: test
1283 1287 | | date: Thu Jan 01 00:00:33 1970 +0000
1284 1288 | | summary: (33) head
1285 1289 | |
1286 1290
1287 1291 File + limit + -ra:b, (b - a) < limit:
1288 1292 $ hg glog -l3000 -r32:tip a
1289 1293 o changeset: 34:fea3ac5810e0
1290 1294 | parent: 32:d06dffa21a31
1291 1295 | user: test
1292 1296 | date: Thu Jan 01 00:00:34 1970 +0000
1293 1297 | summary: (34) head
1294 1298 |
1295 1299 | o changeset: 33:68608f5145f9
1296 1300 | | parent: 18:1aa84d96232a
1297 1301 | | user: test
1298 1302 | | date: Thu Jan 01 00:00:33 1970 +0000
1299 1303 | | summary: (33) head
1300 1304 | |
1301 1305 o | changeset: 32:d06dffa21a31
1302 1306 |\ \ parent: 27:886ed638191b
1303 1307 | | | parent: 31:621d83e11f67
1304 1308 | | | user: test
1305 1309 | | | date: Thu Jan 01 00:00:32 1970 +0000
1306 1310 | | | summary: (32) expand
1307 1311 | | |
1308 1312
1309 1313 Point out a common and an uncommon unshown parent
1310 1314
1311 1315 $ hg glog -r 'rev(8) or rev(9)'
1312 1316 o changeset: 9:7010c0af0a35
1313 1317 |\ parent: 7:b632bb1b1224
1314 1318 | | parent: 8:7a0b11f71937
1315 1319 | | user: test
1316 1320 | | date: Thu Jan 01 00:00:09 1970 +0000
1317 1321 | | summary: (9) expand
1318 1322 | |
1319 1323 o | changeset: 8:7a0b11f71937
1320 1324 |\| parent: 0:e6eb3150255d
1321 1325 | | parent: 7:b632bb1b1224
1322 1326 | | user: test
1323 1327 | | date: Thu Jan 01 00:00:08 1970 +0000
1324 1328 | | summary: (8) merge two known; one immediate left, one far right
1325 1329 | |
1326 1330
1327 1331 File + limit + -ra:b, b < tip:
1328 1332
1329 1333 $ hg glog -l1 -r32:34 a
1330 1334 o changeset: 34:fea3ac5810e0
1331 1335 | parent: 32:d06dffa21a31
1332 1336 | user: test
1333 1337 | date: Thu Jan 01 00:00:34 1970 +0000
1334 1338 | summary: (34) head
1335 1339 |
1336 1340
1337 1341 file(File) + limit + -ra:b, b < tip:
1338 1342
1339 1343 $ hg glog -l1 -r32:34 -r 'file("a")'
1340 1344 o changeset: 34:fea3ac5810e0
1341 1345 | parent: 32:d06dffa21a31
1342 1346 | user: test
1343 1347 | date: Thu Jan 01 00:00:34 1970 +0000
1344 1348 | summary: (34) head
1345 1349 |
1346 1350
1347 1351 limit(file(File) and a::b), b < tip:
1348 1352
1349 1353 $ hg glog -r 'limit(file("a") and 32::34, 1)'
1350 1354 o changeset: 32:d06dffa21a31
1351 1355 |\ parent: 27:886ed638191b
1352 1356 | | parent: 31:621d83e11f67
1353 1357 | | user: test
1354 1358 | | date: Thu Jan 01 00:00:32 1970 +0000
1355 1359 | | summary: (32) expand
1356 1360 | |
1357 1361
1358 1362 File + limit + -ra:b, b < tip:
1359 1363
1360 1364 $ hg glog -r 'limit(file("a") and 34::32, 1)'
1361 1365
1362 1366 File + limit + -ra:b, b < tip, (b - a) < limit:
1363 1367
1364 1368 $ hg glog -l10 -r33:34 a
1365 1369 o changeset: 34:fea3ac5810e0
1366 1370 | parent: 32:d06dffa21a31
1367 1371 | user: test
1368 1372 | date: Thu Jan 01 00:00:34 1970 +0000
1369 1373 | summary: (34) head
1370 1374 |
1371 1375 | o changeset: 33:68608f5145f9
1372 1376 | | parent: 18:1aa84d96232a
1373 1377 | | user: test
1374 1378 | | date: Thu Jan 01 00:00:33 1970 +0000
1375 1379 | | summary: (33) head
1376 1380 | |
1377 1381
1378 1382 Do not crash or produce strange graphs if history is buggy
1379 1383
1380 1384 $ hg branch branch
1381 1385 marked working directory as branch branch
1382 1386 (branches are permanent and global, did you want a bookmark?)
1383 1387 $ commit 36 "buggy merge: identical parents" 35 35
1384 1388 $ hg glog -l5
1385 1389 @ changeset: 36:08a19a744424
1386 1390 | branch: branch
1387 1391 | tag: tip
1388 1392 | parent: 35:9159c3644c5e
1389 1393 | parent: 35:9159c3644c5e
1390 1394 | user: test
1391 1395 | date: Thu Jan 01 00:00:36 1970 +0000
1392 1396 | summary: (36) buggy merge: identical parents
1393 1397 |
1394 1398 o changeset: 35:9159c3644c5e
1395 1399 | user: test
1396 1400 | date: Thu Jan 01 00:00:00 1970 +0000
1397 1401 | summary: 0
1398 1402 |
1399 1403 o changeset: 34:fea3ac5810e0
1400 1404 | parent: 32:d06dffa21a31
1401 1405 | user: test
1402 1406 | date: Thu Jan 01 00:00:34 1970 +0000
1403 1407 | summary: (34) head
1404 1408 |
1405 1409 | o changeset: 33:68608f5145f9
1406 1410 | | parent: 18:1aa84d96232a
1407 1411 | | user: test
1408 1412 | | date: Thu Jan 01 00:00:33 1970 +0000
1409 1413 | | summary: (33) head
1410 1414 | |
1411 1415 o | changeset: 32:d06dffa21a31
1412 1416 |\ \ parent: 27:886ed638191b
1413 1417 | | | parent: 31:621d83e11f67
1414 1418 | | | user: test
1415 1419 | | | date: Thu Jan 01 00:00:32 1970 +0000
1416 1420 | | | summary: (32) expand
1417 1421 | | |
1418 1422
1419 1423 Test log -G options
1420 1424
1421 1425 $ testlog() {
1422 1426 > hg log -G --print-revset "$@"
1423 1427 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1424 1428 > | sed 's/.*nodetag/nodetag/' > log.nodes
1425 1429 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1426 1430 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1427 1431 > diff -u log.nodes glog.nodes
1428 1432 > }
1429 1433
1430 1434 glog always reorders nodes which explains the difference with log
1431 1435
1432 1436 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1433 (group
1434 (group
1435 (or
1436 (or
1437 (or
1438 (or
1439 (or
1440 ('symbol', '27')
1441 ('symbol', '25'))
1442 ('symbol', '21'))
1443 ('symbol', '34'))
1444 ('symbol', '32'))
1445 ('symbol', '31'))))
1437 ['27', '25', '21', '34', '32', '31']
1438 []
1446 1439 --- log.nodes * (glob)
1447 1440 +++ glog.nodes * (glob)
1448 1441 @@ -1,6 +1,6 @@
1449 1442 -nodetag 27
1450 1443 -nodetag 25
1451 1444 -nodetag 21
1452 1445 nodetag 34
1453 1446 nodetag 32
1454 1447 nodetag 31
1455 1448 +nodetag 27
1456 1449 +nodetag 25
1457 1450 +nodetag 21
1458 1451 [1]
1459 1452 $ testlog -u test -u not-a-user
1453 []
1460 1454 (group
1461 1455 (group
1462 1456 (or
1463 1457 (func
1464 1458 ('symbol', 'user')
1465 1459 ('string', 'test'))
1466 1460 (func
1467 1461 ('symbol', 'user')
1468 1462 ('string', 'not-a-user')))))
1469 1463 $ testlog -b not-a-branch
1464 []
1470 1465 (group
1471 1466 (group
1472 1467 (func
1473 1468 ('symbol', 'branch')
1474 1469 ('string', 'not-a-branch'))))
1475 1470 abort: unknown revision 'not-a-branch'!
1476 1471 abort: unknown revision 'not-a-branch'!
1477 1472 $ testlog -b default -b branch --only-branch branch
1473 []
1478 1474 (group
1479 1475 (group
1480 1476 (or
1481 1477 (or
1482 1478 (func
1483 1479 ('symbol', 'branch')
1484 1480 ('string', 'default'))
1485 1481 (func
1486 1482 ('symbol', 'branch')
1487 1483 ('string', 'branch')))
1488 1484 (func
1489 1485 ('symbol', 'branch')
1490 1486 ('string', 'branch')))))
1491 1487 $ testlog -k expand -k merge
1488 []
1492 1489 (group
1493 1490 (group
1494 1491 (or
1495 1492 (func
1496 1493 ('symbol', 'keyword')
1497 1494 ('string', 'expand'))
1498 1495 (func
1499 1496 ('symbol', 'keyword')
1500 1497 ('string', 'merge')))))
1501 1498 $ testlog --only-merges
1499 []
1502 1500 (group
1503 1501 (func
1504 1502 ('symbol', 'merge')
1505 1503 None))
1506 1504 $ testlog --no-merges
1505 []
1507 1506 (group
1508 1507 (not
1509 1508 (func
1510 1509 ('symbol', 'merge')
1511 1510 None)))
1512 1511 $ testlog --date '2 0 to 4 0'
1512 []
1513 1513 (group
1514 1514 (func
1515 1515 ('symbol', 'date')
1516 1516 ('string', '2 0 to 4 0')))
1517 1517 $ hg log -G -d 'brace ) in a date'
1518 1518 abort: invalid date: 'brace ) in a date'
1519 1519 [255]
1520 1520 $ testlog --prune 31 --prune 32
1521 []
1521 1522 (group
1522 1523 (group
1523 1524 (and
1524 1525 (not
1525 1526 (group
1526 1527 (or
1527 1528 ('string', '31')
1528 1529 (func
1529 1530 ('symbol', 'ancestors')
1530 1531 ('string', '31')))))
1531 1532 (not
1532 1533 (group
1533 1534 (or
1534 1535 ('string', '32')
1535 1536 (func
1536 1537 ('symbol', 'ancestors')
1537 1538 ('string', '32'))))))))
1538 1539
1539 1540 Dedicated repo for --follow and paths filtering. The g is crafted to
1540 1541 have 2 filelog topological heads in a linear changeset graph.
1541 1542
1542 1543 $ cd ..
1543 1544 $ hg init follow
1544 1545 $ cd follow
1545 1546 $ echo a > a
1546 1547 $ echo aa > aa
1547 1548 $ echo f > f
1548 1549 $ hg ci -Am "add a"
1549 1550 adding a
1550 1551 adding aa
1551 1552 adding f
1552 1553 $ hg cp a b
1553 1554 $ hg cp f g
1554 1555 $ hg ci -m "copy a b"
1555 1556 $ mkdir dir
1556 1557 $ hg mv b dir
1557 1558 $ echo g >> g
1558 1559 $ echo f >> f
1559 1560 $ hg ci -m "mv b dir/b"
1560 1561 $ hg mv a b
1561 1562 $ hg cp -f f g
1562 1563 $ echo a > d
1563 1564 $ hg add d
1564 1565 $ hg ci -m "mv a b; add d"
1565 1566 $ hg mv dir/b e
1566 1567 $ hg ci -m "mv dir/b e"
1567 1568 $ hg glog --template '({rev}) {desc|firstline}\n'
1568 1569 @ (4) mv dir/b e
1569 1570 |
1570 1571 o (3) mv a b; add d
1571 1572 |
1572 1573 o (2) mv b dir/b
1573 1574 |
1574 1575 o (1) copy a b
1575 1576 |
1576 1577 o (0) add a
1577 1578
1578 1579
1579 1580 $ testlog a
1581 []
1580 1582 (group
1581 1583 (group
1582 1584 (func
1583 1585 ('symbol', 'filelog')
1584 1586 ('string', 'a'))))
1585 1587 $ testlog a b
1588 []
1586 1589 (group
1587 1590 (group
1588 1591 (or
1589 1592 (func
1590 1593 ('symbol', 'filelog')
1591 1594 ('string', 'a'))
1592 1595 (func
1593 1596 ('symbol', 'filelog')
1594 1597 ('string', 'b')))))
1595 1598
1596 1599 Test falling back to slow path for non-existing files
1597 1600
1598 1601 $ testlog a c
1602 []
1599 1603 (group
1600 (group
1601 (func
1602 ('symbol', '_matchfiles')
1604 (func
1605 ('symbol', '_matchfiles')
1606 (list
1603 1607 (list
1604 (list
1605 ('string', 'r:')
1606 ('string', 'p:a'))
1607 ('string', 'p:c')))))
1608 ('string', 'r:')
1609 ('string', 'p:a'))
1610 ('string', 'p:c'))))
1608 1611
1609 1612 Test multiple --include/--exclude/paths
1610 1613
1611 1614 $ testlog --include a --include e --exclude b --exclude e a e
1615 []
1612 1616 (group
1613 (group
1614 (func
1615 ('symbol', '_matchfiles')
1617 (func
1618 ('symbol', '_matchfiles')
1619 (list
1616 1620 (list
1617 1621 (list
1618 1622 (list
1619 1623 (list
1620 1624 (list
1621 (list
1622 ('string', 'r:')
1623 ('string', 'p:a'))
1624 ('string', 'p:e'))
1625 ('string', 'i:a'))
1626 ('string', 'i:e'))
1627 ('string', 'x:b'))
1628 ('string', 'x:e')))))
1625 ('string', 'r:')
1626 ('string', 'p:a'))
1627 ('string', 'p:e'))
1628 ('string', 'i:a'))
1629 ('string', 'i:e'))
1630 ('string', 'x:b'))
1631 ('string', 'x:e'))))
1629 1632
1630 1633 Test glob expansion of pats
1631 1634
1632 1635 $ expandglobs=`python -c "import mercurial.util; \
1633 1636 > print mercurial.util.expandglobs and 'true' or 'false'"`
1634 1637 $ if [ $expandglobs = "true" ]; then
1635 1638 > testlog 'a*';
1636 1639 > else
1637 1640 > testlog a*;
1638 1641 > fi;
1642 []
1639 1643 (group
1640 1644 (group
1641 1645 (func
1642 1646 ('symbol', 'filelog')
1643 1647 ('string', 'aa'))))
1644 1648
1645 1649 Test --follow on a directory
1646 1650
1647 1651 $ testlog -f dir
1648 1652 abort: cannot follow file not in parent revision: "dir"
1649 1653 abort: cannot follow file not in parent revision: "dir"
1650 1654 abort: cannot follow file not in parent revision: "dir"
1651 1655
1652 1656 Test --follow on file not in parent revision
1653 1657
1654 1658 $ testlog -f a
1655 1659 abort: cannot follow file not in parent revision: "a"
1656 1660 abort: cannot follow file not in parent revision: "a"
1657 1661 abort: cannot follow file not in parent revision: "a"
1658 1662
1659 1663 Test --follow and patterns
1660 1664
1661 1665 $ testlog -f 'glob:*'
1662 1666 abort: can only follow copies/renames for explicit filenames
1663 1667 abort: can only follow copies/renames for explicit filenames
1664 1668 abort: can only follow copies/renames for explicit filenames
1665 1669
1666 1670 Test --follow on a single rename
1667 1671
1668 1672 $ hg up -q 2
1669 1673 $ testlog -f a
1674 []
1670 1675 (group
1671 1676 (group
1672 1677 (func
1673 1678 ('symbol', 'follow')
1674 1679 ('string', 'a'))))
1675 1680
1676 1681 Test --follow and multiple renames
1677 1682
1678 1683 $ hg up -q tip
1679 1684 $ testlog -f e
1685 []
1680 1686 (group
1681 1687 (group
1682 1688 (func
1683 1689 ('symbol', 'follow')
1684 1690 ('string', 'e'))))
1685 1691
1686 1692 Test --follow and multiple filelog heads
1687 1693
1688 1694 $ hg up -q 2
1689 1695 $ testlog -f g
1696 []
1690 1697 (group
1691 1698 (group
1692 1699 (func
1693 1700 ('symbol', 'follow')
1694 1701 ('string', 'g'))))
1695 1702 $ cat log.nodes
1696 1703 nodetag 2
1697 1704 nodetag 1
1698 1705 nodetag 0
1699 1706 $ hg up -q tip
1700 1707 $ testlog -f g
1708 []
1701 1709 (group
1702 1710 (group
1703 1711 (func
1704 1712 ('symbol', 'follow')
1705 1713 ('string', 'g'))))
1706 1714 $ cat log.nodes
1707 1715 nodetag 3
1708 1716 nodetag 2
1709 1717 nodetag 0
1710 1718
1711 1719 Test --follow and multiple files
1712 1720
1713 1721 $ testlog -f g e
1722 []
1714 1723 (group
1715 1724 (group
1716 1725 (or
1717 1726 (func
1718 1727 ('symbol', 'follow')
1719 1728 ('string', 'g'))
1720 1729 (func
1721 1730 ('symbol', 'follow')
1722 1731 ('string', 'e')))))
1723 1732 $ cat log.nodes
1724 1733 nodetag 4
1725 1734 nodetag 3
1726 1735 nodetag 2
1727 1736 nodetag 1
1728 1737 nodetag 0
1729 1738
1730 1739 Test --follow-first
1731 1740
1732 1741 $ hg up -q 3
1733 1742 $ echo ee > e
1734 1743 $ hg ci -Am "add another e" e
1735 1744 created new head
1736 1745 $ hg merge --tool internal:other 4
1737 1746 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1738 1747 (branch merge, don't forget to commit)
1739 1748 $ echo merge > e
1740 1749 $ hg ci -m "merge 5 and 4"
1741 1750 $ testlog --follow-first
1751 []
1742 1752 (group
1743 1753 (func
1744 1754 ('symbol', '_followfirst')
1745 1755 None))
1746 1756
1747 1757 Cannot compare with log --follow-first FILE as it never worked
1748 1758
1749 1759 $ hg log -G --print-revset --follow-first e
1760 []
1750 1761 (group
1751 1762 (group
1752 1763 (func
1753 1764 ('symbol', '_followfirst')
1754 1765 ('string', 'e'))))
1755 1766 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1756 1767 @ 6 merge 5 and 4
1757 1768 |\
1758 1769 o | 5 add another e
1759 1770 | |
1760 1771
1761 1772 Test --copies
1762 1773
1763 1774 $ hg log -G --copies --template "{rev} {desc|firstline} \
1764 1775 > copies: {file_copies_switch}\n"
1765 1776 @ 6 merge 5 and 4 copies:
1766 1777 |\
1767 1778 | o 5 add another e copies:
1768 1779 | |
1769 1780 o | 4 mv dir/b e copies: e (dir/b)
1770 1781 |/
1771 1782 o 3 mv a b; add d copies: b (a)g (f)
1772 1783 |
1773 1784 o 2 mv b dir/b copies: dir/b (b)
1774 1785 |
1775 1786 o 1 copy a b copies: b (a)g (f)
1776 1787 |
1777 1788 o 0 add a copies:
1778 1789
1779 1790 Test "set:..." and parent revision
1780 1791
1781 1792 $ hg up -q 4
1782 1793 $ testlog "set:copied()"
1783 (group
1784 (group
1785 (func
1786 ('symbol', '_matchfiles')
1787 (list
1788 ('string', 'r:')
1789 ('string', 'p:set:copied()')))))
1790 $ testlog --include "set:copied()"
1794 []
1791 1795 (group
1792 (group
1793 (func
1794 ('symbol', '_matchfiles')
1795 (list
1796 ('string', 'r:')
1797 ('string', 'i:set:copied()')))))
1798 $ testlog -r "sort(file('set:copied()'), -rev)"
1796 (func
1797 ('symbol', '_matchfiles')
1798 (list
1799 ('string', 'r:')
1800 ('string', 'p:set:copied()'))))
1801 $ testlog --include "set:copied()"
1802 []
1799 1803 (group
1800 (group
1801 (func
1802 ('symbol', 'sort')
1803 (list
1804 (func
1805 ('symbol', 'file')
1806 ('string', 'set:copied()'))
1807 (negate
1808 ('symbol', 'rev'))))))
1804 (func
1805 ('symbol', '_matchfiles')
1806 (list
1807 ('string', 'r:')
1808 ('string', 'i:set:copied()'))))
1809 $ testlog -r "sort(file('set:copied()'), -rev)"
1810 ["sort(file('set:copied()'), -rev)"]
1811 []
1809 1812
1810 1813 Test --removed
1811 1814
1812 1815 $ testlog --removed
1813 (func
1814 ('symbol', 'all')
1815 None)
1816 []
1817 []
1816 1818 $ testlog --removed a
1819 []
1817 1820 (group
1818 (group
1819 (func
1820 ('symbol', '_matchfiles')
1821 (list
1822 ('string', 'r:')
1823 ('string', 'p:a')))))
1821 (func
1822 ('symbol', '_matchfiles')
1823 (list
1824 ('string', 'r:')
1825 ('string', 'p:a'))))
1824 1826 $ testlog --removed --follow a
1825 1827 abort: can only follow copies/renames for explicit filenames
1826 1828 abort: can only follow copies/renames for explicit filenames
1827 1829 abort: can only follow copies/renames for explicit filenames
1828 1830
1829 1831 Test --patch and --stat with --follow and --follow-first
1830 1832
1831 1833 $ hg up -q 3
1832 1834 $ hg log -G --git --patch b
1833 1835 o changeset: 1:216d4c92cf98
1834 1836 | user: test
1835 1837 | date: Thu Jan 01 00:00:00 1970 +0000
1836 1838 | summary: copy a b
1837 1839 |
1838 1840 | diff --git a/a b/b
1839 1841 | copy from a
1840 1842 | copy to b
1841 1843 |
1842 1844
1843 1845 $ hg log -G --git --stat b
1844 1846 o changeset: 1:216d4c92cf98
1845 1847 | user: test
1846 1848 | date: Thu Jan 01 00:00:00 1970 +0000
1847 1849 | summary: copy a b
1848 1850 |
1849 1851 | a | 0
1850 1852 | 1 files changed, 0 insertions(+), 0 deletions(-)
1851 1853 |
1852 1854
1853 1855 $ hg log -G --git --patch --follow b
1854 1856 o changeset: 1:216d4c92cf98
1855 1857 | user: test
1856 1858 | date: Thu Jan 01 00:00:00 1970 +0000
1857 1859 | summary: copy a b
1858 1860 |
1859 1861 | diff --git a/a b/b
1860 1862 | copy from a
1861 1863 | copy to b
1862 1864 |
1863 1865 o changeset: 0:f8035bb17114
1864 1866 user: test
1865 1867 date: Thu Jan 01 00:00:00 1970 +0000
1866 1868 summary: add a
1867 1869
1868 1870 diff --git a/a b/a
1869 1871 new file mode 100644
1870 1872 --- /dev/null
1871 1873 +++ b/a
1872 1874 @@ -0,0 +1,1 @@
1873 1875 +a
1874 1876
1875 1877
1876 1878 $ hg log -G --git --stat --follow b
1877 1879 o changeset: 1:216d4c92cf98
1878 1880 | user: test
1879 1881 | date: Thu Jan 01 00:00:00 1970 +0000
1880 1882 | summary: copy a b
1881 1883 |
1882 1884 | a | 0
1883 1885 | 1 files changed, 0 insertions(+), 0 deletions(-)
1884 1886 |
1885 1887 o changeset: 0:f8035bb17114
1886 1888 user: test
1887 1889 date: Thu Jan 01 00:00:00 1970 +0000
1888 1890 summary: add a
1889 1891
1890 1892 a | 1 +
1891 1893 1 files changed, 1 insertions(+), 0 deletions(-)
1892 1894
1893 1895
1894 1896 $ hg up -q 6
1895 1897 $ hg log -G --git --patch --follow-first e
1896 1898 @ changeset: 6:fc281d8ff18d
1897 1899 |\ tag: tip
1898 1900 | | parent: 5:99b31f1c2782
1899 1901 | | parent: 4:17d952250a9d
1900 1902 | | user: test
1901 1903 | | date: Thu Jan 01 00:00:00 1970 +0000
1902 1904 | | summary: merge 5 and 4
1903 1905 | |
1904 1906 | | diff --git a/e b/e
1905 1907 | | --- a/e
1906 1908 | | +++ b/e
1907 1909 | | @@ -1,1 +1,1 @@
1908 1910 | | -ee
1909 1911 | | +merge
1910 1912 | |
1911 1913 o | changeset: 5:99b31f1c2782
1912 1914 | | parent: 3:5918b8d165d1
1913 1915 | | user: test
1914 1916 | | date: Thu Jan 01 00:00:00 1970 +0000
1915 1917 | | summary: add another e
1916 1918 | |
1917 1919 | | diff --git a/e b/e
1918 1920 | | new file mode 100644
1919 1921 | | --- /dev/null
1920 1922 | | +++ b/e
1921 1923 | | @@ -0,0 +1,1 @@
1922 1924 | | +ee
1923 1925 | |
1926
1927 Test old-style --rev
1928
1929 $ hg tag 'foo-bar'
1930 $ testlog -r 'foo-bar'
1931 ['foo-bar']
1932 []
General Comments 0
You need to be logged in to leave comments. Login now