##// END OF EJS Templates
graphlog: draw multiple edges towards null node (issue5440)...
Yuya Nishihara -
r31552:d0b9e980 default
parent child Browse files
Show More
@@ -1,473 +1,475 b''
1 1 # Revision graph generator for Mercurial
2 2 #
3 3 # Copyright 2008 Dirkjan Ochtman <dirkjan@ochtman.nl>
4 4 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
5 5 #
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2 or any later version.
8 8
9 9 """supports walking the history as DAGs suitable for graphical output
10 10
11 11 The most basic format we use is that of::
12 12
13 13 (id, type, data, [parentids])
14 14
15 15 The node and parent ids are arbitrary integers which identify a node in the
16 16 context of the graph returned. Type is a constant specifying the node type.
17 17 Data depends on type.
18 18 """
19 19
20 20 from __future__ import absolute_import
21 21
22 22 from .node import nullrev
23 23 from . import (
24 24 revset,
25 25 smartset,
26 26 util,
27 27 )
28 28
29 29 CHANGESET = 'C'
30 30 PARENT = 'P'
31 31 GRANDPARENT = 'G'
32 32 MISSINGPARENT = 'M'
33 33 # Style of line to draw. None signals a line that ends and is removed at this
34 34 # point. A number prefix means only the last N characters of the current block
35 35 # will use that style, the rest will use the PARENT style. Add a - sign
36 36 # (so making N negative) and all but the first N characters use that style.
37 37 EDGES = {PARENT: '|', GRANDPARENT: ':', MISSINGPARENT: None}
38 38
39 39 def dagwalker(repo, revs):
40 40 """cset DAG generator yielding (id, CHANGESET, ctx, [parentinfo]) tuples
41 41
42 42 This generator function walks through revisions (which should be ordered
43 43 from bigger to lower). It returns a tuple for each node.
44 44
45 45 Each parentinfo entry is a tuple with (edgetype, parentid), where edgetype
46 46 is one of PARENT, GRANDPARENT or MISSINGPARENT. The node and parent ids
47 47 are arbitrary integers which identify a node in the context of the graph
48 48 returned.
49 49
50 50 """
51 51 if not revs:
52 52 return
53 53
54 54 gpcache = {}
55 55
56 56 for rev in revs:
57 57 ctx = repo[rev]
58 58 # partition into parents in the rev set and missing parents, then
59 59 # augment the lists with markers, to inform graph drawing code about
60 60 # what kind of edge to draw between nodes.
61 61 pset = set(p.rev() for p in ctx.parents() if p.rev() in revs)
62 62 mpars = [p.rev() for p in ctx.parents()
63 63 if p.rev() != nullrev and p.rev() not in pset]
64 64 parents = [(PARENT, p) for p in sorted(pset)]
65 65
66 66 for mpar in mpars:
67 67 gp = gpcache.get(mpar)
68 68 if gp is None:
69 69 # precompute slow query as we know reachableroots() goes
70 70 # through all revs (issue4782)
71 71 if not isinstance(revs, smartset.baseset):
72 72 revs = smartset.baseset(revs)
73 73 gp = gpcache[mpar] = sorted(set(revset.reachableroots(
74 74 repo, revs, [mpar])))
75 75 if not gp:
76 76 parents.append((MISSINGPARENT, mpar))
77 77 pset.add(mpar)
78 78 else:
79 79 parents.extend((GRANDPARENT, g) for g in gp if g not in pset)
80 80 pset.update(gp)
81 81
82 82 yield (ctx.rev(), CHANGESET, ctx, parents)
83 83
84 84 def nodes(repo, nodes):
85 85 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
86 86
87 87 This generator function walks the given nodes. It only returns parents
88 88 that are in nodes, too.
89 89 """
90 90 include = set(nodes)
91 91 for node in nodes:
92 92 ctx = repo[node]
93 93 parents = set((PARENT, p.rev()) for p in ctx.parents()
94 94 if p.node() in include)
95 95 yield (ctx.rev(), CHANGESET, ctx, sorted(parents))
96 96
97 97 def colored(dag, repo):
98 98 """annotates a DAG with colored edge information
99 99
100 100 For each DAG node this function emits tuples::
101 101
102 102 (id, type, data, (col, color), [(col, nextcol, color)])
103 103
104 104 with the following new elements:
105 105
106 106 - Tuple (col, color) with column and color index for the current node
107 107 - A list of tuples indicating the edges between the current node and its
108 108 parents.
109 109 """
110 110 seen = []
111 111 colors = {}
112 112 newcolor = 1
113 113 config = {}
114 114
115 115 for key, val in repo.ui.configitems('graph'):
116 116 if '.' in key:
117 117 branch, setting = key.rsplit('.', 1)
118 118 # Validation
119 119 if setting == "width" and val.isdigit():
120 120 config.setdefault(branch, {})[setting] = int(val)
121 121 elif setting == "color" and val.isalnum():
122 122 config.setdefault(branch, {})[setting] = val
123 123
124 124 if config:
125 125 getconf = util.lrucachefunc(
126 126 lambda rev: config.get(repo[rev].branch(), {}))
127 127 else:
128 128 getconf = lambda rev: {}
129 129
130 130 for (cur, type, data, parents) in dag:
131 131
132 132 # Compute seen and next
133 133 if cur not in seen:
134 134 seen.append(cur) # new head
135 135 colors[cur] = newcolor
136 136 newcolor += 1
137 137
138 138 col = seen.index(cur)
139 139 color = colors.pop(cur)
140 140 next = seen[:]
141 141
142 142 # Add parents to next
143 143 addparents = [p for pt, p in parents if p not in next]
144 144 next[col:col + 1] = addparents
145 145
146 146 # Set colors for the parents
147 147 for i, p in enumerate(addparents):
148 148 if not i:
149 149 colors[p] = color
150 150 else:
151 151 colors[p] = newcolor
152 152 newcolor += 1
153 153
154 154 # Add edges to the graph
155 155 edges = []
156 156 for ecol, eid in enumerate(seen):
157 157 if eid in next:
158 158 bconf = getconf(eid)
159 159 edges.append((
160 160 ecol, next.index(eid), colors[eid],
161 161 bconf.get('width', -1),
162 162 bconf.get('color', '')))
163 163 elif eid == cur:
164 164 for ptype, p in parents:
165 165 bconf = getconf(p)
166 166 edges.append((
167 167 ecol, next.index(p), color,
168 168 bconf.get('width', -1),
169 169 bconf.get('color', '')))
170 170
171 171 # Yield and move on
172 172 yield (cur, type, data, (col, color), edges)
173 173 seen = next
174 174
175 175 def asciiedges(type, char, lines, state, rev, parents):
176 176 """adds edge info to changelog DAG walk suitable for ascii()"""
177 177 seen = state['seen']
178 178 if rev not in seen:
179 179 seen.append(rev)
180 180 nodeidx = seen.index(rev)
181 181
182 182 knownparents = []
183 183 newparents = []
184 184 for ptype, parent in parents:
185 if parent == rev:
186 # self reference (should only be seen in null rev)
187 continue
185 188 if parent in seen:
186 189 knownparents.append(parent)
187 190 else:
188 191 newparents.append(parent)
189 192 state['edges'][parent] = state['styles'].get(ptype, '|')
190 193
191 194 ncols = len(seen)
192 195 nextseen = seen[:]
193 196 nextseen[nodeidx:nodeidx + 1] = newparents
194 edges = [(nodeidx, nextseen.index(p))
195 for p in knownparents if p != nullrev]
197 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
196 198
197 199 seen[:] = nextseen
198 200 while len(newparents) > 2:
199 201 # ascii() only knows how to add or remove a single column between two
200 202 # calls. Nodes with more than two parents break this constraint so we
201 203 # introduce intermediate expansion lines to grow the active node list
202 204 # slowly.
203 205 edges.append((nodeidx, nodeidx))
204 206 edges.append((nodeidx, nodeidx + 1))
205 207 nmorecols = 1
206 208 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
207 209 char = '\\'
208 210 lines = []
209 211 nodeidx += 1
210 212 ncols += 1
211 213 edges = []
212 214 del newparents[0]
213 215
214 216 if len(newparents) > 0:
215 217 edges.append((nodeidx, nodeidx))
216 218 if len(newparents) > 1:
217 219 edges.append((nodeidx, nodeidx + 1))
218 220 nmorecols = len(nextseen) - ncols
219 221 # remove current node from edge characters, no longer needed
220 222 state['edges'].pop(rev, None)
221 223 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
222 224
223 225 def _fixlongrightedges(edges):
224 226 for (i, (start, end)) in enumerate(edges):
225 227 if end > start:
226 228 edges[i] = (start, end + 1)
227 229
228 230 def _getnodelineedgestail(
229 231 echars, idx, pidx, ncols, coldiff, pdiff, fix_tail):
230 232 if fix_tail and coldiff == pdiff and coldiff != 0:
231 233 # Still going in the same non-vertical direction.
232 234 if coldiff == -1:
233 235 start = max(idx + 1, pidx)
234 236 tail = echars[idx * 2:(start - 1) * 2]
235 237 tail.extend(["/", " "] * (ncols - start))
236 238 return tail
237 239 else:
238 240 return ["\\", " "] * (ncols - idx - 1)
239 241 else:
240 242 remainder = (ncols - idx - 1)
241 243 return echars[-(remainder * 2):] if remainder > 0 else []
242 244
243 245 def _drawedges(echars, edges, nodeline, interline):
244 246 for (start, end) in edges:
245 247 if start == end + 1:
246 248 interline[2 * end + 1] = "/"
247 249 elif start == end - 1:
248 250 interline[2 * start + 1] = "\\"
249 251 elif start == end:
250 252 interline[2 * start] = echars[2 * start]
251 253 else:
252 254 if 2 * end >= len(nodeline):
253 255 continue
254 256 nodeline[2 * end] = "+"
255 257 if start > end:
256 258 (start, end) = (end, start)
257 259 for i in range(2 * start + 1, 2 * end):
258 260 if nodeline[i] != "+":
259 261 nodeline[i] = "-"
260 262
261 263 def _getpaddingline(echars, idx, ncols, edges):
262 264 # all edges up to the current node
263 265 line = echars[:idx * 2]
264 266 # an edge for the current node, if there is one
265 267 if (idx, idx - 1) in edges or (idx, idx) in edges:
266 268 # (idx, idx - 1) (idx, idx)
267 269 # | | | | | | | |
268 270 # +---o | | o---+
269 271 # | | X | | X | |
270 272 # | |/ / | |/ /
271 273 # | | | | | |
272 274 line.extend(echars[idx * 2:(idx + 1) * 2])
273 275 else:
274 276 line.extend(' ')
275 277 # all edges to the right of the current node
276 278 remainder = ncols - idx - 1
277 279 if remainder > 0:
278 280 line.extend(echars[-(remainder * 2):])
279 281 return line
280 282
281 283 def _drawendinglines(lines, extra, edgemap, seen):
282 284 """Draw ending lines for missing parent edges
283 285
284 286 None indicates an edge that ends at between this node and the next
285 287 Replace with a short line ending in ~ and add / lines to any edges to
286 288 the right.
287 289
288 290 """
289 291 if None not in edgemap.values():
290 292 return
291 293
292 294 # Check for more edges to the right of our ending edges.
293 295 # We need enough space to draw adjustment lines for these.
294 296 edgechars = extra[::2]
295 297 while edgechars and edgechars[-1] is None:
296 298 edgechars.pop()
297 299 shift_size = max((edgechars.count(None) * 2) - 1, 0)
298 300 while len(lines) < 3 + shift_size:
299 301 lines.append(extra[:])
300 302
301 303 if shift_size:
302 304 empties = []
303 305 toshift = []
304 306 first_empty = extra.index(None)
305 307 for i, c in enumerate(extra[first_empty::2], first_empty // 2):
306 308 if c is None:
307 309 empties.append(i * 2)
308 310 else:
309 311 toshift.append(i * 2)
310 312 targets = list(range(first_empty, first_empty + len(toshift) * 2, 2))
311 313 positions = toshift[:]
312 314 for line in lines[-shift_size:]:
313 315 line[first_empty:] = [' '] * (len(line) - first_empty)
314 316 for i in range(len(positions)):
315 317 pos = positions[i] - 1
316 318 positions[i] = max(pos, targets[i])
317 319 line[pos] = '/' if pos > targets[i] else extra[toshift[i]]
318 320
319 321 map = {1: '|', 2: '~'}
320 322 for i, line in enumerate(lines):
321 323 if None not in line:
322 324 continue
323 325 line[:] = [c or map.get(i, ' ') for c in line]
324 326
325 327 # remove edges that ended
326 328 remove = [p for p, c in edgemap.items() if c is None]
327 329 for parent in remove:
328 330 del edgemap[parent]
329 331 seen.remove(parent)
330 332
331 333 def asciistate():
332 334 """returns the initial value for the "state" argument to ascii()"""
333 335 return {
334 336 'seen': [],
335 337 'edges': {},
336 338 'lastcoldiff': 0,
337 339 'lastindex': 0,
338 340 'styles': EDGES.copy(),
339 341 'graphshorten': False,
340 342 }
341 343
342 344 def ascii(ui, state, type, char, text, coldata):
343 345 """prints an ASCII graph of the DAG
344 346
345 347 takes the following arguments (one call per node in the graph):
346 348
347 349 - ui to write to
348 350 - Somewhere to keep the needed state in (init to asciistate())
349 351 - Column of the current node in the set of ongoing edges.
350 352 - Type indicator of node data, usually 'C' for changesets.
351 353 - Payload: (char, lines):
352 354 - Character to use as node's symbol.
353 355 - List of lines to display as the node's text.
354 356 - Edges; a list of (col, next_col) indicating the edges between
355 357 the current node and its parents.
356 358 - Number of columns (ongoing edges) in the current revision.
357 359 - The difference between the number of columns (ongoing edges)
358 360 in the next revision and the number of columns (ongoing edges)
359 361 in the current revision. That is: -1 means one column removed;
360 362 0 means no columns added or removed; 1 means one column added.
361 363 """
362 364 idx, edges, ncols, coldiff = coldata
363 365 assert -2 < coldiff < 2
364 366
365 367 edgemap, seen = state['edges'], state['seen']
366 368 # Be tolerant of history issues; make sure we have at least ncols + coldiff
367 369 # elements to work with. See test-glog.t for broken history test cases.
368 370 echars = [c for p in seen for c in (edgemap.get(p, '|'), ' ')]
369 371 echars.extend(('|', ' ') * max(ncols + coldiff - len(seen), 0))
370 372
371 373 if coldiff == -1:
372 374 # Transform
373 375 #
374 376 # | | | | | |
375 377 # o | | into o---+
376 378 # |X / |/ /
377 379 # | | | |
378 380 _fixlongrightedges(edges)
379 381
380 382 # add_padding_line says whether to rewrite
381 383 #
382 384 # | | | | | | | |
383 385 # | o---+ into | o---+
384 386 # | / / | | | # <--- padding line
385 387 # o | | | / /
386 388 # o | |
387 389 add_padding_line = (len(text) > 2 and coldiff == -1 and
388 390 [x for (x, y) in edges if x + 1 < y])
389 391
390 392 # fix_nodeline_tail says whether to rewrite
391 393 #
392 394 # | | o | | | | o | |
393 395 # | | |/ / | | |/ /
394 396 # | o | | into | o / / # <--- fixed nodeline tail
395 397 # | |/ / | |/ /
396 398 # o | | o | |
397 399 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
398 400
399 401 # nodeline is the line containing the node character (typically o)
400 402 nodeline = echars[:idx * 2]
401 403 nodeline.extend([char, " "])
402 404
403 405 nodeline.extend(
404 406 _getnodelineedgestail(
405 407 echars, idx, state['lastindex'], ncols, coldiff,
406 408 state['lastcoldiff'], fix_nodeline_tail))
407 409
408 410 # shift_interline is the line containing the non-vertical
409 411 # edges between this entry and the next
410 412 shift_interline = echars[:idx * 2]
411 413 shift_interline.extend(' ' * (2 + coldiff))
412 414 count = ncols - idx - 1
413 415 if coldiff == -1:
414 416 shift_interline.extend('/ ' * count)
415 417 elif coldiff == 0:
416 418 shift_interline.extend(echars[(idx + 1) * 2:ncols * 2])
417 419 else:
418 420 shift_interline.extend(r'\ ' * count)
419 421
420 422 # draw edges from the current node to its parents
421 423 _drawedges(echars, edges, nodeline, shift_interline)
422 424
423 425 # lines is the list of all graph lines to print
424 426 lines = [nodeline]
425 427 if add_padding_line:
426 428 lines.append(_getpaddingline(echars, idx, ncols, edges))
427 429
428 430 # If 'graphshorten' config, only draw shift_interline
429 431 # when there is any non vertical flow in graph.
430 432 if state['graphshorten']:
431 433 if any(c in '\/' for c in shift_interline if c):
432 434 lines.append(shift_interline)
433 435 # Else, no 'graphshorten' config so draw shift_interline.
434 436 else:
435 437 lines.append(shift_interline)
436 438
437 439 # make sure that there are as many graph lines as there are
438 440 # log strings
439 441 extra_interline = echars[:(ncols + coldiff) * 2]
440 442 if len(lines) < len(text):
441 443 while len(lines) < len(text):
442 444 lines.append(extra_interline[:])
443 445
444 446 _drawendinglines(lines, extra_interline, edgemap, seen)
445 447
446 448 while len(text) < len(lines):
447 449 text.append("")
448 450
449 451 if any(len(char) > 1 for char in edgemap.values()):
450 452 # limit drawing an edge to the first or last N lines of the current
451 453 # section the rest of the edge is drawn like a parent line.
452 454 parent = state['styles'][PARENT][-1]
453 455 def _drawgp(char, i):
454 456 # should a grandparent character be drawn for this line?
455 457 if len(char) < 2:
456 458 return True
457 459 num = int(char[:-1])
458 460 # either skip first num lines or take last num lines, based on sign
459 461 return -num <= i if num < 0 else (len(lines) - i) <= num
460 462 for i, line in enumerate(lines):
461 463 line[:] = [c[-1] if _drawgp(c, i) else parent for c in line]
462 464 edgemap.update(
463 465 (e, (c if len(c) < 2 else parent)) for e, c in edgemap.items())
464 466
465 467 # print lines
466 468 indentation_level = max(ncols, ncols + coldiff)
467 469 for (line, logstr) in zip(lines, text):
468 470 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
469 471 ui.write(ln.rstrip() + '\n')
470 472
471 473 # ... and start over
472 474 state['lastcoldiff'] = coldiff
473 475 state['lastindex'] = idx
@@ -1,3426 +1,3462 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 $ commit()
73 73 > {
74 74 > rev=$1
75 75 > msg=$2
76 76 > shift 2
77 77 > if [ "$#" -gt 0 ]; then
78 78 > hg debugsetparents "$@"
79 79 > fi
80 80 > echo $rev > a
81 81 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
82 82 > }
83 83
84 84 $ cat > printrevset.py <<EOF
85 85 > from mercurial import extensions, revsetlang, commands, cmdutil
86 86 >
87 87 > def uisetup(ui):
88 88 > def printrevset(orig, ui, repo, *pats, **opts):
89 89 > if opts.get('print_revset'):
90 90 > expr = cmdutil.getgraphlogrevs(repo, pats, opts)[1]
91 91 > if expr:
92 92 > tree = revsetlang.parse(expr)
93 93 > else:
94 94 > tree = []
95 95 > ui.write('%r\n' % (opts.get('rev', []),))
96 96 > ui.write(revsetlang.prettyformat(tree) + '\n')
97 97 > return 0
98 98 > return orig(ui, repo, *pats, **opts)
99 99 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
100 100 > entry[1].append(('', 'print-revset', False,
101 101 > 'print generated revset and exit (DEPRECATED)'))
102 102 > EOF
103 103
104 104 $ echo "[extensions]" >> $HGRCPATH
105 105 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
106 106
107 107 $ hg init repo
108 108 $ cd repo
109 109
110 110 Empty repo:
111 111
112 112 $ hg log -G
113 113
114 114
115 115 Building DAG:
116 116
117 117 $ commit 0 "root"
118 118 $ commit 1 "collapse" 0
119 119 $ commit 2 "collapse" 1
120 120 $ commit 3 "collapse" 2
121 121 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
122 122 $ commit 5 "expand" 3 4
123 123 $ commit 6 "merge two known; one immediate left, one far left" 2 5
124 124 $ commit 7 "expand" 2 5
125 125 $ commit 8 "merge two known; one immediate left, one far right" 0 7
126 126 $ commit 9 "expand" 7 8
127 127 $ commit 10 "merge two known; one immediate left, one near right" 0 6
128 128 $ commit 11 "expand" 6 10
129 129 $ commit 12 "merge two known; one immediate right, one far left" 1 9
130 130 $ commit 13 "expand" 9 11
131 131 $ commit 14 "merge two known; one immediate right, one far right" 0 12
132 132 $ commit 15 "expand" 13 14
133 133 $ commit 16 "merge two known; one immediate right, one near right" 0 1
134 134 $ commit 17 "expand" 12 16
135 135 $ commit 18 "merge two known; two far left" 1 15
136 136 $ commit 19 "expand" 15 17
137 137 $ commit 20 "merge two known; two far right" 0 18
138 138 $ commit 21 "expand" 19 20
139 139 $ commit 22 "merge two known; one far left, one far right" 18 21
140 140 $ commit 23 "merge one known; immediate left" 1 22
141 141 $ commit 24 "merge one known; immediate right" 0 23
142 142 $ commit 25 "merge one known; far left" 21 24
143 143 $ commit 26 "merge one known; far right" 18 25
144 144 $ commit 27 "collapse" 21
145 145 $ commit 28 "merge zero known" 1 26
146 146 $ commit 29 "regular commit" 0
147 147 $ commit 30 "expand" 28 29
148 148 $ commit 31 "expand" 21 30
149 149 $ commit 32 "expand" 27 31
150 150 $ commit 33 "head" 18
151 151 $ commit 34 "head" 32
152 152
153 153
154 154 $ hg log -G -q
155 155 @ 34:fea3ac5810e0
156 156 |
157 157 | o 33:68608f5145f9
158 158 | |
159 159 o | 32:d06dffa21a31
160 160 |\ \
161 161 | o \ 31:621d83e11f67
162 162 | |\ \
163 163 | | o \ 30:6e11cd4b648f
164 164 | | |\ \
165 165 | | | o | 29:cd9bb2be7593
166 166 | | | | |
167 167 | | o | | 28:44ecd0b9ae99
168 168 | | |\ \ \
169 169 o | | | | | 27:886ed638191b
170 170 |/ / / / /
171 171 | | o---+ 26:7f25b6c2f0b9
172 172 | | | | |
173 173 +---o | | 25:91da8ed57247
174 174 | | | | |
175 175 | | o | | 24:a9c19a3d96b7
176 176 | | |\| |
177 177 | | o | | 23:a01cddf0766d
178 178 | |/| | |
179 179 +---o---+ 22:e0d9cccacb5d
180 180 | | / /
181 181 o | | | 21:d42a756af44d
182 182 |\ \ \ \
183 183 | o---+-+ 20:d30ed6450e32
184 184 | / / /
185 185 o | | | 19:31ddc2c1573b
186 186 |\ \ \ \
187 187 +---+---o 18:1aa84d96232a
188 188 | | | |
189 189 | o | | 17:44765d7c06e0
190 190 | |\ \ \
191 191 | | o---+ 16:3677d192927d
192 192 | | |/ /
193 193 o | | | 15:1dda3f72782d
194 194 |\ \ \ \
195 195 | o-----+ 14:8eac370358ef
196 196 | |/ / /
197 197 o | | | 13:22d8966a97e3
198 198 |\ \ \ \
199 199 +---o | | 12:86b91144a6e9
200 200 | | |/ /
201 201 | o | | 11:832d76e6bdf2
202 202 | |\ \ \
203 203 | | o---+ 10:74c64d036d72
204 204 | |/ / /
205 205 o | | | 9:7010c0af0a35
206 206 |\ \ \ \
207 207 | o-----+ 8:7a0b11f71937
208 208 |/ / / /
209 209 o | | | 7:b632bb1b1224
210 210 |\ \ \ \
211 211 +---o | | 6:b105a072e251
212 212 | |/ / /
213 213 | o | | 5:4409d547b708
214 214 | |\ \ \
215 215 | | o | | 4:26a8bac39d9f
216 216 | |/|/ /
217 217 | o / / 3:27eef8ed80b4
218 218 |/ / /
219 219 o / / 2:3d9a33b8d1e1
220 220 |/ /
221 221 o / 1:6db2ef61d156
222 222 |/
223 223 o 0:e6eb3150255d
224 224
225 225
226 226 $ hg log -G
227 227 @ changeset: 34:fea3ac5810e0
228 228 | tag: tip
229 229 | parent: 32:d06dffa21a31
230 230 | user: test
231 231 | date: Thu Jan 01 00:00:34 1970 +0000
232 232 | summary: (34) head
233 233 |
234 234 | o changeset: 33:68608f5145f9
235 235 | | parent: 18:1aa84d96232a
236 236 | | user: test
237 237 | | date: Thu Jan 01 00:00:33 1970 +0000
238 238 | | summary: (33) head
239 239 | |
240 240 o | changeset: 32:d06dffa21a31
241 241 |\ \ parent: 27:886ed638191b
242 242 | | | parent: 31:621d83e11f67
243 243 | | | user: test
244 244 | | | date: Thu Jan 01 00:00:32 1970 +0000
245 245 | | | summary: (32) expand
246 246 | | |
247 247 | o | changeset: 31:621d83e11f67
248 248 | |\ \ parent: 21:d42a756af44d
249 249 | | | | parent: 30:6e11cd4b648f
250 250 | | | | user: test
251 251 | | | | date: Thu Jan 01 00:00:31 1970 +0000
252 252 | | | | summary: (31) expand
253 253 | | | |
254 254 | | o | changeset: 30:6e11cd4b648f
255 255 | | |\ \ parent: 28:44ecd0b9ae99
256 256 | | | | | parent: 29:cd9bb2be7593
257 257 | | | | | user: test
258 258 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
259 259 | | | | | summary: (30) expand
260 260 | | | | |
261 261 | | | o | changeset: 29:cd9bb2be7593
262 262 | | | | | parent: 0:e6eb3150255d
263 263 | | | | | user: test
264 264 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
265 265 | | | | | summary: (29) regular commit
266 266 | | | | |
267 267 | | o | | changeset: 28:44ecd0b9ae99
268 268 | | |\ \ \ parent: 1:6db2ef61d156
269 269 | | | | | | parent: 26:7f25b6c2f0b9
270 270 | | | | | | user: test
271 271 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
272 272 | | | | | | summary: (28) merge zero known
273 273 | | | | | |
274 274 o | | | | | changeset: 27:886ed638191b
275 275 |/ / / / / parent: 21:d42a756af44d
276 276 | | | | | user: test
277 277 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
278 278 | | | | | summary: (27) collapse
279 279 | | | | |
280 280 | | o---+ changeset: 26:7f25b6c2f0b9
281 281 | | | | | parent: 18:1aa84d96232a
282 282 | | | | | parent: 25:91da8ed57247
283 283 | | | | | user: test
284 284 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
285 285 | | | | | summary: (26) merge one known; far right
286 286 | | | | |
287 287 +---o | | changeset: 25:91da8ed57247
288 288 | | | | | parent: 21:d42a756af44d
289 289 | | | | | parent: 24:a9c19a3d96b7
290 290 | | | | | user: test
291 291 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
292 292 | | | | | summary: (25) merge one known; far left
293 293 | | | | |
294 294 | | o | | changeset: 24:a9c19a3d96b7
295 295 | | |\| | parent: 0:e6eb3150255d
296 296 | | | | | parent: 23:a01cddf0766d
297 297 | | | | | user: test
298 298 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
299 299 | | | | | summary: (24) merge one known; immediate right
300 300 | | | | |
301 301 | | o | | changeset: 23:a01cddf0766d
302 302 | |/| | | parent: 1:6db2ef61d156
303 303 | | | | | parent: 22:e0d9cccacb5d
304 304 | | | | | user: test
305 305 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
306 306 | | | | | summary: (23) merge one known; immediate left
307 307 | | | | |
308 308 +---o---+ changeset: 22:e0d9cccacb5d
309 309 | | | | parent: 18:1aa84d96232a
310 310 | | / / parent: 21:d42a756af44d
311 311 | | | | user: test
312 312 | | | | date: Thu Jan 01 00:00:22 1970 +0000
313 313 | | | | summary: (22) merge two known; one far left, one far right
314 314 | | | |
315 315 o | | | changeset: 21:d42a756af44d
316 316 |\ \ \ \ parent: 19:31ddc2c1573b
317 317 | | | | | parent: 20:d30ed6450e32
318 318 | | | | | user: test
319 319 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
320 320 | | | | | summary: (21) expand
321 321 | | | | |
322 322 | o---+-+ changeset: 20:d30ed6450e32
323 323 | | | | parent: 0:e6eb3150255d
324 324 | / / / parent: 18:1aa84d96232a
325 325 | | | | user: test
326 326 | | | | date: Thu Jan 01 00:00:20 1970 +0000
327 327 | | | | summary: (20) merge two known; two far right
328 328 | | | |
329 329 o | | | changeset: 19:31ddc2c1573b
330 330 |\ \ \ \ parent: 15:1dda3f72782d
331 331 | | | | | parent: 17:44765d7c06e0
332 332 | | | | | user: test
333 333 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
334 334 | | | | | summary: (19) expand
335 335 | | | | |
336 336 +---+---o changeset: 18:1aa84d96232a
337 337 | | | | parent: 1:6db2ef61d156
338 338 | | | | parent: 15:1dda3f72782d
339 339 | | | | user: test
340 340 | | | | date: Thu Jan 01 00:00:18 1970 +0000
341 341 | | | | summary: (18) merge two known; two far left
342 342 | | | |
343 343 | o | | changeset: 17:44765d7c06e0
344 344 | |\ \ \ parent: 12:86b91144a6e9
345 345 | | | | | parent: 16:3677d192927d
346 346 | | | | | user: test
347 347 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
348 348 | | | | | summary: (17) expand
349 349 | | | | |
350 350 | | o---+ changeset: 16:3677d192927d
351 351 | | | | | parent: 0:e6eb3150255d
352 352 | | |/ / parent: 1:6db2ef61d156
353 353 | | | | user: test
354 354 | | | | date: Thu Jan 01 00:00:16 1970 +0000
355 355 | | | | summary: (16) merge two known; one immediate right, one near right
356 356 | | | |
357 357 o | | | changeset: 15:1dda3f72782d
358 358 |\ \ \ \ parent: 13:22d8966a97e3
359 359 | | | | | parent: 14:8eac370358ef
360 360 | | | | | user: test
361 361 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
362 362 | | | | | summary: (15) expand
363 363 | | | | |
364 364 | o-----+ changeset: 14:8eac370358ef
365 365 | | | | | parent: 0:e6eb3150255d
366 366 | |/ / / parent: 12:86b91144a6e9
367 367 | | | | user: test
368 368 | | | | date: Thu Jan 01 00:00:14 1970 +0000
369 369 | | | | summary: (14) merge two known; one immediate right, one far right
370 370 | | | |
371 371 o | | | changeset: 13:22d8966a97e3
372 372 |\ \ \ \ parent: 9:7010c0af0a35
373 373 | | | | | parent: 11:832d76e6bdf2
374 374 | | | | | user: test
375 375 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
376 376 | | | | | summary: (13) expand
377 377 | | | | |
378 378 +---o | | changeset: 12:86b91144a6e9
379 379 | | |/ / parent: 1:6db2ef61d156
380 380 | | | | parent: 9:7010c0af0a35
381 381 | | | | user: test
382 382 | | | | date: Thu Jan 01 00:00:12 1970 +0000
383 383 | | | | summary: (12) merge two known; one immediate right, one far left
384 384 | | | |
385 385 | o | | changeset: 11:832d76e6bdf2
386 386 | |\ \ \ parent: 6:b105a072e251
387 387 | | | | | parent: 10:74c64d036d72
388 388 | | | | | user: test
389 389 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
390 390 | | | | | summary: (11) expand
391 391 | | | | |
392 392 | | o---+ changeset: 10:74c64d036d72
393 393 | | | | | parent: 0:e6eb3150255d
394 394 | |/ / / parent: 6:b105a072e251
395 395 | | | | user: test
396 396 | | | | date: Thu Jan 01 00:00:10 1970 +0000
397 397 | | | | summary: (10) merge two known; one immediate left, one near right
398 398 | | | |
399 399 o | | | changeset: 9:7010c0af0a35
400 400 |\ \ \ \ parent: 7:b632bb1b1224
401 401 | | | | | parent: 8:7a0b11f71937
402 402 | | | | | user: test
403 403 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
404 404 | | | | | summary: (9) expand
405 405 | | | | |
406 406 | o-----+ changeset: 8:7a0b11f71937
407 407 | | | | | parent: 0:e6eb3150255d
408 408 |/ / / / parent: 7:b632bb1b1224
409 409 | | | | user: test
410 410 | | | | date: Thu Jan 01 00:00:08 1970 +0000
411 411 | | | | summary: (8) merge two known; one immediate left, one far right
412 412 | | | |
413 413 o | | | changeset: 7:b632bb1b1224
414 414 |\ \ \ \ parent: 2:3d9a33b8d1e1
415 415 | | | | | parent: 5:4409d547b708
416 416 | | | | | user: test
417 417 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
418 418 | | | | | summary: (7) expand
419 419 | | | | |
420 420 +---o | | changeset: 6:b105a072e251
421 421 | |/ / / parent: 2:3d9a33b8d1e1
422 422 | | | | parent: 5:4409d547b708
423 423 | | | | user: test
424 424 | | | | date: Thu Jan 01 00:00:06 1970 +0000
425 425 | | | | summary: (6) merge two known; one immediate left, one far left
426 426 | | | |
427 427 | o | | changeset: 5:4409d547b708
428 428 | |\ \ \ parent: 3:27eef8ed80b4
429 429 | | | | | parent: 4:26a8bac39d9f
430 430 | | | | | user: test
431 431 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
432 432 | | | | | summary: (5) expand
433 433 | | | | |
434 434 | | o | | changeset: 4:26a8bac39d9f
435 435 | |/|/ / parent: 1:6db2ef61d156
436 436 | | | | parent: 3:27eef8ed80b4
437 437 | | | | user: test
438 438 | | | | date: Thu Jan 01 00:00:04 1970 +0000
439 439 | | | | summary: (4) merge two known; one immediate left, one immediate right
440 440 | | | |
441 441 | o | | changeset: 3:27eef8ed80b4
442 442 |/ / / user: test
443 443 | | | date: Thu Jan 01 00:00:03 1970 +0000
444 444 | | | summary: (3) collapse
445 445 | | |
446 446 o | | changeset: 2:3d9a33b8d1e1
447 447 |/ / user: test
448 448 | | date: Thu Jan 01 00:00:02 1970 +0000
449 449 | | summary: (2) collapse
450 450 | |
451 451 o | changeset: 1:6db2ef61d156
452 452 |/ user: test
453 453 | date: Thu Jan 01 00:00:01 1970 +0000
454 454 | summary: (1) collapse
455 455 |
456 456 o changeset: 0:e6eb3150255d
457 457 user: test
458 458 date: Thu Jan 01 00:00:00 1970 +0000
459 459 summary: (0) root
460 460
461 461
462 462 File glog:
463 463 $ hg log -G a
464 464 @ changeset: 34:fea3ac5810e0
465 465 | tag: tip
466 466 | parent: 32:d06dffa21a31
467 467 | user: test
468 468 | date: Thu Jan 01 00:00:34 1970 +0000
469 469 | summary: (34) head
470 470 |
471 471 | o changeset: 33:68608f5145f9
472 472 | | parent: 18:1aa84d96232a
473 473 | | user: test
474 474 | | date: Thu Jan 01 00:00:33 1970 +0000
475 475 | | summary: (33) head
476 476 | |
477 477 o | changeset: 32:d06dffa21a31
478 478 |\ \ parent: 27:886ed638191b
479 479 | | | parent: 31:621d83e11f67
480 480 | | | user: test
481 481 | | | date: Thu Jan 01 00:00:32 1970 +0000
482 482 | | | summary: (32) expand
483 483 | | |
484 484 | o | changeset: 31:621d83e11f67
485 485 | |\ \ parent: 21:d42a756af44d
486 486 | | | | parent: 30:6e11cd4b648f
487 487 | | | | user: test
488 488 | | | | date: Thu Jan 01 00:00:31 1970 +0000
489 489 | | | | summary: (31) expand
490 490 | | | |
491 491 | | o | changeset: 30:6e11cd4b648f
492 492 | | |\ \ parent: 28:44ecd0b9ae99
493 493 | | | | | parent: 29:cd9bb2be7593
494 494 | | | | | user: test
495 495 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
496 496 | | | | | summary: (30) expand
497 497 | | | | |
498 498 | | | o | changeset: 29:cd9bb2be7593
499 499 | | | | | parent: 0:e6eb3150255d
500 500 | | | | | user: test
501 501 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
502 502 | | | | | summary: (29) regular commit
503 503 | | | | |
504 504 | | o | | changeset: 28:44ecd0b9ae99
505 505 | | |\ \ \ parent: 1:6db2ef61d156
506 506 | | | | | | parent: 26:7f25b6c2f0b9
507 507 | | | | | | user: test
508 508 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
509 509 | | | | | | summary: (28) merge zero known
510 510 | | | | | |
511 511 o | | | | | changeset: 27:886ed638191b
512 512 |/ / / / / parent: 21:d42a756af44d
513 513 | | | | | user: test
514 514 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
515 515 | | | | | summary: (27) collapse
516 516 | | | | |
517 517 | | o---+ changeset: 26:7f25b6c2f0b9
518 518 | | | | | parent: 18:1aa84d96232a
519 519 | | | | | parent: 25:91da8ed57247
520 520 | | | | | user: test
521 521 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
522 522 | | | | | summary: (26) merge one known; far right
523 523 | | | | |
524 524 +---o | | changeset: 25:91da8ed57247
525 525 | | | | | parent: 21:d42a756af44d
526 526 | | | | | parent: 24:a9c19a3d96b7
527 527 | | | | | user: test
528 528 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
529 529 | | | | | summary: (25) merge one known; far left
530 530 | | | | |
531 531 | | o | | changeset: 24:a9c19a3d96b7
532 532 | | |\| | parent: 0:e6eb3150255d
533 533 | | | | | parent: 23:a01cddf0766d
534 534 | | | | | user: test
535 535 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
536 536 | | | | | summary: (24) merge one known; immediate right
537 537 | | | | |
538 538 | | o | | changeset: 23:a01cddf0766d
539 539 | |/| | | parent: 1:6db2ef61d156
540 540 | | | | | parent: 22:e0d9cccacb5d
541 541 | | | | | user: test
542 542 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
543 543 | | | | | summary: (23) merge one known; immediate left
544 544 | | | | |
545 545 +---o---+ changeset: 22:e0d9cccacb5d
546 546 | | | | parent: 18:1aa84d96232a
547 547 | | / / parent: 21:d42a756af44d
548 548 | | | | user: test
549 549 | | | | date: Thu Jan 01 00:00:22 1970 +0000
550 550 | | | | summary: (22) merge two known; one far left, one far right
551 551 | | | |
552 552 o | | | changeset: 21:d42a756af44d
553 553 |\ \ \ \ parent: 19:31ddc2c1573b
554 554 | | | | | parent: 20:d30ed6450e32
555 555 | | | | | user: test
556 556 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
557 557 | | | | | summary: (21) expand
558 558 | | | | |
559 559 | o---+-+ changeset: 20:d30ed6450e32
560 560 | | | | parent: 0:e6eb3150255d
561 561 | / / / parent: 18:1aa84d96232a
562 562 | | | | user: test
563 563 | | | | date: Thu Jan 01 00:00:20 1970 +0000
564 564 | | | | summary: (20) merge two known; two far right
565 565 | | | |
566 566 o | | | changeset: 19:31ddc2c1573b
567 567 |\ \ \ \ parent: 15:1dda3f72782d
568 568 | | | | | parent: 17:44765d7c06e0
569 569 | | | | | user: test
570 570 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
571 571 | | | | | summary: (19) expand
572 572 | | | | |
573 573 +---+---o changeset: 18:1aa84d96232a
574 574 | | | | parent: 1:6db2ef61d156
575 575 | | | | parent: 15:1dda3f72782d
576 576 | | | | user: test
577 577 | | | | date: Thu Jan 01 00:00:18 1970 +0000
578 578 | | | | summary: (18) merge two known; two far left
579 579 | | | |
580 580 | o | | changeset: 17:44765d7c06e0
581 581 | |\ \ \ parent: 12:86b91144a6e9
582 582 | | | | | parent: 16:3677d192927d
583 583 | | | | | user: test
584 584 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
585 585 | | | | | summary: (17) expand
586 586 | | | | |
587 587 | | o---+ changeset: 16:3677d192927d
588 588 | | | | | parent: 0:e6eb3150255d
589 589 | | |/ / parent: 1:6db2ef61d156
590 590 | | | | user: test
591 591 | | | | date: Thu Jan 01 00:00:16 1970 +0000
592 592 | | | | summary: (16) merge two known; one immediate right, one near right
593 593 | | | |
594 594 o | | | changeset: 15:1dda3f72782d
595 595 |\ \ \ \ parent: 13:22d8966a97e3
596 596 | | | | | parent: 14:8eac370358ef
597 597 | | | | | user: test
598 598 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
599 599 | | | | | summary: (15) expand
600 600 | | | | |
601 601 | o-----+ changeset: 14:8eac370358ef
602 602 | | | | | parent: 0:e6eb3150255d
603 603 | |/ / / parent: 12:86b91144a6e9
604 604 | | | | user: test
605 605 | | | | date: Thu Jan 01 00:00:14 1970 +0000
606 606 | | | | summary: (14) merge two known; one immediate right, one far right
607 607 | | | |
608 608 o | | | changeset: 13:22d8966a97e3
609 609 |\ \ \ \ parent: 9:7010c0af0a35
610 610 | | | | | parent: 11:832d76e6bdf2
611 611 | | | | | user: test
612 612 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
613 613 | | | | | summary: (13) expand
614 614 | | | | |
615 615 +---o | | changeset: 12:86b91144a6e9
616 616 | | |/ / parent: 1:6db2ef61d156
617 617 | | | | parent: 9:7010c0af0a35
618 618 | | | | user: test
619 619 | | | | date: Thu Jan 01 00:00:12 1970 +0000
620 620 | | | | summary: (12) merge two known; one immediate right, one far left
621 621 | | | |
622 622 | o | | changeset: 11:832d76e6bdf2
623 623 | |\ \ \ parent: 6:b105a072e251
624 624 | | | | | parent: 10:74c64d036d72
625 625 | | | | | user: test
626 626 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
627 627 | | | | | summary: (11) expand
628 628 | | | | |
629 629 | | o---+ changeset: 10:74c64d036d72
630 630 | | | | | parent: 0:e6eb3150255d
631 631 | |/ / / parent: 6:b105a072e251
632 632 | | | | user: test
633 633 | | | | date: Thu Jan 01 00:00:10 1970 +0000
634 634 | | | | summary: (10) merge two known; one immediate left, one near right
635 635 | | | |
636 636 o | | | changeset: 9:7010c0af0a35
637 637 |\ \ \ \ parent: 7:b632bb1b1224
638 638 | | | | | parent: 8:7a0b11f71937
639 639 | | | | | user: test
640 640 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
641 641 | | | | | summary: (9) expand
642 642 | | | | |
643 643 | o-----+ changeset: 8:7a0b11f71937
644 644 | | | | | parent: 0:e6eb3150255d
645 645 |/ / / / parent: 7:b632bb1b1224
646 646 | | | | user: test
647 647 | | | | date: Thu Jan 01 00:00:08 1970 +0000
648 648 | | | | summary: (8) merge two known; one immediate left, one far right
649 649 | | | |
650 650 o | | | changeset: 7:b632bb1b1224
651 651 |\ \ \ \ parent: 2:3d9a33b8d1e1
652 652 | | | | | parent: 5:4409d547b708
653 653 | | | | | user: test
654 654 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
655 655 | | | | | summary: (7) expand
656 656 | | | | |
657 657 +---o | | changeset: 6:b105a072e251
658 658 | |/ / / parent: 2:3d9a33b8d1e1
659 659 | | | | parent: 5:4409d547b708
660 660 | | | | user: test
661 661 | | | | date: Thu Jan 01 00:00:06 1970 +0000
662 662 | | | | summary: (6) merge two known; one immediate left, one far left
663 663 | | | |
664 664 | o | | changeset: 5:4409d547b708
665 665 | |\ \ \ parent: 3:27eef8ed80b4
666 666 | | | | | parent: 4:26a8bac39d9f
667 667 | | | | | user: test
668 668 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
669 669 | | | | | summary: (5) expand
670 670 | | | | |
671 671 | | o | | changeset: 4:26a8bac39d9f
672 672 | |/|/ / parent: 1:6db2ef61d156
673 673 | | | | parent: 3:27eef8ed80b4
674 674 | | | | user: test
675 675 | | | | date: Thu Jan 01 00:00:04 1970 +0000
676 676 | | | | summary: (4) merge two known; one immediate left, one immediate right
677 677 | | | |
678 678 | o | | changeset: 3:27eef8ed80b4
679 679 |/ / / user: test
680 680 | | | date: Thu Jan 01 00:00:03 1970 +0000
681 681 | | | summary: (3) collapse
682 682 | | |
683 683 o | | changeset: 2:3d9a33b8d1e1
684 684 |/ / user: test
685 685 | | date: Thu Jan 01 00:00:02 1970 +0000
686 686 | | summary: (2) collapse
687 687 | |
688 688 o | changeset: 1:6db2ef61d156
689 689 |/ user: test
690 690 | date: Thu Jan 01 00:00:01 1970 +0000
691 691 | summary: (1) collapse
692 692 |
693 693 o changeset: 0:e6eb3150255d
694 694 user: test
695 695 date: Thu Jan 01 00:00:00 1970 +0000
696 696 summary: (0) root
697 697
698 698
699 699 File glog per revset:
700 700
701 701 $ hg log -G -r 'file("a")'
702 702 @ changeset: 34:fea3ac5810e0
703 703 | tag: tip
704 704 | parent: 32:d06dffa21a31
705 705 | user: test
706 706 | date: Thu Jan 01 00:00:34 1970 +0000
707 707 | summary: (34) head
708 708 |
709 709 | o changeset: 33:68608f5145f9
710 710 | | parent: 18:1aa84d96232a
711 711 | | user: test
712 712 | | date: Thu Jan 01 00:00:33 1970 +0000
713 713 | | summary: (33) head
714 714 | |
715 715 o | changeset: 32:d06dffa21a31
716 716 |\ \ parent: 27:886ed638191b
717 717 | | | parent: 31:621d83e11f67
718 718 | | | user: test
719 719 | | | date: Thu Jan 01 00:00:32 1970 +0000
720 720 | | | summary: (32) expand
721 721 | | |
722 722 | o | changeset: 31:621d83e11f67
723 723 | |\ \ parent: 21:d42a756af44d
724 724 | | | | parent: 30:6e11cd4b648f
725 725 | | | | user: test
726 726 | | | | date: Thu Jan 01 00:00:31 1970 +0000
727 727 | | | | summary: (31) expand
728 728 | | | |
729 729 | | o | changeset: 30:6e11cd4b648f
730 730 | | |\ \ parent: 28:44ecd0b9ae99
731 731 | | | | | parent: 29:cd9bb2be7593
732 732 | | | | | user: test
733 733 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
734 734 | | | | | summary: (30) expand
735 735 | | | | |
736 736 | | | o | changeset: 29:cd9bb2be7593
737 737 | | | | | parent: 0:e6eb3150255d
738 738 | | | | | user: test
739 739 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
740 740 | | | | | summary: (29) regular commit
741 741 | | | | |
742 742 | | o | | changeset: 28:44ecd0b9ae99
743 743 | | |\ \ \ parent: 1:6db2ef61d156
744 744 | | | | | | parent: 26:7f25b6c2f0b9
745 745 | | | | | | user: test
746 746 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
747 747 | | | | | | summary: (28) merge zero known
748 748 | | | | | |
749 749 o | | | | | changeset: 27:886ed638191b
750 750 |/ / / / / parent: 21:d42a756af44d
751 751 | | | | | user: test
752 752 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
753 753 | | | | | summary: (27) collapse
754 754 | | | | |
755 755 | | o---+ changeset: 26:7f25b6c2f0b9
756 756 | | | | | parent: 18:1aa84d96232a
757 757 | | | | | parent: 25:91da8ed57247
758 758 | | | | | user: test
759 759 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
760 760 | | | | | summary: (26) merge one known; far right
761 761 | | | | |
762 762 +---o | | changeset: 25:91da8ed57247
763 763 | | | | | parent: 21:d42a756af44d
764 764 | | | | | parent: 24:a9c19a3d96b7
765 765 | | | | | user: test
766 766 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
767 767 | | | | | summary: (25) merge one known; far left
768 768 | | | | |
769 769 | | o | | changeset: 24:a9c19a3d96b7
770 770 | | |\| | parent: 0:e6eb3150255d
771 771 | | | | | parent: 23:a01cddf0766d
772 772 | | | | | user: test
773 773 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
774 774 | | | | | summary: (24) merge one known; immediate right
775 775 | | | | |
776 776 | | o | | changeset: 23:a01cddf0766d
777 777 | |/| | | parent: 1:6db2ef61d156
778 778 | | | | | parent: 22:e0d9cccacb5d
779 779 | | | | | user: test
780 780 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
781 781 | | | | | summary: (23) merge one known; immediate left
782 782 | | | | |
783 783 +---o---+ changeset: 22:e0d9cccacb5d
784 784 | | | | parent: 18:1aa84d96232a
785 785 | | / / parent: 21:d42a756af44d
786 786 | | | | user: test
787 787 | | | | date: Thu Jan 01 00:00:22 1970 +0000
788 788 | | | | summary: (22) merge two known; one far left, one far right
789 789 | | | |
790 790 o | | | changeset: 21:d42a756af44d
791 791 |\ \ \ \ parent: 19:31ddc2c1573b
792 792 | | | | | parent: 20:d30ed6450e32
793 793 | | | | | user: test
794 794 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
795 795 | | | | | summary: (21) expand
796 796 | | | | |
797 797 | o---+-+ changeset: 20:d30ed6450e32
798 798 | | | | parent: 0:e6eb3150255d
799 799 | / / / parent: 18:1aa84d96232a
800 800 | | | | user: test
801 801 | | | | date: Thu Jan 01 00:00:20 1970 +0000
802 802 | | | | summary: (20) merge two known; two far right
803 803 | | | |
804 804 o | | | changeset: 19:31ddc2c1573b
805 805 |\ \ \ \ parent: 15:1dda3f72782d
806 806 | | | | | parent: 17:44765d7c06e0
807 807 | | | | | user: test
808 808 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
809 809 | | | | | summary: (19) expand
810 810 | | | | |
811 811 +---+---o changeset: 18:1aa84d96232a
812 812 | | | | parent: 1:6db2ef61d156
813 813 | | | | parent: 15:1dda3f72782d
814 814 | | | | user: test
815 815 | | | | date: Thu Jan 01 00:00:18 1970 +0000
816 816 | | | | summary: (18) merge two known; two far left
817 817 | | | |
818 818 | o | | changeset: 17:44765d7c06e0
819 819 | |\ \ \ parent: 12:86b91144a6e9
820 820 | | | | | parent: 16:3677d192927d
821 821 | | | | | user: test
822 822 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
823 823 | | | | | summary: (17) expand
824 824 | | | | |
825 825 | | o---+ changeset: 16:3677d192927d
826 826 | | | | | parent: 0:e6eb3150255d
827 827 | | |/ / parent: 1:6db2ef61d156
828 828 | | | | user: test
829 829 | | | | date: Thu Jan 01 00:00:16 1970 +0000
830 830 | | | | summary: (16) merge two known; one immediate right, one near right
831 831 | | | |
832 832 o | | | changeset: 15:1dda3f72782d
833 833 |\ \ \ \ parent: 13:22d8966a97e3
834 834 | | | | | parent: 14:8eac370358ef
835 835 | | | | | user: test
836 836 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
837 837 | | | | | summary: (15) expand
838 838 | | | | |
839 839 | o-----+ changeset: 14:8eac370358ef
840 840 | | | | | parent: 0:e6eb3150255d
841 841 | |/ / / parent: 12:86b91144a6e9
842 842 | | | | user: test
843 843 | | | | date: Thu Jan 01 00:00:14 1970 +0000
844 844 | | | | summary: (14) merge two known; one immediate right, one far right
845 845 | | | |
846 846 o | | | changeset: 13:22d8966a97e3
847 847 |\ \ \ \ parent: 9:7010c0af0a35
848 848 | | | | | parent: 11:832d76e6bdf2
849 849 | | | | | user: test
850 850 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
851 851 | | | | | summary: (13) expand
852 852 | | | | |
853 853 +---o | | changeset: 12:86b91144a6e9
854 854 | | |/ / parent: 1:6db2ef61d156
855 855 | | | | parent: 9:7010c0af0a35
856 856 | | | | user: test
857 857 | | | | date: Thu Jan 01 00:00:12 1970 +0000
858 858 | | | | summary: (12) merge two known; one immediate right, one far left
859 859 | | | |
860 860 | o | | changeset: 11:832d76e6bdf2
861 861 | |\ \ \ parent: 6:b105a072e251
862 862 | | | | | parent: 10:74c64d036d72
863 863 | | | | | user: test
864 864 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
865 865 | | | | | summary: (11) expand
866 866 | | | | |
867 867 | | o---+ changeset: 10:74c64d036d72
868 868 | | | | | parent: 0:e6eb3150255d
869 869 | |/ / / parent: 6:b105a072e251
870 870 | | | | user: test
871 871 | | | | date: Thu Jan 01 00:00:10 1970 +0000
872 872 | | | | summary: (10) merge two known; one immediate left, one near right
873 873 | | | |
874 874 o | | | changeset: 9:7010c0af0a35
875 875 |\ \ \ \ parent: 7:b632bb1b1224
876 876 | | | | | parent: 8:7a0b11f71937
877 877 | | | | | user: test
878 878 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
879 879 | | | | | summary: (9) expand
880 880 | | | | |
881 881 | o-----+ changeset: 8:7a0b11f71937
882 882 | | | | | parent: 0:e6eb3150255d
883 883 |/ / / / parent: 7:b632bb1b1224
884 884 | | | | user: test
885 885 | | | | date: Thu Jan 01 00:00:08 1970 +0000
886 886 | | | | summary: (8) merge two known; one immediate left, one far right
887 887 | | | |
888 888 o | | | changeset: 7:b632bb1b1224
889 889 |\ \ \ \ parent: 2:3d9a33b8d1e1
890 890 | | | | | parent: 5:4409d547b708
891 891 | | | | | user: test
892 892 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
893 893 | | | | | summary: (7) expand
894 894 | | | | |
895 895 +---o | | changeset: 6:b105a072e251
896 896 | |/ / / parent: 2:3d9a33b8d1e1
897 897 | | | | parent: 5:4409d547b708
898 898 | | | | user: test
899 899 | | | | date: Thu Jan 01 00:00:06 1970 +0000
900 900 | | | | summary: (6) merge two known; one immediate left, one far left
901 901 | | | |
902 902 | o | | changeset: 5:4409d547b708
903 903 | |\ \ \ parent: 3:27eef8ed80b4
904 904 | | | | | parent: 4:26a8bac39d9f
905 905 | | | | | user: test
906 906 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
907 907 | | | | | summary: (5) expand
908 908 | | | | |
909 909 | | o | | changeset: 4:26a8bac39d9f
910 910 | |/|/ / parent: 1:6db2ef61d156
911 911 | | | | parent: 3:27eef8ed80b4
912 912 | | | | user: test
913 913 | | | | date: Thu Jan 01 00:00:04 1970 +0000
914 914 | | | | summary: (4) merge two known; one immediate left, one immediate right
915 915 | | | |
916 916 | o | | changeset: 3:27eef8ed80b4
917 917 |/ / / user: test
918 918 | | | date: Thu Jan 01 00:00:03 1970 +0000
919 919 | | | summary: (3) collapse
920 920 | | |
921 921 o | | changeset: 2:3d9a33b8d1e1
922 922 |/ / user: test
923 923 | | date: Thu Jan 01 00:00:02 1970 +0000
924 924 | | summary: (2) collapse
925 925 | |
926 926 o | changeset: 1:6db2ef61d156
927 927 |/ user: test
928 928 | date: Thu Jan 01 00:00:01 1970 +0000
929 929 | summary: (1) collapse
930 930 |
931 931 o changeset: 0:e6eb3150255d
932 932 user: test
933 933 date: Thu Jan 01 00:00:00 1970 +0000
934 934 summary: (0) root
935 935
936 936
937 937
938 938 File glog per revset (only merges):
939 939
940 940 $ hg log -G -r 'file("a")' -m
941 941 o changeset: 32:d06dffa21a31
942 942 |\ parent: 27:886ed638191b
943 943 | : parent: 31:621d83e11f67
944 944 | : user: test
945 945 | : date: Thu Jan 01 00:00:32 1970 +0000
946 946 | : summary: (32) expand
947 947 | :
948 948 o : changeset: 31:621d83e11f67
949 949 |\: parent: 21:d42a756af44d
950 950 | : parent: 30:6e11cd4b648f
951 951 | : user: test
952 952 | : date: Thu Jan 01 00:00:31 1970 +0000
953 953 | : summary: (31) expand
954 954 | :
955 955 o : changeset: 30:6e11cd4b648f
956 956 |\ \ parent: 28:44ecd0b9ae99
957 957 | ~ : parent: 29:cd9bb2be7593
958 958 | : user: test
959 959 | : date: Thu Jan 01 00:00:30 1970 +0000
960 960 | : summary: (30) expand
961 961 | /
962 962 o : changeset: 28:44ecd0b9ae99
963 963 |\ \ parent: 1:6db2ef61d156
964 964 | ~ : parent: 26:7f25b6c2f0b9
965 965 | : user: test
966 966 | : date: Thu Jan 01 00:00:28 1970 +0000
967 967 | : summary: (28) merge zero known
968 968 | /
969 969 o : changeset: 26:7f25b6c2f0b9
970 970 |\ \ parent: 18:1aa84d96232a
971 971 | | : parent: 25:91da8ed57247
972 972 | | : user: test
973 973 | | : date: Thu Jan 01 00:00:26 1970 +0000
974 974 | | : summary: (26) merge one known; far right
975 975 | | :
976 976 | o : changeset: 25:91da8ed57247
977 977 | |\: parent: 21:d42a756af44d
978 978 | | : parent: 24:a9c19a3d96b7
979 979 | | : user: test
980 980 | | : date: Thu Jan 01 00:00:25 1970 +0000
981 981 | | : summary: (25) merge one known; far left
982 982 | | :
983 983 | o : changeset: 24:a9c19a3d96b7
984 984 | |\ \ parent: 0:e6eb3150255d
985 985 | | ~ : parent: 23:a01cddf0766d
986 986 | | : user: test
987 987 | | : date: Thu Jan 01 00:00:24 1970 +0000
988 988 | | : summary: (24) merge one known; immediate right
989 989 | | /
990 990 | o : changeset: 23:a01cddf0766d
991 991 | |\ \ parent: 1:6db2ef61d156
992 992 | | ~ : parent: 22:e0d9cccacb5d
993 993 | | : user: test
994 994 | | : date: Thu Jan 01 00:00:23 1970 +0000
995 995 | | : summary: (23) merge one known; immediate left
996 996 | | /
997 997 | o : changeset: 22:e0d9cccacb5d
998 998 |/:/ parent: 18:1aa84d96232a
999 999 | : parent: 21:d42a756af44d
1000 1000 | : user: test
1001 1001 | : date: Thu Jan 01 00:00:22 1970 +0000
1002 1002 | : summary: (22) merge two known; one far left, one far right
1003 1003 | :
1004 1004 | o changeset: 21:d42a756af44d
1005 1005 | |\ parent: 19:31ddc2c1573b
1006 1006 | | | parent: 20:d30ed6450e32
1007 1007 | | | user: test
1008 1008 | | | date: Thu Jan 01 00:00:21 1970 +0000
1009 1009 | | | summary: (21) expand
1010 1010 | | |
1011 1011 +---o changeset: 20:d30ed6450e32
1012 1012 | | | parent: 0:e6eb3150255d
1013 1013 | | ~ parent: 18:1aa84d96232a
1014 1014 | | user: test
1015 1015 | | date: Thu Jan 01 00:00:20 1970 +0000
1016 1016 | | summary: (20) merge two known; two far right
1017 1017 | |
1018 1018 | o changeset: 19:31ddc2c1573b
1019 1019 | |\ parent: 15:1dda3f72782d
1020 1020 | | | parent: 17:44765d7c06e0
1021 1021 | | | user: test
1022 1022 | | | date: Thu Jan 01 00:00:19 1970 +0000
1023 1023 | | | summary: (19) expand
1024 1024 | | |
1025 1025 o | | changeset: 18:1aa84d96232a
1026 1026 |\| | parent: 1:6db2ef61d156
1027 1027 ~ | | parent: 15:1dda3f72782d
1028 1028 | | user: test
1029 1029 | | date: Thu Jan 01 00:00:18 1970 +0000
1030 1030 | | summary: (18) merge two known; two far left
1031 1031 / /
1032 1032 | o changeset: 17:44765d7c06e0
1033 1033 | |\ parent: 12:86b91144a6e9
1034 1034 | | | parent: 16:3677d192927d
1035 1035 | | | user: test
1036 1036 | | | date: Thu Jan 01 00:00:17 1970 +0000
1037 1037 | | | summary: (17) expand
1038 1038 | | |
1039 1039 | | o changeset: 16:3677d192927d
1040 1040 | | |\ parent: 0:e6eb3150255d
1041 1041 | | ~ ~ parent: 1:6db2ef61d156
1042 1042 | | user: test
1043 1043 | | date: Thu Jan 01 00:00:16 1970 +0000
1044 1044 | | summary: (16) merge two known; one immediate right, one near right
1045 1045 | |
1046 1046 o | changeset: 15:1dda3f72782d
1047 1047 |\ \ parent: 13:22d8966a97e3
1048 1048 | | | parent: 14:8eac370358ef
1049 1049 | | | user: test
1050 1050 | | | date: Thu Jan 01 00:00:15 1970 +0000
1051 1051 | | | summary: (15) expand
1052 1052 | | |
1053 1053 | o | changeset: 14:8eac370358ef
1054 1054 | |\| parent: 0:e6eb3150255d
1055 1055 | ~ | parent: 12:86b91144a6e9
1056 1056 | | user: test
1057 1057 | | date: Thu Jan 01 00:00:14 1970 +0000
1058 1058 | | summary: (14) merge two known; one immediate right, one far right
1059 1059 | /
1060 1060 o | changeset: 13:22d8966a97e3
1061 1061 |\ \ parent: 9:7010c0af0a35
1062 1062 | | | parent: 11:832d76e6bdf2
1063 1063 | | | user: test
1064 1064 | | | date: Thu Jan 01 00:00:13 1970 +0000
1065 1065 | | | summary: (13) expand
1066 1066 | | |
1067 1067 +---o changeset: 12:86b91144a6e9
1068 1068 | | | parent: 1:6db2ef61d156
1069 1069 | | ~ parent: 9:7010c0af0a35
1070 1070 | | user: test
1071 1071 | | date: Thu Jan 01 00:00:12 1970 +0000
1072 1072 | | summary: (12) merge two known; one immediate right, one far left
1073 1073 | |
1074 1074 | o changeset: 11:832d76e6bdf2
1075 1075 | |\ parent: 6:b105a072e251
1076 1076 | | | parent: 10:74c64d036d72
1077 1077 | | | user: test
1078 1078 | | | date: Thu Jan 01 00:00:11 1970 +0000
1079 1079 | | | summary: (11) expand
1080 1080 | | |
1081 1081 | | o changeset: 10:74c64d036d72
1082 1082 | |/| parent: 0:e6eb3150255d
1083 1083 | | ~ parent: 6:b105a072e251
1084 1084 | | user: test
1085 1085 | | date: Thu Jan 01 00:00:10 1970 +0000
1086 1086 | | summary: (10) merge two known; one immediate left, one near right
1087 1087 | |
1088 1088 o | changeset: 9:7010c0af0a35
1089 1089 |\ \ parent: 7:b632bb1b1224
1090 1090 | | | parent: 8:7a0b11f71937
1091 1091 | | | user: test
1092 1092 | | | date: Thu Jan 01 00:00:09 1970 +0000
1093 1093 | | | summary: (9) expand
1094 1094 | | |
1095 1095 | o | changeset: 8:7a0b11f71937
1096 1096 |/| | parent: 0:e6eb3150255d
1097 1097 | ~ | parent: 7:b632bb1b1224
1098 1098 | | user: test
1099 1099 | | date: Thu Jan 01 00:00:08 1970 +0000
1100 1100 | | summary: (8) merge two known; one immediate left, one far right
1101 1101 | /
1102 1102 o | changeset: 7:b632bb1b1224
1103 1103 |\ \ parent: 2:3d9a33b8d1e1
1104 1104 | ~ | parent: 5:4409d547b708
1105 1105 | | user: test
1106 1106 | | date: Thu Jan 01 00:00:07 1970 +0000
1107 1107 | | summary: (7) expand
1108 1108 | /
1109 1109 | o changeset: 6:b105a072e251
1110 1110 |/| parent: 2:3d9a33b8d1e1
1111 1111 | ~ parent: 5:4409d547b708
1112 1112 | user: test
1113 1113 | date: Thu Jan 01 00:00:06 1970 +0000
1114 1114 | summary: (6) merge two known; one immediate left, one far left
1115 1115 |
1116 1116 o changeset: 5:4409d547b708
1117 1117 |\ parent: 3:27eef8ed80b4
1118 1118 | ~ parent: 4:26a8bac39d9f
1119 1119 | user: test
1120 1120 | date: Thu Jan 01 00:00:05 1970 +0000
1121 1121 | summary: (5) expand
1122 1122 |
1123 1123 o changeset: 4:26a8bac39d9f
1124 1124 |\ parent: 1:6db2ef61d156
1125 1125 ~ ~ parent: 3:27eef8ed80b4
1126 1126 user: test
1127 1127 date: Thu Jan 01 00:00:04 1970 +0000
1128 1128 summary: (4) merge two known; one immediate left, one immediate right
1129 1129
1130 1130
1131 1131
1132 1132 Empty revision range - display nothing:
1133 1133 $ hg log -G -r 1..0
1134 1134
1135 1135 $ cd ..
1136 1136
1137 1137 #if no-outer-repo
1138 1138
1139 1139 From outer space:
1140 1140 $ hg log -G -l1 repo
1141 1141 @ changeset: 34:fea3ac5810e0
1142 1142 | tag: tip
1143 1143 ~ parent: 32:d06dffa21a31
1144 1144 user: test
1145 1145 date: Thu Jan 01 00:00:34 1970 +0000
1146 1146 summary: (34) head
1147 1147
1148 1148 $ hg log -G -l1 repo/a
1149 1149 @ changeset: 34:fea3ac5810e0
1150 1150 | tag: tip
1151 1151 ~ parent: 32:d06dffa21a31
1152 1152 user: test
1153 1153 date: Thu Jan 01 00:00:34 1970 +0000
1154 1154 summary: (34) head
1155 1155
1156 1156 $ hg log -G -l1 repo/missing
1157 1157
1158 1158 #endif
1159 1159
1160 1160 File log with revs != cset revs:
1161 1161 $ hg init flog
1162 1162 $ cd flog
1163 1163 $ echo one >one
1164 1164 $ hg add one
1165 1165 $ hg commit -mone
1166 1166 $ echo two >two
1167 1167 $ hg add two
1168 1168 $ hg commit -mtwo
1169 1169 $ echo more >two
1170 1170 $ hg commit -mmore
1171 1171 $ hg log -G two
1172 1172 @ changeset: 2:12c28321755b
1173 1173 | tag: tip
1174 1174 | user: test
1175 1175 | date: Thu Jan 01 00:00:00 1970 +0000
1176 1176 | summary: more
1177 1177 |
1178 1178 o changeset: 1:5ac72c0599bf
1179 1179 | user: test
1180 1180 ~ date: Thu Jan 01 00:00:00 1970 +0000
1181 1181 summary: two
1182 1182
1183 1183
1184 1184 Issue1896: File log with explicit style
1185 1185 $ hg log -G --style=default one
1186 1186 o changeset: 0:3d578b4a1f53
1187 1187 user: test
1188 1188 date: Thu Jan 01 00:00:00 1970 +0000
1189 1189 summary: one
1190 1190
1191 1191 Issue2395: glog --style header and footer
1192 1192 $ hg log -G --style=xml one
1193 1193 <?xml version="1.0"?>
1194 1194 <log>
1195 1195 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1196 1196 <author email="test">test</author>
1197 1197 <date>1970-01-01T00:00:00+00:00</date>
1198 1198 <msg xml:space="preserve">one</msg>
1199 1199 </logentry>
1200 1200 </log>
1201 1201
1202 1202 $ cd ..
1203 1203
1204 1204 Incoming and outgoing:
1205 1205
1206 1206 $ hg clone -U -r31 repo repo2
1207 1207 adding changesets
1208 1208 adding manifests
1209 1209 adding file changes
1210 1210 added 31 changesets with 31 changes to 1 files
1211 1211 $ cd repo2
1212 1212
1213 1213 $ hg incoming --graph ../repo
1214 1214 comparing with ../repo
1215 1215 searching for changes
1216 1216 o changeset: 34:fea3ac5810e0
1217 1217 | tag: tip
1218 1218 | parent: 32:d06dffa21a31
1219 1219 | user: test
1220 1220 | date: Thu Jan 01 00:00:34 1970 +0000
1221 1221 | summary: (34) head
1222 1222 |
1223 1223 | o changeset: 33:68608f5145f9
1224 1224 | parent: 18:1aa84d96232a
1225 1225 | user: test
1226 1226 | date: Thu Jan 01 00:00:33 1970 +0000
1227 1227 | summary: (33) head
1228 1228 |
1229 1229 o changeset: 32:d06dffa21a31
1230 1230 | parent: 27:886ed638191b
1231 1231 | parent: 31:621d83e11f67
1232 1232 | user: test
1233 1233 | date: Thu Jan 01 00:00:32 1970 +0000
1234 1234 | summary: (32) expand
1235 1235 |
1236 1236 o changeset: 27:886ed638191b
1237 1237 parent: 21:d42a756af44d
1238 1238 user: test
1239 1239 date: Thu Jan 01 00:00:27 1970 +0000
1240 1240 summary: (27) collapse
1241 1241
1242 1242 $ cd ..
1243 1243
1244 1244 $ hg -R repo outgoing --graph repo2
1245 1245 comparing with repo2
1246 1246 searching for changes
1247 1247 @ changeset: 34:fea3ac5810e0
1248 1248 | tag: tip
1249 1249 | parent: 32:d06dffa21a31
1250 1250 | user: test
1251 1251 | date: Thu Jan 01 00:00:34 1970 +0000
1252 1252 | summary: (34) head
1253 1253 |
1254 1254 | o changeset: 33:68608f5145f9
1255 1255 | parent: 18:1aa84d96232a
1256 1256 | user: test
1257 1257 | date: Thu Jan 01 00:00:33 1970 +0000
1258 1258 | summary: (33) head
1259 1259 |
1260 1260 o changeset: 32:d06dffa21a31
1261 1261 | parent: 27:886ed638191b
1262 1262 | parent: 31:621d83e11f67
1263 1263 | user: test
1264 1264 | date: Thu Jan 01 00:00:32 1970 +0000
1265 1265 | summary: (32) expand
1266 1266 |
1267 1267 o changeset: 27:886ed638191b
1268 1268 parent: 21:d42a756af44d
1269 1269 user: test
1270 1270 date: Thu Jan 01 00:00:27 1970 +0000
1271 1271 summary: (27) collapse
1272 1272
1273 1273
1274 1274 File + limit with revs != cset revs:
1275 1275 $ cd repo
1276 1276 $ touch b
1277 1277 $ hg ci -Aqm0
1278 1278 $ hg log -G -l2 a
1279 1279 o changeset: 34:fea3ac5810e0
1280 1280 | parent: 32:d06dffa21a31
1281 1281 ~ user: test
1282 1282 date: Thu Jan 01 00:00:34 1970 +0000
1283 1283 summary: (34) head
1284 1284
1285 1285 o changeset: 33:68608f5145f9
1286 1286 | parent: 18:1aa84d96232a
1287 1287 ~ user: test
1288 1288 date: Thu Jan 01 00:00:33 1970 +0000
1289 1289 summary: (33) head
1290 1290
1291 1291
1292 1292 File + limit + -ra:b, (b - a) < limit:
1293 1293 $ hg log -G -l3000 -r32:tip a
1294 1294 o changeset: 34:fea3ac5810e0
1295 1295 | parent: 32:d06dffa21a31
1296 1296 | user: test
1297 1297 | date: Thu Jan 01 00:00:34 1970 +0000
1298 1298 | summary: (34) head
1299 1299 |
1300 1300 | o changeset: 33:68608f5145f9
1301 1301 | | parent: 18:1aa84d96232a
1302 1302 | ~ user: test
1303 1303 | date: Thu Jan 01 00:00:33 1970 +0000
1304 1304 | summary: (33) head
1305 1305 |
1306 1306 o changeset: 32:d06dffa21a31
1307 1307 |\ parent: 27:886ed638191b
1308 1308 ~ ~ parent: 31:621d83e11f67
1309 1309 user: test
1310 1310 date: Thu Jan 01 00:00:32 1970 +0000
1311 1311 summary: (32) expand
1312 1312
1313 1313
1314 1314 Point out a common and an uncommon unshown parent
1315 1315
1316 1316 $ hg log -G -r 'rev(8) or rev(9)'
1317 1317 o changeset: 9:7010c0af0a35
1318 1318 |\ parent: 7:b632bb1b1224
1319 1319 | ~ parent: 8:7a0b11f71937
1320 1320 | user: test
1321 1321 | date: Thu Jan 01 00:00:09 1970 +0000
1322 1322 | summary: (9) expand
1323 1323 |
1324 1324 o changeset: 8:7a0b11f71937
1325 1325 |\ parent: 0:e6eb3150255d
1326 1326 ~ ~ parent: 7:b632bb1b1224
1327 1327 user: test
1328 1328 date: Thu Jan 01 00:00:08 1970 +0000
1329 1329 summary: (8) merge two known; one immediate left, one far right
1330 1330
1331 1331
1332 1332 File + limit + -ra:b, b < tip:
1333 1333
1334 1334 $ hg log -G -l1 -r32:34 a
1335 1335 o changeset: 34:fea3ac5810e0
1336 1336 | parent: 32:d06dffa21a31
1337 1337 ~ user: test
1338 1338 date: Thu Jan 01 00:00:34 1970 +0000
1339 1339 summary: (34) head
1340 1340
1341 1341
1342 1342 file(File) + limit + -ra:b, b < tip:
1343 1343
1344 1344 $ hg log -G -l1 -r32:34 -r 'file("a")'
1345 1345 o changeset: 34:fea3ac5810e0
1346 1346 | parent: 32:d06dffa21a31
1347 1347 ~ user: test
1348 1348 date: Thu Jan 01 00:00:34 1970 +0000
1349 1349 summary: (34) head
1350 1350
1351 1351
1352 1352 limit(file(File) and a::b), b < tip:
1353 1353
1354 1354 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1355 1355 o changeset: 32:d06dffa21a31
1356 1356 |\ parent: 27:886ed638191b
1357 1357 ~ ~ parent: 31:621d83e11f67
1358 1358 user: test
1359 1359 date: Thu Jan 01 00:00:32 1970 +0000
1360 1360 summary: (32) expand
1361 1361
1362 1362
1363 1363 File + limit + -ra:b, b < tip:
1364 1364
1365 1365 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1366 1366
1367 1367 File + limit + -ra:b, b < tip, (b - a) < limit:
1368 1368
1369 1369 $ hg log -G -l10 -r33:34 a
1370 1370 o changeset: 34:fea3ac5810e0
1371 1371 | parent: 32:d06dffa21a31
1372 1372 ~ user: test
1373 1373 date: Thu Jan 01 00:00:34 1970 +0000
1374 1374 summary: (34) head
1375 1375
1376 1376 o changeset: 33:68608f5145f9
1377 1377 | parent: 18:1aa84d96232a
1378 1378 ~ user: test
1379 1379 date: Thu Jan 01 00:00:33 1970 +0000
1380 1380 summary: (33) head
1381 1381
1382 1382
1383 1383 Do not crash or produce strange graphs if history is buggy
1384 1384
1385 1385 $ hg branch branch
1386 1386 marked working directory as branch branch
1387 1387 (branches are permanent and global, did you want a bookmark?)
1388 1388 $ commit 36 "buggy merge: identical parents" 35 35
1389 1389 $ hg log -G -l5
1390 1390 @ changeset: 36:08a19a744424
1391 1391 | branch: branch
1392 1392 | tag: tip
1393 1393 | parent: 35:9159c3644c5e
1394 1394 | parent: 35:9159c3644c5e
1395 1395 | user: test
1396 1396 | date: Thu Jan 01 00:00:36 1970 +0000
1397 1397 | summary: (36) buggy merge: identical parents
1398 1398 |
1399 1399 o changeset: 35:9159c3644c5e
1400 1400 | user: test
1401 1401 | date: Thu Jan 01 00:00:00 1970 +0000
1402 1402 | summary: 0
1403 1403 |
1404 1404 o changeset: 34:fea3ac5810e0
1405 1405 | parent: 32:d06dffa21a31
1406 1406 | user: test
1407 1407 | date: Thu Jan 01 00:00:34 1970 +0000
1408 1408 | summary: (34) head
1409 1409 |
1410 1410 | o changeset: 33:68608f5145f9
1411 1411 | | parent: 18:1aa84d96232a
1412 1412 | ~ user: test
1413 1413 | date: Thu Jan 01 00:00:33 1970 +0000
1414 1414 | summary: (33) head
1415 1415 |
1416 1416 o changeset: 32:d06dffa21a31
1417 1417 |\ parent: 27:886ed638191b
1418 1418 ~ ~ parent: 31:621d83e11f67
1419 1419 user: test
1420 1420 date: Thu Jan 01 00:00:32 1970 +0000
1421 1421 summary: (32) expand
1422 1422
1423 1423
1424 1424 Test log -G options
1425 1425
1426 1426 $ testlog() {
1427 1427 > hg log -G --print-revset "$@"
1428 1428 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1429 1429 > | sed 's/.*nodetag/nodetag/' > log.nodes
1430 1430 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1431 1431 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1432 1432 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1433 1433 > | grep '^[-+@ ]' || :
1434 1434 > }
1435 1435
1436 1436 glog always reorders nodes which explains the difference with log
1437 1437
1438 1438 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1439 1439 ['27', '25', '21', '34', '32', '31']
1440 1440 []
1441 1441 --- log.nodes * (glob)
1442 1442 +++ glog.nodes * (glob)
1443 1443 @@ -1,6 +1,6 @@
1444 1444 -nodetag 27
1445 1445 -nodetag 25
1446 1446 -nodetag 21
1447 1447 nodetag 34
1448 1448 nodetag 32
1449 1449 nodetag 31
1450 1450 +nodetag 27
1451 1451 +nodetag 25
1452 1452 +nodetag 21
1453 1453 $ testlog -u test -u not-a-user
1454 1454 []
1455 1455 (group
1456 1456 (group
1457 1457 (or
1458 1458 (list
1459 1459 (func
1460 1460 ('symbol', 'user')
1461 1461 ('string', 'test'))
1462 1462 (func
1463 1463 ('symbol', 'user')
1464 1464 ('string', 'not-a-user'))))))
1465 1465 $ testlog -b not-a-branch
1466 1466 abort: unknown revision 'not-a-branch'!
1467 1467 abort: unknown revision 'not-a-branch'!
1468 1468 abort: unknown revision 'not-a-branch'!
1469 1469 $ testlog -b 35 -b 36 --only-branch branch
1470 1470 []
1471 1471 (group
1472 1472 (group
1473 1473 (or
1474 1474 (list
1475 1475 (func
1476 1476 ('symbol', 'branch')
1477 1477 ('string', 'default'))
1478 1478 (func
1479 1479 ('symbol', 'branch')
1480 1480 ('string', 'branch'))
1481 1481 (func
1482 1482 ('symbol', 'branch')
1483 1483 ('string', 'branch'))))))
1484 1484 $ testlog -k expand -k merge
1485 1485 []
1486 1486 (group
1487 1487 (group
1488 1488 (or
1489 1489 (list
1490 1490 (func
1491 1491 ('symbol', 'keyword')
1492 1492 ('string', 'expand'))
1493 1493 (func
1494 1494 ('symbol', 'keyword')
1495 1495 ('string', 'merge'))))))
1496 1496 $ testlog --only-merges
1497 1497 []
1498 1498 (group
1499 1499 (func
1500 1500 ('symbol', 'merge')
1501 1501 None))
1502 1502 $ testlog --no-merges
1503 1503 []
1504 1504 (group
1505 1505 (not
1506 1506 (func
1507 1507 ('symbol', 'merge')
1508 1508 None)))
1509 1509 $ testlog --date '2 0 to 4 0'
1510 1510 []
1511 1511 (group
1512 1512 (func
1513 1513 ('symbol', 'date')
1514 1514 ('string', '2 0 to 4 0')))
1515 1515 $ hg log -G -d 'brace ) in a date'
1516 1516 abort: invalid date: 'brace ) in a date'
1517 1517 [255]
1518 1518 $ testlog --prune 31 --prune 32
1519 1519 []
1520 1520 (group
1521 1521 (group
1522 1522 (and
1523 1523 (not
1524 1524 (group
1525 1525 (or
1526 1526 (list
1527 1527 ('string', '31')
1528 1528 (func
1529 1529 ('symbol', 'ancestors')
1530 1530 ('string', '31'))))))
1531 1531 (not
1532 1532 (group
1533 1533 (or
1534 1534 (list
1535 1535 ('string', '32')
1536 1536 (func
1537 1537 ('symbol', 'ancestors')
1538 1538 ('string', '32')))))))))
1539 1539
1540 1540 Dedicated repo for --follow and paths filtering. The g is crafted to
1541 1541 have 2 filelog topological heads in a linear changeset graph.
1542 1542
1543 1543 $ cd ..
1544 1544 $ hg init follow
1545 1545 $ cd follow
1546 1546 $ testlog --follow
1547 1547 []
1548 1548 []
1549 1549 $ testlog -rnull
1550 1550 ['null']
1551 1551 []
1552 1552 $ echo a > a
1553 1553 $ echo aa > aa
1554 1554 $ echo f > f
1555 1555 $ hg ci -Am "add a" a aa f
1556 1556 $ hg cp a b
1557 1557 $ hg cp f g
1558 1558 $ hg ci -m "copy a b"
1559 1559 $ mkdir dir
1560 1560 $ hg mv b dir
1561 1561 $ echo g >> g
1562 1562 $ echo f >> f
1563 1563 $ hg ci -m "mv b dir/b"
1564 1564 $ hg mv a b
1565 1565 $ hg cp -f f g
1566 1566 $ echo a > d
1567 1567 $ hg add d
1568 1568 $ hg ci -m "mv a b; add d"
1569 1569 $ hg mv dir/b e
1570 1570 $ hg ci -m "mv dir/b e"
1571 1571 $ hg log -G --template '({rev}) {desc|firstline}\n'
1572 1572 @ (4) mv dir/b e
1573 1573 |
1574 1574 o (3) mv a b; add d
1575 1575 |
1576 1576 o (2) mv b dir/b
1577 1577 |
1578 1578 o (1) copy a b
1579 1579 |
1580 1580 o (0) add a
1581 1581
1582 1582
1583 1583 $ testlog a
1584 1584 []
1585 1585 (group
1586 1586 (group
1587 1587 (func
1588 1588 ('symbol', 'filelog')
1589 1589 ('string', 'a'))))
1590 1590 $ testlog a b
1591 1591 []
1592 1592 (group
1593 1593 (group
1594 1594 (or
1595 1595 (list
1596 1596 (func
1597 1597 ('symbol', 'filelog')
1598 1598 ('string', 'a'))
1599 1599 (func
1600 1600 ('symbol', 'filelog')
1601 1601 ('string', 'b'))))))
1602 1602
1603 1603 Test falling back to slow path for non-existing files
1604 1604
1605 1605 $ testlog a c
1606 1606 []
1607 1607 (group
1608 1608 (func
1609 1609 ('symbol', '_matchfiles')
1610 1610 (list
1611 1611 ('string', 'r:')
1612 1612 ('string', 'd:relpath')
1613 1613 ('string', 'p:a')
1614 1614 ('string', 'p:c'))))
1615 1615
1616 1616 Test multiple --include/--exclude/paths
1617 1617
1618 1618 $ testlog --include a --include e --exclude b --exclude e a e
1619 1619 []
1620 1620 (group
1621 1621 (func
1622 1622 ('symbol', '_matchfiles')
1623 1623 (list
1624 1624 ('string', 'r:')
1625 1625 ('string', 'd:relpath')
1626 1626 ('string', 'p:a')
1627 1627 ('string', 'p:e')
1628 1628 ('string', 'i:a')
1629 1629 ('string', 'i:e')
1630 1630 ('string', 'x:b')
1631 1631 ('string', 'x:e'))))
1632 1632
1633 1633 Test glob expansion of pats
1634 1634
1635 1635 $ expandglobs=`$PYTHON -c "import mercurial.util; \
1636 1636 > print mercurial.util.expandglobs and 'true' or 'false'"`
1637 1637 $ if [ $expandglobs = "true" ]; then
1638 1638 > testlog 'a*';
1639 1639 > else
1640 1640 > testlog a*;
1641 1641 > fi;
1642 1642 []
1643 1643 (group
1644 1644 (group
1645 1645 (func
1646 1646 ('symbol', 'filelog')
1647 1647 ('string', 'aa'))))
1648 1648
1649 1649 Test --follow on a non-existent directory
1650 1650
1651 1651 $ testlog -f dir
1652 1652 abort: cannot follow file not in parent revision: "dir"
1653 1653 abort: cannot follow file not in parent revision: "dir"
1654 1654 abort: cannot follow file not in parent revision: "dir"
1655 1655
1656 1656 Test --follow on a directory
1657 1657
1658 1658 $ hg up -q '.^'
1659 1659 $ testlog -f dir
1660 1660 []
1661 1661 (group
1662 1662 (and
1663 1663 (func
1664 1664 ('symbol', 'ancestors')
1665 1665 ('symbol', '.'))
1666 1666 (func
1667 1667 ('symbol', '_matchfiles')
1668 1668 (list
1669 1669 ('string', 'r:')
1670 1670 ('string', 'd:relpath')
1671 1671 ('string', 'p:dir')))))
1672 1672 $ hg up -q tip
1673 1673
1674 1674 Test --follow on file not in parent revision
1675 1675
1676 1676 $ testlog -f a
1677 1677 abort: cannot follow file not in parent revision: "a"
1678 1678 abort: cannot follow file not in parent revision: "a"
1679 1679 abort: cannot follow file not in parent revision: "a"
1680 1680
1681 1681 Test --follow and patterns
1682 1682
1683 1683 $ testlog -f 'glob:*'
1684 1684 []
1685 1685 (group
1686 1686 (and
1687 1687 (func
1688 1688 ('symbol', 'ancestors')
1689 1689 ('symbol', '.'))
1690 1690 (func
1691 1691 ('symbol', '_matchfiles')
1692 1692 (list
1693 1693 ('string', 'r:')
1694 1694 ('string', 'd:relpath')
1695 1695 ('string', 'p:glob:*')))))
1696 1696
1697 1697 Test --follow on a single rename
1698 1698
1699 1699 $ hg up -q 2
1700 1700 $ testlog -f a
1701 1701 []
1702 1702 (group
1703 1703 (group
1704 1704 (func
1705 1705 ('symbol', 'follow')
1706 1706 ('string', 'a'))))
1707 1707
1708 1708 Test --follow and multiple renames
1709 1709
1710 1710 $ hg up -q tip
1711 1711 $ testlog -f e
1712 1712 []
1713 1713 (group
1714 1714 (group
1715 1715 (func
1716 1716 ('symbol', 'follow')
1717 1717 ('string', 'e'))))
1718 1718
1719 1719 Test --follow and multiple filelog heads
1720 1720
1721 1721 $ hg up -q 2
1722 1722 $ testlog -f g
1723 1723 []
1724 1724 (group
1725 1725 (group
1726 1726 (func
1727 1727 ('symbol', 'follow')
1728 1728 ('string', 'g'))))
1729 1729 $ cat log.nodes
1730 1730 nodetag 2
1731 1731 nodetag 1
1732 1732 nodetag 0
1733 1733 $ hg up -q tip
1734 1734 $ testlog -f g
1735 1735 []
1736 1736 (group
1737 1737 (group
1738 1738 (func
1739 1739 ('symbol', 'follow')
1740 1740 ('string', 'g'))))
1741 1741 $ cat log.nodes
1742 1742 nodetag 3
1743 1743 nodetag 2
1744 1744 nodetag 0
1745 1745
1746 1746 Test --follow and multiple files
1747 1747
1748 1748 $ testlog -f g e
1749 1749 []
1750 1750 (group
1751 1751 (group
1752 1752 (or
1753 1753 (list
1754 1754 (func
1755 1755 ('symbol', 'follow')
1756 1756 ('string', 'g'))
1757 1757 (func
1758 1758 ('symbol', 'follow')
1759 1759 ('string', 'e'))))))
1760 1760 $ cat log.nodes
1761 1761 nodetag 4
1762 1762 nodetag 3
1763 1763 nodetag 2
1764 1764 nodetag 1
1765 1765 nodetag 0
1766 1766
1767 1767 Test --follow null parent
1768 1768
1769 1769 $ hg up -q null
1770 1770 $ testlog -f
1771 1771 []
1772 1772 []
1773 1773
1774 1774 Test --follow-first
1775 1775
1776 1776 $ hg up -q 3
1777 1777 $ echo ee > e
1778 1778 $ hg ci -Am "add another e" e
1779 1779 created new head
1780 1780 $ hg merge --tool internal:other 4
1781 1781 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1782 1782 (branch merge, don't forget to commit)
1783 1783 $ echo merge > e
1784 1784 $ hg ci -m "merge 5 and 4"
1785 1785 $ testlog --follow-first
1786 1786 []
1787 1787 (group
1788 1788 (func
1789 1789 ('symbol', '_firstancestors')
1790 1790 (func
1791 1791 ('symbol', 'rev')
1792 1792 ('symbol', '6'))))
1793 1793
1794 1794 Cannot compare with log --follow-first FILE as it never worked
1795 1795
1796 1796 $ hg log -G --print-revset --follow-first e
1797 1797 []
1798 1798 (group
1799 1799 (group
1800 1800 (func
1801 1801 ('symbol', '_followfirst')
1802 1802 ('string', 'e'))))
1803 1803 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1804 1804 @ 6 merge 5 and 4
1805 1805 |\
1806 1806 | ~
1807 1807 o 5 add another e
1808 1808 |
1809 1809 ~
1810 1810
1811 1811 Test --copies
1812 1812
1813 1813 $ hg log -G --copies --template "{rev} {desc|firstline} \
1814 1814 > copies: {file_copies_switch}\n"
1815 1815 @ 6 merge 5 and 4 copies:
1816 1816 |\
1817 1817 | o 5 add another e copies:
1818 1818 | |
1819 1819 o | 4 mv dir/b e copies: e (dir/b)
1820 1820 |/
1821 1821 o 3 mv a b; add d copies: b (a)g (f)
1822 1822 |
1823 1823 o 2 mv b dir/b copies: dir/b (b)
1824 1824 |
1825 1825 o 1 copy a b copies: b (a)g (f)
1826 1826 |
1827 1827 o 0 add a copies:
1828 1828
1829 1829 Test "set:..." and parent revision
1830 1830
1831 1831 $ hg up -q 4
1832 1832 $ testlog "set:copied()"
1833 1833 []
1834 1834 (group
1835 1835 (func
1836 1836 ('symbol', '_matchfiles')
1837 1837 (list
1838 1838 ('string', 'r:')
1839 1839 ('string', 'd:relpath')
1840 1840 ('string', 'p:set:copied()'))))
1841 1841 $ testlog --include "set:copied()"
1842 1842 []
1843 1843 (group
1844 1844 (func
1845 1845 ('symbol', '_matchfiles')
1846 1846 (list
1847 1847 ('string', 'r:')
1848 1848 ('string', 'd:relpath')
1849 1849 ('string', 'i:set:copied()'))))
1850 1850 $ testlog -r "sort(file('set:copied()'), -rev)"
1851 1851 ["sort(file('set:copied()'), -rev)"]
1852 1852 []
1853 1853
1854 1854 Test --removed
1855 1855
1856 1856 $ testlog --removed
1857 1857 []
1858 1858 []
1859 1859 $ testlog --removed a
1860 1860 []
1861 1861 (group
1862 1862 (func
1863 1863 ('symbol', '_matchfiles')
1864 1864 (list
1865 1865 ('string', 'r:')
1866 1866 ('string', 'd:relpath')
1867 1867 ('string', 'p:a'))))
1868 1868 $ testlog --removed --follow a
1869 1869 []
1870 1870 (group
1871 1871 (and
1872 1872 (func
1873 1873 ('symbol', 'ancestors')
1874 1874 ('symbol', '.'))
1875 1875 (func
1876 1876 ('symbol', '_matchfiles')
1877 1877 (list
1878 1878 ('string', 'r:')
1879 1879 ('string', 'd:relpath')
1880 1880 ('string', 'p:a')))))
1881 1881
1882 1882 Test --patch and --stat with --follow and --follow-first
1883 1883
1884 1884 $ hg up -q 3
1885 1885 $ hg log -G --git --patch b
1886 1886 o changeset: 1:216d4c92cf98
1887 1887 | user: test
1888 1888 ~ date: Thu Jan 01 00:00:00 1970 +0000
1889 1889 summary: copy a b
1890 1890
1891 1891 diff --git a/a b/b
1892 1892 copy from a
1893 1893 copy to b
1894 1894
1895 1895
1896 1896 $ hg log -G --git --stat b
1897 1897 o changeset: 1:216d4c92cf98
1898 1898 | user: test
1899 1899 ~ date: Thu Jan 01 00:00:00 1970 +0000
1900 1900 summary: copy a b
1901 1901
1902 1902 b | 0
1903 1903 1 files changed, 0 insertions(+), 0 deletions(-)
1904 1904
1905 1905
1906 1906 $ hg log -G --git --patch --follow b
1907 1907 o changeset: 1:216d4c92cf98
1908 1908 | user: test
1909 1909 | date: Thu Jan 01 00:00:00 1970 +0000
1910 1910 | summary: copy a b
1911 1911 |
1912 1912 | diff --git a/a b/b
1913 1913 | copy from a
1914 1914 | copy to b
1915 1915 |
1916 1916 o changeset: 0:f8035bb17114
1917 1917 user: test
1918 1918 date: Thu Jan 01 00:00:00 1970 +0000
1919 1919 summary: add a
1920 1920
1921 1921 diff --git a/a b/a
1922 1922 new file mode 100644
1923 1923 --- /dev/null
1924 1924 +++ b/a
1925 1925 @@ -0,0 +1,1 @@
1926 1926 +a
1927 1927
1928 1928
1929 1929 $ hg log -G --git --stat --follow b
1930 1930 o changeset: 1:216d4c92cf98
1931 1931 | user: test
1932 1932 | date: Thu Jan 01 00:00:00 1970 +0000
1933 1933 | summary: copy a b
1934 1934 |
1935 1935 | b | 0
1936 1936 | 1 files changed, 0 insertions(+), 0 deletions(-)
1937 1937 |
1938 1938 o changeset: 0:f8035bb17114
1939 1939 user: test
1940 1940 date: Thu Jan 01 00:00:00 1970 +0000
1941 1941 summary: add a
1942 1942
1943 1943 a | 1 +
1944 1944 1 files changed, 1 insertions(+), 0 deletions(-)
1945 1945
1946 1946
1947 1947 $ hg up -q 6
1948 1948 $ hg log -G --git --patch --follow-first e
1949 1949 @ changeset: 6:fc281d8ff18d
1950 1950 |\ tag: tip
1951 1951 | ~ parent: 5:99b31f1c2782
1952 1952 | parent: 4:17d952250a9d
1953 1953 | user: test
1954 1954 | date: Thu Jan 01 00:00:00 1970 +0000
1955 1955 | summary: merge 5 and 4
1956 1956 |
1957 1957 | diff --git a/e b/e
1958 1958 | --- a/e
1959 1959 | +++ b/e
1960 1960 | @@ -1,1 +1,1 @@
1961 1961 | -ee
1962 1962 | +merge
1963 1963 |
1964 1964 o changeset: 5:99b31f1c2782
1965 1965 | parent: 3:5918b8d165d1
1966 1966 ~ user: test
1967 1967 date: Thu Jan 01 00:00:00 1970 +0000
1968 1968 summary: add another e
1969 1969
1970 1970 diff --git a/e b/e
1971 1971 new file mode 100644
1972 1972 --- /dev/null
1973 1973 +++ b/e
1974 1974 @@ -0,0 +1,1 @@
1975 1975 +ee
1976 1976
1977 1977
1978 1978 Test old-style --rev
1979 1979
1980 1980 $ hg tag 'foo-bar'
1981 1981 $ testlog -r 'foo-bar'
1982 1982 ['foo-bar']
1983 1983 []
1984 1984
1985 1985 Test --follow and forward --rev
1986 1986
1987 1987 $ hg up -q 6
1988 1988 $ echo g > g
1989 1989 $ hg ci -Am 'add g' g
1990 1990 created new head
1991 1991 $ hg up -q 2
1992 1992 $ hg log -G --template "{rev} {desc|firstline}\n"
1993 1993 o 8 add g
1994 1994 |
1995 1995 | o 7 Added tag foo-bar for changeset fc281d8ff18d
1996 1996 |/
1997 1997 o 6 merge 5 and 4
1998 1998 |\
1999 1999 | o 5 add another e
2000 2000 | |
2001 2001 o | 4 mv dir/b e
2002 2002 |/
2003 2003 o 3 mv a b; add d
2004 2004 |
2005 2005 @ 2 mv b dir/b
2006 2006 |
2007 2007 o 1 copy a b
2008 2008 |
2009 2009 o 0 add a
2010 2010
2011 2011 $ hg archive -r 7 archive
2012 2012 $ grep changessincelatesttag archive/.hg_archival.txt
2013 2013 changessincelatesttag: 1
2014 2014 $ rm -r archive
2015 2015
2016 2016 changessincelatesttag with no prior tag
2017 2017 $ hg archive -r 4 archive
2018 2018 $ grep changessincelatesttag archive/.hg_archival.txt
2019 2019 changessincelatesttag: 5
2020 2020
2021 2021 $ hg export 'all()'
2022 2022 # HG changeset patch
2023 2023 # User test
2024 2024 # Date 0 0
2025 2025 # Thu Jan 01 00:00:00 1970 +0000
2026 2026 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2027 2027 # Parent 0000000000000000000000000000000000000000
2028 2028 add a
2029 2029
2030 2030 diff -r 000000000000 -r f8035bb17114 a
2031 2031 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2032 2032 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2033 2033 @@ -0,0 +1,1 @@
2034 2034 +a
2035 2035 diff -r 000000000000 -r f8035bb17114 aa
2036 2036 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2037 2037 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2038 2038 @@ -0,0 +1,1 @@
2039 2039 +aa
2040 2040 diff -r 000000000000 -r f8035bb17114 f
2041 2041 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2042 2042 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2043 2043 @@ -0,0 +1,1 @@
2044 2044 +f
2045 2045 # HG changeset patch
2046 2046 # User test
2047 2047 # Date 0 0
2048 2048 # Thu Jan 01 00:00:00 1970 +0000
2049 2049 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2050 2050 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2051 2051 copy a b
2052 2052
2053 2053 diff -r f8035bb17114 -r 216d4c92cf98 b
2054 2054 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2055 2055 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2056 2056 @@ -0,0 +1,1 @@
2057 2057 +a
2058 2058 diff -r f8035bb17114 -r 216d4c92cf98 g
2059 2059 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2060 2060 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2061 2061 @@ -0,0 +1,1 @@
2062 2062 +f
2063 2063 # HG changeset patch
2064 2064 # User test
2065 2065 # Date 0 0
2066 2066 # Thu Jan 01 00:00:00 1970 +0000
2067 2067 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2068 2068 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2069 2069 mv b dir/b
2070 2070
2071 2071 diff -r 216d4c92cf98 -r bb573313a9e8 b
2072 2072 --- a/b Thu Jan 01 00:00:00 1970 +0000
2073 2073 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2074 2074 @@ -1,1 +0,0 @@
2075 2075 -a
2076 2076 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2077 2077 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2078 2078 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2079 2079 @@ -0,0 +1,1 @@
2080 2080 +a
2081 2081 diff -r 216d4c92cf98 -r bb573313a9e8 f
2082 2082 --- a/f Thu Jan 01 00:00:00 1970 +0000
2083 2083 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2084 2084 @@ -1,1 +1,2 @@
2085 2085 f
2086 2086 +f
2087 2087 diff -r 216d4c92cf98 -r bb573313a9e8 g
2088 2088 --- a/g Thu Jan 01 00:00:00 1970 +0000
2089 2089 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2090 2090 @@ -1,1 +1,2 @@
2091 2091 f
2092 2092 +g
2093 2093 # HG changeset patch
2094 2094 # User test
2095 2095 # Date 0 0
2096 2096 # Thu Jan 01 00:00:00 1970 +0000
2097 2097 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2098 2098 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2099 2099 mv a b; add d
2100 2100
2101 2101 diff -r bb573313a9e8 -r 5918b8d165d1 a
2102 2102 --- a/a Thu Jan 01 00:00:00 1970 +0000
2103 2103 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2104 2104 @@ -1,1 +0,0 @@
2105 2105 -a
2106 2106 diff -r bb573313a9e8 -r 5918b8d165d1 b
2107 2107 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2108 2108 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2109 2109 @@ -0,0 +1,1 @@
2110 2110 +a
2111 2111 diff -r bb573313a9e8 -r 5918b8d165d1 d
2112 2112 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2113 2113 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2114 2114 @@ -0,0 +1,1 @@
2115 2115 +a
2116 2116 diff -r bb573313a9e8 -r 5918b8d165d1 g
2117 2117 --- a/g Thu Jan 01 00:00:00 1970 +0000
2118 2118 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2119 2119 @@ -1,2 +1,2 @@
2120 2120 f
2121 2121 -g
2122 2122 +f
2123 2123 # HG changeset patch
2124 2124 # User test
2125 2125 # Date 0 0
2126 2126 # Thu Jan 01 00:00:00 1970 +0000
2127 2127 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2128 2128 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2129 2129 mv dir/b e
2130 2130
2131 2131 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2132 2132 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2133 2133 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2134 2134 @@ -1,1 +0,0 @@
2135 2135 -a
2136 2136 diff -r 5918b8d165d1 -r 17d952250a9d e
2137 2137 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2138 2138 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2139 2139 @@ -0,0 +1,1 @@
2140 2140 +a
2141 2141 # HG changeset patch
2142 2142 # User test
2143 2143 # Date 0 0
2144 2144 # Thu Jan 01 00:00:00 1970 +0000
2145 2145 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2146 2146 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2147 2147 add another e
2148 2148
2149 2149 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2150 2150 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2151 2151 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2152 2152 @@ -0,0 +1,1 @@
2153 2153 +ee
2154 2154 # HG changeset patch
2155 2155 # User test
2156 2156 # Date 0 0
2157 2157 # Thu Jan 01 00:00:00 1970 +0000
2158 2158 # Node ID fc281d8ff18d999ad6497b3d27390bcd695dcc73
2159 2159 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2160 2160 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2161 2161 merge 5 and 4
2162 2162
2163 2163 diff -r 99b31f1c2782 -r fc281d8ff18d dir/b
2164 2164 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2165 2165 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2166 2166 @@ -1,1 +0,0 @@
2167 2167 -a
2168 2168 diff -r 99b31f1c2782 -r fc281d8ff18d e
2169 2169 --- a/e Thu Jan 01 00:00:00 1970 +0000
2170 2170 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2171 2171 @@ -1,1 +1,1 @@
2172 2172 -ee
2173 2173 +merge
2174 2174 # HG changeset patch
2175 2175 # User test
2176 2176 # Date 0 0
2177 2177 # Thu Jan 01 00:00:00 1970 +0000
2178 2178 # Node ID 02dbb8e276b8ab7abfd07cab50c901647e75c2dd
2179 2179 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2180 2180 Added tag foo-bar for changeset fc281d8ff18d
2181 2181
2182 2182 diff -r fc281d8ff18d -r 02dbb8e276b8 .hgtags
2183 2183 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2184 2184 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2185 2185 @@ -0,0 +1,1 @@
2186 2186 +fc281d8ff18d999ad6497b3d27390bcd695dcc73 foo-bar
2187 2187 # HG changeset patch
2188 2188 # User test
2189 2189 # Date 0 0
2190 2190 # Thu Jan 01 00:00:00 1970 +0000
2191 2191 # Node ID 24c2e826ddebf80f9dcd60b856bdb8e6715c5449
2192 2192 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2193 2193 add g
2194 2194
2195 2195 diff -r fc281d8ff18d -r 24c2e826ddeb g
2196 2196 --- a/g Thu Jan 01 00:00:00 1970 +0000
2197 2197 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2198 2198 @@ -1,2 +1,1 @@
2199 2199 -f
2200 2200 -f
2201 2201 +g
2202 2202 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2203 2203 ['6', '8', '5', '7', '4']
2204 2204 (group
2205 2205 (func
2206 2206 ('symbol', 'descendants')
2207 2207 (func
2208 2208 ('symbol', 'rev')
2209 2209 ('symbol', '6'))))
2210 2210
2211 2211 Test --follow-first and forward --rev
2212 2212
2213 2213 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2214 2214 ['6', '8', '5', '7', '4']
2215 2215 (group
2216 2216 (func
2217 2217 ('symbol', '_firstdescendants')
2218 2218 (func
2219 2219 ('symbol', 'rev')
2220 2220 ('symbol', '6'))))
2221 2221 --- log.nodes * (glob)
2222 2222 +++ glog.nodes * (glob)
2223 2223 @@ -1,3 +1,3 @@
2224 2224 -nodetag 6
2225 2225 nodetag 8
2226 2226 nodetag 7
2227 2227 +nodetag 6
2228 2228
2229 2229 Test --follow and backward --rev
2230 2230
2231 2231 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2232 2232 ['6', '5', '7', '8', '4']
2233 2233 (group
2234 2234 (func
2235 2235 ('symbol', 'ancestors')
2236 2236 (func
2237 2237 ('symbol', 'rev')
2238 2238 ('symbol', '6'))))
2239 2239
2240 2240 Test --follow-first and backward --rev
2241 2241
2242 2242 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2243 2243 ['6', '5', '7', '8', '4']
2244 2244 (group
2245 2245 (func
2246 2246 ('symbol', '_firstancestors')
2247 2247 (func
2248 2248 ('symbol', 'rev')
2249 2249 ('symbol', '6'))))
2250 2250
2251 2251 Test --follow with --rev of graphlog extension
2252 2252
2253 2253 $ hg --config extensions.graphlog= glog -qfr1
2254 2254 o 1:216d4c92cf98
2255 2255 |
2256 2256 o 0:f8035bb17114
2257 2257
2258 2258
2259 2259 Test subdir
2260 2260
2261 2261 $ hg up -q 3
2262 2262 $ cd dir
2263 2263 $ testlog .
2264 2264 []
2265 2265 (group
2266 2266 (func
2267 2267 ('symbol', '_matchfiles')
2268 2268 (list
2269 2269 ('string', 'r:')
2270 2270 ('string', 'd:relpath')
2271 2271 ('string', 'p:.'))))
2272 2272 $ testlog ../b
2273 2273 []
2274 2274 (group
2275 2275 (group
2276 2276 (func
2277 2277 ('symbol', 'filelog')
2278 2278 ('string', '../b'))))
2279 2279 $ testlog -f ../b
2280 2280 []
2281 2281 (group
2282 2282 (group
2283 2283 (func
2284 2284 ('symbol', 'follow')
2285 2285 ('string', 'b'))))
2286 2286 $ cd ..
2287 2287
2288 2288 Test --hidden
2289 2289 (enable obsolete)
2290 2290
2291 2291 $ cat >> $HGRCPATH << EOF
2292 2292 > [experimental]
2293 2293 > evolution=createmarkers
2294 2294 > EOF
2295 2295
2296 2296 $ hg debugobsolete `hg id --debug -i -r 8`
2297 2297 $ testlog
2298 2298 []
2299 2299 []
2300 2300 $ testlog --hidden
2301 2301 []
2302 2302 []
2303 2303 $ hg log -G --template '{rev} {desc}\n'
2304 2304 o 7 Added tag foo-bar for changeset fc281d8ff18d
2305 2305 |
2306 2306 o 6 merge 5 and 4
2307 2307 |\
2308 2308 | o 5 add another e
2309 2309 | |
2310 2310 o | 4 mv dir/b e
2311 2311 |/
2312 2312 @ 3 mv a b; add d
2313 2313 |
2314 2314 o 2 mv b dir/b
2315 2315 |
2316 2316 o 1 copy a b
2317 2317 |
2318 2318 o 0 add a
2319 2319
2320 2320
2321 2321 A template without trailing newline should do something sane
2322 2322
2323 2323 $ hg log -G -r ::2 --template '{rev} {desc}'
2324 2324 o 2 mv b dir/b
2325 2325 |
2326 2326 o 1 copy a b
2327 2327 |
2328 2328 o 0 add a
2329 2329
2330 2330
2331 2331 Extra newlines must be preserved
2332 2332
2333 2333 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2334 2334 o
2335 2335 | 2 mv b dir/b
2336 2336 |
2337 2337 o
2338 2338 | 1 copy a b
2339 2339 |
2340 2340 o
2341 2341 0 add a
2342 2342
2343 2343
2344 2344 The almost-empty template should do something sane too ...
2345 2345
2346 2346 $ hg log -G -r ::2 --template '\n'
2347 2347 o
2348 2348 |
2349 2349 o
2350 2350 |
2351 2351 o
2352 2352
2353 2353
2354 2354 issue3772
2355 2355
2356 2356 $ hg log -G -r :null
2357 2357 o changeset: 0:f8035bb17114
2358 2358 | user: test
2359 2359 | date: Thu Jan 01 00:00:00 1970 +0000
2360 2360 | summary: add a
2361 2361 |
2362 2362 o changeset: -1:000000000000
2363 2363 user:
2364 2364 date: Thu Jan 01 00:00:00 1970 +0000
2365 2365
2366 2366 $ hg log -G -r null:null
2367 2367 o changeset: -1:000000000000
2368 2368 user:
2369 2369 date: Thu Jan 01 00:00:00 1970 +0000
2370 2370
2371 2371
2372 2372 should not draw line down to null due to the magic of fullreposet
2373 2373
2374 2374 $ hg log -G -r 'all()' | tail -6
2375 2375 |
2376 2376 o changeset: 0:f8035bb17114
2377 2377 user: test
2378 2378 date: Thu Jan 01 00:00:00 1970 +0000
2379 2379 summary: add a
2380 2380
2381 2381
2382 2382 $ hg log -G -r 'branch(default)' | tail -6
2383 2383 |
2384 2384 o changeset: 0:f8035bb17114
2385 2385 user: test
2386 2386 date: Thu Jan 01 00:00:00 1970 +0000
2387 2387 summary: add a
2388 2388
2389 2389
2390 2390 working-directory revision
2391 2391
2392 2392 $ hg log -G -qr '. + wdir()'
2393 2393 o 2147483647:ffffffffffff
2394 2394 |
2395 2395 @ 3:5918b8d165d1
2396 2396 |
2397 2397 ~
2398 2398
2399 2399 node template with changeset_printer:
2400 2400
2401 2401 $ hg log -Gqr 5:7 --config ui.graphnodetemplate='{rev}'
2402 2402 7 7:02dbb8e276b8
2403 2403 |
2404 2404 6 6:fc281d8ff18d
2405 2405 |\
2406 2406 | ~
2407 2407 5 5:99b31f1c2782
2408 2408 |
2409 2409 ~
2410 2410
2411 2411 node template with changeset_templater (shared cache variable):
2412 2412
2413 2413 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2414 2414 > --config ui.graphnodetemplate='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2415 2415 o 7 foo-bar+1
2416 2416 |
2417 2417 # 6 foo-bar+0
2418 2418 |\
2419 2419 | ~
2420 2420 o 5 null+5
2421 2421 |
2422 2422 ~
2423 2423
2424 2424 label() should just work in node template:
2425 2425
2426 2426 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2427 2427 > --config ui.graphnodetemplate='{label("branch.{branch}", rev)}'
2428 2428 [branch.default|7] [log.node|7:02dbb8e276b8]
2429 2429 |
2430 2430 ~
2431 2431
2432 2432 $ cd ..
2433 2433
2434 2434 change graph edge styling
2435 2435
2436 2436 $ cd repo
2437 2437 $ cat << EOF >> $HGRCPATH
2438 2438 > [experimental]
2439 2439 > graphstyle.parent = |
2440 2440 > graphstyle.grandparent = :
2441 2441 > graphstyle.missing =
2442 2442 > EOF
2443 2443 $ hg log -G -r 'file("a")' -m
2444 2444 @ changeset: 36:08a19a744424
2445 2445 : branch: branch
2446 2446 : tag: tip
2447 2447 : parent: 35:9159c3644c5e
2448 2448 : parent: 35:9159c3644c5e
2449 2449 : user: test
2450 2450 : date: Thu Jan 01 00:00:36 1970 +0000
2451 2451 : summary: (36) buggy merge: identical parents
2452 2452 :
2453 2453 o changeset: 32:d06dffa21a31
2454 2454 |\ parent: 27:886ed638191b
2455 2455 | : parent: 31:621d83e11f67
2456 2456 | : user: test
2457 2457 | : date: Thu Jan 01 00:00:32 1970 +0000
2458 2458 | : summary: (32) expand
2459 2459 | :
2460 2460 o : changeset: 31:621d83e11f67
2461 2461 |\: parent: 21:d42a756af44d
2462 2462 | : parent: 30:6e11cd4b648f
2463 2463 | : user: test
2464 2464 | : date: Thu Jan 01 00:00:31 1970 +0000
2465 2465 | : summary: (31) expand
2466 2466 | :
2467 2467 o : changeset: 30:6e11cd4b648f
2468 2468 |\ \ parent: 28:44ecd0b9ae99
2469 2469 | ~ : parent: 29:cd9bb2be7593
2470 2470 | : user: test
2471 2471 | : date: Thu Jan 01 00:00:30 1970 +0000
2472 2472 | : summary: (30) expand
2473 2473 | /
2474 2474 o : changeset: 28:44ecd0b9ae99
2475 2475 |\ \ parent: 1:6db2ef61d156
2476 2476 | ~ : parent: 26:7f25b6c2f0b9
2477 2477 | : user: test
2478 2478 | : date: Thu Jan 01 00:00:28 1970 +0000
2479 2479 | : summary: (28) merge zero known
2480 2480 | /
2481 2481 o : changeset: 26:7f25b6c2f0b9
2482 2482 |\ \ parent: 18:1aa84d96232a
2483 2483 | | : parent: 25:91da8ed57247
2484 2484 | | : user: test
2485 2485 | | : date: Thu Jan 01 00:00:26 1970 +0000
2486 2486 | | : summary: (26) merge one known; far right
2487 2487 | | :
2488 2488 | o : changeset: 25:91da8ed57247
2489 2489 | |\: parent: 21:d42a756af44d
2490 2490 | | : parent: 24:a9c19a3d96b7
2491 2491 | | : user: test
2492 2492 | | : date: Thu Jan 01 00:00:25 1970 +0000
2493 2493 | | : summary: (25) merge one known; far left
2494 2494 | | :
2495 2495 | o : changeset: 24:a9c19a3d96b7
2496 2496 | |\ \ parent: 0:e6eb3150255d
2497 2497 | | ~ : parent: 23:a01cddf0766d
2498 2498 | | : user: test
2499 2499 | | : date: Thu Jan 01 00:00:24 1970 +0000
2500 2500 | | : summary: (24) merge one known; immediate right
2501 2501 | | /
2502 2502 | o : changeset: 23:a01cddf0766d
2503 2503 | |\ \ parent: 1:6db2ef61d156
2504 2504 | | ~ : parent: 22:e0d9cccacb5d
2505 2505 | | : user: test
2506 2506 | | : date: Thu Jan 01 00:00:23 1970 +0000
2507 2507 | | : summary: (23) merge one known; immediate left
2508 2508 | | /
2509 2509 | o : changeset: 22:e0d9cccacb5d
2510 2510 |/:/ parent: 18:1aa84d96232a
2511 2511 | : parent: 21:d42a756af44d
2512 2512 | : user: test
2513 2513 | : date: Thu Jan 01 00:00:22 1970 +0000
2514 2514 | : summary: (22) merge two known; one far left, one far right
2515 2515 | :
2516 2516 | o changeset: 21:d42a756af44d
2517 2517 | |\ parent: 19:31ddc2c1573b
2518 2518 | | | parent: 20:d30ed6450e32
2519 2519 | | | user: test
2520 2520 | | | date: Thu Jan 01 00:00:21 1970 +0000
2521 2521 | | | summary: (21) expand
2522 2522 | | |
2523 2523 +---o changeset: 20:d30ed6450e32
2524 2524 | | | parent: 0:e6eb3150255d
2525 2525 | | ~ parent: 18:1aa84d96232a
2526 2526 | | user: test
2527 2527 | | date: Thu Jan 01 00:00:20 1970 +0000
2528 2528 | | summary: (20) merge two known; two far right
2529 2529 | |
2530 2530 | o changeset: 19:31ddc2c1573b
2531 2531 | |\ parent: 15:1dda3f72782d
2532 2532 | | | parent: 17:44765d7c06e0
2533 2533 | | | user: test
2534 2534 | | | date: Thu Jan 01 00:00:19 1970 +0000
2535 2535 | | | summary: (19) expand
2536 2536 | | |
2537 2537 o | | changeset: 18:1aa84d96232a
2538 2538 |\| | parent: 1:6db2ef61d156
2539 2539 ~ | | parent: 15:1dda3f72782d
2540 2540 | | user: test
2541 2541 | | date: Thu Jan 01 00:00:18 1970 +0000
2542 2542 | | summary: (18) merge two known; two far left
2543 2543 / /
2544 2544 | o changeset: 17:44765d7c06e0
2545 2545 | |\ parent: 12:86b91144a6e9
2546 2546 | | | parent: 16:3677d192927d
2547 2547 | | | user: test
2548 2548 | | | date: Thu Jan 01 00:00:17 1970 +0000
2549 2549 | | | summary: (17) expand
2550 2550 | | |
2551 2551 | | o changeset: 16:3677d192927d
2552 2552 | | |\ parent: 0:e6eb3150255d
2553 2553 | | ~ ~ parent: 1:6db2ef61d156
2554 2554 | | user: test
2555 2555 | | date: Thu Jan 01 00:00:16 1970 +0000
2556 2556 | | summary: (16) merge two known; one immediate right, one near right
2557 2557 | |
2558 2558 o | changeset: 15:1dda3f72782d
2559 2559 |\ \ parent: 13:22d8966a97e3
2560 2560 | | | parent: 14:8eac370358ef
2561 2561 | | | user: test
2562 2562 | | | date: Thu Jan 01 00:00:15 1970 +0000
2563 2563 | | | summary: (15) expand
2564 2564 | | |
2565 2565 | o | changeset: 14:8eac370358ef
2566 2566 | |\| parent: 0:e6eb3150255d
2567 2567 | ~ | parent: 12:86b91144a6e9
2568 2568 | | user: test
2569 2569 | | date: Thu Jan 01 00:00:14 1970 +0000
2570 2570 | | summary: (14) merge two known; one immediate right, one far right
2571 2571 | /
2572 2572 o | changeset: 13:22d8966a97e3
2573 2573 |\ \ parent: 9:7010c0af0a35
2574 2574 | | | parent: 11:832d76e6bdf2
2575 2575 | | | user: test
2576 2576 | | | date: Thu Jan 01 00:00:13 1970 +0000
2577 2577 | | | summary: (13) expand
2578 2578 | | |
2579 2579 +---o changeset: 12:86b91144a6e9
2580 2580 | | | parent: 1:6db2ef61d156
2581 2581 | | ~ parent: 9:7010c0af0a35
2582 2582 | | user: test
2583 2583 | | date: Thu Jan 01 00:00:12 1970 +0000
2584 2584 | | summary: (12) merge two known; one immediate right, one far left
2585 2585 | |
2586 2586 | o changeset: 11:832d76e6bdf2
2587 2587 | |\ parent: 6:b105a072e251
2588 2588 | | | parent: 10:74c64d036d72
2589 2589 | | | user: test
2590 2590 | | | date: Thu Jan 01 00:00:11 1970 +0000
2591 2591 | | | summary: (11) expand
2592 2592 | | |
2593 2593 | | o changeset: 10:74c64d036d72
2594 2594 | |/| parent: 0:e6eb3150255d
2595 2595 | | ~ parent: 6:b105a072e251
2596 2596 | | user: test
2597 2597 | | date: Thu Jan 01 00:00:10 1970 +0000
2598 2598 | | summary: (10) merge two known; one immediate left, one near right
2599 2599 | |
2600 2600 o | changeset: 9:7010c0af0a35
2601 2601 |\ \ parent: 7:b632bb1b1224
2602 2602 | | | parent: 8:7a0b11f71937
2603 2603 | | | user: test
2604 2604 | | | date: Thu Jan 01 00:00:09 1970 +0000
2605 2605 | | | summary: (9) expand
2606 2606 | | |
2607 2607 | o | changeset: 8:7a0b11f71937
2608 2608 |/| | parent: 0:e6eb3150255d
2609 2609 | ~ | parent: 7:b632bb1b1224
2610 2610 | | user: test
2611 2611 | | date: Thu Jan 01 00:00:08 1970 +0000
2612 2612 | | summary: (8) merge two known; one immediate left, one far right
2613 2613 | /
2614 2614 o | changeset: 7:b632bb1b1224
2615 2615 |\ \ parent: 2:3d9a33b8d1e1
2616 2616 | ~ | parent: 5:4409d547b708
2617 2617 | | user: test
2618 2618 | | date: Thu Jan 01 00:00:07 1970 +0000
2619 2619 | | summary: (7) expand
2620 2620 | /
2621 2621 | o changeset: 6:b105a072e251
2622 2622 |/| parent: 2:3d9a33b8d1e1
2623 2623 | ~ parent: 5:4409d547b708
2624 2624 | user: test
2625 2625 | date: Thu Jan 01 00:00:06 1970 +0000
2626 2626 | summary: (6) merge two known; one immediate left, one far left
2627 2627 |
2628 2628 o changeset: 5:4409d547b708
2629 2629 |\ parent: 3:27eef8ed80b4
2630 2630 | ~ parent: 4:26a8bac39d9f
2631 2631 | user: test
2632 2632 | date: Thu Jan 01 00:00:05 1970 +0000
2633 2633 | summary: (5) expand
2634 2634 |
2635 2635 o changeset: 4:26a8bac39d9f
2636 2636 |\ parent: 1:6db2ef61d156
2637 2637 ~ ~ parent: 3:27eef8ed80b4
2638 2638 user: test
2639 2639 date: Thu Jan 01 00:00:04 1970 +0000
2640 2640 summary: (4) merge two known; one immediate left, one immediate right
2641 2641
2642 2642
2643 2643 Setting HGPLAIN ignores graphmod styling:
2644 2644
2645 2645 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2646 2646 @ changeset: 36:08a19a744424
2647 2647 | branch: branch
2648 2648 | tag: tip
2649 2649 | parent: 35:9159c3644c5e
2650 2650 | parent: 35:9159c3644c5e
2651 2651 | user: test
2652 2652 | date: Thu Jan 01 00:00:36 1970 +0000
2653 2653 | summary: (36) buggy merge: identical parents
2654 2654 |
2655 2655 o changeset: 32:d06dffa21a31
2656 2656 |\ parent: 27:886ed638191b
2657 2657 | | parent: 31:621d83e11f67
2658 2658 | | user: test
2659 2659 | | date: Thu Jan 01 00:00:32 1970 +0000
2660 2660 | | summary: (32) expand
2661 2661 | |
2662 2662 o | changeset: 31:621d83e11f67
2663 2663 |\| parent: 21:d42a756af44d
2664 2664 | | parent: 30:6e11cd4b648f
2665 2665 | | user: test
2666 2666 | | date: Thu Jan 01 00:00:31 1970 +0000
2667 2667 | | summary: (31) expand
2668 2668 | |
2669 2669 o | changeset: 30:6e11cd4b648f
2670 2670 |\ \ parent: 28:44ecd0b9ae99
2671 2671 | | | parent: 29:cd9bb2be7593
2672 2672 | | | user: test
2673 2673 | | | date: Thu Jan 01 00:00:30 1970 +0000
2674 2674 | | | summary: (30) expand
2675 2675 | | |
2676 2676 o | | changeset: 28:44ecd0b9ae99
2677 2677 |\ \ \ parent: 1:6db2ef61d156
2678 2678 | | | | parent: 26:7f25b6c2f0b9
2679 2679 | | | | user: test
2680 2680 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2681 2681 | | | | summary: (28) merge zero known
2682 2682 | | | |
2683 2683 o | | | changeset: 26:7f25b6c2f0b9
2684 2684 |\ \ \ \ parent: 18:1aa84d96232a
2685 2685 | | | | | parent: 25:91da8ed57247
2686 2686 | | | | | user: test
2687 2687 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2688 2688 | | | | | summary: (26) merge one known; far right
2689 2689 | | | | |
2690 2690 | o-----+ changeset: 25:91da8ed57247
2691 2691 | | | | | parent: 21:d42a756af44d
2692 2692 | | | | | parent: 24:a9c19a3d96b7
2693 2693 | | | | | user: test
2694 2694 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2695 2695 | | | | | summary: (25) merge one known; far left
2696 2696 | | | | |
2697 2697 | o | | | changeset: 24:a9c19a3d96b7
2698 2698 | |\ \ \ \ parent: 0:e6eb3150255d
2699 2699 | | | | | | parent: 23:a01cddf0766d
2700 2700 | | | | | | user: test
2701 2701 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2702 2702 | | | | | | summary: (24) merge one known; immediate right
2703 2703 | | | | | |
2704 2704 | o---+ | | changeset: 23:a01cddf0766d
2705 2705 | | | | | | parent: 1:6db2ef61d156
2706 2706 | | | | | | parent: 22:e0d9cccacb5d
2707 2707 | | | | | | user: test
2708 2708 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2709 2709 | | | | | | summary: (23) merge one known; immediate left
2710 2710 | | | | | |
2711 2711 | o-------+ changeset: 22:e0d9cccacb5d
2712 2712 | | | | | | parent: 18:1aa84d96232a
2713 2713 |/ / / / / parent: 21:d42a756af44d
2714 2714 | | | | | user: test
2715 2715 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2716 2716 | | | | | summary: (22) merge two known; one far left, one far right
2717 2717 | | | | |
2718 2718 | | | | o changeset: 21:d42a756af44d
2719 2719 | | | | |\ parent: 19:31ddc2c1573b
2720 2720 | | | | | | parent: 20:d30ed6450e32
2721 2721 | | | | | | user: test
2722 2722 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2723 2723 | | | | | | summary: (21) expand
2724 2724 | | | | | |
2725 2725 +-+-------o changeset: 20:d30ed6450e32
2726 2726 | | | | | parent: 0:e6eb3150255d
2727 2727 | | | | | parent: 18:1aa84d96232a
2728 2728 | | | | | user: test
2729 2729 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2730 2730 | | | | | summary: (20) merge two known; two far right
2731 2731 | | | | |
2732 2732 | | | | o changeset: 19:31ddc2c1573b
2733 2733 | | | | |\ parent: 15:1dda3f72782d
2734 2734 | | | | | | parent: 17:44765d7c06e0
2735 2735 | | | | | | user: test
2736 2736 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2737 2737 | | | | | | summary: (19) expand
2738 2738 | | | | | |
2739 2739 o---+---+ | changeset: 18:1aa84d96232a
2740 2740 | | | | | parent: 1:6db2ef61d156
2741 2741 / / / / / parent: 15:1dda3f72782d
2742 2742 | | | | | user: test
2743 2743 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2744 2744 | | | | | summary: (18) merge two known; two far left
2745 2745 | | | | |
2746 2746 | | | | o changeset: 17:44765d7c06e0
2747 2747 | | | | |\ parent: 12:86b91144a6e9
2748 2748 | | | | | | parent: 16:3677d192927d
2749 2749 | | | | | | user: test
2750 2750 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2751 2751 | | | | | | summary: (17) expand
2752 2752 | | | | | |
2753 2753 +-+-------o changeset: 16:3677d192927d
2754 2754 | | | | | parent: 0:e6eb3150255d
2755 2755 | | | | | parent: 1:6db2ef61d156
2756 2756 | | | | | user: test
2757 2757 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2758 2758 | | | | | summary: (16) merge two known; one immediate right, one near right
2759 2759 | | | | |
2760 2760 | | | o | changeset: 15:1dda3f72782d
2761 2761 | | | |\ \ parent: 13:22d8966a97e3
2762 2762 | | | | | | parent: 14:8eac370358ef
2763 2763 | | | | | | user: test
2764 2764 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2765 2765 | | | | | | summary: (15) expand
2766 2766 | | | | | |
2767 2767 +-------o | changeset: 14:8eac370358ef
2768 2768 | | | | |/ parent: 0:e6eb3150255d
2769 2769 | | | | | parent: 12:86b91144a6e9
2770 2770 | | | | | user: test
2771 2771 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2772 2772 | | | | | summary: (14) merge two known; one immediate right, one far right
2773 2773 | | | | |
2774 2774 | | | o | changeset: 13:22d8966a97e3
2775 2775 | | | |\ \ parent: 9:7010c0af0a35
2776 2776 | | | | | | parent: 11:832d76e6bdf2
2777 2777 | | | | | | user: test
2778 2778 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2779 2779 | | | | | | summary: (13) expand
2780 2780 | | | | | |
2781 2781 | +---+---o changeset: 12:86b91144a6e9
2782 2782 | | | | | parent: 1:6db2ef61d156
2783 2783 | | | | | parent: 9:7010c0af0a35
2784 2784 | | | | | user: test
2785 2785 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2786 2786 | | | | | summary: (12) merge two known; one immediate right, one far left
2787 2787 | | | | |
2788 2788 | | | | o changeset: 11:832d76e6bdf2
2789 2789 | | | | |\ parent: 6:b105a072e251
2790 2790 | | | | | | parent: 10:74c64d036d72
2791 2791 | | | | | | user: test
2792 2792 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2793 2793 | | | | | | summary: (11) expand
2794 2794 | | | | | |
2795 2795 +---------o changeset: 10:74c64d036d72
2796 2796 | | | | |/ parent: 0:e6eb3150255d
2797 2797 | | | | | parent: 6:b105a072e251
2798 2798 | | | | | user: test
2799 2799 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2800 2800 | | | | | summary: (10) merge two known; one immediate left, one near right
2801 2801 | | | | |
2802 2802 | | | o | changeset: 9:7010c0af0a35
2803 2803 | | | |\ \ parent: 7:b632bb1b1224
2804 2804 | | | | | | parent: 8:7a0b11f71937
2805 2805 | | | | | | user: test
2806 2806 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2807 2807 | | | | | | summary: (9) expand
2808 2808 | | | | | |
2809 2809 +-------o | changeset: 8:7a0b11f71937
2810 2810 | | | |/ / parent: 0:e6eb3150255d
2811 2811 | | | | | parent: 7:b632bb1b1224
2812 2812 | | | | | user: test
2813 2813 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2814 2814 | | | | | summary: (8) merge two known; one immediate left, one far right
2815 2815 | | | | |
2816 2816 | | | o | changeset: 7:b632bb1b1224
2817 2817 | | | |\ \ parent: 2:3d9a33b8d1e1
2818 2818 | | | | | | parent: 5:4409d547b708
2819 2819 | | | | | | user: test
2820 2820 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2821 2821 | | | | | | summary: (7) expand
2822 2822 | | | | | |
2823 2823 | | | +---o changeset: 6:b105a072e251
2824 2824 | | | | |/ parent: 2:3d9a33b8d1e1
2825 2825 | | | | | parent: 5:4409d547b708
2826 2826 | | | | | user: test
2827 2827 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2828 2828 | | | | | summary: (6) merge two known; one immediate left, one far left
2829 2829 | | | | |
2830 2830 | | | o | changeset: 5:4409d547b708
2831 2831 | | | |\ \ parent: 3:27eef8ed80b4
2832 2832 | | | | | | parent: 4:26a8bac39d9f
2833 2833 | | | | | | user: test
2834 2834 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2835 2835 | | | | | | summary: (5) expand
2836 2836 | | | | | |
2837 2837 | +---o | | changeset: 4:26a8bac39d9f
2838 2838 | | | |/ / parent: 1:6db2ef61d156
2839 2839 | | | | | parent: 3:27eef8ed80b4
2840 2840 | | | | | user: test
2841 2841 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2842 2842 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2843 2843 | | | | |
2844 2844
2845 2845 .. unless HGPLAINEXCEPT=graph is set:
2846 2846
2847 2847 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2848 2848 @ changeset: 36:08a19a744424
2849 2849 : branch: branch
2850 2850 : tag: tip
2851 2851 : parent: 35:9159c3644c5e
2852 2852 : parent: 35:9159c3644c5e
2853 2853 : user: test
2854 2854 : date: Thu Jan 01 00:00:36 1970 +0000
2855 2855 : summary: (36) buggy merge: identical parents
2856 2856 :
2857 2857 o changeset: 32:d06dffa21a31
2858 2858 |\ parent: 27:886ed638191b
2859 2859 | : parent: 31:621d83e11f67
2860 2860 | : user: test
2861 2861 | : date: Thu Jan 01 00:00:32 1970 +0000
2862 2862 | : summary: (32) expand
2863 2863 | :
2864 2864 o : changeset: 31:621d83e11f67
2865 2865 |\: parent: 21:d42a756af44d
2866 2866 | : parent: 30:6e11cd4b648f
2867 2867 | : user: test
2868 2868 | : date: Thu Jan 01 00:00:31 1970 +0000
2869 2869 | : summary: (31) expand
2870 2870 | :
2871 2871 o : changeset: 30:6e11cd4b648f
2872 2872 |\ \ parent: 28:44ecd0b9ae99
2873 2873 | ~ : parent: 29:cd9bb2be7593
2874 2874 | : user: test
2875 2875 | : date: Thu Jan 01 00:00:30 1970 +0000
2876 2876 | : summary: (30) expand
2877 2877 | /
2878 2878 o : changeset: 28:44ecd0b9ae99
2879 2879 |\ \ parent: 1:6db2ef61d156
2880 2880 | ~ : parent: 26:7f25b6c2f0b9
2881 2881 | : user: test
2882 2882 | : date: Thu Jan 01 00:00:28 1970 +0000
2883 2883 | : summary: (28) merge zero known
2884 2884 | /
2885 2885 o : changeset: 26:7f25b6c2f0b9
2886 2886 |\ \ parent: 18:1aa84d96232a
2887 2887 | | : parent: 25:91da8ed57247
2888 2888 | | : user: test
2889 2889 | | : date: Thu Jan 01 00:00:26 1970 +0000
2890 2890 | | : summary: (26) merge one known; far right
2891 2891 | | :
2892 2892 | o : changeset: 25:91da8ed57247
2893 2893 | |\: parent: 21:d42a756af44d
2894 2894 | | : parent: 24:a9c19a3d96b7
2895 2895 | | : user: test
2896 2896 | | : date: Thu Jan 01 00:00:25 1970 +0000
2897 2897 | | : summary: (25) merge one known; far left
2898 2898 | | :
2899 2899 | o : changeset: 24:a9c19a3d96b7
2900 2900 | |\ \ parent: 0:e6eb3150255d
2901 2901 | | ~ : parent: 23:a01cddf0766d
2902 2902 | | : user: test
2903 2903 | | : date: Thu Jan 01 00:00:24 1970 +0000
2904 2904 | | : summary: (24) merge one known; immediate right
2905 2905 | | /
2906 2906 | o : changeset: 23:a01cddf0766d
2907 2907 | |\ \ parent: 1:6db2ef61d156
2908 2908 | | ~ : parent: 22:e0d9cccacb5d
2909 2909 | | : user: test
2910 2910 | | : date: Thu Jan 01 00:00:23 1970 +0000
2911 2911 | | : summary: (23) merge one known; immediate left
2912 2912 | | /
2913 2913 | o : changeset: 22:e0d9cccacb5d
2914 2914 |/:/ parent: 18:1aa84d96232a
2915 2915 | : parent: 21:d42a756af44d
2916 2916 | : user: test
2917 2917 | : date: Thu Jan 01 00:00:22 1970 +0000
2918 2918 | : summary: (22) merge two known; one far left, one far right
2919 2919 | :
2920 2920 | o changeset: 21:d42a756af44d
2921 2921 | |\ parent: 19:31ddc2c1573b
2922 2922 | | | parent: 20:d30ed6450e32
2923 2923 | | | user: test
2924 2924 | | | date: Thu Jan 01 00:00:21 1970 +0000
2925 2925 | | | summary: (21) expand
2926 2926 | | |
2927 2927 +---o changeset: 20:d30ed6450e32
2928 2928 | | | parent: 0:e6eb3150255d
2929 2929 | | ~ parent: 18:1aa84d96232a
2930 2930 | | user: test
2931 2931 | | date: Thu Jan 01 00:00:20 1970 +0000
2932 2932 | | summary: (20) merge two known; two far right
2933 2933 | |
2934 2934 | o changeset: 19:31ddc2c1573b
2935 2935 | |\ parent: 15:1dda3f72782d
2936 2936 | | | parent: 17:44765d7c06e0
2937 2937 | | | user: test
2938 2938 | | | date: Thu Jan 01 00:00:19 1970 +0000
2939 2939 | | | summary: (19) expand
2940 2940 | | |
2941 2941 o | | changeset: 18:1aa84d96232a
2942 2942 |\| | parent: 1:6db2ef61d156
2943 2943 ~ | | parent: 15:1dda3f72782d
2944 2944 | | user: test
2945 2945 | | date: Thu Jan 01 00:00:18 1970 +0000
2946 2946 | | summary: (18) merge two known; two far left
2947 2947 / /
2948 2948 | o changeset: 17:44765d7c06e0
2949 2949 | |\ parent: 12:86b91144a6e9
2950 2950 | | | parent: 16:3677d192927d
2951 2951 | | | user: test
2952 2952 | | | date: Thu Jan 01 00:00:17 1970 +0000
2953 2953 | | | summary: (17) expand
2954 2954 | | |
2955 2955 | | o changeset: 16:3677d192927d
2956 2956 | | |\ parent: 0:e6eb3150255d
2957 2957 | | ~ ~ parent: 1:6db2ef61d156
2958 2958 | | user: test
2959 2959 | | date: Thu Jan 01 00:00:16 1970 +0000
2960 2960 | | summary: (16) merge two known; one immediate right, one near right
2961 2961 | |
2962 2962 o | changeset: 15:1dda3f72782d
2963 2963 |\ \ parent: 13:22d8966a97e3
2964 2964 | | | parent: 14:8eac370358ef
2965 2965 | | | user: test
2966 2966 | | | date: Thu Jan 01 00:00:15 1970 +0000
2967 2967 | | | summary: (15) expand
2968 2968 | | |
2969 2969 | o | changeset: 14:8eac370358ef
2970 2970 | |\| parent: 0:e6eb3150255d
2971 2971 | ~ | parent: 12:86b91144a6e9
2972 2972 | | user: test
2973 2973 | | date: Thu Jan 01 00:00:14 1970 +0000
2974 2974 | | summary: (14) merge two known; one immediate right, one far right
2975 2975 | /
2976 2976 o | changeset: 13:22d8966a97e3
2977 2977 |\ \ parent: 9:7010c0af0a35
2978 2978 | | | parent: 11:832d76e6bdf2
2979 2979 | | | user: test
2980 2980 | | | date: Thu Jan 01 00:00:13 1970 +0000
2981 2981 | | | summary: (13) expand
2982 2982 | | |
2983 2983 +---o changeset: 12:86b91144a6e9
2984 2984 | | | parent: 1:6db2ef61d156
2985 2985 | | ~ parent: 9:7010c0af0a35
2986 2986 | | user: test
2987 2987 | | date: Thu Jan 01 00:00:12 1970 +0000
2988 2988 | | summary: (12) merge two known; one immediate right, one far left
2989 2989 | |
2990 2990 | o changeset: 11:832d76e6bdf2
2991 2991 | |\ parent: 6:b105a072e251
2992 2992 | | | parent: 10:74c64d036d72
2993 2993 | | | user: test
2994 2994 | | | date: Thu Jan 01 00:00:11 1970 +0000
2995 2995 | | | summary: (11) expand
2996 2996 | | |
2997 2997 | | o changeset: 10:74c64d036d72
2998 2998 | |/| parent: 0:e6eb3150255d
2999 2999 | | ~ parent: 6:b105a072e251
3000 3000 | | user: test
3001 3001 | | date: Thu Jan 01 00:00:10 1970 +0000
3002 3002 | | summary: (10) merge two known; one immediate left, one near right
3003 3003 | |
3004 3004 o | changeset: 9:7010c0af0a35
3005 3005 |\ \ parent: 7:b632bb1b1224
3006 3006 | | | parent: 8:7a0b11f71937
3007 3007 | | | user: test
3008 3008 | | | date: Thu Jan 01 00:00:09 1970 +0000
3009 3009 | | | summary: (9) expand
3010 3010 | | |
3011 3011 | o | changeset: 8:7a0b11f71937
3012 3012 |/| | parent: 0:e6eb3150255d
3013 3013 | ~ | parent: 7:b632bb1b1224
3014 3014 | | user: test
3015 3015 | | date: Thu Jan 01 00:00:08 1970 +0000
3016 3016 | | summary: (8) merge two known; one immediate left, one far right
3017 3017 | /
3018 3018 o | changeset: 7:b632bb1b1224
3019 3019 |\ \ parent: 2:3d9a33b8d1e1
3020 3020 | ~ | parent: 5:4409d547b708
3021 3021 | | user: test
3022 3022 | | date: Thu Jan 01 00:00:07 1970 +0000
3023 3023 | | summary: (7) expand
3024 3024 | /
3025 3025 | o changeset: 6:b105a072e251
3026 3026 |/| parent: 2:3d9a33b8d1e1
3027 3027 | ~ parent: 5:4409d547b708
3028 3028 | user: test
3029 3029 | date: Thu Jan 01 00:00:06 1970 +0000
3030 3030 | summary: (6) merge two known; one immediate left, one far left
3031 3031 |
3032 3032 o changeset: 5:4409d547b708
3033 3033 |\ parent: 3:27eef8ed80b4
3034 3034 | ~ parent: 4:26a8bac39d9f
3035 3035 | user: test
3036 3036 | date: Thu Jan 01 00:00:05 1970 +0000
3037 3037 | summary: (5) expand
3038 3038 |
3039 3039 o changeset: 4:26a8bac39d9f
3040 3040 |\ parent: 1:6db2ef61d156
3041 3041 ~ ~ parent: 3:27eef8ed80b4
3042 3042 user: test
3043 3043 date: Thu Jan 01 00:00:04 1970 +0000
3044 3044 summary: (4) merge two known; one immediate left, one immediate right
3045 3045
3046 3046 Draw only part of a grandparent line differently with "<N><char>"; only the
3047 3047 last N lines (for positive N) or everything but the first N lines (for
3048 3048 negative N) along the current node use the style, the rest of the edge uses
3049 3049 the parent edge styling.
3050 3050
3051 3051 Last 3 lines:
3052 3052
3053 3053 $ cat << EOF >> $HGRCPATH
3054 3054 > [experimental]
3055 3055 > graphstyle.parent = !
3056 3056 > graphstyle.grandparent = 3.
3057 3057 > graphstyle.missing =
3058 3058 > EOF
3059 3059 $ hg log -G -r '36:18 & file("a")' -m
3060 3060 @ changeset: 36:08a19a744424
3061 3061 ! branch: branch
3062 3062 ! tag: tip
3063 3063 ! parent: 35:9159c3644c5e
3064 3064 ! parent: 35:9159c3644c5e
3065 3065 ! user: test
3066 3066 . date: Thu Jan 01 00:00:36 1970 +0000
3067 3067 . summary: (36) buggy merge: identical parents
3068 3068 .
3069 3069 o changeset: 32:d06dffa21a31
3070 3070 !\ parent: 27:886ed638191b
3071 3071 ! ! parent: 31:621d83e11f67
3072 3072 ! ! user: test
3073 3073 ! . date: Thu Jan 01 00:00:32 1970 +0000
3074 3074 ! . summary: (32) expand
3075 3075 ! .
3076 3076 o ! changeset: 31:621d83e11f67
3077 3077 !\! parent: 21:d42a756af44d
3078 3078 ! ! parent: 30:6e11cd4b648f
3079 3079 ! ! user: test
3080 3080 ! ! date: Thu Jan 01 00:00:31 1970 +0000
3081 3081 ! ! summary: (31) expand
3082 3082 ! !
3083 3083 o ! changeset: 30:6e11cd4b648f
3084 3084 !\ \ parent: 28:44ecd0b9ae99
3085 3085 ! ~ ! parent: 29:cd9bb2be7593
3086 3086 ! ! user: test
3087 3087 ! ! date: Thu Jan 01 00:00:30 1970 +0000
3088 3088 ! ! summary: (30) expand
3089 3089 ! /
3090 3090 o ! changeset: 28:44ecd0b9ae99
3091 3091 !\ \ parent: 1:6db2ef61d156
3092 3092 ! ~ ! parent: 26:7f25b6c2f0b9
3093 3093 ! ! user: test
3094 3094 ! ! date: Thu Jan 01 00:00:28 1970 +0000
3095 3095 ! ! summary: (28) merge zero known
3096 3096 ! /
3097 3097 o ! changeset: 26:7f25b6c2f0b9
3098 3098 !\ \ parent: 18:1aa84d96232a
3099 3099 ! ! ! parent: 25:91da8ed57247
3100 3100 ! ! ! user: test
3101 3101 ! ! ! date: Thu Jan 01 00:00:26 1970 +0000
3102 3102 ! ! ! summary: (26) merge one known; far right
3103 3103 ! ! !
3104 3104 ! o ! changeset: 25:91da8ed57247
3105 3105 ! !\! parent: 21:d42a756af44d
3106 3106 ! ! ! parent: 24:a9c19a3d96b7
3107 3107 ! ! ! user: test
3108 3108 ! ! ! date: Thu Jan 01 00:00:25 1970 +0000
3109 3109 ! ! ! summary: (25) merge one known; far left
3110 3110 ! ! !
3111 3111 ! o ! changeset: 24:a9c19a3d96b7
3112 3112 ! !\ \ parent: 0:e6eb3150255d
3113 3113 ! ! ~ ! parent: 23:a01cddf0766d
3114 3114 ! ! ! user: test
3115 3115 ! ! ! date: Thu Jan 01 00:00:24 1970 +0000
3116 3116 ! ! ! summary: (24) merge one known; immediate right
3117 3117 ! ! /
3118 3118 ! o ! changeset: 23:a01cddf0766d
3119 3119 ! !\ \ parent: 1:6db2ef61d156
3120 3120 ! ! ~ ! parent: 22:e0d9cccacb5d
3121 3121 ! ! ! user: test
3122 3122 ! ! ! date: Thu Jan 01 00:00:23 1970 +0000
3123 3123 ! ! ! summary: (23) merge one known; immediate left
3124 3124 ! ! /
3125 3125 ! o ! changeset: 22:e0d9cccacb5d
3126 3126 !/!/ parent: 18:1aa84d96232a
3127 3127 ! ! parent: 21:d42a756af44d
3128 3128 ! ! user: test
3129 3129 ! ! date: Thu Jan 01 00:00:22 1970 +0000
3130 3130 ! ! summary: (22) merge two known; one far left, one far right
3131 3131 ! !
3132 3132 ! o changeset: 21:d42a756af44d
3133 3133 ! !\ parent: 19:31ddc2c1573b
3134 3134 ! ! ! parent: 20:d30ed6450e32
3135 3135 ! ! ! user: test
3136 3136 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3137 3137 ! ! ! summary: (21) expand
3138 3138 ! ! !
3139 3139 +---o changeset: 20:d30ed6450e32
3140 3140 ! ! | parent: 0:e6eb3150255d
3141 3141 ! ! ~ parent: 18:1aa84d96232a
3142 3142 ! ! user: test
3143 3143 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3144 3144 ! ! summary: (20) merge two known; two far right
3145 3145 ! !
3146 3146 ! o changeset: 19:31ddc2c1573b
3147 3147 ! |\ parent: 15:1dda3f72782d
3148 3148 ! ~ ~ parent: 17:44765d7c06e0
3149 3149 ! user: test
3150 3150 ! date: Thu Jan 01 00:00:19 1970 +0000
3151 3151 ! summary: (19) expand
3152 3152 !
3153 3153 o changeset: 18:1aa84d96232a
3154 3154 |\ parent: 1:6db2ef61d156
3155 3155 ~ ~ parent: 15:1dda3f72782d
3156 3156 user: test
3157 3157 date: Thu Jan 01 00:00:18 1970 +0000
3158 3158 summary: (18) merge two known; two far left
3159 3159
3160 3160 All but the first 3 lines:
3161 3161
3162 3162 $ cat << EOF >> $HGRCPATH
3163 3163 > [experimental]
3164 3164 > graphstyle.parent = !
3165 3165 > graphstyle.grandparent = -3.
3166 3166 > graphstyle.missing =
3167 3167 > EOF
3168 3168 $ hg log -G -r '36:18 & file("a")' -m
3169 3169 @ changeset: 36:08a19a744424
3170 3170 ! branch: branch
3171 3171 ! tag: tip
3172 3172 . parent: 35:9159c3644c5e
3173 3173 . parent: 35:9159c3644c5e
3174 3174 . user: test
3175 3175 . date: Thu Jan 01 00:00:36 1970 +0000
3176 3176 . summary: (36) buggy merge: identical parents
3177 3177 .
3178 3178 o changeset: 32:d06dffa21a31
3179 3179 !\ parent: 27:886ed638191b
3180 3180 ! ! parent: 31:621d83e11f67
3181 3181 ! . user: test
3182 3182 ! . date: Thu Jan 01 00:00:32 1970 +0000
3183 3183 ! . summary: (32) expand
3184 3184 ! .
3185 3185 o ! changeset: 31:621d83e11f67
3186 3186 !\! parent: 21:d42a756af44d
3187 3187 ! ! parent: 30:6e11cd4b648f
3188 3188 ! ! user: test
3189 3189 ! ! date: Thu Jan 01 00:00:31 1970 +0000
3190 3190 ! ! summary: (31) expand
3191 3191 ! !
3192 3192 o ! changeset: 30:6e11cd4b648f
3193 3193 !\ \ parent: 28:44ecd0b9ae99
3194 3194 ! ~ ! parent: 29:cd9bb2be7593
3195 3195 ! ! user: test
3196 3196 ! ! date: Thu Jan 01 00:00:30 1970 +0000
3197 3197 ! ! summary: (30) expand
3198 3198 ! /
3199 3199 o ! changeset: 28:44ecd0b9ae99
3200 3200 !\ \ parent: 1:6db2ef61d156
3201 3201 ! ~ ! parent: 26:7f25b6c2f0b9
3202 3202 ! ! user: test
3203 3203 ! ! date: Thu Jan 01 00:00:28 1970 +0000
3204 3204 ! ! summary: (28) merge zero known
3205 3205 ! /
3206 3206 o ! changeset: 26:7f25b6c2f0b9
3207 3207 !\ \ parent: 18:1aa84d96232a
3208 3208 ! ! ! parent: 25:91da8ed57247
3209 3209 ! ! ! user: test
3210 3210 ! ! ! date: Thu Jan 01 00:00:26 1970 +0000
3211 3211 ! ! ! summary: (26) merge one known; far right
3212 3212 ! ! !
3213 3213 ! o ! changeset: 25:91da8ed57247
3214 3214 ! !\! parent: 21:d42a756af44d
3215 3215 ! ! ! parent: 24:a9c19a3d96b7
3216 3216 ! ! ! user: test
3217 3217 ! ! ! date: Thu Jan 01 00:00:25 1970 +0000
3218 3218 ! ! ! summary: (25) merge one known; far left
3219 3219 ! ! !
3220 3220 ! o ! changeset: 24:a9c19a3d96b7
3221 3221 ! !\ \ parent: 0:e6eb3150255d
3222 3222 ! ! ~ ! parent: 23:a01cddf0766d
3223 3223 ! ! ! user: test
3224 3224 ! ! ! date: Thu Jan 01 00:00:24 1970 +0000
3225 3225 ! ! ! summary: (24) merge one known; immediate right
3226 3226 ! ! /
3227 3227 ! o ! changeset: 23:a01cddf0766d
3228 3228 ! !\ \ parent: 1:6db2ef61d156
3229 3229 ! ! ~ ! parent: 22:e0d9cccacb5d
3230 3230 ! ! ! user: test
3231 3231 ! ! ! date: Thu Jan 01 00:00:23 1970 +0000
3232 3232 ! ! ! summary: (23) merge one known; immediate left
3233 3233 ! ! /
3234 3234 ! o ! changeset: 22:e0d9cccacb5d
3235 3235 !/!/ parent: 18:1aa84d96232a
3236 3236 ! ! parent: 21:d42a756af44d
3237 3237 ! ! user: test
3238 3238 ! ! date: Thu Jan 01 00:00:22 1970 +0000
3239 3239 ! ! summary: (22) merge two known; one far left, one far right
3240 3240 ! !
3241 3241 ! o changeset: 21:d42a756af44d
3242 3242 ! !\ parent: 19:31ddc2c1573b
3243 3243 ! ! ! parent: 20:d30ed6450e32
3244 3244 ! ! ! user: test
3245 3245 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3246 3246 ! ! ! summary: (21) expand
3247 3247 ! ! !
3248 3248 +---o changeset: 20:d30ed6450e32
3249 3249 ! ! | parent: 0:e6eb3150255d
3250 3250 ! ! ~ parent: 18:1aa84d96232a
3251 3251 ! ! user: test
3252 3252 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3253 3253 ! ! summary: (20) merge two known; two far right
3254 3254 ! !
3255 3255 ! o changeset: 19:31ddc2c1573b
3256 3256 ! |\ parent: 15:1dda3f72782d
3257 3257 ! ~ ~ parent: 17:44765d7c06e0
3258 3258 ! user: test
3259 3259 ! date: Thu Jan 01 00:00:19 1970 +0000
3260 3260 ! summary: (19) expand
3261 3261 !
3262 3262 o changeset: 18:1aa84d96232a
3263 3263 |\ parent: 1:6db2ef61d156
3264 3264 ~ ~ parent: 15:1dda3f72782d
3265 3265 user: test
3266 3266 date: Thu Jan 01 00:00:18 1970 +0000
3267 3267 summary: (18) merge two known; two far left
3268 3268
3269 3269 $ cd ..
3270 3270
3271 3271 Change graph shorten, test better with graphstyle.missing not none
3272 3272
3273 3273 $ cd repo
3274 3274 $ cat << EOF >> $HGRCPATH
3275 3275 > [experimental]
3276 3276 > graphstyle.parent = |
3277 3277 > graphstyle.grandparent = :
3278 3278 > graphstyle.missing = '
3279 3279 > graphshorten = true
3280 3280 > EOF
3281 3281 $ hg log -G -r 'file("a")' -m -T '{rev} {desc}'
3282 3282 @ 36 (36) buggy merge: identical parents
3283 3283 o 32 (32) expand
3284 3284 |\
3285 3285 o : 31 (31) expand
3286 3286 |\:
3287 3287 o : 30 (30) expand
3288 3288 |\ \
3289 3289 o \ \ 28 (28) merge zero known
3290 3290 |\ \ \
3291 3291 o \ \ \ 26 (26) merge one known; far right
3292 3292 |\ \ \ \
3293 3293 | o-----+ 25 (25) merge one known; far left
3294 3294 | o ' ' : 24 (24) merge one known; immediate right
3295 3295 | |\ \ \ \
3296 3296 | o---+ ' : 23 (23) merge one known; immediate left
3297 3297 | o-------+ 22 (22) merge two known; one far left, one far right
3298 3298 |/ / / / /
3299 3299 | ' ' ' o 21 (21) expand
3300 3300 | ' ' ' |\
3301 3301 +-+-------o 20 (20) merge two known; two far right
3302 3302 | ' ' ' o 19 (19) expand
3303 3303 | ' ' ' |\
3304 3304 o---+---+ | 18 (18) merge two known; two far left
3305 3305 / / / / /
3306 3306 ' ' ' | o 17 (17) expand
3307 3307 ' ' ' | |\
3308 3308 +-+-------o 16 (16) merge two known; one immediate right, one near right
3309 3309 ' ' ' o | 15 (15) expand
3310 3310 ' ' ' |\ \
3311 3311 +-------o | 14 (14) merge two known; one immediate right, one far right
3312 3312 ' ' ' | |/
3313 3313 ' ' ' o | 13 (13) expand
3314 3314 ' ' ' |\ \
3315 3315 ' +---+---o 12 (12) merge two known; one immediate right, one far left
3316 3316 ' ' ' | o 11 (11) expand
3317 3317 ' ' ' | |\
3318 3318 +---------o 10 (10) merge two known; one immediate left, one near right
3319 3319 ' ' ' | |/
3320 3320 ' ' ' o | 9 (9) expand
3321 3321 ' ' ' |\ \
3322 3322 +-------o | 8 (8) merge two known; one immediate left, one far right
3323 3323 ' ' ' |/ /
3324 3324 ' ' ' o | 7 (7) expand
3325 3325 ' ' ' |\ \
3326 3326 ' ' ' +---o 6 (6) merge two known; one immediate left, one far left
3327 3327 ' ' ' | '/
3328 3328 ' ' ' o ' 5 (5) expand
3329 3329 ' ' ' |\ \
3330 3330 ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right
3331 3331 ' ' ' '/ /
3332 3332
3333 3333 behavior with newlines
3334 3334
3335 3335 $ hg log -G -r ::2 -T '{rev} {desc}'
3336 3336 o 2 (2) collapse
3337 3337 o 1 (1) collapse
3338 3338 o 0 (0) root
3339 3339
3340 3340 $ hg log -G -r ::2 -T '{rev} {desc}\n'
3341 3341 o 2 (2) collapse
3342 3342 o 1 (1) collapse
3343 3343 o 0 (0) root
3344 3344
3345 3345 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
3346 3346 o 2 (2) collapse
3347 3347 |
3348 3348 o 1 (1) collapse
3349 3349 |
3350 3350 o 0 (0) root
3351 3351
3352 3352
3353 3353 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3354 3354 o
3355 3355 | 2 (2) collapse
3356 3356 o
3357 3357 | 1 (1) collapse
3358 3358 o
3359 3359 0 (0) root
3360 3360
3361 3361 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3362 3362 o 2 (2) collapse
3363 3363 |
3364 3364 |
3365 3365 o 1 (1) collapse
3366 3366 |
3367 3367 |
3368 3368 o 0 (0) root
3369 3369
3370 3370
3371 3371 $ cd ..
3372 3372
3373 3373 When inserting extra line nodes to handle more than 2 parents, ensure that
3374 3374 the right node styles are used (issue5174):
3375 3375
3376 3376 $ hg init repo-issue5174
3377 3377 $ cd repo-issue5174
3378 3378 $ echo a > f0
3379 3379 $ hg ci -Aqm 0
3380 3380 $ echo a > f1
3381 3381 $ hg ci -Aqm 1
3382 3382 $ echo a > f2
3383 3383 $ hg ci -Aqm 2
3384 3384 $ hg co ".^"
3385 3385 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3386 3386 $ echo a > f3
3387 3387 $ hg ci -Aqm 3
3388 3388 $ hg co ".^^"
3389 3389 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3390 3390 $ echo a > f4
3391 3391 $ hg ci -Aqm 4
3392 3392 $ hg merge -r 2
3393 3393 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3394 3394 (branch merge, don't forget to commit)
3395 3395 $ hg ci -qm 5
3396 3396 $ hg merge -r 3
3397 3397 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3398 3398 (branch merge, don't forget to commit)
3399 3399 $ hg ci -qm 6
3400 3400 $ hg log -G -r '0 | 1 | 2 | 6'
3401 3401 @ changeset: 6:851fe89689ad
3402 3402 :\ tag: tip
3403 3403 : : parent: 5:4f1e3cf15f5d
3404 3404 : : parent: 3:b74ba7084d2d
3405 3405 : : user: test
3406 3406 : : date: Thu Jan 01 00:00:00 1970 +0000
3407 3407 : : summary: 6
3408 3408 : :
3409 3409 : \
3410 3410 : :\
3411 3411 : o : changeset: 2:3e6599df4cce
3412 3412 : :/ user: test
3413 3413 : : date: Thu Jan 01 00:00:00 1970 +0000
3414 3414 : : summary: 2
3415 3415 : :
3416 3416 : o changeset: 1:bd9a55143933
3417 3417 :/ user: test
3418 3418 : date: Thu Jan 01 00:00:00 1970 +0000
3419 3419 : summary: 1
3420 3420 :
3421 3421 o changeset: 0:870a5edc339c
3422 3422 user: test
3423 3423 date: Thu Jan 01 00:00:00 1970 +0000
3424 3424 summary: 0
3425 3425
3426 3426
3427 $ cd ..
3428
3429 Multiple roots (issue5440):
3430
3431 $ hg init multiroots
3432 $ cd multiroots
3433 $ cat <<EOF > .hg/hgrc
3434 > [ui]
3435 > logtemplate = '{rev} {desc}\n\n'
3436 > EOF
3437
3438 $ touch foo
3439 $ hg ci -Aqm foo
3440 $ hg co -q null
3441 $ touch bar
3442 $ hg ci -Aqm bar
3443
3444 $ hg log -Gr null:
3445 @ 1 bar
3446 |
3447 | o 0 foo
3448 |/
3449 o -1
3450
3451 $ hg log -Gr null+0
3452 o 0 foo
3453 |
3454 o -1
3455
3456 $ hg log -Gr null+1
3457 @ 1 bar
3458 |
3459 o -1
3460
3461
3462 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now