##// END OF EJS Templates
Merge with crew
Bryan O'Sullivan -
r5944:5963c0ad merge default
parent child Browse files
Show More
@@ -1,265 +1,326 b''
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
7
8 import os
8 import sys
9 import sys
9 from mercurial.cmdutil import revrange, show_changeset
10 from mercurial.cmdutil import revrange, show_changeset
10 from mercurial.i18n import _
11 from mercurial.i18n import _
11 from mercurial.node import nullid, nullrev
12 from mercurial.node import nullid, nullrev
12 from mercurial.util import Abort
13 from mercurial.util import Abort, canonpath
13
14
14 def revision_grapher(repo, start_rev, stop_rev):
15 def revision_grapher(repo, start_rev, stop_rev):
15 """incremental revision grapher
16 """incremental revision grapher
16
17
17 This generator function walks through the revision history from
18 This generator function walks through the revision history from
18 revision start_rev to revision stop_rev (which must be less than
19 revision start_rev to revision stop_rev (which must be less than
19 or equal to start_rev) and for each revision emits tuples with the
20 or equal to start_rev) and for each revision emits tuples with the
20 following elements:
21 following elements:
21
22
22 - Current revision.
23 - Current revision.
23 - Current node.
24 - Current node.
24 - Column of the current node in the set of ongoing edges.
25 - Column of the current node in the set of ongoing edges.
25 - Edges; a list of (col, next_col) indicating the edges between
26 - Edges; a list of (col, next_col) indicating the edges between
26 the current node and its parents.
27 the current node and its parents.
27 - Number of columns (ongoing edges) in the current revision.
28 - Number of columns (ongoing edges) in the current revision.
28 - The difference between the number of columns (ongoing edges)
29 - The difference between the number of columns (ongoing edges)
29 in the next revision and the number of columns (ongoing edges)
30 in the next revision and the number of columns (ongoing edges)
30 in the current revision. That is: -1 means one column removed;
31 in the current revision. That is: -1 means one column removed;
31 0 means no columns added or removed; 1 means one column added.
32 0 means no columns added or removed; 1 means one column added.
32 """
33 """
33
34
34 assert start_rev >= stop_rev
35 assert start_rev >= stop_rev
35 curr_rev = start_rev
36 curr_rev = start_rev
36 revs = []
37 revs = []
37 while curr_rev >= stop_rev:
38 while curr_rev >= stop_rev:
38 node = repo.changelog.node(curr_rev)
39 node = repo.changelog.node(curr_rev)
39
40
40 # Compute revs and next_revs.
41 # Compute revs and next_revs.
41 if curr_rev not in revs:
42 if curr_rev not in revs:
42 # New head.
43 # New head.
43 revs.append(curr_rev)
44 revs.append(curr_rev)
44 rev_index = revs.index(curr_rev)
45 rev_index = revs.index(curr_rev)
45 next_revs = revs[:]
46 next_revs = revs[:]
46
47
47 # Add parents to next_revs.
48 # Add parents to next_revs.
48 parents = get_rev_parents(repo, curr_rev)
49 parents = get_rev_parents(repo, curr_rev)
49 parents_to_add = []
50 parents_to_add = []
50 for parent in parents:
51 for parent in parents:
51 if parent not in next_revs:
52 if parent not in next_revs:
52 parents_to_add.append(parent)
53 parents_to_add.append(parent)
53 parents_to_add.sort()
54 parents_to_add.sort()
54 next_revs[rev_index:rev_index + 1] = parents_to_add
55 next_revs[rev_index:rev_index + 1] = parents_to_add
55
56
56 edges = []
57 edges = []
57 for parent in parents:
58 for parent in parents:
58 edges.append((rev_index, next_revs.index(parent)))
59 edges.append((rev_index, next_revs.index(parent)))
59
60
60 n_columns_diff = len(next_revs) - len(revs)
61 n_columns_diff = len(next_revs) - len(revs)
61 yield (curr_rev, node, rev_index, edges, len(revs), n_columns_diff)
62 yield (curr_rev, node, rev_index, edges, len(revs), n_columns_diff)
62
63
63 revs = next_revs
64 revs = next_revs
64 curr_rev -= 1
65 curr_rev -= 1
65
66
67 def filelog_grapher(repo, path, start_rev, stop_rev):
68 """incremental file log grapher
69
70 This generator function walks through the revision history of a
71 single file from revision start_rev to revision stop_rev (which must
72 be less than or equal to start_rev) and for each revision emits
73 tuples with the following elements:
74
75 - Current revision.
76 - Current node.
77 - Column of the current node in the set of ongoing edges.
78 - Edges; a list of (col, next_col) indicating the edges between
79 the current node and its parents.
80 - Number of columns (ongoing edges) in the current revision.
81 - The difference between the number of columns (ongoing edges)
82 in the next revision and the number of columns (ongoing edges)
83 in the current revision. That is: -1 means one column removed;
84 0 means no columns added or removed; 1 means one column added.
85 """
86
87 assert start_rev >= stop_rev
88 curr_rev = start_rev
89 revs = []
90 filerev = repo.file(path).count() - 1
91 while filerev >= 0:
92 fctx = repo.filectx(path, fileid=filerev)
93
94 # Compute revs and next_revs.
95 if filerev not in revs:
96 revs.append(filerev)
97 rev_index = revs.index(filerev)
98 next_revs = revs[:]
99
100 # Add parents to next_revs.
101 parents = [f.filerev() for f in fctx.parents()]
102 parents_to_add = []
103 for parent in parents:
104 if parent not in next_revs:
105 parents_to_add.append(parent)
106 parents_to_add.sort()
107 next_revs[rev_index:rev_index + 1] = parents_to_add
108
109 edges = []
110 for parent in parents:
111 edges.append((rev_index, next_revs.index(parent)))
112
113 changerev = fctx.linkrev()
114 if changerev <= start_rev:
115 node = repo.changelog.node(changerev)
116 n_columns_diff = len(next_revs) - len(revs)
117 yield (changerev, node, rev_index, edges, len(revs), n_columns_diff)
118 if changerev <= stop_rev:
119 break
120 revs = next_revs
121 filerev -= 1
122
66 def get_rev_parents(repo, rev):
123 def get_rev_parents(repo, rev):
67 return [x for x in repo.changelog.parentrevs(rev) if x != nullrev]
124 return [x for x in repo.changelog.parentrevs(rev) if x != nullrev]
68
125
69 def fix_long_right_edges(edges):
126 def fix_long_right_edges(edges):
70 for (i, (start, end)) in enumerate(edges):
127 for (i, (start, end)) in enumerate(edges):
71 if end > start:
128 if end > start:
72 edges[i] = (start, end + 1)
129 edges[i] = (start, end + 1)
73
130
74 def draw_edges(edges, nodeline, interline):
131 def draw_edges(edges, nodeline, interline):
75 for (start, end) in edges:
132 for (start, end) in edges:
76 if start == end + 1:
133 if start == end + 1:
77 interline[2 * end + 1] = "/"
134 interline[2 * end + 1] = "/"
78 elif start == end - 1:
135 elif start == end - 1:
79 interline[2 * start + 1] = "\\"
136 interline[2 * start + 1] = "\\"
80 elif start == end:
137 elif start == end:
81 interline[2 * start] = "|"
138 interline[2 * start] = "|"
82 else:
139 else:
83 nodeline[2 * end] = "+"
140 nodeline[2 * end] = "+"
84 if start > end:
141 if start > end:
85 (start, end) = (end,start)
142 (start, end) = (end,start)
86 for i in range(2 * start + 1, 2 * end):
143 for i in range(2 * start + 1, 2 * end):
87 if nodeline[i] != "+":
144 if nodeline[i] != "+":
88 nodeline[i] = "-"
145 nodeline[i] = "-"
89
146
90 def format_line(line, level, logstr):
147 def format_line(line, level, logstr):
91 text = "%-*s %s" % (2 * level, "".join(line), logstr)
148 text = "%-*s %s" % (2 * level, "".join(line), logstr)
92 return "%s\n" % text.rstrip()
149 return "%s\n" % text.rstrip()
93
150
94 def get_nodeline_edges_tail(
151 def get_nodeline_edges_tail(
95 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
152 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
96 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
153 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
97 # Still going in the same non-vertical direction.
154 # Still going in the same non-vertical direction.
98 if n_columns_diff == -1:
155 if n_columns_diff == -1:
99 start = max(node_index + 1, p_node_index)
156 start = max(node_index + 1, p_node_index)
100 tail = ["|", " "] * (start - node_index - 1)
157 tail = ["|", " "] * (start - node_index - 1)
101 tail.extend(["/", " "] * (n_columns - start))
158 tail.extend(["/", " "] * (n_columns - start))
102 return tail
159 return tail
103 else:
160 else:
104 return ["\\", " "] * (n_columns - node_index - 1)
161 return ["\\", " "] * (n_columns - node_index - 1)
105 else:
162 else:
106 return ["|", " "] * (n_columns - node_index - 1)
163 return ["|", " "] * (n_columns - node_index - 1)
107
164
108 def get_padding_line(ni, n_columns, edges):
165 def get_padding_line(ni, n_columns, edges):
109 line = []
166 line = []
110 line.extend(["|", " "] * ni)
167 line.extend(["|", " "] * ni)
111 if (ni, ni - 1) in edges or (ni, ni) in edges:
168 if (ni, ni - 1) in edges or (ni, ni) in edges:
112 # (ni, ni - 1) (ni, ni)
169 # (ni, ni - 1) (ni, ni)
113 # | | | | | | | |
170 # | | | | | | | |
114 # +---o | | o---+
171 # +---o | | o---+
115 # | | c | | c | |
172 # | | c | | c | |
116 # | |/ / | |/ /
173 # | |/ / | |/ /
117 # | | | | | |
174 # | | | | | |
118 c = "|"
175 c = "|"
119 else:
176 else:
120 c = " "
177 c = " "
121 line.extend([c, " "])
178 line.extend([c, " "])
122 line.extend(["|", " "] * (n_columns - ni - 1))
179 line.extend(["|", " "] * (n_columns - ni - 1))
123 return line
180 return line
124
181
125 def get_limit(limit_opt):
182 def get_limit(limit_opt):
126 if limit_opt:
183 if limit_opt:
127 try:
184 try:
128 limit = int(limit_opt)
185 limit = int(limit_opt)
129 except ValueError:
186 except ValueError:
130 raise Abort(_("limit must be a positive integer"))
187 raise Abort(_("limit must be a positive integer"))
131 if limit <= 0:
188 if limit <= 0:
132 raise Abort(_("limit must be positive"))
189 raise Abort(_("limit must be positive"))
133 else:
190 else:
134 limit = sys.maxint
191 limit = sys.maxint
135 return limit
192 return limit
136
193
137 def get_revs(repo, rev_opt):
194 def get_revs(repo, rev_opt):
138 if rev_opt:
195 if rev_opt:
139 revs = revrange(repo, rev_opt)
196 revs = revrange(repo, rev_opt)
140 return (max(revs), min(revs))
197 return (max(revs), min(revs))
141 else:
198 else:
142 return (repo.changelog.count() - 1, 0)
199 return (repo.changelog.count() - 1, 0)
143
200
144 def graphlog(ui, repo, **opts):
201 def graphlog(ui, repo, path=None, **opts):
145 """show revision history alongside an ASCII revision graph
202 """show revision history alongside an ASCII revision graph
146
203
147 Print a revision history alongside a revision graph drawn with
204 Print a revision history alongside a revision graph drawn with
148 ASCII characters.
205 ASCII characters.
149
206
150 Nodes printed as an @ character are parents of the working
207 Nodes printed as an @ character are parents of the working
151 directory.
208 directory.
152 """
209 """
153
210
154 limit = get_limit(opts["limit"])
211 limit = get_limit(opts["limit"])
155 (start_rev, stop_rev) = get_revs(repo, opts["rev"])
212 (start_rev, stop_rev) = get_revs(repo, opts["rev"])
156 stop_rev = max(stop_rev, start_rev - limit + 1)
213 stop_rev = max(stop_rev, start_rev - limit + 1)
157 if start_rev == nullrev:
214 if start_rev == nullrev:
158 return
215 return
159 cs_printer = show_changeset(ui, repo, opts)
216 cs_printer = show_changeset(ui, repo, opts)
160 grapher = revision_grapher(repo, start_rev, stop_rev)
217 if path:
218 cpath = canonpath(repo.root, os.getcwd(), path)
219 grapher = filelog_grapher(repo, cpath, start_rev, stop_rev)
220 else:
221 grapher = revision_grapher(repo, start_rev, stop_rev)
161 repo_parents = repo.dirstate.parents()
222 repo_parents = repo.dirstate.parents()
162 prev_n_columns_diff = 0
223 prev_n_columns_diff = 0
163 prev_node_index = 0
224 prev_node_index = 0
164
225
165 for (rev, node, node_index, edges, n_columns, n_columns_diff) in grapher:
226 for (rev, node, node_index, edges, n_columns, n_columns_diff) in grapher:
166 # log_strings is the list of all log strings to draw alongside
227 # log_strings is the list of all log strings to draw alongside
167 # the graph.
228 # the graph.
168 ui.pushbuffer()
229 ui.pushbuffer()
169 cs_printer.show(rev, node)
230 cs_printer.show(rev, node)
170 log_strings = ui.popbuffer().split("\n")[:-1]
231 log_strings = ui.popbuffer().split("\n")[:-1]
171
232
172 if n_columns_diff == -1:
233 if n_columns_diff == -1:
173 # Transform
234 # Transform
174 #
235 #
175 # | | | | | |
236 # | | | | | |
176 # o | | into o---+
237 # o | | into o---+
177 # |X / |/ /
238 # |X / |/ /
178 # | | | |
239 # | | | |
179 fix_long_right_edges(edges)
240 fix_long_right_edges(edges)
180
241
181 # add_padding_line says whether to rewrite
242 # add_padding_line says whether to rewrite
182 #
243 #
183 # | | | | | | | |
244 # | | | | | | | |
184 # | o---+ into | o---+
245 # | o---+ into | o---+
185 # | / / | | | # <--- padding line
246 # | / / | | | # <--- padding line
186 # o | | | / /
247 # o | | | / /
187 # o | |
248 # o | |
188 add_padding_line = (len(log_strings) > 2 and
249 add_padding_line = (len(log_strings) > 2 and
189 n_columns_diff == -1 and
250 n_columns_diff == -1 and
190 [x for (x, y) in edges if x + 1 < y])
251 [x for (x, y) in edges if x + 1 < y])
191
252
192 # fix_nodeline_tail says whether to rewrite
253 # fix_nodeline_tail says whether to rewrite
193 #
254 #
194 # | | o | | | | o | |
255 # | | o | | | | o | |
195 # | | |/ / | | |/ /
256 # | | |/ / | | |/ /
196 # | o | | into | o / / # <--- fixed nodeline tail
257 # | o | | into | o / / # <--- fixed nodeline tail
197 # | |/ / | |/ /
258 # | |/ / | |/ /
198 # o | | o | |
259 # o | | o | |
199 fix_nodeline_tail = len(log_strings) <= 2 and not add_padding_line
260 fix_nodeline_tail = len(log_strings) <= 2 and not add_padding_line
200
261
201 # nodeline is the line containing the node character (@ or o).
262 # nodeline is the line containing the node character (@ or o).
202 nodeline = ["|", " "] * node_index
263 nodeline = ["|", " "] * node_index
203 if node in repo_parents:
264 if node in repo_parents:
204 node_ch = "@"
265 node_ch = "@"
205 else:
266 else:
206 node_ch = "o"
267 node_ch = "o"
207 nodeline.extend([node_ch, " "])
268 nodeline.extend([node_ch, " "])
208
269
209 nodeline.extend(
270 nodeline.extend(
210 get_nodeline_edges_tail(
271 get_nodeline_edges_tail(
211 node_index, prev_node_index, n_columns, n_columns_diff,
272 node_index, prev_node_index, n_columns, n_columns_diff,
212 prev_n_columns_diff, fix_nodeline_tail))
273 prev_n_columns_diff, fix_nodeline_tail))
213
274
214 # shift_interline is the line containing the non-vertical
275 # shift_interline is the line containing the non-vertical
215 # edges between this entry and the next.
276 # edges between this entry and the next.
216 shift_interline = ["|", " "] * node_index
277 shift_interline = ["|", " "] * node_index
217 if n_columns_diff == -1:
278 if n_columns_diff == -1:
218 n_spaces = 1
279 n_spaces = 1
219 edge_ch = "/"
280 edge_ch = "/"
220 elif n_columns_diff == 0:
281 elif n_columns_diff == 0:
221 n_spaces = 2
282 n_spaces = 2
222 edge_ch = "|"
283 edge_ch = "|"
223 else:
284 else:
224 n_spaces = 3
285 n_spaces = 3
225 edge_ch = "\\"
286 edge_ch = "\\"
226 shift_interline.extend(n_spaces * [" "])
287 shift_interline.extend(n_spaces * [" "])
227 shift_interline.extend([edge_ch, " "] * (n_columns - node_index - 1))
288 shift_interline.extend([edge_ch, " "] * (n_columns - node_index - 1))
228
289
229 # Draw edges from the current node to its parents.
290 # Draw edges from the current node to its parents.
230 draw_edges(edges, nodeline, shift_interline)
291 draw_edges(edges, nodeline, shift_interline)
231
292
232 # lines is the list of all graph lines to print.
293 # lines is the list of all graph lines to print.
233 lines = [nodeline]
294 lines = [nodeline]
234 if add_padding_line:
295 if add_padding_line:
235 lines.append(get_padding_line(node_index, n_columns, edges))
296 lines.append(get_padding_line(node_index, n_columns, edges))
236 lines.append(shift_interline)
297 lines.append(shift_interline)
237
298
238 # Make sure that there are as many graph lines as there are
299 # Make sure that there are as many graph lines as there are
239 # log strings.
300 # log strings.
240 while len(log_strings) < len(lines):
301 while len(log_strings) < len(lines):
241 log_strings.append("")
302 log_strings.append("")
242 if len(lines) < len(log_strings):
303 if len(lines) < len(log_strings):
243 extra_interline = ["|", " "] * (n_columns + n_columns_diff)
304 extra_interline = ["|", " "] * (n_columns + n_columns_diff)
244 while len(lines) < len(log_strings):
305 while len(lines) < len(log_strings):
245 lines.append(extra_interline)
306 lines.append(extra_interline)
246
307
247 # Print lines.
308 # Print lines.
248 indentation_level = max(n_columns, n_columns + n_columns_diff)
309 indentation_level = max(n_columns, n_columns + n_columns_diff)
249 for (line, logstr) in zip(lines, log_strings):
310 for (line, logstr) in zip(lines, log_strings):
250 ui.write(format_line(line, indentation_level, logstr))
311 ui.write(format_line(line, indentation_level, logstr))
251
312
252 # ...and start over.
313 # ...and start over.
253 prev_node_index = node_index
314 prev_node_index = node_index
254 prev_n_columns_diff = n_columns_diff
315 prev_n_columns_diff = n_columns_diff
255
316
256 cmdtable = {
317 cmdtable = {
257 "glog":
318 "glog":
258 (graphlog,
319 (graphlog,
259 [('l', 'limit', '', _('limit number of changes displayed')),
320 [('l', 'limit', '', _('limit number of changes displayed')),
260 ('p', 'patch', False, _('show patch')),
321 ('p', 'patch', False, _('show patch')),
261 ('r', 'rev', [], _('show the specified revision or range')),
322 ('r', 'rev', [], _('show the specified revision or range')),
262 ('', 'style', '', _('display using template map file')),
323 ('', 'style', '', _('display using template map file')),
263 ('', 'template', '', _('display with template'))],
324 ('', 'template', '', _('display with template'))],
264 _('hg glog [OPTION]...')),
325 _('hg glog [OPTION]... [FILE]')),
265 }
326 }
@@ -1,143 +1,146 b''
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 ci -d "$rev 0" -m "($rev) $msg"
85 hg ci -d "$rev 0" -m "($rev) $msg"
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
143 hg glog 5
144
142 echo % unused arguments
145 echo % unused arguments
143 hg glog -q foo || echo failed
146 hg glog -q foo bar || echo failed
@@ -1,315 +1,323 b''
1 % init
1 % init
2 % empty repo
2 % empty repo
3 % building tree
3 % building tree
4 % glog -q
4 % glog -q
5 @ 34:0eed7cd895e0
5 @ 34:0eed7cd895e0
6 |
6 |
7 | o 33:2e9d1b521374
7 | o 33:2e9d1b521374
8 | |
8 | |
9 o | 32:77f7d8438a3c
9 o | 32:77f7d8438a3c
10 |\ \
10 |\ \
11 | o \ 31:82ee55204a79
11 | o \ 31:82ee55204a79
12 | |\ \
12 | |\ \
13 | | o \ 30:777dfc428649
13 | | o \ 30:777dfc428649
14 | | |\ \
14 | | |\ \
15 | | | o | 29:f8e7fee63353
15 | | | o | 29:f8e7fee63353
16 | | | | |
16 | | | | |
17 | | o | | 28:4b6e9bd48cf9
17 | | o | | 28:4b6e9bd48cf9
18 | | |\ \ \
18 | | |\ \ \
19 o | | | | | 27:e9e08174cd30
19 o | | | | | 27:e9e08174cd30
20 |/ / / / /
20 |/ / / / /
21 | | o---+ 26:720dc079a855
21 | | o---+ 26:720dc079a855
22 | | | | |
22 | | | | |
23 +---o | | 25:9d4ed048d013
23 +---o | | 25:9d4ed048d013
24 | | | | |
24 | | | | |
25 | | o | | 24:4a68967db00d
25 | | o | | 24:4a68967db00d
26 | | |\| |
26 | | |\| |
27 | | o | | 23:bc31393cabdf
27 | | o | | 23:bc31393cabdf
28 | |/| | |
28 | |/| | |
29 +---o---+ 22:a37f2ea6ebc6
29 +---o---+ 22:a37f2ea6ebc6
30 | | / /
30 | | / /
31 o | | | 21:e758e8f4ace9
31 o | | | 21:e758e8f4ace9
32 |\ \ \ \
32 |\ \ \ \
33 | o---+-+ 20:aeccadad74b4
33 | o---+-+ 20:aeccadad74b4
34 | / / /
34 | / / /
35 o | | | 19:138069b5dad7
35 o | | | 19:138069b5dad7
36 |\ \ \ \
36 |\ \ \ \
37 +---+---o 18:5a8c9a29ef81
37 +---+---o 18:5a8c9a29ef81
38 | | | |
38 | | | |
39 | o | | 17:43e52b935494
39 | o | | 17:43e52b935494
40 | |\ \ \
40 | |\ \ \
41 | | o---+ 16:449a2f9562a4
41 | | o---+ 16:449a2f9562a4
42 | | |/ /
42 | | |/ /
43 o | | | 15:c0b4283d4c1d
43 o | | | 15:c0b4283d4c1d
44 |\ \ \ \
44 |\ \ \ \
45 | o-----+ 14:9d533950abf0
45 | o-----+ 14:9d533950abf0
46 | |/ / /
46 | |/ / /
47 o | | | 13:c39d0a2b8165
47 o | | | 13:c39d0a2b8165
48 |\ \ \ \
48 |\ \ \ \
49 +---o | | 12:74dc7aea4494
49 +---o | | 12:74dc7aea4494
50 | | |/ /
50 | | |/ /
51 | o | | 11:c3c395dd8b98
51 | o | | 11:c3c395dd8b98
52 | |\ \ \
52 | |\ \ \
53 | | o---+ 10:8094c50149ef
53 | | o---+ 10:8094c50149ef
54 | |/ / /
54 | |/ / /
55 o | | | 9:79ab1812f961
55 o | | | 9:79ab1812f961
56 |\ \ \ \
56 |\ \ \ \
57 | o-----+ 8:d7aa38594334
57 | o-----+ 8:d7aa38594334
58 |/ / / /
58 |/ / / /
59 o | | | 7:699392d1259e
59 o | | | 7:699392d1259e
60 |\ \ \ \
60 |\ \ \ \
61 +---o | | 6:0ca7c061cf45
61 +---o | | 6:0ca7c061cf45
62 | |/ / /
62 | |/ / /
63 | o | | 5:3589c3c477ab
63 | o | | 5:3589c3c477ab
64 | |\ \ \
64 | |\ \ \
65 | | o | | 4:e2cad8233c77
65 | | o | | 4:e2cad8233c77
66 | |/|/ /
66 | |/|/ /
67 | o / / 3:02173ffbf857
67 | o / / 3:02173ffbf857
68 |/ / /
68 |/ / /
69 o / / 2:e8ea2256f9ec
69 o / / 2:e8ea2256f9ec
70 |/ /
70 |/ /
71 o / 1:3cae7826a707
71 o / 1:3cae7826a707
72 |/
72 |/
73 o 0:7aa22e58e8c1
73 o 0:7aa22e58e8c1
74
74
75 % glog
75 % glog
76 @ changeset: 34:0eed7cd895e0
76 @ changeset: 34:0eed7cd895e0
77 | tag: tip
77 | tag: tip
78 | parent: 32:77f7d8438a3c
78 | parent: 32:77f7d8438a3c
79 | user: test
79 | user: test
80 | date: Thu Jan 01 00:00:34 1970 +0000
80 | date: Thu Jan 01 00:00:34 1970 +0000
81 | summary: (34) head
81 | summary: (34) head
82 |
82 |
83 | o changeset: 33:2e9d1b521374
83 | o changeset: 33:2e9d1b521374
84 | | parent: 18:5a8c9a29ef81
84 | | parent: 18:5a8c9a29ef81
85 | | user: test
85 | | user: test
86 | | date: Thu Jan 01 00:00:33 1970 +0000
86 | | date: Thu Jan 01 00:00:33 1970 +0000
87 | | summary: (33) head
87 | | summary: (33) head
88 | |
88 | |
89 o | changeset: 32:77f7d8438a3c
89 o | changeset: 32:77f7d8438a3c
90 |\ \ parent: 27:e9e08174cd30
90 |\ \ parent: 27:e9e08174cd30
91 | | | parent: 31:82ee55204a79
91 | | | parent: 31:82ee55204a79
92 | | | user: test
92 | | | user: test
93 | | | date: Thu Jan 01 00:00:32 1970 +0000
93 | | | date: Thu Jan 01 00:00:32 1970 +0000
94 | | | summary: (32) expand
94 | | | summary: (32) expand
95 | | |
95 | | |
96 | o | changeset: 31:82ee55204a79
96 | o | changeset: 31:82ee55204a79
97 | |\ \ parent: 21:e758e8f4ace9
97 | |\ \ parent: 21:e758e8f4ace9
98 | | | | parent: 30:777dfc428649
98 | | | | parent: 30:777dfc428649
99 | | | | user: test
99 | | | | user: test
100 | | | | date: Thu Jan 01 00:00:31 1970 +0000
100 | | | | date: Thu Jan 01 00:00:31 1970 +0000
101 | | | | summary: (31) expand
101 | | | | summary: (31) expand
102 | | | |
102 | | | |
103 | | o | changeset: 30:777dfc428649
103 | | o | changeset: 30:777dfc428649
104 | | |\ \ parent: 28:4b6e9bd48cf9
104 | | |\ \ parent: 28:4b6e9bd48cf9
105 | | | | | parent: 29:f8e7fee63353
105 | | | | | parent: 29:f8e7fee63353
106 | | | | | user: test
106 | | | | | user: test
107 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
107 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
108 | | | | | summary: (30) expand
108 | | | | | summary: (30) expand
109 | | | | |
109 | | | | |
110 | | | o | changeset: 29:f8e7fee63353
110 | | | o | changeset: 29:f8e7fee63353
111 | | | | | parent: 0:7aa22e58e8c1
111 | | | | | parent: 0:7aa22e58e8c1
112 | | | | | user: test
112 | | | | | user: test
113 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
113 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
114 | | | | | summary: (29) regular commit
114 | | | | | summary: (29) regular commit
115 | | | | |
115 | | | | |
116 | | o | | changeset: 28:4b6e9bd48cf9
116 | | o | | changeset: 28:4b6e9bd48cf9
117 | | |\ \ \ parent: 1:3cae7826a707
117 | | |\ \ \ parent: 1:3cae7826a707
118 | | | | | | parent: 26:720dc079a855
118 | | | | | | parent: 26:720dc079a855
119 | | | | | | user: test
119 | | | | | | user: test
120 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
120 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
121 | | | | | | summary: (28) merge zero known
121 | | | | | | summary: (28) merge zero known
122 | | | | | |
122 | | | | | |
123 o | | | | | changeset: 27:e9e08174cd30
123 o | | | | | changeset: 27:e9e08174cd30
124 |/ / / / / parent: 21:e758e8f4ace9
124 |/ / / / / parent: 21:e758e8f4ace9
125 | | | | | user: test
125 | | | | | user: test
126 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
126 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
127 | | | | | summary: (27) collapse
127 | | | | | summary: (27) collapse
128 | | | | |
128 | | | | |
129 | | o---+ changeset: 26:720dc079a855
129 | | o---+ changeset: 26:720dc079a855
130 | | | | | parent: 18:5a8c9a29ef81
130 | | | | | parent: 18:5a8c9a29ef81
131 | | | | | parent: 25:9d4ed048d013
131 | | | | | parent: 25:9d4ed048d013
132 | | | | | user: test
132 | | | | | user: test
133 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
133 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
134 | | | | | summary: (26) merge one known; far right
134 | | | | | summary: (26) merge one known; far right
135 | | | | |
135 | | | | |
136 +---o | | changeset: 25:9d4ed048d013
136 +---o | | changeset: 25:9d4ed048d013
137 | | | | | parent: 21:e758e8f4ace9
137 | | | | | parent: 21:e758e8f4ace9
138 | | | | | parent: 24:4a68967db00d
138 | | | | | parent: 24:4a68967db00d
139 | | | | | user: test
139 | | | | | user: test
140 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
140 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
141 | | | | | summary: (25) merge one known; far left
141 | | | | | summary: (25) merge one known; far left
142 | | | | |
142 | | | | |
143 | | o | | changeset: 24:4a68967db00d
143 | | o | | changeset: 24:4a68967db00d
144 | | |\| | parent: 0:7aa22e58e8c1
144 | | |\| | parent: 0:7aa22e58e8c1
145 | | | | | parent: 23:bc31393cabdf
145 | | | | | parent: 23:bc31393cabdf
146 | | | | | user: test
146 | | | | | user: test
147 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
147 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
148 | | | | | summary: (24) merge one known; immediate right
148 | | | | | summary: (24) merge one known; immediate right
149 | | | | |
149 | | | | |
150 | | o | | changeset: 23:bc31393cabdf
150 | | o | | changeset: 23:bc31393cabdf
151 | |/| | | parent: 1:3cae7826a707
151 | |/| | | parent: 1:3cae7826a707
152 | | | | | parent: 22:a37f2ea6ebc6
152 | | | | | parent: 22:a37f2ea6ebc6
153 | | | | | user: test
153 | | | | | user: test
154 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
154 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
155 | | | | | summary: (23) merge one known; immediate left
155 | | | | | summary: (23) merge one known; immediate left
156 | | | | |
156 | | | | |
157 +---o---+ changeset: 22:a37f2ea6ebc6
157 +---o---+ changeset: 22:a37f2ea6ebc6
158 | | | | parent: 18:5a8c9a29ef81
158 | | | | parent: 18:5a8c9a29ef81
159 | | / / parent: 21:e758e8f4ace9
159 | | / / parent: 21:e758e8f4ace9
160 | | | | user: test
160 | | | | user: test
161 | | | | date: Thu Jan 01 00:00:22 1970 +0000
161 | | | | date: Thu Jan 01 00:00:22 1970 +0000
162 | | | | summary: (22) merge two known; one far left, one far right
162 | | | | summary: (22) merge two known; one far left, one far right
163 | | | |
163 | | | |
164 o | | | changeset: 21:e758e8f4ace9
164 o | | | changeset: 21:e758e8f4ace9
165 |\ \ \ \ parent: 19:138069b5dad7
165 |\ \ \ \ parent: 19:138069b5dad7
166 | | | | | parent: 20:aeccadad74b4
166 | | | | | parent: 20:aeccadad74b4
167 | | | | | user: test
167 | | | | | user: test
168 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
168 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
169 | | | | | summary: (21) expand
169 | | | | | summary: (21) expand
170 | | | | |
170 | | | | |
171 | o---+-+ changeset: 20:aeccadad74b4
171 | o---+-+ changeset: 20:aeccadad74b4
172 | | | | parent: 0:7aa22e58e8c1
172 | | | | parent: 0:7aa22e58e8c1
173 | / / / parent: 18:5a8c9a29ef81
173 | / / / parent: 18:5a8c9a29ef81
174 | | | | user: test
174 | | | | user: test
175 | | | | date: Thu Jan 01 00:00:20 1970 +0000
175 | | | | date: Thu Jan 01 00:00:20 1970 +0000
176 | | | | summary: (20) merge two known; two far right
176 | | | | summary: (20) merge two known; two far right
177 | | | |
177 | | | |
178 o | | | changeset: 19:138069b5dad7
178 o | | | changeset: 19:138069b5dad7
179 |\ \ \ \ parent: 15:c0b4283d4c1d
179 |\ \ \ \ parent: 15:c0b4283d4c1d
180 | | | | | parent: 17:43e52b935494
180 | | | | | parent: 17:43e52b935494
181 | | | | | user: test
181 | | | | | user: test
182 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
182 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
183 | | | | | summary: (19) expand
183 | | | | | summary: (19) expand
184 | | | | |
184 | | | | |
185 +---+---o changeset: 18:5a8c9a29ef81
185 +---+---o changeset: 18:5a8c9a29ef81
186 | | | | parent: 1:3cae7826a707
186 | | | | parent: 1:3cae7826a707
187 | | | | parent: 15:c0b4283d4c1d
187 | | | | parent: 15:c0b4283d4c1d
188 | | | | user: test
188 | | | | user: test
189 | | | | date: Thu Jan 01 00:00:18 1970 +0000
189 | | | | date: Thu Jan 01 00:00:18 1970 +0000
190 | | | | summary: (18) merge two known; two far left
190 | | | | summary: (18) merge two known; two far left
191 | | | |
191 | | | |
192 | o | | changeset: 17:43e52b935494
192 | o | | changeset: 17:43e52b935494
193 | |\ \ \ parent: 12:74dc7aea4494
193 | |\ \ \ parent: 12:74dc7aea4494
194 | | | | | parent: 16:449a2f9562a4
194 | | | | | parent: 16:449a2f9562a4
195 | | | | | user: test
195 | | | | | user: test
196 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
196 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
197 | | | | | summary: (17) expand
197 | | | | | summary: (17) expand
198 | | | | |
198 | | | | |
199 | | o---+ changeset: 16:449a2f9562a4
199 | | o---+ changeset: 16:449a2f9562a4
200 | | | | | parent: 0:7aa22e58e8c1
200 | | | | | parent: 0:7aa22e58e8c1
201 | | |/ / parent: 1:3cae7826a707
201 | | |/ / parent: 1:3cae7826a707
202 | | | | user: test
202 | | | | user: test
203 | | | | date: Thu Jan 01 00:00:16 1970 +0000
203 | | | | date: Thu Jan 01 00:00:16 1970 +0000
204 | | | | summary: (16) merge two known; one immediate right, one near right
204 | | | | summary: (16) merge two known; one immediate right, one near right
205 | | | |
205 | | | |
206 o | | | changeset: 15:c0b4283d4c1d
206 o | | | changeset: 15:c0b4283d4c1d
207 |\ \ \ \ parent: 13:c39d0a2b8165
207 |\ \ \ \ parent: 13:c39d0a2b8165
208 | | | | | parent: 14:9d533950abf0
208 | | | | | parent: 14:9d533950abf0
209 | | | | | user: test
209 | | | | | user: test
210 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
210 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
211 | | | | | summary: (15) expand
211 | | | | | summary: (15) expand
212 | | | | |
212 | | | | |
213 | o-----+ changeset: 14:9d533950abf0
213 | o-----+ changeset: 14:9d533950abf0
214 | | | | | parent: 0:7aa22e58e8c1
214 | | | | | parent: 0:7aa22e58e8c1
215 | |/ / / parent: 12:74dc7aea4494
215 | |/ / / parent: 12:74dc7aea4494
216 | | | | user: test
216 | | | | user: test
217 | | | | date: Thu Jan 01 00:00:14 1970 +0000
217 | | | | date: Thu Jan 01 00:00:14 1970 +0000
218 | | | | summary: (14) merge two known; one immediate right, one far right
218 | | | | summary: (14) merge two known; one immediate right, one far right
219 | | | |
219 | | | |
220 o | | | changeset: 13:c39d0a2b8165
220 o | | | changeset: 13:c39d0a2b8165
221 |\ \ \ \ parent: 9:79ab1812f961
221 |\ \ \ \ parent: 9:79ab1812f961
222 | | | | | parent: 11:c3c395dd8b98
222 | | | | | parent: 11:c3c395dd8b98
223 | | | | | user: test
223 | | | | | user: test
224 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
224 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
225 | | | | | summary: (13) expand
225 | | | | | summary: (13) expand
226 | | | | |
226 | | | | |
227 +---o | | changeset: 12:74dc7aea4494
227 +---o | | changeset: 12:74dc7aea4494
228 | | |/ / parent: 1:3cae7826a707
228 | | |/ / parent: 1:3cae7826a707
229 | | | | parent: 9:79ab1812f961
229 | | | | parent: 9:79ab1812f961
230 | | | | user: test
230 | | | | user: test
231 | | | | date: Thu Jan 01 00:00:12 1970 +0000
231 | | | | date: Thu Jan 01 00:00:12 1970 +0000
232 | | | | summary: (12) merge two known; one immediate right, one far left
232 | | | | summary: (12) merge two known; one immediate right, one far left
233 | | | |
233 | | | |
234 | o | | changeset: 11:c3c395dd8b98
234 | o | | changeset: 11:c3c395dd8b98
235 | |\ \ \ parent: 6:0ca7c061cf45
235 | |\ \ \ parent: 6:0ca7c061cf45
236 | | | | | parent: 10:8094c50149ef
236 | | | | | parent: 10:8094c50149ef
237 | | | | | user: test
237 | | | | | user: test
238 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
238 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
239 | | | | | summary: (11) expand
239 | | | | | summary: (11) expand
240 | | | | |
240 | | | | |
241 | | o---+ changeset: 10:8094c50149ef
241 | | o---+ changeset: 10:8094c50149ef
242 | | | | | parent: 0:7aa22e58e8c1
242 | | | | | parent: 0:7aa22e58e8c1
243 | |/ / / parent: 6:0ca7c061cf45
243 | |/ / / parent: 6:0ca7c061cf45
244 | | | | user: test
244 | | | | user: test
245 | | | | date: Thu Jan 01 00:00:10 1970 +0000
245 | | | | date: Thu Jan 01 00:00:10 1970 +0000
246 | | | | summary: (10) merge two known; one immediate left, one near right
246 | | | | summary: (10) merge two known; one immediate left, one near right
247 | | | |
247 | | | |
248 o | | | changeset: 9:79ab1812f961
248 o | | | changeset: 9:79ab1812f961
249 |\ \ \ \ parent: 7:699392d1259e
249 |\ \ \ \ parent: 7:699392d1259e
250 | | | | | parent: 8:d7aa38594334
250 | | | | | parent: 8:d7aa38594334
251 | | | | | user: test
251 | | | | | user: test
252 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
252 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
253 | | | | | summary: (9) expand
253 | | | | | summary: (9) expand
254 | | | | |
254 | | | | |
255 | o-----+ changeset: 8:d7aa38594334
255 | o-----+ changeset: 8:d7aa38594334
256 | | | | | parent: 0:7aa22e58e8c1
256 | | | | | parent: 0:7aa22e58e8c1
257 |/ / / / parent: 7:699392d1259e
257 |/ / / / parent: 7:699392d1259e
258 | | | | user: test
258 | | | | user: test
259 | | | | date: Thu Jan 01 00:00:08 1970 +0000
259 | | | | date: Thu Jan 01 00:00:08 1970 +0000
260 | | | | summary: (8) merge two known; one immediate left, one far right
260 | | | | summary: (8) merge two known; one immediate left, one far right
261 | | | |
261 | | | |
262 o | | | changeset: 7:699392d1259e
262 o | | | changeset: 7:699392d1259e
263 |\ \ \ \ parent: 2:e8ea2256f9ec
263 |\ \ \ \ parent: 2:e8ea2256f9ec
264 | | | | | parent: 5:3589c3c477ab
264 | | | | | parent: 5:3589c3c477ab
265 | | | | | user: test
265 | | | | | user: test
266 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
266 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
267 | | | | | summary: (7) expand
267 | | | | | summary: (7) expand
268 | | | | |
268 | | | | |
269 +---o | | changeset: 6:0ca7c061cf45
269 +---o | | changeset: 6:0ca7c061cf45
270 | |/ / / parent: 2:e8ea2256f9ec
270 | |/ / / parent: 2:e8ea2256f9ec
271 | | | | parent: 5:3589c3c477ab
271 | | | | parent: 5:3589c3c477ab
272 | | | | user: test
272 | | | | user: test
273 | | | | date: Thu Jan 01 00:00:06 1970 +0000
273 | | | | date: Thu Jan 01 00:00:06 1970 +0000
274 | | | | summary: (6) merge two known; one immediate left, one far left
274 | | | | summary: (6) merge two known; one immediate left, one far left
275 | | | |
275 | | | |
276 | o | | changeset: 5:3589c3c477ab
276 | o | | changeset: 5:3589c3c477ab
277 | |\ \ \ parent: 3:02173ffbf857
277 | |\ \ \ parent: 3:02173ffbf857
278 | | | | | parent: 4:e2cad8233c77
278 | | | | | parent: 4:e2cad8233c77
279 | | | | | user: test
279 | | | | | user: test
280 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
280 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
281 | | | | | summary: (5) expand
281 | | | | | summary: (5) expand
282 | | | | |
282 | | | | |
283 | | o | | changeset: 4:e2cad8233c77
283 | | o | | changeset: 4:e2cad8233c77
284 | |/|/ / parent: 1:3cae7826a707
284 | |/|/ / parent: 1:3cae7826a707
285 | | | | parent: 3:02173ffbf857
285 | | | | parent: 3:02173ffbf857
286 | | | | user: test
286 | | | | user: test
287 | | | | date: Thu Jan 01 00:00:04 1970 +0000
287 | | | | date: Thu Jan 01 00:00:04 1970 +0000
288 | | | | summary: (4) merge two known; one immediate left, one immediate right
288 | | | | summary: (4) merge two known; one immediate left, one immediate right
289 | | | |
289 | | | |
290 | o | | changeset: 3:02173ffbf857
290 | o | | changeset: 3:02173ffbf857
291 |/ / / user: test
291 |/ / / user: test
292 | | | date: Thu Jan 01 00:00:03 1970 +0000
292 | | | date: Thu Jan 01 00:00:03 1970 +0000
293 | | | summary: (3) collapse
293 | | | summary: (3) collapse
294 | | |
294 | | |
295 o | | changeset: 2:e8ea2256f9ec
295 o | | changeset: 2:e8ea2256f9ec
296 |/ / user: test
296 |/ / user: test
297 | | date: Thu Jan 01 00:00:02 1970 +0000
297 | | date: Thu Jan 01 00:00:02 1970 +0000
298 | | summary: (2) collapse
298 | | summary: (2) collapse
299 | |
299 | |
300 o | changeset: 1:3cae7826a707
300 o | changeset: 1:3cae7826a707
301 |/ user: test
301 |/ user: test
302 | date: Thu Jan 01 00:00:01 1970 +0000
302 | date: Thu Jan 01 00:00:01 1970 +0000
303 | summary: (1) collapse
303 | summary: (1) collapse
304 |
304 |
305 o changeset: 0:7aa22e58e8c1
305 o changeset: 0:7aa22e58e8c1
306 user: test
306 user: test
307 date: Thu Jan 01 00:00:00 1970 +0000
307 date: Thu Jan 01 00:00:00 1970 +0000
308 summary: (0) root
308 summary: (0) root
309
309
310 % file glog
311 o changeset: 5:3589c3c477ab
312 parent: 3:02173ffbf857
313 parent: 4:e2cad8233c77
314 user: test
315 date: Thu Jan 01 00:00:05 1970 +0000
316 summary: (5) expand
317
310 % unused arguments
318 % unused arguments
311 hg glog: invalid arguments
319 hg glog: invalid arguments
312 hg glog [OPTION]...
320 hg glog [OPTION]... [FILE]
313
321
314 show revision history alongside an ASCII revision graph
322 show revision history alongside an ASCII revision graph
315 failed
323 failed
General Comments 0
You need to be logged in to leave comments. Login now