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