##// END OF EJS Templates
graphmod: use revsets internally...
Alexander Solovyov -
r14042:9966c95b default
parent child Browse files
Show More
@@ -1,342 +1,340 b''
1 1 # ASCII graph log extension for Mercurial
2 2 #
3 3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 '''command to view revision graphs from a shell
9 9
10 10 This extension adds a --graph option to the incoming, outgoing and log
11 11 commands. When this options is given, an ASCII representation of the
12 12 revision graph is also shown.
13 13 '''
14 14
15 15 import os
16 16 from mercurial.cmdutil import revrange, show_changeset
17 17 from mercurial.commands import templateopts
18 18 from mercurial.i18n import _
19 19 from mercurial.node import nullrev
20 20 from mercurial import cmdutil, commands, extensions
21 21 from mercurial import hg, scmutil, util, graphmod
22 22
23 23 ASCIIDATA = 'ASC'
24 24
25 25 def asciiedges(seen, rev, parents):
26 26 """adds edge info to changelog DAG walk suitable for ascii()"""
27 27 if rev not in seen:
28 28 seen.append(rev)
29 29 nodeidx = seen.index(rev)
30 30
31 31 knownparents = []
32 32 newparents = []
33 33 for parent in parents:
34 34 if parent in seen:
35 35 knownparents.append(parent)
36 36 else:
37 37 newparents.append(parent)
38 38
39 39 ncols = len(seen)
40 40 seen[nodeidx:nodeidx + 1] = newparents
41 41 edges = [(nodeidx, seen.index(p)) for p in knownparents]
42 42
43 43 if len(newparents) > 0:
44 44 edges.append((nodeidx, nodeidx))
45 45 if len(newparents) > 1:
46 46 edges.append((nodeidx, nodeidx + 1))
47 47
48 48 nmorecols = len(seen) - ncols
49 49 return nodeidx, edges, ncols, nmorecols
50 50
51 51 def fix_long_right_edges(edges):
52 52 for (i, (start, end)) in enumerate(edges):
53 53 if end > start:
54 54 edges[i] = (start, end + 1)
55 55
56 56 def get_nodeline_edges_tail(
57 57 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
58 58 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
59 59 # Still going in the same non-vertical direction.
60 60 if n_columns_diff == -1:
61 61 start = max(node_index + 1, p_node_index)
62 62 tail = ["|", " "] * (start - node_index - 1)
63 63 tail.extend(["/", " "] * (n_columns - start))
64 64 return tail
65 65 else:
66 66 return ["\\", " "] * (n_columns - node_index - 1)
67 67 else:
68 68 return ["|", " "] * (n_columns - node_index - 1)
69 69
70 70 def draw_edges(edges, nodeline, interline):
71 71 for (start, end) in edges:
72 72 if start == end + 1:
73 73 interline[2 * end + 1] = "/"
74 74 elif start == end - 1:
75 75 interline[2 * start + 1] = "\\"
76 76 elif start == end:
77 77 interline[2 * start] = "|"
78 78 else:
79 79 nodeline[2 * end] = "+"
80 80 if start > end:
81 81 (start, end) = (end, start)
82 82 for i in range(2 * start + 1, 2 * end):
83 83 if nodeline[i] != "+":
84 84 nodeline[i] = "-"
85 85
86 86 def get_padding_line(ni, n_columns, edges):
87 87 line = []
88 88 line.extend(["|", " "] * ni)
89 89 if (ni, ni - 1) in edges or (ni, ni) in edges:
90 90 # (ni, ni - 1) (ni, ni)
91 91 # | | | | | | | |
92 92 # +---o | | o---+
93 93 # | | c | | c | |
94 94 # | |/ / | |/ /
95 95 # | | | | | |
96 96 c = "|"
97 97 else:
98 98 c = " "
99 99 line.extend([c, " "])
100 100 line.extend(["|", " "] * (n_columns - ni - 1))
101 101 return line
102 102
103 103 def asciistate():
104 104 """returns the initial value for the "state" argument to ascii()"""
105 105 return [0, 0]
106 106
107 107 def ascii(ui, state, type, char, text, coldata):
108 108 """prints an ASCII graph of the DAG
109 109
110 110 takes the following arguments (one call per node in the graph):
111 111
112 112 - ui to write to
113 113 - Somewhere to keep the needed state in (init to asciistate())
114 114 - Column of the current node in the set of ongoing edges.
115 115 - Type indicator of node data == ASCIIDATA.
116 116 - Payload: (char, lines):
117 117 - Character to use as node's symbol.
118 118 - List of lines to display as the node's text.
119 119 - Edges; a list of (col, next_col) indicating the edges between
120 120 the current node and its parents.
121 121 - Number of columns (ongoing edges) in the current revision.
122 122 - The difference between the number of columns (ongoing edges)
123 123 in the next revision and the number of columns (ongoing edges)
124 124 in the current revision. That is: -1 means one column removed;
125 125 0 means no columns added or removed; 1 means one column added.
126 126 """
127 127
128 128 idx, edges, ncols, coldiff = coldata
129 129 assert -2 < coldiff < 2
130 130 if coldiff == -1:
131 131 # Transform
132 132 #
133 133 # | | | | | |
134 134 # o | | into o---+
135 135 # |X / |/ /
136 136 # | | | |
137 137 fix_long_right_edges(edges)
138 138
139 139 # add_padding_line says whether to rewrite
140 140 #
141 141 # | | | | | | | |
142 142 # | o---+ into | o---+
143 143 # | / / | | | # <--- padding line
144 144 # o | | | / /
145 145 # o | |
146 146 add_padding_line = (len(text) > 2 and coldiff == -1 and
147 147 [x for (x, y) in edges if x + 1 < y])
148 148
149 149 # fix_nodeline_tail says whether to rewrite
150 150 #
151 151 # | | o | | | | o | |
152 152 # | | |/ / | | |/ /
153 153 # | o | | into | o / / # <--- fixed nodeline tail
154 154 # | |/ / | |/ /
155 155 # o | | o | |
156 156 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
157 157
158 158 # nodeline is the line containing the node character (typically o)
159 159 nodeline = ["|", " "] * idx
160 160 nodeline.extend([char, " "])
161 161
162 162 nodeline.extend(
163 163 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
164 164 state[0], fix_nodeline_tail))
165 165
166 166 # shift_interline is the line containing the non-vertical
167 167 # edges between this entry and the next
168 168 shift_interline = ["|", " "] * idx
169 169 if coldiff == -1:
170 170 n_spaces = 1
171 171 edge_ch = "/"
172 172 elif coldiff == 0:
173 173 n_spaces = 2
174 174 edge_ch = "|"
175 175 else:
176 176 n_spaces = 3
177 177 edge_ch = "\\"
178 178 shift_interline.extend(n_spaces * [" "])
179 179 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
180 180
181 181 # draw edges from the current node to its parents
182 182 draw_edges(edges, nodeline, shift_interline)
183 183
184 184 # lines is the list of all graph lines to print
185 185 lines = [nodeline]
186 186 if add_padding_line:
187 187 lines.append(get_padding_line(idx, ncols, edges))
188 188 lines.append(shift_interline)
189 189
190 190 # make sure that there are as many graph lines as there are
191 191 # log strings
192 192 while len(text) < len(lines):
193 193 text.append("")
194 194 if len(lines) < len(text):
195 195 extra_interline = ["|", " "] * (ncols + coldiff)
196 196 while len(lines) < len(text):
197 197 lines.append(extra_interline)
198 198
199 199 # print lines
200 200 indentation_level = max(ncols, ncols + coldiff)
201 201 for (line, logstr) in zip(lines, text):
202 202 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
203 203 ui.write(ln.rstrip() + '\n')
204 204
205 205 # ... and start over
206 206 state[0] = coldiff
207 207 state[1] = idx
208 208
209 209 def get_revs(repo, rev_opt):
210 210 if rev_opt:
211 211 revs = revrange(repo, rev_opt)
212 212 if len(revs) == 0:
213 213 return (nullrev, nullrev)
214 214 return (max(revs), min(revs))
215 215 else:
216 216 return (len(repo) - 1, 0)
217 217
218 218 def check_unsupported_flags(opts):
219 219 for op in ["follow", "follow_first", "date", "copies", "keyword", "remove",
220 220 "only_merges", "user", "branch", "only_branch", "prune",
221 221 "newest_first", "no_merges", "include", "exclude"]:
222 222 if op in opts and opts[op]:
223 223 raise util.Abort(_("--graph option is incompatible with --%s")
224 224 % op.replace("_", "-"))
225 225
226 226 def generate(ui, dag, displayer, showparents, edgefn):
227 227 seen, state = [], asciistate()
228 228 for rev, type, ctx, parents in dag:
229 229 char = ctx.node() in showparents and '@' or 'o'
230 230 displayer.show(ctx)
231 231 lines = displayer.hunk.pop(rev).split('\n')[:-1]
232 232 displayer.flush(rev)
233 233 ascii(ui, state, type, char, lines, edgefn(seen, rev, parents))
234 234 displayer.close()
235 235
236 236 def graphlog(ui, repo, path=None, **opts):
237 237 """show revision history alongside an ASCII revision graph
238 238
239 239 Print a revision history alongside a revision graph drawn with
240 240 ASCII characters.
241 241
242 242 Nodes printed as an @ character are parents of the working
243 243 directory.
244 244 """
245 245
246 246 check_unsupported_flags(opts)
247 247 limit = cmdutil.loglimit(opts)
248 248 start, stop = get_revs(repo, opts["rev"])
249 249 if start == nullrev:
250 250 return
251 251
252 if path:
253 path = scmutil.canonpath(repo.root, os.getcwd(), path)
254 252 if path: # could be reset in canonpath
255 253 revdag = graphmod.filerevs(repo, path, start, stop, limit)
256 254 else:
257 255 if limit is not None:
258 256 stop = max(stop, start - limit + 1)
259 257 revdag = graphmod.revisions(repo, start, stop)
260 258
261 259 displayer = show_changeset(ui, repo, opts, buffered=True)
262 260 showparents = [ctx.node() for ctx in repo[None].parents()]
263 261 generate(ui, revdag, displayer, showparents, asciiedges)
264 262
265 263 def graphrevs(repo, nodes, opts):
266 264 limit = cmdutil.loglimit(opts)
267 265 nodes.reverse()
268 266 if limit is not None:
269 267 nodes = nodes[:limit]
270 268 return graphmod.nodes(repo, nodes)
271 269
272 270 def goutgoing(ui, repo, dest=None, **opts):
273 271 """show the outgoing changesets alongside an ASCII revision graph
274 272
275 273 Print the outgoing changesets alongside a revision graph drawn with
276 274 ASCII characters.
277 275
278 276 Nodes printed as an @ character are parents of the working
279 277 directory.
280 278 """
281 279
282 280 check_unsupported_flags(opts)
283 281 o = hg._outgoing(ui, repo, dest, opts)
284 282 if o is None:
285 283 return
286 284
287 285 revdag = graphrevs(repo, o, opts)
288 286 displayer = show_changeset(ui, repo, opts, buffered=True)
289 287 showparents = [ctx.node() for ctx in repo[None].parents()]
290 288 generate(ui, revdag, displayer, showparents, asciiedges)
291 289
292 290 def gincoming(ui, repo, source="default", **opts):
293 291 """show the incoming changesets alongside an ASCII revision graph
294 292
295 293 Print the incoming changesets alongside a revision graph drawn with
296 294 ASCII characters.
297 295
298 296 Nodes printed as an @ character are parents of the working
299 297 directory.
300 298 """
301 299 def subreporecurse():
302 300 return 1
303 301
304 302 check_unsupported_flags(opts)
305 303 def display(other, chlist, displayer):
306 304 revdag = graphrevs(other, chlist, opts)
307 305 showparents = [ctx.node() for ctx in repo[None].parents()]
308 306 generate(ui, revdag, displayer, showparents, asciiedges)
309 307
310 308 hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
311 309
312 310 def uisetup(ui):
313 311 '''Initialize the extension.'''
314 312 _wrapcmd(ui, 'log', commands.table, graphlog)
315 313 _wrapcmd(ui, 'incoming', commands.table, gincoming)
316 314 _wrapcmd(ui, 'outgoing', commands.table, goutgoing)
317 315
318 316 def _wrapcmd(ui, cmd, table, wrapfn):
319 317 '''wrap the command'''
320 318 def graph(orig, *args, **kwargs):
321 319 if kwargs['graph']:
322 320 try:
323 321 return wrapfn(*args, **kwargs)
324 322 except TypeError, e:
325 323 if len(args) > wrapfn.func_code.co_argcount:
326 324 raise util.Abort(_('--graph option allows at most one file'))
327 325 raise
328 326 return orig(*args, **kwargs)
329 327 entry = extensions.wrapcommand(table, cmd, graph)
330 328 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
331 329
332 330 cmdtable = {
333 331 "glog":
334 332 (graphlog,
335 333 [('l', 'limit', '',
336 334 _('limit number of changes displayed'), _('NUM')),
337 335 ('p', 'patch', False, _('show patch')),
338 336 ('r', 'rev', [],
339 337 _('show the specified revision or range'), _('REV')),
340 338 ] + templateopts,
341 339 _('hg glog [OPTION]... [FILE]')),
342 340 }
@@ -1,122 +1,220 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 mercurial.node import nullrev
21 from mercurial.cmdutil import revrange
21 22
22 23 CHANGESET = 'C'
23 24
24 def revisions(repo, start, stop):
25 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
26
27 This generator function walks through the revision history from revision
28 start to revision stop (which must be less than or equal to start). It
29 returns a tuple for each node. The node and parent ids are arbitrary
30 integers which identify a node in the context of the graph returned.
25 def revisions(repo, start, end):
26 """DAG generator for revisions between start and end
31 27 """
32 cur = start
33 while cur >= stop:
34 ctx = repo[cur]
35 parents = set([p.rev() for p in ctx.parents() if p.rev() != nullrev])
36 yield (cur, CHANGESET, ctx, sorted(parents))
37 cur -= 1
28 revset = '%s:%s' % (start, end)
29 return dagwalker(repo, revrange(repo, [revset]))
38 30
39 31 def filerevs(repo, path, start, stop, limit=None):
40 """file cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
32 """DAG generator, which is limited by file passed
33 """
34 revset = '%s:%s and file("%s")' % (start, stop, path)
35 if limit:
36 revset = 'limit(%s, %s)' % (revset, limit)
37 return dagwalker(repo, revrange(repo, [revset]))
41 38
42 This generator function walks through the revision history of a single
43 file from revision start down to revision stop.
39 def dagwalker(repo, revs):
40 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
41
42 This generator function walks through revisions (which should be ordered
43 from bigger to lower). It returns a tuple for each node. The node and parent
44 ids are arbitrary integers which identify a node in the context of the graph
45 returned.
44 46 """
45 filerev = len(repo.file(path)) - 1
46 rev = stop + 1
47 count = 0
48 while filerev >= 0 and rev > stop:
49 fctx = repo.filectx(path, fileid=filerev)
50 parents = set([f.linkrev() for f in fctx.parents() if f.path() == path])
51 rev = fctx.rev()
52 if rev <= start:
53 yield (rev, CHANGESET, fctx.changectx(), sorted(parents))
54 count += 1
55 if count == limit:
56 break
57 filerev -= 1
47 if not revs:
48 return []
49
50 ns = [repo[r].node() for r in revs]
51 revdag = list(nodes(repo, ns))
52
53 cl = repo.changelog
54 lowestrev = min(revs)
55 gpcache = {}
56 leafs = {}
57
58 for i, (id, c, ctx, parents) in enumerate(revdag):
59 mpars = [p.rev() for p in ctx.parents() if
60 p.rev() != nullrev and p.rev() not in parents]
61 grandparents = []
62
63 for mpar in mpars:
64 gp = gpcache.get(mpar) or grandparent(cl, lowestrev, revs, mpar)
65 gpcache[mpar] = gp
66 if gp is None:
67 leafs.setdefault(mpar, []).append((i, ctx))
68 else:
69 grandparents.append(gp)
70
71 if grandparents:
72 for gp in grandparents:
73 if gp not in revdag[i][3]:
74 revdag[i][3].append(gp)
75
76 for parent, leafs in leafs.iteritems():
77 for i, ctx in leafs:
78 revdag[i][3].append(parent)
79
80 return revdag
58 81
59 82 def nodes(repo, nodes):
60 83 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
61 84
62 85 This generator function walks the given nodes. It only returns parents
63 86 that are in nodes, too.
64 87 """
65 88 include = set(nodes)
66 89 for node in nodes:
67 90 ctx = repo[node]
68 91 parents = set([p.rev() for p in ctx.parents() if p.node() in include])
69 92 yield (ctx.rev(), CHANGESET, ctx, sorted(parents))
70 93
71 94 def colored(dag):
72 95 """annotates a DAG with colored edge information
73 96
74 97 For each DAG node this function emits tuples::
75 98
76 99 (id, type, data, (col, color), [(col, nextcol, color)])
77 100
78 101 with the following new elements:
79 102
80 103 - Tuple (col, color) with column and color index for the current node
81 104 - A list of tuples indicating the edges between the current node and its
82 105 parents.
83 106 """
84 107 seen = []
85 108 colors = {}
86 109 newcolor = 1
87 110 for (cur, type, data, parents) in dag:
88 111
89 112 # Compute seen and next
90 113 if cur not in seen:
91 114 seen.append(cur) # new head
92 115 colors[cur] = newcolor
93 116 newcolor += 1
94 117
95 118 col = seen.index(cur)
96 119 color = colors.pop(cur)
97 120 next = seen[:]
98 121
99 122 # Add parents to next
100 123 addparents = [p for p in parents if p not in next]
101 124 next[col:col + 1] = addparents
102 125
103 126 # Set colors for the parents
104 127 for i, p in enumerate(addparents):
105 128 if not i:
106 129 colors[p] = color
107 130 else:
108 131 colors[p] = newcolor
109 132 newcolor += 1
110 133
111 134 # Add edges to the graph
112 135 edges = []
113 136 for ecol, eid in enumerate(seen):
114 137 if eid in next:
115 138 edges.append((ecol, next.index(eid), colors[eid]))
116 139 elif eid == cur:
117 140 for p in parents:
118 141 edges.append((ecol, next.index(p), color))
119 142
120 143 # Yield and move on
121 144 yield (cur, type, data, (col, color), edges)
122 145 seen = next
146
147
148 def grandparent(cl, lowestrev, roots, head):
149 """Return closest 'root' rev in topological path from 'roots' to 'head'.
150
151 Derived from revlog.revlog.nodesbetween, but only returns next rev
152 of topologically sorted list of all nodes N that satisfy of these
153 constraints:
154
155 1. N is a descendant of some node in 'roots'
156 2. N is an ancestor of 'head'
157 3. N is some node in 'roots' or nullrev
158
159 Every node is considered to be both a descendant and an ancestor
160 of itself, so every reachable node in 'roots' and 'head' will be
161 included in 'nodes'.
162 """
163 ancestors = set()
164 # Start at the top and keep marking parents until we're done.
165 revstotag = set([head])
166 revstotag.discard(nullrev)
167 llowestrev = max(nullrev, lowestrev)
168
169 while revstotag:
170 r = revstotag.pop()
171 # A node's revision number represents its place in a
172 # topologically sorted list of nodes.
173 if r >= llowestrev:
174 if r not in ancestors:
175 # If we are possibly a descendent of one of the roots
176 # and we haven't already been marked as an ancestor
177 ancestors.add(r) # Mark as ancestor
178 # Add non-nullrev parents to list of nodes to tag.
179 revstotag.update([p for p in cl.parentrevs(r)])
180
181 if not ancestors:
182 return
183 # Now that we have our set of ancestors, we want to remove any
184 # roots that are not ancestors.
185
186 # If one of the roots was nullrev, everything is included anyway.
187 if lowestrev > nullrev:
188 # But, since we weren't, let's recompute the lowest rev to not
189 # include roots that aren't ancestors.
190
191 # Filter out roots that aren't ancestors of heads
192 _roots = ancestors.intersection(roots)
193 if not _roots:
194 return
195 # Recompute the lowest revision
196 lowestrev = min(roots)
197 else:
198 # We are descending from nullrev, and don't need to care about
199 # any other roots.
200 lowestrev = nullrev
201 _roots = [nullrev]
202
203 # The roots are just the descendants.
204 # Don't start at nullrev since we don't want nullrev in our output list,
205 # and if nullrev shows up in descedents, empty parents will look like
206 # they're descendents.
207 lowestrevisnullrev = (lowestrev == nullrev)
208 for r in xrange(head - 1, max(lowestrev, -1) - 1, -1):
209 if lowestrevisnullrev or r in _roots:
210 pass
211 elif _roots.issuperset(cl.parentrevs(r)):
212 # A node is a descendent if either of its parents are
213 # descendents. (We seeded the dependents list with the roots
214 # up there, remember?)
215 _roots.add(r)
216 else:
217 continue
218 if r in ancestors:
219 # Only include nodes that are both descendents and ancestors.
220 return r
@@ -1,321 +1,321 b''
1 1 $ echo "[extensions]" >> $HGRCPATH
2 2 $ echo "graphlog=" >> $HGRCPATH
3 3
4 4 overwritten and appended files
5 5
6 6 $ rm -rf repo
7 7 $ hg init repo
8 8 $ cd repo
9 9 $ hg debugbuilddag '+2:f +3:p2 @temp <f+4 @default /p2 +2' -q -oa
10 10 dag
11 11 $ hg debugdag -t -b
12 12 +2:f
13 13 +3:p2
14 14 @temp*f+3
15 15 @default*/p2+2:tip
16 16 tip
17 17 $ hg id
18 18 f96e381c614c tip
19 19 glog
20 20 $ hg glog --template '{rev}: {desc} [{branches}] @ {date}\n'
21 21 @ 11: r11 [] @ 11.00
22 22 |
23 23 o 10: r10 [] @ 10.00
24 24 |
25 25 o 9: r9 [] @ 9.00
26 26 |\
27 27 | o 8: r8 [temp] @ 8.00
28 28 | |
29 29 | o 7: r7 [temp] @ 7.00
30 30 | |
31 31 | o 6: r6 [temp] @ 6.00
32 32 | |
33 33 | o 5: r5 [temp] @ 5.00
34 34 | |
35 35 o | 4: r4 [] @ 4.00
36 36 | |
37 37 o | 3: r3 [] @ 3.00
38 38 | |
39 39 o | 2: r2 [] @ 2.00
40 40 |/
41 41 o 1: r1 [] @ 1.00
42 42 |
43 43 o 0: r0 [] @ 0.00
44 44
45 45 glog of
46 46 $ hg glog --template '{rev}: {desc} [{branches}]\n' of
47 47 @ 11: r11 []
48 48 |
49 49 o 10: r10 []
50 50 |
51 51 o 9: r9 []
52 52 |\
53 53 | o 8: r8 [temp]
54 54 | |
55 55 | o 7: r7 [temp]
56 56 | |
57 57 | o 6: r6 [temp]
58 58 | |
59 59 | o 5: r5 [temp]
60 60 | |
61 61 o | 4: r4 []
62 62 | |
63 63 o | 3: r3 []
64 64 | |
65 65 o | 2: r2 []
66 66 |/
67 67 o 1: r1 []
68 68 |
69 69 o 0: r0 []
70 70
71 71 glog af
72 72 $ hg glog --template '{rev}: {desc} [{branches}]\n' af
73 73 @ 11: r11 []
74 74 |
75 75 o 10: r10 []
76 76 |
77 77 o 9: r9 []
78 78 |\
79 79 | o 8: r8 [temp]
80 80 | |
81 81 | o 7: r7 [temp]
82 82 | |
83 83 | o 6: r6 [temp]
84 84 | |
85 85 | o 5: r5 [temp]
86 86 | |
87 87 o | 4: r4 []
88 88 | |
89 89 o | 3: r3 []
90 90 | |
91 91 o | 2: r2 []
92 92 |/
93 93 o 1: r1 []
94 94 |
95 95 o 0: r0 []
96 96
97 97 tags
98 98 $ hg tags -v
99 99 tip 11:f96e381c614c
100 100 p2 4:d9d6db981b55 local
101 101 f 1:73253def624e local
102 102 cat of
103 103 $ hg cat of
104 104 r11
105 105 cat af
106 106 $ hg cat af
107 107 r0
108 108 r1
109 109 r5
110 110 r6
111 111 r7
112 112 r8
113 113 r9
114 114 r10
115 115 r11
116 116 $ cd ..
117 117
118 118 new and mergeable files
119 119
120 120 $ rm -rf repo
121 121 $ hg init repo
122 122 $ cd repo
123 123 $ hg debugbuilddag '+2:f +3:p2 @temp <f+4 @default /p2 +2' -q -mn
124 124 dag
125 125 $ hg debugdag -t -b
126 126 +2:f
127 127 +3:p2
128 128 @temp*f+3
129 129 @default*/p2+2:tip
130 130 tip
131 131 $ hg id
132 132 9c5ce9b70771 tip
133 133 glog
134 134 $ hg glog --template '{rev}: {desc} [{branches}] @ {date}\n'
135 135 @ 11: r11 [] @ 11.00
136 136 |
137 137 o 10: r10 [] @ 10.00
138 138 |
139 139 o 9: r9 [] @ 9.00
140 140 |\
141 141 | o 8: r8 [temp] @ 8.00
142 142 | |
143 143 | o 7: r7 [temp] @ 7.00
144 144 | |
145 145 | o 6: r6 [temp] @ 6.00
146 146 | |
147 147 | o 5: r5 [temp] @ 5.00
148 148 | |
149 149 o | 4: r4 [] @ 4.00
150 150 | |
151 151 o | 3: r3 [] @ 3.00
152 152 | |
153 153 o | 2: r2 [] @ 2.00
154 154 |/
155 155 o 1: r1 [] @ 1.00
156 156 |
157 157 o 0: r0 [] @ 0.00
158 158
159 159 glog mf
160 160 $ hg glog --template '{rev}: {desc} [{branches}]\n' mf
161 161 @ 11: r11 []
162 162 |
163 163 o 10: r10 []
164 164 |
165 165 o 9: r9 []
166 166 |\
167 167 | o 8: r8 [temp]
168 168 | |
169 169 | o 7: r7 [temp]
170 170 | |
171 171 | o 6: r6 [temp]
172 172 | |
173 173 | o 5: r5 [temp]
174 174 | |
175 175 o | 4: r4 []
176 176 | |
177 177 o | 3: r3 []
178 178 | |
179 179 o | 2: r2 []
180 180 |/
181 181 o 1: r1 []
182 182 |
183 183 o 0: r0 []
184 184
185 185
186 186 man r4
187 187 $ hg manifest -r4
188 188 mf
189 189 nf0
190 190 nf1
191 191 nf2
192 192 nf3
193 193 nf4
194 194 cat r4 mf
195 195 $ hg cat -r4 mf
196 196 0 r0
197 197 1
198 198 2 r1
199 199 3
200 200 4 r2
201 201 5
202 202 6 r3
203 203 7
204 204 8 r4
205 205 9
206 206 10
207 207 11
208 208 12
209 209 13
210 210 14
211 211 15
212 212 16
213 213 17
214 214 18
215 215 19
216 216 20
217 217 21
218 218 22
219 219 23
220 220 man r8
221 221 $ hg manifest -r8
222 222 mf
223 223 nf0
224 224 nf1
225 225 nf5
226 226 nf6
227 227 nf7
228 228 nf8
229 229 cat r8 mf
230 230 $ hg cat -r8 mf
231 231 0 r0
232 232 1
233 233 2 r1
234 234 3
235 235 4
236 236 5
237 237 6
238 238 7
239 239 8
240 240 9
241 241 10 r5
242 242 11
243 243 12 r6
244 244 13
245 245 14 r7
246 246 15
247 247 16 r8
248 248 17
249 249 18
250 250 19
251 251 20
252 252 21
253 253 22
254 254 23
255 255 man
256 256 $ hg manifest
257 257 mf
258 258 nf0
259 259 nf1
260 260 nf10
261 261 nf11
262 262 nf2
263 263 nf3
264 264 nf4
265 265 nf5
266 266 nf6
267 267 nf7
268 268 nf8
269 269 nf9
270 270 cat mf
271 271 $ hg cat mf
272 272 0 r0
273 273 1
274 274 2 r1
275 275 3
276 276 4 r2
277 277 5
278 278 6 r3
279 279 7
280 280 8 r4
281 281 9
282 282 10 r5
283 283 11
284 284 12 r6
285 285 13
286 286 14 r7
287 287 15
288 288 16 r8
289 289 17
290 290 18 r9
291 291 19
292 292 20 r10
293 293 21
294 294 22 r11
295 295 23
296 296 $ cd ..
297 297
298 298 command
299 299
300 300 $ rm -rf repo
301 301 $ hg init repo
302 302 $ cd repo
303 303 $ hg debugbuilddag '+2 !"touch X" +2' -q -o
304 304 dag
305 305 $ hg debugdag -t -b
306 306 +4:tip
307 307 glog
308 308 $ hg glog --template '{rev}: {desc} [{branches}]\n'
309 309 @ 3: r3 []
310 310 |
311 311 o 2: r2 []
312 312 |
313 313 o 1: r1 []
314 314 |
315 315 o 0: r0 []
316 316
317 317 glog X
318 318 $ hg glog --template '{rev}: {desc} [{branches}]\n' X
319 319 o 2: r2 []
320
320 |
321 321 $ cd ..
@@ -1,930 +1,930 b''
1 1 @ (34) head
2 2 |
3 3 | o (33) head
4 4 | |
5 5 o | (32) expand
6 6 |\ \
7 7 | o \ (31) expand
8 8 | |\ \
9 9 | | o \ (30) expand
10 10 | | |\ \
11 11 | | | o | (29) regular commit
12 12 | | | | |
13 13 | | o | | (28) merge zero known
14 14 | | |\ \ \
15 15 o | | | | | (27) collapse
16 16 |/ / / / /
17 17 | | o---+ (26) merge one known; far right
18 18 | | | | |
19 19 +---o | | (25) merge one known; far left
20 20 | | | | |
21 21 | | o | | (24) merge one known; immediate right
22 22 | | |\| |
23 23 | | o | | (23) merge one known; immediate left
24 24 | |/| | |
25 25 +---o---+ (22) merge two known; one far left, one far right
26 26 | | / /
27 27 o | | | (21) expand
28 28 |\ \ \ \
29 29 | o---+-+ (20) merge two known; two far right
30 30 | / / /
31 31 o | | | (19) expand
32 32 |\ \ \ \
33 33 +---+---o (18) merge two known; two far left
34 34 | | | |
35 35 | o | | (17) expand
36 36 | |\ \ \
37 37 | | o---+ (16) merge two known; one immediate right, one near right
38 38 | | |/ /
39 39 o | | | (15) expand
40 40 |\ \ \ \
41 41 | o-----+ (14) merge two known; one immediate right, one far right
42 42 | |/ / /
43 43 o | | | (13) expand
44 44 |\ \ \ \
45 45 +---o | | (12) merge two known; one immediate right, one far left
46 46 | | |/ /
47 47 | o | | (11) expand
48 48 | |\ \ \
49 49 | | o---+ (10) merge two known; one immediate left, one near right
50 50 | |/ / /
51 51 o | | | (9) expand
52 52 |\ \ \ \
53 53 | o-----+ (8) merge two known; one immediate left, one far right
54 54 |/ / / /
55 55 o | | | (7) expand
56 56 |\ \ \ \
57 57 +---o | | (6) merge two known; one immediate left, one far left
58 58 | |/ / /
59 59 | o | | (5) expand
60 60 | |\ \ \
61 61 | | o | | (4) merge two known; one immediate left, one immediate right
62 62 | |/|/ /
63 63 | o / / (3) collapse
64 64 |/ / /
65 65 o / / (2) collapse
66 66 |/ /
67 67 o / (1) collapse
68 68 |/
69 69 o (0) root
70 70
71 71
72 72 $ "$TESTDIR/hghave" no-outer-repo || exit 80
73 73
74 74 $ commit()
75 75 > {
76 76 > rev=$1
77 77 > msg=$2
78 78 > shift 2
79 79 > if [ "$#" -gt 0 ]; then
80 80 > hg debugsetparents "$@"
81 81 > fi
82 82 > echo $rev > a
83 83 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
84 84 > }
85 85
86 86 $ echo "[extensions]" >> $HGRCPATH
87 87 $ echo "graphlog=" >> $HGRCPATH
88 88
89 89 $ hg init repo
90 90 $ cd repo
91 91
92 92 Empty repo:
93 93
94 94 $ hg glog
95 95
96 96
97 97 Building DAG:
98 98
99 99 $ commit 0 "root"
100 100 $ commit 1 "collapse" 0
101 101 $ commit 2 "collapse" 1
102 102 $ commit 3 "collapse" 2
103 103 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
104 104 $ commit 5 "expand" 3 4
105 105 $ commit 6 "merge two known; one immediate left, one far left" 2 5
106 106 $ commit 7 "expand" 2 5
107 107 $ commit 8 "merge two known; one immediate left, one far right" 0 7
108 108 $ commit 9 "expand" 7 8
109 109 $ commit 10 "merge two known; one immediate left, one near right" 0 6
110 110 $ commit 11 "expand" 6 10
111 111 $ commit 12 "merge two known; one immediate right, one far left" 1 9
112 112 $ commit 13 "expand" 9 11
113 113 $ commit 14 "merge two known; one immediate right, one far right" 0 12
114 114 $ commit 15 "expand" 13 14
115 115 $ commit 16 "merge two known; one immediate right, one near right" 0 1
116 116 $ commit 17 "expand" 12 16
117 117 $ commit 18 "merge two known; two far left" 1 15
118 118 $ commit 19 "expand" 15 17
119 119 $ commit 20 "merge two known; two far right" 0 18
120 120 $ commit 21 "expand" 19 20
121 121 $ commit 22 "merge two known; one far left, one far right" 18 21
122 122 $ commit 23 "merge one known; immediate left" 1 22
123 123 $ commit 24 "merge one known; immediate right" 0 23
124 124 $ commit 25 "merge one known; far left" 21 24
125 125 $ commit 26 "merge one known; far right" 18 25
126 126 $ commit 27 "collapse" 21
127 127 $ commit 28 "merge zero known" 1 26
128 128 $ commit 29 "regular commit" 0
129 129 $ commit 30 "expand" 28 29
130 130 $ commit 31 "expand" 21 30
131 131 $ commit 32 "expand" 27 31
132 132 $ commit 33 "head" 18
133 133 $ commit 34 "head" 32
134 134
135 135
136 136 $ hg glog -q
137 137 @ 34:fea3ac5810e0
138 138 |
139 139 | o 33:68608f5145f9
140 140 | |
141 141 o | 32:d06dffa21a31
142 142 |\ \
143 143 | o \ 31:621d83e11f67
144 144 | |\ \
145 145 | | o \ 30:6e11cd4b648f
146 146 | | |\ \
147 147 | | | o | 29:cd9bb2be7593
148 148 | | | | |
149 149 | | o | | 28:44ecd0b9ae99
150 150 | | |\ \ \
151 151 o | | | | | 27:886ed638191b
152 152 |/ / / / /
153 153 | | o---+ 26:7f25b6c2f0b9
154 154 | | | | |
155 155 +---o | | 25:91da8ed57247
156 156 | | | | |
157 157 | | o | | 24:a9c19a3d96b7
158 158 | | |\| |
159 159 | | o | | 23:a01cddf0766d
160 160 | |/| | |
161 161 +---o---+ 22:e0d9cccacb5d
162 162 | | / /
163 163 o | | | 21:d42a756af44d
164 164 |\ \ \ \
165 165 | o---+-+ 20:d30ed6450e32
166 166 | / / /
167 167 o | | | 19:31ddc2c1573b
168 168 |\ \ \ \
169 169 +---+---o 18:1aa84d96232a
170 170 | | | |
171 171 | o | | 17:44765d7c06e0
172 172 | |\ \ \
173 173 | | o---+ 16:3677d192927d
174 174 | | |/ /
175 175 o | | | 15:1dda3f72782d
176 176 |\ \ \ \
177 177 | o-----+ 14:8eac370358ef
178 178 | |/ / /
179 179 o | | | 13:22d8966a97e3
180 180 |\ \ \ \
181 181 +---o | | 12:86b91144a6e9
182 182 | | |/ /
183 183 | o | | 11:832d76e6bdf2
184 184 | |\ \ \
185 185 | | o---+ 10:74c64d036d72
186 186 | |/ / /
187 187 o | | | 9:7010c0af0a35
188 188 |\ \ \ \
189 189 | o-----+ 8:7a0b11f71937
190 190 |/ / / /
191 191 o | | | 7:b632bb1b1224
192 192 |\ \ \ \
193 193 +---o | | 6:b105a072e251
194 194 | |/ / /
195 195 | o | | 5:4409d547b708
196 196 | |\ \ \
197 197 | | o | | 4:26a8bac39d9f
198 198 | |/|/ /
199 199 | o / / 3:27eef8ed80b4
200 200 |/ / /
201 201 o / / 2:3d9a33b8d1e1
202 202 |/ /
203 203 o / 1:6db2ef61d156
204 204 |/
205 205 o 0:e6eb3150255d
206 206
207 207
208 208 $ hg glog
209 209 @ changeset: 34:fea3ac5810e0
210 210 | tag: tip
211 211 | parent: 32:d06dffa21a31
212 212 | user: test
213 213 | date: Thu Jan 01 00:00:34 1970 +0000
214 214 | summary: (34) head
215 215 |
216 216 | o changeset: 33:68608f5145f9
217 217 | | parent: 18:1aa84d96232a
218 218 | | user: test
219 219 | | date: Thu Jan 01 00:00:33 1970 +0000
220 220 | | summary: (33) head
221 221 | |
222 222 o | changeset: 32:d06dffa21a31
223 223 |\ \ parent: 27:886ed638191b
224 224 | | | parent: 31:621d83e11f67
225 225 | | | user: test
226 226 | | | date: Thu Jan 01 00:00:32 1970 +0000
227 227 | | | summary: (32) expand
228 228 | | |
229 229 | o | changeset: 31:621d83e11f67
230 230 | |\ \ parent: 21:d42a756af44d
231 231 | | | | parent: 30:6e11cd4b648f
232 232 | | | | user: test
233 233 | | | | date: Thu Jan 01 00:00:31 1970 +0000
234 234 | | | | summary: (31) expand
235 235 | | | |
236 236 | | o | changeset: 30:6e11cd4b648f
237 237 | | |\ \ parent: 28:44ecd0b9ae99
238 238 | | | | | parent: 29:cd9bb2be7593
239 239 | | | | | user: test
240 240 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
241 241 | | | | | summary: (30) expand
242 242 | | | | |
243 243 | | | o | changeset: 29:cd9bb2be7593
244 244 | | | | | parent: 0:e6eb3150255d
245 245 | | | | | user: test
246 246 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
247 247 | | | | | summary: (29) regular commit
248 248 | | | | |
249 249 | | o | | changeset: 28:44ecd0b9ae99
250 250 | | |\ \ \ parent: 1:6db2ef61d156
251 251 | | | | | | parent: 26:7f25b6c2f0b9
252 252 | | | | | | user: test
253 253 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
254 254 | | | | | | summary: (28) merge zero known
255 255 | | | | | |
256 256 o | | | | | changeset: 27:886ed638191b
257 257 |/ / / / / parent: 21:d42a756af44d
258 258 | | | | | user: test
259 259 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
260 260 | | | | | summary: (27) collapse
261 261 | | | | |
262 262 | | o---+ changeset: 26:7f25b6c2f0b9
263 263 | | | | | parent: 18:1aa84d96232a
264 264 | | | | | parent: 25:91da8ed57247
265 265 | | | | | user: test
266 266 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
267 267 | | | | | summary: (26) merge one known; far right
268 268 | | | | |
269 269 +---o | | changeset: 25:91da8ed57247
270 270 | | | | | parent: 21:d42a756af44d
271 271 | | | | | parent: 24:a9c19a3d96b7
272 272 | | | | | user: test
273 273 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
274 274 | | | | | summary: (25) merge one known; far left
275 275 | | | | |
276 276 | | o | | changeset: 24:a9c19a3d96b7
277 277 | | |\| | parent: 0:e6eb3150255d
278 278 | | | | | parent: 23:a01cddf0766d
279 279 | | | | | user: test
280 280 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
281 281 | | | | | summary: (24) merge one known; immediate right
282 282 | | | | |
283 283 | | o | | changeset: 23:a01cddf0766d
284 284 | |/| | | parent: 1:6db2ef61d156
285 285 | | | | | parent: 22:e0d9cccacb5d
286 286 | | | | | user: test
287 287 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
288 288 | | | | | summary: (23) merge one known; immediate left
289 289 | | | | |
290 290 +---o---+ changeset: 22:e0d9cccacb5d
291 291 | | | | parent: 18:1aa84d96232a
292 292 | | / / parent: 21:d42a756af44d
293 293 | | | | user: test
294 294 | | | | date: Thu Jan 01 00:00:22 1970 +0000
295 295 | | | | summary: (22) merge two known; one far left, one far right
296 296 | | | |
297 297 o | | | changeset: 21:d42a756af44d
298 298 |\ \ \ \ parent: 19:31ddc2c1573b
299 299 | | | | | parent: 20:d30ed6450e32
300 300 | | | | | user: test
301 301 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
302 302 | | | | | summary: (21) expand
303 303 | | | | |
304 304 | o---+-+ changeset: 20:d30ed6450e32
305 305 | | | | parent: 0:e6eb3150255d
306 306 | / / / parent: 18:1aa84d96232a
307 307 | | | | user: test
308 308 | | | | date: Thu Jan 01 00:00:20 1970 +0000
309 309 | | | | summary: (20) merge two known; two far right
310 310 | | | |
311 311 o | | | changeset: 19:31ddc2c1573b
312 312 |\ \ \ \ parent: 15:1dda3f72782d
313 313 | | | | | parent: 17:44765d7c06e0
314 314 | | | | | user: test
315 315 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
316 316 | | | | | summary: (19) expand
317 317 | | | | |
318 318 +---+---o changeset: 18:1aa84d96232a
319 319 | | | | parent: 1:6db2ef61d156
320 320 | | | | parent: 15:1dda3f72782d
321 321 | | | | user: test
322 322 | | | | date: Thu Jan 01 00:00:18 1970 +0000
323 323 | | | | summary: (18) merge two known; two far left
324 324 | | | |
325 325 | o | | changeset: 17:44765d7c06e0
326 326 | |\ \ \ parent: 12:86b91144a6e9
327 327 | | | | | parent: 16:3677d192927d
328 328 | | | | | user: test
329 329 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
330 330 | | | | | summary: (17) expand
331 331 | | | | |
332 332 | | o---+ changeset: 16:3677d192927d
333 333 | | | | | parent: 0:e6eb3150255d
334 334 | | |/ / parent: 1:6db2ef61d156
335 335 | | | | user: test
336 336 | | | | date: Thu Jan 01 00:00:16 1970 +0000
337 337 | | | | summary: (16) merge two known; one immediate right, one near right
338 338 | | | |
339 339 o | | | changeset: 15:1dda3f72782d
340 340 |\ \ \ \ parent: 13:22d8966a97e3
341 341 | | | | | parent: 14:8eac370358ef
342 342 | | | | | user: test
343 343 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
344 344 | | | | | summary: (15) expand
345 345 | | | | |
346 346 | o-----+ changeset: 14:8eac370358ef
347 347 | | | | | parent: 0:e6eb3150255d
348 348 | |/ / / parent: 12:86b91144a6e9
349 349 | | | | user: test
350 350 | | | | date: Thu Jan 01 00:00:14 1970 +0000
351 351 | | | | summary: (14) merge two known; one immediate right, one far right
352 352 | | | |
353 353 o | | | changeset: 13:22d8966a97e3
354 354 |\ \ \ \ parent: 9:7010c0af0a35
355 355 | | | | | parent: 11:832d76e6bdf2
356 356 | | | | | user: test
357 357 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
358 358 | | | | | summary: (13) expand
359 359 | | | | |
360 360 +---o | | changeset: 12:86b91144a6e9
361 361 | | |/ / parent: 1:6db2ef61d156
362 362 | | | | parent: 9:7010c0af0a35
363 363 | | | | user: test
364 364 | | | | date: Thu Jan 01 00:00:12 1970 +0000
365 365 | | | | summary: (12) merge two known; one immediate right, one far left
366 366 | | | |
367 367 | o | | changeset: 11:832d76e6bdf2
368 368 | |\ \ \ parent: 6:b105a072e251
369 369 | | | | | parent: 10:74c64d036d72
370 370 | | | | | user: test
371 371 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
372 372 | | | | | summary: (11) expand
373 373 | | | | |
374 374 | | o---+ changeset: 10:74c64d036d72
375 375 | | | | | parent: 0:e6eb3150255d
376 376 | |/ / / parent: 6:b105a072e251
377 377 | | | | user: test
378 378 | | | | date: Thu Jan 01 00:00:10 1970 +0000
379 379 | | | | summary: (10) merge two known; one immediate left, one near right
380 380 | | | |
381 381 o | | | changeset: 9:7010c0af0a35
382 382 |\ \ \ \ parent: 7:b632bb1b1224
383 383 | | | | | parent: 8:7a0b11f71937
384 384 | | | | | user: test
385 385 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
386 386 | | | | | summary: (9) expand
387 387 | | | | |
388 388 | o-----+ changeset: 8:7a0b11f71937
389 389 | | | | | parent: 0:e6eb3150255d
390 390 |/ / / / parent: 7:b632bb1b1224
391 391 | | | | user: test
392 392 | | | | date: Thu Jan 01 00:00:08 1970 +0000
393 393 | | | | summary: (8) merge two known; one immediate left, one far right
394 394 | | | |
395 395 o | | | changeset: 7:b632bb1b1224
396 396 |\ \ \ \ parent: 2:3d9a33b8d1e1
397 397 | | | | | parent: 5:4409d547b708
398 398 | | | | | user: test
399 399 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
400 400 | | | | | summary: (7) expand
401 401 | | | | |
402 402 +---o | | changeset: 6:b105a072e251
403 403 | |/ / / parent: 2:3d9a33b8d1e1
404 404 | | | | parent: 5:4409d547b708
405 405 | | | | user: test
406 406 | | | | date: Thu Jan 01 00:00:06 1970 +0000
407 407 | | | | summary: (6) merge two known; one immediate left, one far left
408 408 | | | |
409 409 | o | | changeset: 5:4409d547b708
410 410 | |\ \ \ parent: 3:27eef8ed80b4
411 411 | | | | | parent: 4:26a8bac39d9f
412 412 | | | | | user: test
413 413 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
414 414 | | | | | summary: (5) expand
415 415 | | | | |
416 416 | | o | | changeset: 4:26a8bac39d9f
417 417 | |/|/ / parent: 1:6db2ef61d156
418 418 | | | | parent: 3:27eef8ed80b4
419 419 | | | | user: test
420 420 | | | | date: Thu Jan 01 00:00:04 1970 +0000
421 421 | | | | summary: (4) merge two known; one immediate left, one immediate right
422 422 | | | |
423 423 | o | | changeset: 3:27eef8ed80b4
424 424 |/ / / user: test
425 425 | | | date: Thu Jan 01 00:00:03 1970 +0000
426 426 | | | summary: (3) collapse
427 427 | | |
428 428 o | | changeset: 2:3d9a33b8d1e1
429 429 |/ / user: test
430 430 | | date: Thu Jan 01 00:00:02 1970 +0000
431 431 | | summary: (2) collapse
432 432 | |
433 433 o | changeset: 1:6db2ef61d156
434 434 |/ user: test
435 435 | date: Thu Jan 01 00:00:01 1970 +0000
436 436 | summary: (1) collapse
437 437 |
438 438 o changeset: 0:e6eb3150255d
439 439 user: test
440 440 date: Thu Jan 01 00:00:00 1970 +0000
441 441 summary: (0) root
442 442
443 443
444 444 File glog:
445 445 $ hg glog a
446 446 @ changeset: 34:fea3ac5810e0
447 447 | tag: tip
448 448 | parent: 32:d06dffa21a31
449 449 | user: test
450 450 | date: Thu Jan 01 00:00:34 1970 +0000
451 451 | summary: (34) head
452 452 |
453 453 | o changeset: 33:68608f5145f9
454 454 | | parent: 18:1aa84d96232a
455 455 | | user: test
456 456 | | date: Thu Jan 01 00:00:33 1970 +0000
457 457 | | summary: (33) head
458 458 | |
459 459 o | changeset: 32:d06dffa21a31
460 460 |\ \ parent: 27:886ed638191b
461 461 | | | parent: 31:621d83e11f67
462 462 | | | user: test
463 463 | | | date: Thu Jan 01 00:00:32 1970 +0000
464 464 | | | summary: (32) expand
465 465 | | |
466 | o | changeset: 31:621d83e11f67
467 | | | parent: 21:d42a756af44d
468 | | | parent: 30:6e11cd4b648f
469 | | | user: test
470 | | | date: Thu Jan 01 00:00:31 1970 +0000
471 | | | summary: (31) expand
472 | | |
473 | o | changeset: 30:6e11cd4b648f
474 | |\ \ parent: 28:44ecd0b9ae99
475 | | | | parent: 29:cd9bb2be7593
476 | | | | user: test
477 | | | | date: Thu Jan 01 00:00:30 1970 +0000
478 | | | | summary: (30) expand
479 | | | |
480 | | o | changeset: 29:cd9bb2be7593
481 | | | | parent: 0:e6eb3150255d
482 | | | | user: test
483 | | | | date: Thu Jan 01 00:00:29 1970 +0000
484 | | | | summary: (29) regular commit
485 | | | |
486 | o | | changeset: 28:44ecd0b9ae99
487 | | | | parent: 1:6db2ef61d156
488 | | | | parent: 26:7f25b6c2f0b9
466 | o | changeset: 31:621d83e11f67
467 | |\ \ parent: 21:d42a756af44d
468 | | | | parent: 30:6e11cd4b648f
489 469 | | | | user: test
490 | | | | date: Thu Jan 01 00:00:28 1970 +0000
491 | | | | summary: (28) merge zero known
492 | | | |
493 o | | | changeset: 27:886ed638191b
494 | | | | parent: 21:d42a756af44d
495 | | | | user: test
496 | | | | date: Thu Jan 01 00:00:27 1970 +0000
497 | | | | summary: (27) collapse
498 | | | |
499 | o | | changeset: 26:7f25b6c2f0b9
500 | | | | parent: 18:1aa84d96232a
501 | | | | parent: 25:91da8ed57247
502 | | | | user: test
503 | | | | date: Thu Jan 01 00:00:26 1970 +0000
504 | | | | summary: (26) merge one known; far right
505 | | | |
506 | o | | changeset: 25:91da8ed57247
507 | | | | parent: 21:d42a756af44d
508 | | | | parent: 24:a9c19a3d96b7
509 | | | | user: test
510 | | | | date: Thu Jan 01 00:00:25 1970 +0000
511 | | | | summary: (25) merge one known; far left
512 | | | |
513 | o | | changeset: 24:a9c19a3d96b7
514 | | | | parent: 0:e6eb3150255d
515 | | | | parent: 23:a01cddf0766d
516 | | | | user: test
517 | | | | date: Thu Jan 01 00:00:24 1970 +0000
518 | | | | summary: (24) merge one known; immediate right
470 | | | | date: Thu Jan 01 00:00:31 1970 +0000
471 | | | | summary: (31) expand
519 472 | | | |
520 | o | | changeset: 23:a01cddf0766d
521 | | | | parent: 1:6db2ef61d156
522 | | | | parent: 22:e0d9cccacb5d
523 | | | | user: test
524 | | | | date: Thu Jan 01 00:00:23 1970 +0000
525 | | | | summary: (23) merge one known; immediate left
526 | | | |
527 | o | | changeset: 22:e0d9cccacb5d
528 |/ / / parent: 18:1aa84d96232a
529 | | | parent: 21:d42a756af44d
530 | | | user: test
531 | | | date: Thu Jan 01 00:00:22 1970 +0000
532 | | | summary: (22) merge two known; one far left, one far right
533 | | |
534 o | | changeset: 21:d42a756af44d
535 |\ \ \ parent: 19:31ddc2c1573b
536 | | | | parent: 20:d30ed6450e32
537 | | | | user: test
538 | | | | date: Thu Jan 01 00:00:21 1970 +0000
539 | | | | summary: (21) expand
473 | | o | changeset: 30:6e11cd4b648f
474 | | |\ \ parent: 28:44ecd0b9ae99
475 | | | | | parent: 29:cd9bb2be7593
476 | | | | | user: test
477 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
478 | | | | | summary: (30) expand
479 | | | | |
480 | | | o | changeset: 29:cd9bb2be7593
481 | | | | | parent: 0:e6eb3150255d
482 | | | | | user: test
483 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
484 | | | | | summary: (29) regular commit
485 | | | | |
486 | | o | | changeset: 28:44ecd0b9ae99
487 | | |\ \ \ parent: 1:6db2ef61d156
488 | | | | | | parent: 26:7f25b6c2f0b9
489 | | | | | | user: test
490 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
491 | | | | | | summary: (28) merge zero known
492 | | | | | |
493 o | | | | | changeset: 27:886ed638191b
494 |/ / / / / parent: 21:d42a756af44d
495 | | | | | user: test
496 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
497 | | | | | summary: (27) collapse
498 | | | | |
499 | | o---+ changeset: 26:7f25b6c2f0b9
500 | | | | | parent: 18:1aa84d96232a
501 | | | | | parent: 25:91da8ed57247
502 | | | | | user: test
503 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
504 | | | | | summary: (26) merge one known; far right
505 | | | | |
506 +---o | | changeset: 25:91da8ed57247
507 | | | | | parent: 21:d42a756af44d
508 | | | | | parent: 24:a9c19a3d96b7
509 | | | | | user: test
510 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
511 | | | | | summary: (25) merge one known; far left
512 | | | | |
513 | | o | | changeset: 24:a9c19a3d96b7
514 | | |\| | parent: 0:e6eb3150255d
515 | | | | | parent: 23:a01cddf0766d
516 | | | | | user: test
517 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
518 | | | | | summary: (24) merge one known; immediate right
519 | | | | |
520 | | o | | changeset: 23:a01cddf0766d
521 | |/| | | parent: 1:6db2ef61d156
522 | | | | | parent: 22:e0d9cccacb5d
523 | | | | | user: test
524 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
525 | | | | | summary: (23) merge one known; immediate left
526 | | | | |
527 +---o---+ changeset: 22:e0d9cccacb5d
528 | | | | parent: 18:1aa84d96232a
529 | | / / parent: 21:d42a756af44d
530 | | | | user: test
531 | | | | date: Thu Jan 01 00:00:22 1970 +0000
532 | | | | summary: (22) merge two known; one far left, one far right
540 533 | | | |
541 | o---+ changeset: 20:d30ed6450e32
542 | | | parent: 0:e6eb3150255d
543 | / / parent: 18:1aa84d96232a
544 | | | user: test
545 | | | date: Thu Jan 01 00:00:20 1970 +0000
546 | | | summary: (20) merge two known; two far right
547 | | |
548 o | | changeset: 19:31ddc2c1573b
549 |\ \ \ parent: 15:1dda3f72782d
550 | | | | parent: 17:44765d7c06e0
551 | | | | user: test
552 | | | | date: Thu Jan 01 00:00:19 1970 +0000
553 | | | | summary: (19) expand
534 o | | | changeset: 21:d42a756af44d
535 |\ \ \ \ parent: 19:31ddc2c1573b
536 | | | | | parent: 20:d30ed6450e32
537 | | | | | user: test
538 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
539 | | | | | summary: (21) expand
540 | | | | |
541 | o---+-+ changeset: 20:d30ed6450e32
542 | | | | parent: 0:e6eb3150255d
543 | / / / parent: 18:1aa84d96232a
544 | | | | user: test
545 | | | | date: Thu Jan 01 00:00:20 1970 +0000
546 | | | | summary: (20) merge two known; two far right
554 547 | | | |
555 +-----o changeset: 18:1aa84d96232a
556 | | | parent: 1:6db2ef61d156
557 | | | parent: 15:1dda3f72782d
558 | | | user: test
559 | | | date: Thu Jan 01 00:00:18 1970 +0000
560 | | | summary: (18) merge two known; two far left
561 | | |
562 | o | changeset: 17:44765d7c06e0
563 | |\ \ parent: 12:86b91144a6e9
564 | | | | parent: 16:3677d192927d
565 | | | | user: test
566 | | | | date: Thu Jan 01 00:00:17 1970 +0000
567 | | | | summary: (17) expand
548 o | | | changeset: 19:31ddc2c1573b
549 |\ \ \ \ parent: 15:1dda3f72782d
550 | | | | | parent: 17:44765d7c06e0
551 | | | | | user: test
552 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
553 | | | | | summary: (19) expand
554 | | | | |
555 +---+---o changeset: 18:1aa84d96232a
556 | | | | parent: 1:6db2ef61d156
557 | | | | parent: 15:1dda3f72782d
558 | | | | user: test
559 | | | | date: Thu Jan 01 00:00:18 1970 +0000
560 | | | | summary: (18) merge two known; two far left
568 561 | | | |
569 | | o | changeset: 16:3677d192927d
570 | | | | parent: 0:e6eb3150255d
571 | | | | parent: 1:6db2ef61d156
572 | | | | user: test
573 | | | | date: Thu Jan 01 00:00:16 1970 +0000
574 | | | | summary: (16) merge two known; one immediate right, one near right
562 | o | | changeset: 17:44765d7c06e0
563 | |\ \ \ parent: 12:86b91144a6e9
564 | | | | | parent: 16:3677d192927d
565 | | | | | user: test
566 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
567 | | | | | summary: (17) expand
568 | | | | |
569 | | o---+ changeset: 16:3677d192927d
570 | | | | | parent: 0:e6eb3150255d
571 | | |/ / parent: 1:6db2ef61d156
572 | | | | user: test
573 | | | | date: Thu Jan 01 00:00:16 1970 +0000
574 | | | | summary: (16) merge two known; one immediate right, one near right
575 575 | | | |
576 576 o | | | changeset: 15:1dda3f72782d
577 577 |\ \ \ \ parent: 13:22d8966a97e3
578 578 | | | | | parent: 14:8eac370358ef
579 579 | | | | | user: test
580 580 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
581 581 | | | | | summary: (15) expand
582 582 | | | | |
583 | o | | | changeset: 14:8eac370358ef
584 | |/ / / parent: 0:e6eb3150255d
585 | | | | parent: 12:86b91144a6e9
583 | o-----+ changeset: 14:8eac370358ef
584 | | | | | parent: 0:e6eb3150255d
585 | |/ / / parent: 12:86b91144a6e9
586 586 | | | | user: test
587 587 | | | | date: Thu Jan 01 00:00:14 1970 +0000
588 588 | | | | summary: (14) merge two known; one immediate right, one far right
589 589 | | | |
590 590 o | | | changeset: 13:22d8966a97e3
591 591 |\ \ \ \ parent: 9:7010c0af0a35
592 592 | | | | | parent: 11:832d76e6bdf2
593 593 | | | | | user: test
594 594 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
595 595 | | | | | summary: (13) expand
596 596 | | | | |
597 597 +---o | | changeset: 12:86b91144a6e9
598 | | / / parent: 1:6db2ef61d156
598 | | |/ / parent: 1:6db2ef61d156
599 599 | | | | parent: 9:7010c0af0a35
600 600 | | | | user: test
601 601 | | | | date: Thu Jan 01 00:00:12 1970 +0000
602 602 | | | | summary: (12) merge two known; one immediate right, one far left
603 603 | | | |
604 | o | | changeset: 11:832d76e6bdf2
605 | | | | parent: 6:b105a072e251
606 | | | | parent: 10:74c64d036d72
607 | | | | user: test
608 | | | | date: Thu Jan 01 00:00:11 1970 +0000
609 | | | | summary: (11) expand
610 | | | |
611 | o | | changeset: 10:74c64d036d72
612 | | | | parent: 0:e6eb3150255d
613 | | | | parent: 6:b105a072e251
614 | | | | user: test
615 | | | | date: Thu Jan 01 00:00:10 1970 +0000
616 | | | | summary: (10) merge two known; one immediate left, one near right
604 | o | | changeset: 11:832d76e6bdf2
605 | |\ \ \ parent: 6:b105a072e251
606 | | | | | parent: 10:74c64d036d72
607 | | | | | user: test
608 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
609 | | | | | summary: (11) expand
610 | | | | |
611 | | o---+ changeset: 10:74c64d036d72
612 | | | | | parent: 0:e6eb3150255d
613 | |/ / / parent: 6:b105a072e251
614 | | | | user: test
615 | | | | date: Thu Jan 01 00:00:10 1970 +0000
616 | | | | summary: (10) merge two known; one immediate left, one near right
617 617 | | | |
618 o | | | changeset: 9:7010c0af0a35
619 | | | | parent: 7:b632bb1b1224
620 | | | | parent: 8:7a0b11f71937
621 | | | | user: test
622 | | | | date: Thu Jan 01 00:00:09 1970 +0000
623 | | | | summary: (9) expand
624 | | | |
625 o | | | changeset: 8:7a0b11f71937
626 | | | | parent: 0:e6eb3150255d
627 | | | | parent: 7:b632bb1b1224
628 | | | | user: test
629 | | | | date: Thu Jan 01 00:00:08 1970 +0000
630 | | | | summary: (8) merge two known; one immediate left, one far right
618 o | | | changeset: 9:7010c0af0a35
619 |\ \ \ \ parent: 7:b632bb1b1224
620 | | | | | parent: 8:7a0b11f71937
621 | | | | | user: test
622 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
623 | | | | | summary: (9) expand
624 | | | | |
625 | o-----+ changeset: 8:7a0b11f71937
626 | | | | | parent: 0:e6eb3150255d
627 |/ / / / parent: 7:b632bb1b1224
628 | | | | user: test
629 | | | | date: Thu Jan 01 00:00:08 1970 +0000
630 | | | | summary: (8) merge two known; one immediate left, one far right
631 631 | | | |
632 o | | | changeset: 7:b632bb1b1224
633 | | | | parent: 2:3d9a33b8d1e1
634 | | | | parent: 5:4409d547b708
635 | | | | user: test
636 | | | | date: Thu Jan 01 00:00:07 1970 +0000
637 | | | | summary: (7) expand
632 o | | | changeset: 7:b632bb1b1224
633 |\ \ \ \ parent: 2:3d9a33b8d1e1
634 | | | | | parent: 5:4409d547b708
635 | | | | | user: test
636 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
637 | | | | | summary: (7) expand
638 | | | | |
639 +---o | | changeset: 6:b105a072e251
640 | |/ / / parent: 2:3d9a33b8d1e1
641 | | | | parent: 5:4409d547b708
642 | | | | user: test
643 | | | | date: Thu Jan 01 00:00:06 1970 +0000
644 | | | | summary: (6) merge two known; one immediate left, one far left
638 645 | | | |
639 | o | | changeset: 6:b105a072e251
640 |/ / / parent: 2:3d9a33b8d1e1
641 | | | parent: 5:4409d547b708
642 | | | user: test
643 | | | date: Thu Jan 01 00:00:06 1970 +0000
644 | | | summary: (6) merge two known; one immediate left, one far left
645 | | |
646 o | | changeset: 5:4409d547b708
647 | | | parent: 3:27eef8ed80b4
648 | | | parent: 4:26a8bac39d9f
649 | | | user: test
650 | | | date: Thu Jan 01 00:00:05 1970 +0000
651 | | | summary: (5) expand
652 | | |
653 o | | changeset: 4:26a8bac39d9f
654 | | | parent: 1:6db2ef61d156
655 | | | parent: 3:27eef8ed80b4
656 | | | user: test
657 | | | date: Thu Jan 01 00:00:04 1970 +0000
658 | | | summary: (4) merge two known; one immediate left, one immediate right
659 | | |
660 o | | changeset: 3:27eef8ed80b4
661 | | | user: test
662 | | | date: Thu Jan 01 00:00:03 1970 +0000
663 | | | summary: (3) collapse
646 | o | | changeset: 5:4409d547b708
647 | |\ \ \ parent: 3:27eef8ed80b4
648 | | | | | parent: 4:26a8bac39d9f
649 | | | | | user: test
650 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
651 | | | | | summary: (5) expand
652 | | | | |
653 | | o | | changeset: 4:26a8bac39d9f
654 | |/|/ / parent: 1:6db2ef61d156
655 | | | | parent: 3:27eef8ed80b4
656 | | | | user: test
657 | | | | date: Thu Jan 01 00:00:04 1970 +0000
658 | | | | summary: (4) merge two known; one immediate left, one immediate right
659 | | | |
660 | o | | changeset: 3:27eef8ed80b4
661 |/ / / user: test
662 | | | date: Thu Jan 01 00:00:03 1970 +0000
663 | | | summary: (3) collapse
664 664 | | |
665 665 o | | changeset: 2:3d9a33b8d1e1
666 666 |/ / user: test
667 667 | | date: Thu Jan 01 00:00:02 1970 +0000
668 668 | | summary: (2) collapse
669 669 | |
670 670 o | changeset: 1:6db2ef61d156
671 671 |/ user: test
672 672 | date: Thu Jan 01 00:00:01 1970 +0000
673 673 | summary: (1) collapse
674 674 |
675 675 o changeset: 0:e6eb3150255d
676 676 user: test
677 677 date: Thu Jan 01 00:00:00 1970 +0000
678 678 summary: (0) root
679 679
680 680
681 681 Unused arguments:
682 682 $ hg glog -q foo bar
683 683 hg glog: invalid arguments
684 684 hg glog [OPTION]... [FILE]
685 685
686 686 show revision history alongside an ASCII revision graph
687 687 [255]
688 688
689 689 Only one file is allowed:
690 690 $ hg log -G foo bar
691 691 abort: --graph option allows at most one file
692 692 [255]
693 693
694 694 Empty revision range - display nothing:
695 695 $ hg glog -r 1..0
696 696
697 697 From outer space:
698 698 $ cd ..
699 699 $ hg glog -l1 repo
700 700 @ changeset: 34:fea3ac5810e0
701 701 | tag: tip
702 702 | parent: 32:d06dffa21a31
703 703 | user: test
704 704 | date: Thu Jan 01 00:00:34 1970 +0000
705 705 | summary: (34) head
706 706 |
707 707 $ hg glog -l1 repo/a
708 708 @ changeset: 34:fea3ac5810e0
709 709 | tag: tip
710 710 | parent: 32:d06dffa21a31
711 711 | user: test
712 712 | date: Thu Jan 01 00:00:34 1970 +0000
713 713 | summary: (34) head
714 714 |
715 715 $ hg glog -l1 repo/missing
716 716
717 717 File log with revs != cset revs:
718 718 $ hg init flog
719 719 $ cd flog
720 720 $ echo one >one
721 721 $ hg add one
722 722 $ hg commit -mone
723 723 $ echo two >two
724 724 $ hg add two
725 725 $ hg commit -mtwo
726 726 $ echo more >two
727 727 $ hg commit -mmore
728 728 $ hg glog two
729 729 @ changeset: 2:12c28321755b
730 730 | tag: tip
731 731 | user: test
732 732 | date: Thu Jan 01 00:00:00 1970 +0000
733 733 | summary: more
734 734 |
735 735 o changeset: 1:5ac72c0599bf
736 user: test
737 date: Thu Jan 01 00:00:00 1970 +0000
738 summary: two
739
736 | user: test
737 | date: Thu Jan 01 00:00:00 1970 +0000
738 | summary: two
739 |
740 740
741 741 Issue1896: File log with explicit style
742 742 $ hg glog --style=default one
743 743 o changeset: 0:3d578b4a1f53
744 744 user: test
745 745 date: Thu Jan 01 00:00:00 1970 +0000
746 746 summary: one
747 747
748 748 Issue2395: glog --style header and footer
749 749 $ hg glog --style=xml one
750 750 <?xml version="1.0"?>
751 751 <log>
752 752 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
753 753 <author email="test">test</author>
754 754 <date>1970-01-01T00:00:00+00:00</date>
755 755 <msg xml:space="preserve">one</msg>
756 756 </logentry>
757 757 </log>
758 758
759 759 $ cd ..
760 760
761 761 Incoming and outgoing:
762 762
763 763 $ hg clone -U -r31 repo repo2
764 764 adding changesets
765 765 adding manifests
766 766 adding file changes
767 767 added 31 changesets with 31 changes to 1 files
768 768 $ cd repo2
769 769
770 770 $ hg incoming --graph ../repo
771 771 comparing with ../repo
772 772 searching for changes
773 773 o changeset: 34:fea3ac5810e0
774 774 | tag: tip
775 775 | parent: 32:d06dffa21a31
776 776 | user: test
777 777 | date: Thu Jan 01 00:00:34 1970 +0000
778 778 | summary: (34) head
779 779 |
780 780 | o changeset: 33:68608f5145f9
781 781 | parent: 18:1aa84d96232a
782 782 | user: test
783 783 | date: Thu Jan 01 00:00:33 1970 +0000
784 784 | summary: (33) head
785 785 |
786 786 o changeset: 32:d06dffa21a31
787 787 | parent: 27:886ed638191b
788 788 | parent: 31:621d83e11f67
789 789 | user: test
790 790 | date: Thu Jan 01 00:00:32 1970 +0000
791 791 | summary: (32) expand
792 792 |
793 793 o changeset: 27:886ed638191b
794 794 parent: 21:d42a756af44d
795 795 user: test
796 796 date: Thu Jan 01 00:00:27 1970 +0000
797 797 summary: (27) collapse
798 798
799 799 $ cd ..
800 800
801 801 $ hg -R repo outgoing --graph repo2
802 802 comparing with repo2
803 803 searching for changes
804 804 @ changeset: 34:fea3ac5810e0
805 805 | tag: tip
806 806 | parent: 32:d06dffa21a31
807 807 | user: test
808 808 | date: Thu Jan 01 00:00:34 1970 +0000
809 809 | summary: (34) head
810 810 |
811 811 | o changeset: 33:68608f5145f9
812 812 | parent: 18:1aa84d96232a
813 813 | user: test
814 814 | date: Thu Jan 01 00:00:33 1970 +0000
815 815 | summary: (33) head
816 816 |
817 817 o changeset: 32:d06dffa21a31
818 818 | parent: 27:886ed638191b
819 819 | parent: 31:621d83e11f67
820 820 | user: test
821 821 | date: Thu Jan 01 00:00:32 1970 +0000
822 822 | summary: (32) expand
823 823 |
824 824 o changeset: 27:886ed638191b
825 825 parent: 21:d42a756af44d
826 826 user: test
827 827 date: Thu Jan 01 00:00:27 1970 +0000
828 828 summary: (27) collapse
829 829
830 830
831 831 File + limit with revs != cset revs:
832 832 $ cd repo
833 833 $ touch b
834 834 $ hg ci -Aqm0
835 835 $ hg glog -l2 a
836 836 o changeset: 34:fea3ac5810e0
837 837 | parent: 32:d06dffa21a31
838 838 | user: test
839 839 | date: Thu Jan 01 00:00:34 1970 +0000
840 840 | summary: (34) head
841 841 |
842 842 | o changeset: 33:68608f5145f9
843 843 | | parent: 18:1aa84d96232a
844 844 | | user: test
845 845 | | date: Thu Jan 01 00:00:33 1970 +0000
846 846 | | summary: (33) head
847 847 | |
848 848
849 849 File + limit + -ra:b, (b - a) < limit:
850 850 $ hg glog -l3000 -r32:tip a
851 851 o changeset: 34:fea3ac5810e0
852 852 | parent: 32:d06dffa21a31
853 853 | user: test
854 854 | date: Thu Jan 01 00:00:34 1970 +0000
855 855 | summary: (34) head
856 856 |
857 857 | o changeset: 33:68608f5145f9
858 858 | | parent: 18:1aa84d96232a
859 859 | | user: test
860 860 | | date: Thu Jan 01 00:00:33 1970 +0000
861 861 | | summary: (33) head
862 862 | |
863 863 o | changeset: 32:d06dffa21a31
864 864 |\ \ parent: 27:886ed638191b
865 865 | | | parent: 31:621d83e11f67
866 866 | | | user: test
867 867 | | | date: Thu Jan 01 00:00:32 1970 +0000
868 868 | | | summary: (32) expand
869 869 | | |
870 870
871 871 File + limit + -ra:b, b < tip:
872 872 $ hg glog -l1 -r32:34 a
873 873 o changeset: 34:fea3ac5810e0
874 874 | parent: 32:d06dffa21a31
875 875 | user: test
876 876 | date: Thu Jan 01 00:00:34 1970 +0000
877 877 | summary: (34) head
878 878 |
879 879
880 880 File + limit + -ra:b, b < tip, (b - a) < limit:
881 881 $ hg glog -l10 -r33:34 a
882 882 o changeset: 34:fea3ac5810e0
883 883 | parent: 32:d06dffa21a31
884 884 | user: test
885 885 | date: Thu Jan 01 00:00:34 1970 +0000
886 886 | summary: (34) head
887 887 |
888 888 | o changeset: 33:68608f5145f9
889 889 | | parent: 18:1aa84d96232a
890 890 | | user: test
891 891 | | date: Thu Jan 01 00:00:33 1970 +0000
892 892 | | summary: (33) head
893 893 | |
894 894
895 895 Do not crash or produce strange graphs if history is buggy
896 896
897 897 $ commit 36 "buggy merge: identical parents" 35 35
898 898 $ hg glog -l5
899 899 @ changeset: 36:95fa8febd08a
900 900 | tag: tip
901 901 | parent: 35:9159c3644c5e
902 902 | parent: 35:9159c3644c5e
903 903 | user: test
904 904 | date: Thu Jan 01 00:00:36 1970 +0000
905 905 | summary: (36) buggy merge: identical parents
906 906 |
907 907 o changeset: 35:9159c3644c5e
908 908 | user: test
909 909 | date: Thu Jan 01 00:00:00 1970 +0000
910 910 | summary: 0
911 911 |
912 912 o changeset: 34:fea3ac5810e0
913 913 | parent: 32:d06dffa21a31
914 914 | user: test
915 915 | date: Thu Jan 01 00:00:34 1970 +0000
916 916 | summary: (34) head
917 917 |
918 918 | o changeset: 33:68608f5145f9
919 919 | | parent: 18:1aa84d96232a
920 920 | | user: test
921 921 | | date: Thu Jan 01 00:00:33 1970 +0000
922 922 | | summary: (33) head
923 923 | |
924 924 o | changeset: 32:d06dffa21a31
925 925 |\ \ parent: 27:886ed638191b
926 926 | | | parent: 31:621d83e11f67
927 927 | | | user: test
928 928 | | | date: Thu Jan 01 00:00:32 1970 +0000
929 929 | | | summary: (32) expand
930 930 | | |
General Comments 0
You need to be logged in to leave comments. Login now