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