##// END OF EJS Templates
graphlog: fix regression with filelogs introduced by 7bc62ebe7693
Peter Arrenbrecht -
r7383:b501c7f3 default
parent child Browse files
Show More
@@ -1,304 +1,304
1 # ASCII graph log extension for Mercurial
1 # ASCII graph log extension for Mercurial
2 #
2 #
3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of
5 # This software may be used and distributed according to the terms of
6 # the GNU General Public License, incorporated herein by reference.
6 # the GNU General Public License, incorporated herein by reference.
7 '''show revision graphs in terminal windows'''
7 '''show revision graphs in terminal windows'''
8
8
9 import os
9 import os
10 import sys
10 import sys
11 from mercurial.cmdutil import revrange, show_changeset
11 from mercurial.cmdutil import revrange, show_changeset
12 from mercurial.commands import templateopts
12 from mercurial.commands import templateopts
13 from mercurial.i18n import _
13 from mercurial.i18n import _
14 from mercurial.node import nullrev
14 from mercurial.node import nullrev
15 from mercurial.util import Abort, canonpath
15 from mercurial.util import Abort, canonpath
16
16
17 def revisions(repo, start, stop):
17 def revisions(repo, start, stop):
18 """cset DAG generator yielding (rev, node, [parents]) tuples
18 """cset DAG generator yielding (rev, node, [parents]) tuples
19
19
20 This generator function walks through the revision history from revision
20 This generator function walks through the revision history from revision
21 start to revision stop (which must be less than or equal to start).
21 start to revision stop (which must be less than or equal to start).
22 """
22 """
23 assert start >= stop
23 assert start >= stop
24 cur = start
24 cur = start
25 while cur >= stop:
25 while cur >= stop:
26 ctx = repo[cur]
26 ctx = repo[cur]
27 parents = [p.rev() for p in ctx.parents() if p.rev() != nullrev]
27 parents = [p.rev() for p in ctx.parents() if p.rev() != nullrev]
28 parents.sort()
28 parents.sort()
29 yield (ctx, parents)
29 yield (ctx, parents)
30 cur -= 1
30 cur -= 1
31
31
32 def filerevs(repo, path, start, stop):
32 def filerevs(repo, path, start, stop):
33 """file cset DAG generator yielding (rev, node, [parents]) tuples
33 """file cset DAG generator yielding (rev, node, [parents]) tuples
34
34
35 This generator function walks through the revision history of a single
35 This generator function walks through the revision history of a single
36 file from revision start to revision stop (which must be less than or
36 file from revision start to revision stop (which must be less than or
37 equal to start).
37 equal to start).
38 """
38 """
39 assert start >= stop
39 assert start >= stop
40 filerev = len(repo.file(path)) - 1
40 filerev = len(repo.file(path)) - 1
41 while filerev >= 0:
41 while filerev >= 0:
42 fctx = repo.filectx(path, fileid=filerev)
42 fctx = repo.filectx(path, fileid=filerev)
43 parents = [f.filerev() for f in fctx.parents() if f.path() == path]
43 parents = [f.linkrev() for f in fctx.parents() if f.path() == path]
44 parents.sort()
44 parents.sort()
45 if fctx.rev() <= start:
45 if fctx.rev() <= start:
46 yield (fctx, parents)
46 yield (fctx, parents)
47 if fctx.rev() <= stop:
47 if fctx.rev() <= stop:
48 break
48 break
49 filerev -= 1
49 filerev -= 1
50
50
51 def grapher(nodes):
51 def grapher(nodes):
52 """grapher for asciigraph on a list of nodes and their parents
52 """grapher for asciigraph on a list of nodes and their parents
53
53
54 nodes must generate tuples (node, parents, char, lines) where
54 nodes must generate tuples (node, parents, char, lines) where
55 - parents must generate the parents of node, in sorted order,
55 - parents must generate the parents of node, in sorted order,
56 and max length 2,
56 and max length 2,
57 - char is the char to print as the node symbol, and
57 - char is the char to print as the node symbol, and
58 - lines are the lines to display next to the node.
58 - lines are the lines to display next to the node.
59 """
59 """
60 seen = []
60 seen = []
61 for node, parents, char, lines in nodes:
61 for node, parents, char, lines in nodes:
62 if node not in seen:
62 if node not in seen:
63 seen.append(node)
63 seen.append(node)
64 nodeidx = seen.index(node)
64 nodeidx = seen.index(node)
65
65
66 knownparents = []
66 knownparents = []
67 newparents = []
67 newparents = []
68 for parent in parents:
68 for parent in parents:
69 if parent in seen:
69 if parent in seen:
70 knownparents.append(parent)
70 knownparents.append(parent)
71 else:
71 else:
72 newparents.append(parent)
72 newparents.append(parent)
73
73
74 ncols = len(seen)
74 ncols = len(seen)
75 nextseen = seen[:]
75 nextseen = seen[:]
76 nextseen[nodeidx:nodeidx + 1] = newparents
76 nextseen[nodeidx:nodeidx + 1] = newparents
77 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
77 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
78
78
79 if len(newparents) > 0:
79 if len(newparents) > 0:
80 edges.append((nodeidx, nodeidx))
80 edges.append((nodeidx, nodeidx))
81 if len(newparents) > 1:
81 if len(newparents) > 1:
82 edges.append((nodeidx, nodeidx + 1))
82 edges.append((nodeidx, nodeidx + 1))
83 nmorecols = len(nextseen) - ncols
83 nmorecols = len(nextseen) - ncols
84 seen = nextseen
84 seen = nextseen
85 yield (char, lines, nodeidx, edges, ncols, nmorecols)
85 yield (char, lines, nodeidx, edges, ncols, nmorecols)
86
86
87 def fix_long_right_edges(edges):
87 def fix_long_right_edges(edges):
88 for (i, (start, end)) in enumerate(edges):
88 for (i, (start, end)) in enumerate(edges):
89 if end > start:
89 if end > start:
90 edges[i] = (start, end + 1)
90 edges[i] = (start, end + 1)
91
91
92 def get_nodeline_edges_tail(
92 def get_nodeline_edges_tail(
93 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
93 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
94 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
94 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
95 # Still going in the same non-vertical direction.
95 # Still going in the same non-vertical direction.
96 if n_columns_diff == -1:
96 if n_columns_diff == -1:
97 start = max(node_index + 1, p_node_index)
97 start = max(node_index + 1, p_node_index)
98 tail = ["|", " "] * (start - node_index - 1)
98 tail = ["|", " "] * (start - node_index - 1)
99 tail.extend(["/", " "] * (n_columns - start))
99 tail.extend(["/", " "] * (n_columns - start))
100 return tail
100 return tail
101 else:
101 else:
102 return ["\\", " "] * (n_columns - node_index - 1)
102 return ["\\", " "] * (n_columns - node_index - 1)
103 else:
103 else:
104 return ["|", " "] * (n_columns - node_index - 1)
104 return ["|", " "] * (n_columns - node_index - 1)
105
105
106 def draw_edges(edges, nodeline, interline):
106 def draw_edges(edges, nodeline, interline):
107 for (start, end) in edges:
107 for (start, end) in edges:
108 if start == end + 1:
108 if start == end + 1:
109 interline[2 * end + 1] = "/"
109 interline[2 * end + 1] = "/"
110 elif start == end - 1:
110 elif start == end - 1:
111 interline[2 * start + 1] = "\\"
111 interline[2 * start + 1] = "\\"
112 elif start == end:
112 elif start == end:
113 interline[2 * start] = "|"
113 interline[2 * start] = "|"
114 else:
114 else:
115 nodeline[2 * end] = "+"
115 nodeline[2 * end] = "+"
116 if start > end:
116 if start > end:
117 (start, end) = (end,start)
117 (start, end) = (end,start)
118 for i in range(2 * start + 1, 2 * end):
118 for i in range(2 * start + 1, 2 * end):
119 if nodeline[i] != "+":
119 if nodeline[i] != "+":
120 nodeline[i] = "-"
120 nodeline[i] = "-"
121
121
122 def get_padding_line(ni, n_columns, edges):
122 def get_padding_line(ni, n_columns, edges):
123 line = []
123 line = []
124 line.extend(["|", " "] * ni)
124 line.extend(["|", " "] * ni)
125 if (ni, ni - 1) in edges or (ni, ni) in edges:
125 if (ni, ni - 1) in edges or (ni, ni) in edges:
126 # (ni, ni - 1) (ni, ni)
126 # (ni, ni - 1) (ni, ni)
127 # | | | | | | | |
127 # | | | | | | | |
128 # +---o | | o---+
128 # +---o | | o---+
129 # | | c | | c | |
129 # | | c | | c | |
130 # | |/ / | |/ /
130 # | |/ / | |/ /
131 # | | | | | |
131 # | | | | | |
132 c = "|"
132 c = "|"
133 else:
133 else:
134 c = " "
134 c = " "
135 line.extend([c, " "])
135 line.extend([c, " "])
136 line.extend(["|", " "] * (n_columns - ni - 1))
136 line.extend(["|", " "] * (n_columns - ni - 1))
137 return line
137 return line
138
138
139 def ascii(ui, grapher):
139 def ascii(ui, grapher):
140 """prints an ASCII graph of the DAG returned by the grapher
140 """prints an ASCII graph of the DAG returned by the grapher
141
141
142 grapher is a generator that emits tuples with the following elements:
142 grapher is a generator that emits tuples with the following elements:
143
143
144 - Character to use as node's symbol.
144 - Character to use as node's symbol.
145 - List of lines to display as the node's text.
145 - List of lines to display as the node's text.
146 - Column of the current node in the set of ongoing edges.
146 - Column of the current node in the set of ongoing edges.
147 - Edges; a list of (col, next_col) indicating the edges between
147 - Edges; a list of (col, next_col) indicating the edges between
148 the current node and its parents.
148 the current node and its parents.
149 - Number of columns (ongoing edges) in the current revision.
149 - Number of columns (ongoing edges) in the current revision.
150 - The difference between the number of columns (ongoing edges)
150 - The difference between the number of columns (ongoing edges)
151 in the next revision and the number of columns (ongoing edges)
151 in the next revision and the number of columns (ongoing edges)
152 in the current revision. That is: -1 means one column removed;
152 in the current revision. That is: -1 means one column removed;
153 0 means no columns added or removed; 1 means one column added.
153 0 means no columns added or removed; 1 means one column added.
154 """
154 """
155 prev_n_columns_diff = 0
155 prev_n_columns_diff = 0
156 prev_node_index = 0
156 prev_node_index = 0
157 for (node_ch, node_lines, node_index, edges, n_columns, n_columns_diff) in grapher:
157 for (node_ch, node_lines, node_index, edges, n_columns, n_columns_diff) in grapher:
158
158
159 assert -2 < n_columns_diff < 2
159 assert -2 < n_columns_diff < 2
160 if n_columns_diff == -1:
160 if n_columns_diff == -1:
161 # Transform
161 # Transform
162 #
162 #
163 # | | | | | |
163 # | | | | | |
164 # o | | into o---+
164 # o | | into o---+
165 # |X / |/ /
165 # |X / |/ /
166 # | | | |
166 # | | | |
167 fix_long_right_edges(edges)
167 fix_long_right_edges(edges)
168
168
169 # add_padding_line says whether to rewrite
169 # add_padding_line says whether to rewrite
170 #
170 #
171 # | | | | | | | |
171 # | | | | | | | |
172 # | o---+ into | o---+
172 # | o---+ into | o---+
173 # | / / | | | # <--- padding line
173 # | / / | | | # <--- padding line
174 # o | | | / /
174 # o | | | / /
175 # o | |
175 # o | |
176 add_padding_line = (len(node_lines) > 2 and
176 add_padding_line = (len(node_lines) > 2 and
177 n_columns_diff == -1 and
177 n_columns_diff == -1 and
178 [x for (x, y) in edges if x + 1 < y])
178 [x for (x, y) in edges if x + 1 < y])
179
179
180 # fix_nodeline_tail says whether to rewrite
180 # fix_nodeline_tail says whether to rewrite
181 #
181 #
182 # | | o | | | | o | |
182 # | | o | | | | o | |
183 # | | |/ / | | |/ /
183 # | | |/ / | | |/ /
184 # | o | | into | o / / # <--- fixed nodeline tail
184 # | o | | into | o / / # <--- fixed nodeline tail
185 # | |/ / | |/ /
185 # | |/ / | |/ /
186 # o | | o | |
186 # o | | o | |
187 fix_nodeline_tail = len(node_lines) <= 2 and not add_padding_line
187 fix_nodeline_tail = len(node_lines) <= 2 and not add_padding_line
188
188
189 # nodeline is the line containing the node character (typically o)
189 # nodeline is the line containing the node character (typically o)
190 nodeline = ["|", " "] * node_index
190 nodeline = ["|", " "] * node_index
191 nodeline.extend([node_ch, " "])
191 nodeline.extend([node_ch, " "])
192
192
193 nodeline.extend(
193 nodeline.extend(
194 get_nodeline_edges_tail(
194 get_nodeline_edges_tail(
195 node_index, prev_node_index, n_columns, n_columns_diff,
195 node_index, prev_node_index, n_columns, n_columns_diff,
196 prev_n_columns_diff, fix_nodeline_tail))
196 prev_n_columns_diff, fix_nodeline_tail))
197
197
198 # shift_interline is the line containing the non-vertical
198 # shift_interline is the line containing the non-vertical
199 # edges between this entry and the next
199 # edges between this entry and the next
200 shift_interline = ["|", " "] * node_index
200 shift_interline = ["|", " "] * node_index
201 if n_columns_diff == -1:
201 if n_columns_diff == -1:
202 n_spaces = 1
202 n_spaces = 1
203 edge_ch = "/"
203 edge_ch = "/"
204 elif n_columns_diff == 0:
204 elif n_columns_diff == 0:
205 n_spaces = 2
205 n_spaces = 2
206 edge_ch = "|"
206 edge_ch = "|"
207 else:
207 else:
208 n_spaces = 3
208 n_spaces = 3
209 edge_ch = "\\"
209 edge_ch = "\\"
210 shift_interline.extend(n_spaces * [" "])
210 shift_interline.extend(n_spaces * [" "])
211 shift_interline.extend([edge_ch, " "] * (n_columns - node_index - 1))
211 shift_interline.extend([edge_ch, " "] * (n_columns - node_index - 1))
212
212
213 # draw edges from the current node to its parents
213 # draw edges from the current node to its parents
214 draw_edges(edges, nodeline, shift_interline)
214 draw_edges(edges, nodeline, shift_interline)
215
215
216 # lines is the list of all graph lines to print
216 # lines is the list of all graph lines to print
217 lines = [nodeline]
217 lines = [nodeline]
218 if add_padding_line:
218 if add_padding_line:
219 lines.append(get_padding_line(node_index, n_columns, edges))
219 lines.append(get_padding_line(node_index, n_columns, edges))
220 lines.append(shift_interline)
220 lines.append(shift_interline)
221
221
222 # make sure that there are as many graph lines as there are
222 # make sure that there are as many graph lines as there are
223 # log strings
223 # log strings
224 while len(node_lines) < len(lines):
224 while len(node_lines) < len(lines):
225 node_lines.append("")
225 node_lines.append("")
226 if len(lines) < len(node_lines):
226 if len(lines) < len(node_lines):
227 extra_interline = ["|", " "] * (n_columns + n_columns_diff)
227 extra_interline = ["|", " "] * (n_columns + n_columns_diff)
228 while len(lines) < len(node_lines):
228 while len(lines) < len(node_lines):
229 lines.append(extra_interline)
229 lines.append(extra_interline)
230
230
231 # print lines
231 # print lines
232 indentation_level = max(n_columns, n_columns + n_columns_diff)
232 indentation_level = max(n_columns, n_columns + n_columns_diff)
233 for (line, logstr) in zip(lines, node_lines):
233 for (line, logstr) in zip(lines, node_lines):
234 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
234 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
235 ui.write(ln.rstrip() + '\n')
235 ui.write(ln.rstrip() + '\n')
236
236
237 # ... and start over
237 # ... and start over
238 prev_node_index = node_index
238 prev_node_index = node_index
239 prev_n_columns_diff = n_columns_diff
239 prev_n_columns_diff = n_columns_diff
240
240
241 def get_limit(limit_opt):
241 def get_limit(limit_opt):
242 if limit_opt:
242 if limit_opt:
243 try:
243 try:
244 limit = int(limit_opt)
244 limit = int(limit_opt)
245 except ValueError:
245 except ValueError:
246 raise Abort(_("limit must be a positive integer"))
246 raise Abort(_("limit must be a positive integer"))
247 if limit <= 0:
247 if limit <= 0:
248 raise Abort(_("limit must be positive"))
248 raise Abort(_("limit must be positive"))
249 else:
249 else:
250 limit = sys.maxint
250 limit = sys.maxint
251 return limit
251 return limit
252
252
253 def get_revs(repo, rev_opt):
253 def get_revs(repo, rev_opt):
254 if rev_opt:
254 if rev_opt:
255 revs = revrange(repo, rev_opt)
255 revs = revrange(repo, rev_opt)
256 return (max(revs), min(revs))
256 return (max(revs), min(revs))
257 else:
257 else:
258 return (len(repo) - 1, 0)
258 return (len(repo) - 1, 0)
259
259
260 def graphlog(ui, repo, path=None, **opts):
260 def graphlog(ui, repo, path=None, **opts):
261 """show revision history alongside an ASCII revision graph
261 """show revision history alongside an ASCII revision graph
262
262
263 Print a revision history alongside a revision graph drawn with
263 Print a revision history alongside a revision graph drawn with
264 ASCII characters.
264 ASCII characters.
265
265
266 Nodes printed as an @ character are parents of the working
266 Nodes printed as an @ character are parents of the working
267 directory.
267 directory.
268 """
268 """
269
269
270 limit = get_limit(opts["limit"])
270 limit = get_limit(opts["limit"])
271 start, stop = get_revs(repo, opts["rev"])
271 start, stop = get_revs(repo, opts["rev"])
272 stop = max(stop, start - limit + 1)
272 stop = max(stop, start - limit + 1)
273 if start == nullrev:
273 if start == nullrev:
274 return
274 return
275
275
276 if path:
276 if path:
277 path = canonpath(repo.root, os.getcwd(), path)
277 path = canonpath(repo.root, os.getcwd(), path)
278 if path: # could be reset in canonpath
278 if path: # could be reset in canonpath
279 revdag = filerevs(repo, path, start, stop)
279 revdag = filerevs(repo, path, start, stop)
280 else:
280 else:
281 revdag = revisions(repo, start, stop)
281 revdag = revisions(repo, start, stop)
282
282
283 repo_parents = repo.dirstate.parents()
283 repo_parents = repo.dirstate.parents()
284 displayer = show_changeset(ui, repo, opts, buffered=True)
284 displayer = show_changeset(ui, repo, opts, buffered=True)
285 def graphabledag():
285 def graphabledag():
286 for (ctx, parents) in revdag:
286 for (ctx, parents) in revdag:
287 # log_strings is the list of all log strings to draw alongside
287 # log_strings is the list of all log strings to draw alongside
288 # the graph.
288 # the graph.
289 displayer.show(ctx)
289 displayer.show(ctx)
290 lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
290 lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
291 char = ctx.node() in repo_parents and '@' or 'o'
291 char = ctx.node() in repo_parents and '@' or 'o'
292 yield (ctx.rev(), parents, char, lines)
292 yield (ctx.rev(), parents, char, lines)
293
293
294 ascii(ui, grapher(graphabledag()))
294 ascii(ui, grapher(graphabledag()))
295
295
296 cmdtable = {
296 cmdtable = {
297 "glog":
297 "glog":
298 (graphlog,
298 (graphlog,
299 [('l', 'limit', '', _('limit number of changes displayed')),
299 [('l', 'limit', '', _('limit number of changes displayed')),
300 ('p', 'patch', False, _('show patch')),
300 ('p', 'patch', False, _('show patch')),
301 ('r', 'rev', [], _('show the specified revision or range')),
301 ('r', 'rev', [], _('show the specified revision or range')),
302 ] + templateopts,
302 ] + templateopts,
303 _('hg glog [OPTION]... [FILE]')),
303 _('hg glog [OPTION]... [FILE]')),
304 }
304 }
@@ -1,153 +1,166
1 #!/bin/sh
1 #!/bin/sh
2
2
3 # @ (34) head
3 # @ (34) head
4 # |
4 # |
5 # | o (33) head
5 # | o (33) head
6 # | |
6 # | |
7 # o | (32) expand
7 # o | (32) expand
8 # |\ \
8 # |\ \
9 # | o \ (31) expand
9 # | o \ (31) expand
10 # | |\ \
10 # | |\ \
11 # | | o \ (30) expand
11 # | | o \ (30) expand
12 # | | |\ \
12 # | | |\ \
13 # | | | o | (29) regular commit
13 # | | | o | (29) regular commit
14 # | | | | |
14 # | | | | |
15 # | | o | | (28) merge zero known
15 # | | o | | (28) merge zero known
16 # | | |\ \ \
16 # | | |\ \ \
17 # o | | | | | (27) collapse
17 # o | | | | | (27) collapse
18 # |/ / / / /
18 # |/ / / / /
19 # | | o---+ (26) merge one known; far right
19 # | | o---+ (26) merge one known; far right
20 # | | | | |
20 # | | | | |
21 # +---o | | (25) merge one known; far left
21 # +---o | | (25) merge one known; far left
22 # | | | | |
22 # | | | | |
23 # | | o | | (24) merge one known; immediate right
23 # | | o | | (24) merge one known; immediate right
24 # | | |\| |
24 # | | |\| |
25 # | | o | | (23) merge one known; immediate left
25 # | | o | | (23) merge one known; immediate left
26 # | |/| | |
26 # | |/| | |
27 # +---o---+ (22) merge two known; one far left, one far right
27 # +---o---+ (22) merge two known; one far left, one far right
28 # | | / /
28 # | | / /
29 # o | | | (21) expand
29 # o | | | (21) expand
30 # |\ \ \ \
30 # |\ \ \ \
31 # | o---+-+ (20) merge two known; two far right
31 # | o---+-+ (20) merge two known; two far right
32 # | / / /
32 # | / / /
33 # o | | | (19) expand
33 # o | | | (19) expand
34 # |\ \ \ \
34 # |\ \ \ \
35 # +---+---o (18) merge two known; two far left
35 # +---+---o (18) merge two known; two far left
36 # | | | |
36 # | | | |
37 # | o | | (17) expand
37 # | o | | (17) expand
38 # | |\ \ \
38 # | |\ \ \
39 # | | o---+ (16) merge two known; one immediate right, one near right
39 # | | o---+ (16) merge two known; one immediate right, one near right
40 # | | |/ /
40 # | | |/ /
41 # o | | | (15) expand
41 # o | | | (15) expand
42 # |\ \ \ \
42 # |\ \ \ \
43 # | o-----+ (14) merge two known; one immediate right, one far right
43 # | o-----+ (14) merge two known; one immediate right, one far right
44 # | |/ / /
44 # | |/ / /
45 # o | | | (13) expand
45 # o | | | (13) expand
46 # |\ \ \ \
46 # |\ \ \ \
47 # +---o | | (12) merge two known; one immediate right, one far left
47 # +---o | | (12) merge two known; one immediate right, one far left
48 # | | |/ /
48 # | | |/ /
49 # | o | | (11) expand
49 # | o | | (11) expand
50 # | |\ \ \
50 # | |\ \ \
51 # | | o---+ (10) merge two known; one immediate left, one near right
51 # | | o---+ (10) merge two known; one immediate left, one near right
52 # | |/ / /
52 # | |/ / /
53 # o | | | (9) expand
53 # o | | | (9) expand
54 # |\ \ \ \
54 # |\ \ \ \
55 # | o-----+ (8) merge two known; one immediate left, one far right
55 # | o-----+ (8) merge two known; one immediate left, one far right
56 # |/ / / /
56 # |/ / / /
57 # o | | | (7) expand
57 # o | | | (7) expand
58 # |\ \ \ \
58 # |\ \ \ \
59 # +---o | | (6) merge two known; one immediate left, one far left
59 # +---o | | (6) merge two known; one immediate left, one far left
60 # | |/ / /
60 # | |/ / /
61 # | o | | (5) expand
61 # | o | | (5) expand
62 # | |\ \ \
62 # | |\ \ \
63 # | | o | | (4) merge two known; one immediate left, one immediate right
63 # | | o | | (4) merge two known; one immediate left, one immediate right
64 # | |/|/ /
64 # | |/|/ /
65 # | o / / (3) collapse
65 # | o / / (3) collapse
66 # |/ / /
66 # |/ / /
67 # o / / (2) collapse
67 # o / / (2) collapse
68 # |/ /
68 # |/ /
69 # o / (1) collapse
69 # o / (1) collapse
70 # |/
70 # |/
71 # o (0) root
71 # o (0) root
72
72
73 set -e
73 set -e
74
74
75 commit()
75 commit()
76 {
76 {
77 rev=$1
77 rev=$1
78 msg=$2
78 msg=$2
79 shift 2
79 shift 2
80 if [ "$#" -gt 0 ]; then
80 if [ "$#" -gt 0 ]; then
81 hg debugsetparents "$@"
81 hg debugsetparents "$@"
82 fi
82 fi
83 echo $rev > $rev
83 echo $rev > $rev
84 hg add $rev
84 hg add $rev
85 hg rawcommit -q -d "$rev 0" -m "($rev) $msg" $rev
85 hg rawcommit -q -d "$rev 0" -m "($rev) $msg" $rev
86 }
86 }
87
87
88 echo "[extensions]" >> $HGRCPATH
88 echo "[extensions]" >> $HGRCPATH
89 echo "graphlog=" >> $HGRCPATH
89 echo "graphlog=" >> $HGRCPATH
90
90
91 echo % init
91 echo % init
92 hg init repo
92 hg init repo
93
93
94 cd repo
94 cd repo
95
95
96 echo % empty repo
96 echo % empty repo
97 hg glog
97 hg glog
98
98
99 echo % building tree
99 echo % building tree
100 commit 0 "root"
100 commit 0 "root"
101 commit 1 "collapse" 0
101 commit 1 "collapse" 0
102 commit 2 "collapse" 1
102 commit 2 "collapse" 1
103 commit 3 "collapse" 2
103 commit 3 "collapse" 2
104 commit 4 "merge two known; one immediate left, one immediate right" 1 3
104 commit 4 "merge two known; one immediate left, one immediate right" 1 3
105 commit 5 "expand" 3 4
105 commit 5 "expand" 3 4
106 commit 6 "merge two known; one immediate left, one far left" 2 5
106 commit 6 "merge two known; one immediate left, one far left" 2 5
107 commit 7 "expand" 2 5
107 commit 7 "expand" 2 5
108 commit 8 "merge two known; one immediate left, one far right" 0 7
108 commit 8 "merge two known; one immediate left, one far right" 0 7
109 commit 9 "expand" 7 8
109 commit 9 "expand" 7 8
110 commit 10 "merge two known; one immediate left, one near right" 0 6
110 commit 10 "merge two known; one immediate left, one near right" 0 6
111 commit 11 "expand" 6 10
111 commit 11 "expand" 6 10
112 commit 12 "merge two known; one immediate right, one far left" 1 9
112 commit 12 "merge two known; one immediate right, one far left" 1 9
113 commit 13 "expand" 9 11
113 commit 13 "expand" 9 11
114 commit 14 "merge two known; one immediate right, one far right" 0 12
114 commit 14 "merge two known; one immediate right, one far right" 0 12
115 commit 15 "expand" 13 14
115 commit 15 "expand" 13 14
116 commit 16 "merge two known; one immediate right, one near right" 0 1
116 commit 16 "merge two known; one immediate right, one near right" 0 1
117 commit 17 "expand" 12 16
117 commit 17 "expand" 12 16
118 commit 18 "merge two known; two far left" 1 15
118 commit 18 "merge two known; two far left" 1 15
119 commit 19 "expand" 15 17
119 commit 19 "expand" 15 17
120 commit 20 "merge two known; two far right" 0 18
120 commit 20 "merge two known; two far right" 0 18
121 commit 21 "expand" 19 20
121 commit 21 "expand" 19 20
122 commit 22 "merge two known; one far left, one far right" 18 21
122 commit 22 "merge two known; one far left, one far right" 18 21
123 commit 23 "merge one known; immediate left" 1 22
123 commit 23 "merge one known; immediate left" 1 22
124 commit 24 "merge one known; immediate right" 0 23
124 commit 24 "merge one known; immediate right" 0 23
125 commit 25 "merge one known; far left" 21 24
125 commit 25 "merge one known; far left" 21 24
126 commit 26 "merge one known; far right" 18 25
126 commit 26 "merge one known; far right" 18 25
127 commit 27 "collapse" 21
127 commit 27 "collapse" 21
128 commit 28 "merge zero known" 1 26
128 commit 28 "merge zero known" 1 26
129 commit 29 "regular commit" 0
129 commit 29 "regular commit" 0
130 commit 30 "expand" 28 29
130 commit 30 "expand" 28 29
131 commit 31 "expand" 21 30
131 commit 31 "expand" 21 30
132 commit 32 "expand" 27 31
132 commit 32 "expand" 27 31
133 commit 33 "head" 18
133 commit 33 "head" 18
134 commit 34 "head" 32
134 commit 34 "head" 32
135
135
136 echo % glog -q
136 echo % glog -q
137 hg glog -q
137 hg glog -q
138
138
139 echo % glog
139 echo % glog
140 hg glog
140 hg glog
141
141
142 echo % file glog
142 echo % file glog
143 hg glog 5
143 hg glog 5
144
144
145 echo % unused arguments
145 echo % unused arguments
146 hg glog -q foo bar || echo failed
146 hg glog -q foo bar || echo failed
147
147
148 echo % from outer space
148 echo % from outer space
149 cd ..
149 cd ..
150 hg glog -l1 repo
150 hg glog -l1 repo
151 hg glog -l1 repo/0
151 hg glog -l1 repo/0
152 hg glog -l1 repo/missing
152 hg glog -l1 repo/missing
153
153
154 echo % file log with revs != cset revs
155 hg init flog
156 cd flog
157 echo one >one
158 hg add one
159 hg commit -mone
160 echo two >two
161 hg add two
162 hg commit -mtwo
163 echo more >two
164 hg commit -mmore
165 hg glog two
166
@@ -1,371 +1,383
1 % init
1 % init
2 % empty repo
2 % empty repo
3 % building tree
3 % building tree
4 (the rawcommit command is deprecated)
4 (the rawcommit command is deprecated)
5 (the rawcommit command is deprecated)
5 (the rawcommit command is deprecated)
6 (the rawcommit command is deprecated)
6 (the rawcommit command is deprecated)
7 (the rawcommit command is deprecated)
7 (the rawcommit command is deprecated)
8 (the rawcommit command is deprecated)
8 (the rawcommit command is deprecated)
9 (the rawcommit command is deprecated)
9 (the rawcommit command is deprecated)
10 (the rawcommit command is deprecated)
10 (the rawcommit command is deprecated)
11 (the rawcommit command is deprecated)
11 (the rawcommit command is deprecated)
12 (the rawcommit command is deprecated)
12 (the rawcommit command is deprecated)
13 (the rawcommit command is deprecated)
13 (the rawcommit command is deprecated)
14 (the rawcommit command is deprecated)
14 (the rawcommit command is deprecated)
15 (the rawcommit command is deprecated)
15 (the rawcommit command is deprecated)
16 (the rawcommit command is deprecated)
16 (the rawcommit command is deprecated)
17 (the rawcommit command is deprecated)
17 (the rawcommit command is deprecated)
18 (the rawcommit command is deprecated)
18 (the rawcommit command is deprecated)
19 (the rawcommit command is deprecated)
19 (the rawcommit command is deprecated)
20 (the rawcommit command is deprecated)
20 (the rawcommit command is deprecated)
21 (the rawcommit command is deprecated)
21 (the rawcommit command is deprecated)
22 (the rawcommit command is deprecated)
22 (the rawcommit command is deprecated)
23 (the rawcommit command is deprecated)
23 (the rawcommit command is deprecated)
24 (the rawcommit command is deprecated)
24 (the rawcommit command is deprecated)
25 (the rawcommit command is deprecated)
25 (the rawcommit command is deprecated)
26 (the rawcommit command is deprecated)
26 (the rawcommit command is deprecated)
27 (the rawcommit command is deprecated)
27 (the rawcommit command is deprecated)
28 (the rawcommit command is deprecated)
28 (the rawcommit command is deprecated)
29 (the rawcommit command is deprecated)
29 (the rawcommit command is deprecated)
30 (the rawcommit command is deprecated)
30 (the rawcommit command is deprecated)
31 (the rawcommit command is deprecated)
31 (the rawcommit command is deprecated)
32 (the rawcommit command is deprecated)
32 (the rawcommit command is deprecated)
33 (the rawcommit command is deprecated)
33 (the rawcommit command is deprecated)
34 (the rawcommit command is deprecated)
34 (the rawcommit command is deprecated)
35 (the rawcommit command is deprecated)
35 (the rawcommit command is deprecated)
36 (the rawcommit command is deprecated)
36 (the rawcommit command is deprecated)
37 (the rawcommit command is deprecated)
37 (the rawcommit command is deprecated)
38 (the rawcommit command is deprecated)
38 (the rawcommit command is deprecated)
39 % glog -q
39 % glog -q
40 @ 34:0eed7cd895e0
40 @ 34:0eed7cd895e0
41 |
41 |
42 | o 33:2e9d1b521374
42 | o 33:2e9d1b521374
43 | |
43 | |
44 o | 32:77f7d8438a3c
44 o | 32:77f7d8438a3c
45 |\ \
45 |\ \
46 | o \ 31:82ee55204a79
46 | o \ 31:82ee55204a79
47 | |\ \
47 | |\ \
48 | | o \ 30:777dfc428649
48 | | o \ 30:777dfc428649
49 | | |\ \
49 | | |\ \
50 | | | o | 29:f8e7fee63353
50 | | | o | 29:f8e7fee63353
51 | | | | |
51 | | | | |
52 | | o | | 28:4b6e9bd48cf9
52 | | o | | 28:4b6e9bd48cf9
53 | | |\ \ \
53 | | |\ \ \
54 o | | | | | 27:e9e08174cd30
54 o | | | | | 27:e9e08174cd30
55 |/ / / / /
55 |/ / / / /
56 | | o---+ 26:720dc079a855
56 | | o---+ 26:720dc079a855
57 | | | | |
57 | | | | |
58 +---o | | 25:9d4ed048d013
58 +---o | | 25:9d4ed048d013
59 | | | | |
59 | | | | |
60 | | o | | 24:4a68967db00d
60 | | o | | 24:4a68967db00d
61 | | |\| |
61 | | |\| |
62 | | o | | 23:bc31393cabdf
62 | | o | | 23:bc31393cabdf
63 | |/| | |
63 | |/| | |
64 +---o---+ 22:a37f2ea6ebc6
64 +---o---+ 22:a37f2ea6ebc6
65 | | / /
65 | | / /
66 o | | | 21:e758e8f4ace9
66 o | | | 21:e758e8f4ace9
67 |\ \ \ \
67 |\ \ \ \
68 | o---+-+ 20:aeccadad74b4
68 | o---+-+ 20:aeccadad74b4
69 | / / /
69 | / / /
70 o | | | 19:138069b5dad7
70 o | | | 19:138069b5dad7
71 |\ \ \ \
71 |\ \ \ \
72 +---+---o 18:5a8c9a29ef81
72 +---+---o 18:5a8c9a29ef81
73 | | | |
73 | | | |
74 | o | | 17:43e52b935494
74 | o | | 17:43e52b935494
75 | |\ \ \
75 | |\ \ \
76 | | o---+ 16:449a2f9562a4
76 | | o---+ 16:449a2f9562a4
77 | | |/ /
77 | | |/ /
78 o | | | 15:c0b4283d4c1d
78 o | | | 15:c0b4283d4c1d
79 |\ \ \ \
79 |\ \ \ \
80 | o-----+ 14:9d533950abf0
80 | o-----+ 14:9d533950abf0
81 | |/ / /
81 | |/ / /
82 o | | | 13:c39d0a2b8165
82 o | | | 13:c39d0a2b8165
83 |\ \ \ \
83 |\ \ \ \
84 +---o | | 12:74dc7aea4494
84 +---o | | 12:74dc7aea4494
85 | | |/ /
85 | | |/ /
86 | o | | 11:c3c395dd8b98
86 | o | | 11:c3c395dd8b98
87 | |\ \ \
87 | |\ \ \
88 | | o---+ 10:8094c50149ef
88 | | o---+ 10:8094c50149ef
89 | |/ / /
89 | |/ / /
90 o | | | 9:79ab1812f961
90 o | | | 9:79ab1812f961
91 |\ \ \ \
91 |\ \ \ \
92 | o-----+ 8:d7aa38594334
92 | o-----+ 8:d7aa38594334
93 |/ / / /
93 |/ / / /
94 o | | | 7:699392d1259e
94 o | | | 7:699392d1259e
95 |\ \ \ \
95 |\ \ \ \
96 +---o | | 6:0ca7c061cf45
96 +---o | | 6:0ca7c061cf45
97 | |/ / /
97 | |/ / /
98 | o | | 5:3589c3c477ab
98 | o | | 5:3589c3c477ab
99 | |\ \ \
99 | |\ \ \
100 | | o | | 4:e2cad8233c77
100 | | o | | 4:e2cad8233c77
101 | |/|/ /
101 | |/|/ /
102 | o / / 3:02173ffbf857
102 | o / / 3:02173ffbf857
103 |/ / /
103 |/ / /
104 o / / 2:e8ea2256f9ec
104 o / / 2:e8ea2256f9ec
105 |/ /
105 |/ /
106 o / 1:3cae7826a707
106 o / 1:3cae7826a707
107 |/
107 |/
108 o 0:7aa22e58e8c1
108 o 0:7aa22e58e8c1
109
109
110 % glog
110 % glog
111 @ changeset: 34:0eed7cd895e0
111 @ changeset: 34:0eed7cd895e0
112 | tag: tip
112 | tag: tip
113 | parent: 32:77f7d8438a3c
113 | parent: 32:77f7d8438a3c
114 | user: test
114 | user: test
115 | date: Thu Jan 01 00:00:34 1970 +0000
115 | date: Thu Jan 01 00:00:34 1970 +0000
116 | summary: (34) head
116 | summary: (34) head
117 |
117 |
118 | o changeset: 33:2e9d1b521374
118 | o changeset: 33:2e9d1b521374
119 | | parent: 18:5a8c9a29ef81
119 | | parent: 18:5a8c9a29ef81
120 | | user: test
120 | | user: test
121 | | date: Thu Jan 01 00:00:33 1970 +0000
121 | | date: Thu Jan 01 00:00:33 1970 +0000
122 | | summary: (33) head
122 | | summary: (33) head
123 | |
123 | |
124 o | changeset: 32:77f7d8438a3c
124 o | changeset: 32:77f7d8438a3c
125 |\ \ parent: 27:e9e08174cd30
125 |\ \ parent: 27:e9e08174cd30
126 | | | parent: 31:82ee55204a79
126 | | | parent: 31:82ee55204a79
127 | | | user: test
127 | | | user: test
128 | | | date: Thu Jan 01 00:00:32 1970 +0000
128 | | | date: Thu Jan 01 00:00:32 1970 +0000
129 | | | summary: (32) expand
129 | | | summary: (32) expand
130 | | |
130 | | |
131 | o | changeset: 31:82ee55204a79
131 | o | changeset: 31:82ee55204a79
132 | |\ \ parent: 21:e758e8f4ace9
132 | |\ \ parent: 21:e758e8f4ace9
133 | | | | parent: 30:777dfc428649
133 | | | | parent: 30:777dfc428649
134 | | | | user: test
134 | | | | user: test
135 | | | | date: Thu Jan 01 00:00:31 1970 +0000
135 | | | | date: Thu Jan 01 00:00:31 1970 +0000
136 | | | | summary: (31) expand
136 | | | | summary: (31) expand
137 | | | |
137 | | | |
138 | | o | changeset: 30:777dfc428649
138 | | o | changeset: 30:777dfc428649
139 | | |\ \ parent: 28:4b6e9bd48cf9
139 | | |\ \ parent: 28:4b6e9bd48cf9
140 | | | | | parent: 29:f8e7fee63353
140 | | | | | parent: 29:f8e7fee63353
141 | | | | | user: test
141 | | | | | user: test
142 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
142 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
143 | | | | | summary: (30) expand
143 | | | | | summary: (30) expand
144 | | | | |
144 | | | | |
145 | | | o | changeset: 29:f8e7fee63353
145 | | | o | changeset: 29:f8e7fee63353
146 | | | | | parent: 0:7aa22e58e8c1
146 | | | | | parent: 0:7aa22e58e8c1
147 | | | | | user: test
147 | | | | | user: test
148 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
148 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
149 | | | | | summary: (29) regular commit
149 | | | | | summary: (29) regular commit
150 | | | | |
150 | | | | |
151 | | o | | changeset: 28:4b6e9bd48cf9
151 | | o | | changeset: 28:4b6e9bd48cf9
152 | | |\ \ \ parent: 1:3cae7826a707
152 | | |\ \ \ parent: 1:3cae7826a707
153 | | | | | | parent: 26:720dc079a855
153 | | | | | | parent: 26:720dc079a855
154 | | | | | | user: test
154 | | | | | | user: test
155 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
155 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
156 | | | | | | summary: (28) merge zero known
156 | | | | | | summary: (28) merge zero known
157 | | | | | |
157 | | | | | |
158 o | | | | | changeset: 27:e9e08174cd30
158 o | | | | | changeset: 27:e9e08174cd30
159 |/ / / / / parent: 21:e758e8f4ace9
159 |/ / / / / parent: 21:e758e8f4ace9
160 | | | | | user: test
160 | | | | | user: test
161 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
161 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
162 | | | | | summary: (27) collapse
162 | | | | | summary: (27) collapse
163 | | | | |
163 | | | | |
164 | | o---+ changeset: 26:720dc079a855
164 | | o---+ changeset: 26:720dc079a855
165 | | | | | parent: 18:5a8c9a29ef81
165 | | | | | parent: 18:5a8c9a29ef81
166 | | | | | parent: 25:9d4ed048d013
166 | | | | | parent: 25:9d4ed048d013
167 | | | | | user: test
167 | | | | | user: test
168 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
168 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
169 | | | | | summary: (26) merge one known; far right
169 | | | | | summary: (26) merge one known; far right
170 | | | | |
170 | | | | |
171 +---o | | changeset: 25:9d4ed048d013
171 +---o | | changeset: 25:9d4ed048d013
172 | | | | | parent: 21:e758e8f4ace9
172 | | | | | parent: 21:e758e8f4ace9
173 | | | | | parent: 24:4a68967db00d
173 | | | | | parent: 24:4a68967db00d
174 | | | | | user: test
174 | | | | | user: test
175 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
175 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
176 | | | | | summary: (25) merge one known; far left
176 | | | | | summary: (25) merge one known; far left
177 | | | | |
177 | | | | |
178 | | o | | changeset: 24:4a68967db00d
178 | | o | | changeset: 24:4a68967db00d
179 | | |\| | parent: 0:7aa22e58e8c1
179 | | |\| | parent: 0:7aa22e58e8c1
180 | | | | | parent: 23:bc31393cabdf
180 | | | | | parent: 23:bc31393cabdf
181 | | | | | user: test
181 | | | | | user: test
182 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
182 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
183 | | | | | summary: (24) merge one known; immediate right
183 | | | | | summary: (24) merge one known; immediate right
184 | | | | |
184 | | | | |
185 | | o | | changeset: 23:bc31393cabdf
185 | | o | | changeset: 23:bc31393cabdf
186 | |/| | | parent: 1:3cae7826a707
186 | |/| | | parent: 1:3cae7826a707
187 | | | | | parent: 22:a37f2ea6ebc6
187 | | | | | parent: 22:a37f2ea6ebc6
188 | | | | | user: test
188 | | | | | user: test
189 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
189 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
190 | | | | | summary: (23) merge one known; immediate left
190 | | | | | summary: (23) merge one known; immediate left
191 | | | | |
191 | | | | |
192 +---o---+ changeset: 22:a37f2ea6ebc6
192 +---o---+ changeset: 22:a37f2ea6ebc6
193 | | | | parent: 18:5a8c9a29ef81
193 | | | | parent: 18:5a8c9a29ef81
194 | | / / parent: 21:e758e8f4ace9
194 | | / / parent: 21:e758e8f4ace9
195 | | | | user: test
195 | | | | user: test
196 | | | | date: Thu Jan 01 00:00:22 1970 +0000
196 | | | | date: Thu Jan 01 00:00:22 1970 +0000
197 | | | | summary: (22) merge two known; one far left, one far right
197 | | | | summary: (22) merge two known; one far left, one far right
198 | | | |
198 | | | |
199 o | | | changeset: 21:e758e8f4ace9
199 o | | | changeset: 21:e758e8f4ace9
200 |\ \ \ \ parent: 19:138069b5dad7
200 |\ \ \ \ parent: 19:138069b5dad7
201 | | | | | parent: 20:aeccadad74b4
201 | | | | | parent: 20:aeccadad74b4
202 | | | | | user: test
202 | | | | | user: test
203 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
203 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
204 | | | | | summary: (21) expand
204 | | | | | summary: (21) expand
205 | | | | |
205 | | | | |
206 | o---+-+ changeset: 20:aeccadad74b4
206 | o---+-+ changeset: 20:aeccadad74b4
207 | | | | parent: 0:7aa22e58e8c1
207 | | | | parent: 0:7aa22e58e8c1
208 | / / / parent: 18:5a8c9a29ef81
208 | / / / parent: 18:5a8c9a29ef81
209 | | | | user: test
209 | | | | user: test
210 | | | | date: Thu Jan 01 00:00:20 1970 +0000
210 | | | | date: Thu Jan 01 00:00:20 1970 +0000
211 | | | | summary: (20) merge two known; two far right
211 | | | | summary: (20) merge two known; two far right
212 | | | |
212 | | | |
213 o | | | changeset: 19:138069b5dad7
213 o | | | changeset: 19:138069b5dad7
214 |\ \ \ \ parent: 15:c0b4283d4c1d
214 |\ \ \ \ parent: 15:c0b4283d4c1d
215 | | | | | parent: 17:43e52b935494
215 | | | | | parent: 17:43e52b935494
216 | | | | | user: test
216 | | | | | user: test
217 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
217 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
218 | | | | | summary: (19) expand
218 | | | | | summary: (19) expand
219 | | | | |
219 | | | | |
220 +---+---o changeset: 18:5a8c9a29ef81
220 +---+---o changeset: 18:5a8c9a29ef81
221 | | | | parent: 1:3cae7826a707
221 | | | | parent: 1:3cae7826a707
222 | | | | parent: 15:c0b4283d4c1d
222 | | | | parent: 15:c0b4283d4c1d
223 | | | | user: test
223 | | | | user: test
224 | | | | date: Thu Jan 01 00:00:18 1970 +0000
224 | | | | date: Thu Jan 01 00:00:18 1970 +0000
225 | | | | summary: (18) merge two known; two far left
225 | | | | summary: (18) merge two known; two far left
226 | | | |
226 | | | |
227 | o | | changeset: 17:43e52b935494
227 | o | | changeset: 17:43e52b935494
228 | |\ \ \ parent: 12:74dc7aea4494
228 | |\ \ \ parent: 12:74dc7aea4494
229 | | | | | parent: 16:449a2f9562a4
229 | | | | | parent: 16:449a2f9562a4
230 | | | | | user: test
230 | | | | | user: test
231 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
231 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
232 | | | | | summary: (17) expand
232 | | | | | summary: (17) expand
233 | | | | |
233 | | | | |
234 | | o---+ changeset: 16:449a2f9562a4
234 | | o---+ changeset: 16:449a2f9562a4
235 | | | | | parent: 0:7aa22e58e8c1
235 | | | | | parent: 0:7aa22e58e8c1
236 | | |/ / parent: 1:3cae7826a707
236 | | |/ / parent: 1:3cae7826a707
237 | | | | user: test
237 | | | | user: test
238 | | | | date: Thu Jan 01 00:00:16 1970 +0000
238 | | | | date: Thu Jan 01 00:00:16 1970 +0000
239 | | | | summary: (16) merge two known; one immediate right, one near right
239 | | | | summary: (16) merge two known; one immediate right, one near right
240 | | | |
240 | | | |
241 o | | | changeset: 15:c0b4283d4c1d
241 o | | | changeset: 15:c0b4283d4c1d
242 |\ \ \ \ parent: 13:c39d0a2b8165
242 |\ \ \ \ parent: 13:c39d0a2b8165
243 | | | | | parent: 14:9d533950abf0
243 | | | | | parent: 14:9d533950abf0
244 | | | | | user: test
244 | | | | | user: test
245 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
245 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
246 | | | | | summary: (15) expand
246 | | | | | summary: (15) expand
247 | | | | |
247 | | | | |
248 | o-----+ changeset: 14:9d533950abf0
248 | o-----+ changeset: 14:9d533950abf0
249 | | | | | parent: 0:7aa22e58e8c1
249 | | | | | parent: 0:7aa22e58e8c1
250 | |/ / / parent: 12:74dc7aea4494
250 | |/ / / parent: 12:74dc7aea4494
251 | | | | user: test
251 | | | | user: test
252 | | | | date: Thu Jan 01 00:00:14 1970 +0000
252 | | | | date: Thu Jan 01 00:00:14 1970 +0000
253 | | | | summary: (14) merge two known; one immediate right, one far right
253 | | | | summary: (14) merge two known; one immediate right, one far right
254 | | | |
254 | | | |
255 o | | | changeset: 13:c39d0a2b8165
255 o | | | changeset: 13:c39d0a2b8165
256 |\ \ \ \ parent: 9:79ab1812f961
256 |\ \ \ \ parent: 9:79ab1812f961
257 | | | | | parent: 11:c3c395dd8b98
257 | | | | | parent: 11:c3c395dd8b98
258 | | | | | user: test
258 | | | | | user: test
259 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
259 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
260 | | | | | summary: (13) expand
260 | | | | | summary: (13) expand
261 | | | | |
261 | | | | |
262 +---o | | changeset: 12:74dc7aea4494
262 +---o | | changeset: 12:74dc7aea4494
263 | | |/ / parent: 1:3cae7826a707
263 | | |/ / parent: 1:3cae7826a707
264 | | | | parent: 9:79ab1812f961
264 | | | | parent: 9:79ab1812f961
265 | | | | user: test
265 | | | | user: test
266 | | | | date: Thu Jan 01 00:00:12 1970 +0000
266 | | | | date: Thu Jan 01 00:00:12 1970 +0000
267 | | | | summary: (12) merge two known; one immediate right, one far left
267 | | | | summary: (12) merge two known; one immediate right, one far left
268 | | | |
268 | | | |
269 | o | | changeset: 11:c3c395dd8b98
269 | o | | changeset: 11:c3c395dd8b98
270 | |\ \ \ parent: 6:0ca7c061cf45
270 | |\ \ \ parent: 6:0ca7c061cf45
271 | | | | | parent: 10:8094c50149ef
271 | | | | | parent: 10:8094c50149ef
272 | | | | | user: test
272 | | | | | user: test
273 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
273 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
274 | | | | | summary: (11) expand
274 | | | | | summary: (11) expand
275 | | | | |
275 | | | | |
276 | | o---+ changeset: 10:8094c50149ef
276 | | o---+ changeset: 10:8094c50149ef
277 | | | | | parent: 0:7aa22e58e8c1
277 | | | | | parent: 0:7aa22e58e8c1
278 | |/ / / parent: 6:0ca7c061cf45
278 | |/ / / parent: 6:0ca7c061cf45
279 | | | | user: test
279 | | | | user: test
280 | | | | date: Thu Jan 01 00:00:10 1970 +0000
280 | | | | date: Thu Jan 01 00:00:10 1970 +0000
281 | | | | summary: (10) merge two known; one immediate left, one near right
281 | | | | summary: (10) merge two known; one immediate left, one near right
282 | | | |
282 | | | |
283 o | | | changeset: 9:79ab1812f961
283 o | | | changeset: 9:79ab1812f961
284 |\ \ \ \ parent: 7:699392d1259e
284 |\ \ \ \ parent: 7:699392d1259e
285 | | | | | parent: 8:d7aa38594334
285 | | | | | parent: 8:d7aa38594334
286 | | | | | user: test
286 | | | | | user: test
287 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
287 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
288 | | | | | summary: (9) expand
288 | | | | | summary: (9) expand
289 | | | | |
289 | | | | |
290 | o-----+ changeset: 8:d7aa38594334
290 | o-----+ changeset: 8:d7aa38594334
291 | | | | | parent: 0:7aa22e58e8c1
291 | | | | | parent: 0:7aa22e58e8c1
292 |/ / / / parent: 7:699392d1259e
292 |/ / / / parent: 7:699392d1259e
293 | | | | user: test
293 | | | | user: test
294 | | | | date: Thu Jan 01 00:00:08 1970 +0000
294 | | | | date: Thu Jan 01 00:00:08 1970 +0000
295 | | | | summary: (8) merge two known; one immediate left, one far right
295 | | | | summary: (8) merge two known; one immediate left, one far right
296 | | | |
296 | | | |
297 o | | | changeset: 7:699392d1259e
297 o | | | changeset: 7:699392d1259e
298 |\ \ \ \ parent: 2:e8ea2256f9ec
298 |\ \ \ \ parent: 2:e8ea2256f9ec
299 | | | | | parent: 5:3589c3c477ab
299 | | | | | parent: 5:3589c3c477ab
300 | | | | | user: test
300 | | | | | user: test
301 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
301 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
302 | | | | | summary: (7) expand
302 | | | | | summary: (7) expand
303 | | | | |
303 | | | | |
304 +---o | | changeset: 6:0ca7c061cf45
304 +---o | | changeset: 6:0ca7c061cf45
305 | |/ / / parent: 2:e8ea2256f9ec
305 | |/ / / parent: 2:e8ea2256f9ec
306 | | | | parent: 5:3589c3c477ab
306 | | | | parent: 5:3589c3c477ab
307 | | | | user: test
307 | | | | user: test
308 | | | | date: Thu Jan 01 00:00:06 1970 +0000
308 | | | | date: Thu Jan 01 00:00:06 1970 +0000
309 | | | | summary: (6) merge two known; one immediate left, one far left
309 | | | | summary: (6) merge two known; one immediate left, one far left
310 | | | |
310 | | | |
311 | o | | changeset: 5:3589c3c477ab
311 | o | | changeset: 5:3589c3c477ab
312 | |\ \ \ parent: 3:02173ffbf857
312 | |\ \ \ parent: 3:02173ffbf857
313 | | | | | parent: 4:e2cad8233c77
313 | | | | | parent: 4:e2cad8233c77
314 | | | | | user: test
314 | | | | | user: test
315 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
315 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
316 | | | | | summary: (5) expand
316 | | | | | summary: (5) expand
317 | | | | |
317 | | | | |
318 | | o | | changeset: 4:e2cad8233c77
318 | | o | | changeset: 4:e2cad8233c77
319 | |/|/ / parent: 1:3cae7826a707
319 | |/|/ / parent: 1:3cae7826a707
320 | | | | parent: 3:02173ffbf857
320 | | | | parent: 3:02173ffbf857
321 | | | | user: test
321 | | | | user: test
322 | | | | date: Thu Jan 01 00:00:04 1970 +0000
322 | | | | date: Thu Jan 01 00:00:04 1970 +0000
323 | | | | summary: (4) merge two known; one immediate left, one immediate right
323 | | | | summary: (4) merge two known; one immediate left, one immediate right
324 | | | |
324 | | | |
325 | o | | changeset: 3:02173ffbf857
325 | o | | changeset: 3:02173ffbf857
326 |/ / / user: test
326 |/ / / user: test
327 | | | date: Thu Jan 01 00:00:03 1970 +0000
327 | | | date: Thu Jan 01 00:00:03 1970 +0000
328 | | | summary: (3) collapse
328 | | | summary: (3) collapse
329 | | |
329 | | |
330 o | | changeset: 2:e8ea2256f9ec
330 o | | changeset: 2:e8ea2256f9ec
331 |/ / user: test
331 |/ / user: test
332 | | date: Thu Jan 01 00:00:02 1970 +0000
332 | | date: Thu Jan 01 00:00:02 1970 +0000
333 | | summary: (2) collapse
333 | | summary: (2) collapse
334 | |
334 | |
335 o | changeset: 1:3cae7826a707
335 o | changeset: 1:3cae7826a707
336 |/ user: test
336 |/ user: test
337 | date: Thu Jan 01 00:00:01 1970 +0000
337 | date: Thu Jan 01 00:00:01 1970 +0000
338 | summary: (1) collapse
338 | summary: (1) collapse
339 |
339 |
340 o changeset: 0:7aa22e58e8c1
340 o changeset: 0:7aa22e58e8c1
341 user: test
341 user: test
342 date: Thu Jan 01 00:00:00 1970 +0000
342 date: Thu Jan 01 00:00:00 1970 +0000
343 summary: (0) root
343 summary: (0) root
344
344
345 % file glog
345 % file glog
346 o changeset: 5:3589c3c477ab
346 o changeset: 5:3589c3c477ab
347 parent: 3:02173ffbf857
347 parent: 3:02173ffbf857
348 parent: 4:e2cad8233c77
348 parent: 4:e2cad8233c77
349 user: test
349 user: test
350 date: Thu Jan 01 00:00:05 1970 +0000
350 date: Thu Jan 01 00:00:05 1970 +0000
351 summary: (5) expand
351 summary: (5) expand
352
352
353 % unused arguments
353 % unused arguments
354 hg glog: invalid arguments
354 hg glog: invalid arguments
355 hg glog [OPTION]... [FILE]
355 hg glog [OPTION]... [FILE]
356
356
357 show revision history alongside an ASCII revision graph
357 show revision history alongside an ASCII revision graph
358 failed
358 failed
359 % from outer space
359 % from outer space
360 @ changeset: 34:0eed7cd895e0
360 @ changeset: 34:0eed7cd895e0
361 | tag: tip
361 | tag: tip
362 | parent: 32:77f7d8438a3c
362 | parent: 32:77f7d8438a3c
363 | user: test
363 | user: test
364 | date: Thu Jan 01 00:00:34 1970 +0000
364 | date: Thu Jan 01 00:00:34 1970 +0000
365 | summary: (34) head
365 | summary: (34) head
366 |
366 |
367 o changeset: 0:7aa22e58e8c1
367 o changeset: 0:7aa22e58e8c1
368 user: test
368 user: test
369 date: Thu Jan 01 00:00:00 1970 +0000
369 date: Thu Jan 01 00:00:00 1970 +0000
370 summary: (0) root
370 summary: (0) root
371
371
372 % file log with revs != cset revs
373 @ changeset: 2:12c28321755b
374 | tag: tip
375 | user: test
376 | date: Thu Jan 01 00:00:00 1970 +0000
377 | summary: more
378 |
379 o changeset: 1:5ac72c0599bf
380 user: test
381 date: Thu Jan 01 00:00:00 1970 +0000
382 summary: two
383
General Comments 0
You need to be logged in to leave comments. Login now