##// END OF EJS Templates
graphlog: style with header and footer (issue2395)...
Mads Kiilerich -
r12579:aa1faede default
parent child Browse files
Show More
@@ -1,382 +1,384
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 the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 '''command to view revision graphs from a shell
8 '''command to view revision graphs from a shell
9
9
10 This extension adds a --graph option to the incoming, outgoing and log
10 This extension adds a --graph option to the incoming, outgoing and log
11 commands. When this options is given, an ASCII representation of the
11 commands. When this options is given, an ASCII representation of the
12 revision graph is also shown.
12 revision graph is also shown.
13 '''
13 '''
14
14
15 import os
15 import os
16 from mercurial.cmdutil import revrange, show_changeset
16 from mercurial.cmdutil import revrange, show_changeset
17 from mercurial.commands import templateopts
17 from mercurial.commands import templateopts
18 from mercurial.i18n import _
18 from mercurial.i18n import _
19 from mercurial.node import nullrev
19 from mercurial.node import nullrev
20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions
20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions
21 from mercurial import hg, url, util, graphmod, discovery
21 from mercurial import hg, url, util, graphmod, discovery
22
22
23 ASCIIDATA = 'ASC'
23 ASCIIDATA = 'ASC'
24
24
25 def asciiedges(seen, rev, parents):
25 def asciiedges(seen, rev, parents):
26 """adds edge info to changelog DAG walk suitable for ascii()"""
26 """adds edge info to changelog DAG walk suitable for ascii()"""
27 if rev not in seen:
27 if rev not in seen:
28 seen.append(rev)
28 seen.append(rev)
29 nodeidx = seen.index(rev)
29 nodeidx = seen.index(rev)
30
30
31 knownparents = []
31 knownparents = []
32 newparents = []
32 newparents = []
33 for parent in parents:
33 for parent in parents:
34 if parent in seen:
34 if parent in seen:
35 knownparents.append(parent)
35 knownparents.append(parent)
36 else:
36 else:
37 newparents.append(parent)
37 newparents.append(parent)
38
38
39 ncols = len(seen)
39 ncols = len(seen)
40 seen[nodeidx:nodeidx + 1] = newparents
40 seen[nodeidx:nodeidx + 1] = newparents
41 edges = [(nodeidx, seen.index(p)) for p in knownparents]
41 edges = [(nodeidx, seen.index(p)) for p in knownparents]
42
42
43 if len(newparents) > 0:
43 if len(newparents) > 0:
44 edges.append((nodeidx, nodeidx))
44 edges.append((nodeidx, nodeidx))
45 if len(newparents) > 1:
45 if len(newparents) > 1:
46 edges.append((nodeidx, nodeidx + 1))
46 edges.append((nodeidx, nodeidx + 1))
47
47
48 nmorecols = len(seen) - ncols
48 nmorecols = len(seen) - ncols
49 return nodeidx, edges, ncols, nmorecols
49 return nodeidx, edges, ncols, nmorecols
50
50
51 def fix_long_right_edges(edges):
51 def fix_long_right_edges(edges):
52 for (i, (start, end)) in enumerate(edges):
52 for (i, (start, end)) in enumerate(edges):
53 if end > start:
53 if end > start:
54 edges[i] = (start, end + 1)
54 edges[i] = (start, end + 1)
55
55
56 def get_nodeline_edges_tail(
56 def get_nodeline_edges_tail(
57 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
57 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
58 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
58 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
59 # Still going in the same non-vertical direction.
59 # Still going in the same non-vertical direction.
60 if n_columns_diff == -1:
60 if n_columns_diff == -1:
61 start = max(node_index + 1, p_node_index)
61 start = max(node_index + 1, p_node_index)
62 tail = ["|", " "] * (start - node_index - 1)
62 tail = ["|", " "] * (start - node_index - 1)
63 tail.extend(["/", " "] * (n_columns - start))
63 tail.extend(["/", " "] * (n_columns - start))
64 return tail
64 return tail
65 else:
65 else:
66 return ["\\", " "] * (n_columns - node_index - 1)
66 return ["\\", " "] * (n_columns - node_index - 1)
67 else:
67 else:
68 return ["|", " "] * (n_columns - node_index - 1)
68 return ["|", " "] * (n_columns - node_index - 1)
69
69
70 def draw_edges(edges, nodeline, interline):
70 def draw_edges(edges, nodeline, interline):
71 for (start, end) in edges:
71 for (start, end) in edges:
72 if start == end + 1:
72 if start == end + 1:
73 interline[2 * end + 1] = "/"
73 interline[2 * end + 1] = "/"
74 elif start == end - 1:
74 elif start == end - 1:
75 interline[2 * start + 1] = "\\"
75 interline[2 * start + 1] = "\\"
76 elif start == end:
76 elif start == end:
77 interline[2 * start] = "|"
77 interline[2 * start] = "|"
78 else:
78 else:
79 nodeline[2 * end] = "+"
79 nodeline[2 * end] = "+"
80 if start > end:
80 if start > end:
81 (start, end) = (end, start)
81 (start, end) = (end, start)
82 for i in range(2 * start + 1, 2 * end):
82 for i in range(2 * start + 1, 2 * end):
83 if nodeline[i] != "+":
83 if nodeline[i] != "+":
84 nodeline[i] = "-"
84 nodeline[i] = "-"
85
85
86 def get_padding_line(ni, n_columns, edges):
86 def get_padding_line(ni, n_columns, edges):
87 line = []
87 line = []
88 line.extend(["|", " "] * ni)
88 line.extend(["|", " "] * ni)
89 if (ni, ni - 1) in edges or (ni, ni) in edges:
89 if (ni, ni - 1) in edges or (ni, ni) in edges:
90 # (ni, ni - 1) (ni, ni)
90 # (ni, ni - 1) (ni, ni)
91 # | | | | | | | |
91 # | | | | | | | |
92 # +---o | | o---+
92 # +---o | | o---+
93 # | | c | | c | |
93 # | | c | | c | |
94 # | |/ / | |/ /
94 # | |/ / | |/ /
95 # | | | | | |
95 # | | | | | |
96 c = "|"
96 c = "|"
97 else:
97 else:
98 c = " "
98 c = " "
99 line.extend([c, " "])
99 line.extend([c, " "])
100 line.extend(["|", " "] * (n_columns - ni - 1))
100 line.extend(["|", " "] * (n_columns - ni - 1))
101 return line
101 return line
102
102
103 def asciistate():
103 def asciistate():
104 """returns the initial value for the "state" argument to ascii()"""
104 """returns the initial value for the "state" argument to ascii()"""
105 return [0, 0]
105 return [0, 0]
106
106
107 def ascii(ui, state, type, char, text, coldata):
107 def ascii(ui, state, type, char, text, coldata):
108 """prints an ASCII graph of the DAG
108 """prints an ASCII graph of the DAG
109
109
110 takes the following arguments (one call per node in the graph):
110 takes the following arguments (one call per node in the graph):
111
111
112 - ui to write to
112 - ui to write to
113 - Somewhere to keep the needed state in (init to asciistate())
113 - Somewhere to keep the needed state in (init to asciistate())
114 - Column of the current node in the set of ongoing edges.
114 - Column of the current node in the set of ongoing edges.
115 - Type indicator of node data == ASCIIDATA.
115 - Type indicator of node data == ASCIIDATA.
116 - Payload: (char, lines):
116 - Payload: (char, lines):
117 - Character to use as node's symbol.
117 - Character to use as node's symbol.
118 - List of lines to display as the node's text.
118 - List of lines to display as the node's text.
119 - Edges; a list of (col, next_col) indicating the edges between
119 - Edges; a list of (col, next_col) indicating the edges between
120 the current node and its parents.
120 the current node and its parents.
121 - Number of columns (ongoing edges) in the current revision.
121 - Number of columns (ongoing edges) in the current revision.
122 - The difference between the number of columns (ongoing edges)
122 - The difference between the number of columns (ongoing edges)
123 in the next revision and the number of columns (ongoing edges)
123 in the next revision and the number of columns (ongoing edges)
124 in the current revision. That is: -1 means one column removed;
124 in the current revision. That is: -1 means one column removed;
125 0 means no columns added or removed; 1 means one column added.
125 0 means no columns added or removed; 1 means one column added.
126 """
126 """
127
127
128 idx, edges, ncols, coldiff = coldata
128 idx, edges, ncols, coldiff = coldata
129 assert -2 < coldiff < 2
129 assert -2 < coldiff < 2
130 if coldiff == -1:
130 if coldiff == -1:
131 # Transform
131 # Transform
132 #
132 #
133 # | | | | | |
133 # | | | | | |
134 # o | | into o---+
134 # o | | into o---+
135 # |X / |/ /
135 # |X / |/ /
136 # | | | |
136 # | | | |
137 fix_long_right_edges(edges)
137 fix_long_right_edges(edges)
138
138
139 # add_padding_line says whether to rewrite
139 # add_padding_line says whether to rewrite
140 #
140 #
141 # | | | | | | | |
141 # | | | | | | | |
142 # | o---+ into | o---+
142 # | o---+ into | o---+
143 # | / / | | | # <--- padding line
143 # | / / | | | # <--- padding line
144 # o | | | / /
144 # o | | | / /
145 # o | |
145 # o | |
146 add_padding_line = (len(text) > 2 and coldiff == -1 and
146 add_padding_line = (len(text) > 2 and coldiff == -1 and
147 [x for (x, y) in edges if x + 1 < y])
147 [x for (x, y) in edges if x + 1 < y])
148
148
149 # fix_nodeline_tail says whether to rewrite
149 # fix_nodeline_tail says whether to rewrite
150 #
150 #
151 # | | o | | | | o | |
151 # | | o | | | | o | |
152 # | | |/ / | | |/ /
152 # | | |/ / | | |/ /
153 # | o | | into | o / / # <--- fixed nodeline tail
153 # | o | | into | o / / # <--- fixed nodeline tail
154 # | |/ / | |/ /
154 # | |/ / | |/ /
155 # o | | o | |
155 # o | | o | |
156 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
156 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
157
157
158 # nodeline is the line containing the node character (typically o)
158 # nodeline is the line containing the node character (typically o)
159 nodeline = ["|", " "] * idx
159 nodeline = ["|", " "] * idx
160 nodeline.extend([char, " "])
160 nodeline.extend([char, " "])
161
161
162 nodeline.extend(
162 nodeline.extend(
163 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
163 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
164 state[0], fix_nodeline_tail))
164 state[0], fix_nodeline_tail))
165
165
166 # shift_interline is the line containing the non-vertical
166 # shift_interline is the line containing the non-vertical
167 # edges between this entry and the next
167 # edges between this entry and the next
168 shift_interline = ["|", " "] * idx
168 shift_interline = ["|", " "] * idx
169 if coldiff == -1:
169 if coldiff == -1:
170 n_spaces = 1
170 n_spaces = 1
171 edge_ch = "/"
171 edge_ch = "/"
172 elif coldiff == 0:
172 elif coldiff == 0:
173 n_spaces = 2
173 n_spaces = 2
174 edge_ch = "|"
174 edge_ch = "|"
175 else:
175 else:
176 n_spaces = 3
176 n_spaces = 3
177 edge_ch = "\\"
177 edge_ch = "\\"
178 shift_interline.extend(n_spaces * [" "])
178 shift_interline.extend(n_spaces * [" "])
179 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
179 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
180
180
181 # draw edges from the current node to its parents
181 # draw edges from the current node to its parents
182 draw_edges(edges, nodeline, shift_interline)
182 draw_edges(edges, nodeline, shift_interline)
183
183
184 # lines is the list of all graph lines to print
184 # lines is the list of all graph lines to print
185 lines = [nodeline]
185 lines = [nodeline]
186 if add_padding_line:
186 if add_padding_line:
187 lines.append(get_padding_line(idx, ncols, edges))
187 lines.append(get_padding_line(idx, ncols, edges))
188 lines.append(shift_interline)
188 lines.append(shift_interline)
189
189
190 # make sure that there are as many graph lines as there are
190 # make sure that there are as many graph lines as there are
191 # log strings
191 # log strings
192 while len(text) < len(lines):
192 while len(text) < len(lines):
193 text.append("")
193 text.append("")
194 if len(lines) < len(text):
194 if len(lines) < len(text):
195 extra_interline = ["|", " "] * (ncols + coldiff)
195 extra_interline = ["|", " "] * (ncols + coldiff)
196 while len(lines) < len(text):
196 while len(lines) < len(text):
197 lines.append(extra_interline)
197 lines.append(extra_interline)
198
198
199 # print lines
199 # print lines
200 indentation_level = max(ncols, ncols + coldiff)
200 indentation_level = max(ncols, ncols + coldiff)
201 for (line, logstr) in zip(lines, text):
201 for (line, logstr) in zip(lines, text):
202 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
202 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
203 ui.write(ln.rstrip() + '\n')
203 ui.write(ln.rstrip() + '\n')
204
204
205 # ... and start over
205 # ... and start over
206 state[0] = coldiff
206 state[0] = coldiff
207 state[1] = idx
207 state[1] = idx
208
208
209 def get_revs(repo, rev_opt):
209 def get_revs(repo, rev_opt):
210 if rev_opt:
210 if rev_opt:
211 revs = revrange(repo, rev_opt)
211 revs = revrange(repo, rev_opt)
212 if len(revs) == 0:
212 if len(revs) == 0:
213 return (nullrev, nullrev)
213 return (nullrev, nullrev)
214 return (max(revs), min(revs))
214 return (max(revs), min(revs))
215 else:
215 else:
216 return (len(repo) - 1, 0)
216 return (len(repo) - 1, 0)
217
217
218 def check_unsupported_flags(opts):
218 def check_unsupported_flags(opts):
219 for op in ["follow", "follow_first", "date", "copies", "keyword", "remove",
219 for op in ["follow", "follow_first", "date", "copies", "keyword", "remove",
220 "only_merges", "user", "branch", "only_branch", "prune",
220 "only_merges", "user", "branch", "only_branch", "prune",
221 "newest_first", "no_merges", "include", "exclude"]:
221 "newest_first", "no_merges", "include", "exclude"]:
222 if op in opts and opts[op]:
222 if op in opts and opts[op]:
223 raise util.Abort(_("--graph option is incompatible with --%s")
223 raise util.Abort(_("--graph option is incompatible with --%s")
224 % op.replace("_", "-"))
224 % op.replace("_", "-"))
225
225
226 def generate(ui, dag, displayer, showparents, edgefn):
226 def generate(ui, dag, displayer, showparents, edgefn):
227 seen, state = [], asciistate()
227 seen, state = [], asciistate()
228 for rev, type, ctx, parents in dag:
228 for rev, type, ctx, parents in dag:
229 char = ctx.node() in showparents and '@' or 'o'
229 char = ctx.node() in showparents and '@' or 'o'
230 displayer.show(ctx)
230 displayer.show(ctx)
231 lines = displayer.hunk.pop(rev).split('\n')[:-1]
231 lines = displayer.hunk.pop(rev).split('\n')[:-1]
232 displayer.flush(rev)
232 ascii(ui, state, type, char, lines, edgefn(seen, rev, parents))
233 ascii(ui, state, type, char, lines, edgefn(seen, rev, parents))
234 displayer.close()
233
235
234 def graphlog(ui, repo, path=None, **opts):
236 def graphlog(ui, repo, path=None, **opts):
235 """show revision history alongside an ASCII revision graph
237 """show revision history alongside an ASCII revision graph
236
238
237 Print a revision history alongside a revision graph drawn with
239 Print a revision history alongside a revision graph drawn with
238 ASCII characters.
240 ASCII characters.
239
241
240 Nodes printed as an @ character are parents of the working
242 Nodes printed as an @ character are parents of the working
241 directory.
243 directory.
242 """
244 """
243
245
244 check_unsupported_flags(opts)
246 check_unsupported_flags(opts)
245 limit = cmdutil.loglimit(opts)
247 limit = cmdutil.loglimit(opts)
246 start, stop = get_revs(repo, opts["rev"])
248 start, stop = get_revs(repo, opts["rev"])
247 if start == nullrev:
249 if start == nullrev:
248 return
250 return
249
251
250 if path:
252 if path:
251 path = util.canonpath(repo.root, os.getcwd(), path)
253 path = util.canonpath(repo.root, os.getcwd(), path)
252 if path: # could be reset in canonpath
254 if path: # could be reset in canonpath
253 revdag = graphmod.filerevs(repo, path, start, stop, limit)
255 revdag = graphmod.filerevs(repo, path, start, stop, limit)
254 else:
256 else:
255 if limit is not None:
257 if limit is not None:
256 stop = max(stop, start - limit + 1)
258 stop = max(stop, start - limit + 1)
257 revdag = graphmod.revisions(repo, start, stop)
259 revdag = graphmod.revisions(repo, start, stop)
258
260
259 displayer = show_changeset(ui, repo, opts, buffered=True)
261 displayer = show_changeset(ui, repo, opts, buffered=True)
260 showparents = [ctx.node() for ctx in repo[None].parents()]
262 showparents = [ctx.node() for ctx in repo[None].parents()]
261 generate(ui, revdag, displayer, showparents, asciiedges)
263 generate(ui, revdag, displayer, showparents, asciiedges)
262
264
263 def graphrevs(repo, nodes, opts):
265 def graphrevs(repo, nodes, opts):
264 limit = cmdutil.loglimit(opts)
266 limit = cmdutil.loglimit(opts)
265 nodes.reverse()
267 nodes.reverse()
266 if limit is not None:
268 if limit is not None:
267 nodes = nodes[:limit]
269 nodes = nodes[:limit]
268 return graphmod.nodes(repo, nodes)
270 return graphmod.nodes(repo, nodes)
269
271
270 def goutgoing(ui, repo, dest=None, **opts):
272 def goutgoing(ui, repo, dest=None, **opts):
271 """show the outgoing changesets alongside an ASCII revision graph
273 """show the outgoing changesets alongside an ASCII revision graph
272
274
273 Print the outgoing changesets alongside a revision graph drawn with
275 Print the outgoing changesets alongside a revision graph drawn with
274 ASCII characters.
276 ASCII characters.
275
277
276 Nodes printed as an @ character are parents of the working
278 Nodes printed as an @ character are parents of the working
277 directory.
279 directory.
278 """
280 """
279
281
280 check_unsupported_flags(opts)
282 check_unsupported_flags(opts)
281 dest = ui.expandpath(dest or 'default-push', dest or 'default')
283 dest = ui.expandpath(dest or 'default-push', dest or 'default')
282 dest, branches = hg.parseurl(dest, opts.get('branch'))
284 dest, branches = hg.parseurl(dest, opts.get('branch'))
283 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
285 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
284 other = hg.repository(hg.remoteui(ui, opts), dest)
286 other = hg.repository(hg.remoteui(ui, opts), dest)
285 if revs:
287 if revs:
286 revs = [repo.lookup(rev) for rev in revs]
288 revs = [repo.lookup(rev) for rev in revs]
287 ui.status(_('comparing with %s\n') % url.hidepassword(dest))
289 ui.status(_('comparing with %s\n') % url.hidepassword(dest))
288 o = discovery.findoutgoing(repo, other, force=opts.get('force'))
290 o = discovery.findoutgoing(repo, other, force=opts.get('force'))
289 if not o:
291 if not o:
290 ui.status(_("no changes found\n"))
292 ui.status(_("no changes found\n"))
291 return
293 return
292
294
293 o = repo.changelog.nodesbetween(o, revs)[0]
295 o = repo.changelog.nodesbetween(o, revs)[0]
294 revdag = graphrevs(repo, o, opts)
296 revdag = graphrevs(repo, o, opts)
295 displayer = show_changeset(ui, repo, opts, buffered=True)
297 displayer = show_changeset(ui, repo, opts, buffered=True)
296 showparents = [ctx.node() for ctx in repo[None].parents()]
298 showparents = [ctx.node() for ctx in repo[None].parents()]
297 generate(ui, revdag, displayer, showparents, asciiedges)
299 generate(ui, revdag, displayer, showparents, asciiedges)
298
300
299 def gincoming(ui, repo, source="default", **opts):
301 def gincoming(ui, repo, source="default", **opts):
300 """show the incoming changesets alongside an ASCII revision graph
302 """show the incoming changesets alongside an ASCII revision graph
301
303
302 Print the incoming changesets alongside a revision graph drawn with
304 Print the incoming changesets alongside a revision graph drawn with
303 ASCII characters.
305 ASCII characters.
304
306
305 Nodes printed as an @ character are parents of the working
307 Nodes printed as an @ character are parents of the working
306 directory.
308 directory.
307 """
309 """
308
310
309 check_unsupported_flags(opts)
311 check_unsupported_flags(opts)
310 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
312 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
311 other = hg.repository(hg.remoteui(repo, opts), source)
313 other = hg.repository(hg.remoteui(repo, opts), source)
312 revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
314 revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
313 ui.status(_('comparing with %s\n') % url.hidepassword(source))
315 ui.status(_('comparing with %s\n') % url.hidepassword(source))
314 if revs:
316 if revs:
315 revs = [other.lookup(rev) for rev in revs]
317 revs = [other.lookup(rev) for rev in revs]
316 incoming = discovery.findincoming(repo, other, heads=revs,
318 incoming = discovery.findincoming(repo, other, heads=revs,
317 force=opts["force"])
319 force=opts["force"])
318 if not incoming:
320 if not incoming:
319 try:
321 try:
320 os.unlink(opts["bundle"])
322 os.unlink(opts["bundle"])
321 except:
323 except:
322 pass
324 pass
323 ui.status(_("no changes found\n"))
325 ui.status(_("no changes found\n"))
324 return
326 return
325
327
326 cleanup = None
328 cleanup = None
327 try:
329 try:
328
330
329 fname = opts["bundle"]
331 fname = opts["bundle"]
330 if fname or not other.local():
332 if fname or not other.local():
331 # create a bundle (uncompressed if other repo is not local)
333 # create a bundle (uncompressed if other repo is not local)
332 if revs is None:
334 if revs is None:
333 cg = other.changegroup(incoming, "incoming")
335 cg = other.changegroup(incoming, "incoming")
334 else:
336 else:
335 cg = other.changegroupsubset(incoming, revs, 'incoming')
337 cg = other.changegroupsubset(incoming, revs, 'incoming')
336 bundletype = other.local() and "HG10BZ" or "HG10UN"
338 bundletype = other.local() and "HG10BZ" or "HG10UN"
337 fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
339 fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
338 # keep written bundle?
340 # keep written bundle?
339 if opts["bundle"]:
341 if opts["bundle"]:
340 cleanup = None
342 cleanup = None
341 if not other.local():
343 if not other.local():
342 # use the created uncompressed bundlerepo
344 # use the created uncompressed bundlerepo
343 other = bundlerepo.bundlerepository(ui, repo.root, fname)
345 other = bundlerepo.bundlerepository(ui, repo.root, fname)
344
346
345 chlist = other.changelog.nodesbetween(incoming, revs)[0]
347 chlist = other.changelog.nodesbetween(incoming, revs)[0]
346 revdag = graphrevs(other, chlist, opts)
348 revdag = graphrevs(other, chlist, opts)
347 displayer = show_changeset(ui, other, opts, buffered=True)
349 displayer = show_changeset(ui, other, opts, buffered=True)
348 showparents = [ctx.node() for ctx in repo[None].parents()]
350 showparents = [ctx.node() for ctx in repo[None].parents()]
349 generate(ui, revdag, displayer, showparents, asciiedges)
351 generate(ui, revdag, displayer, showparents, asciiedges)
350
352
351 finally:
353 finally:
352 if hasattr(other, 'close'):
354 if hasattr(other, 'close'):
353 other.close()
355 other.close()
354 if cleanup:
356 if cleanup:
355 os.unlink(cleanup)
357 os.unlink(cleanup)
356
358
357 def uisetup(ui):
359 def uisetup(ui):
358 '''Initialize the extension.'''
360 '''Initialize the extension.'''
359 _wrapcmd(ui, 'log', commands.table, graphlog)
361 _wrapcmd(ui, 'log', commands.table, graphlog)
360 _wrapcmd(ui, 'incoming', commands.table, gincoming)
362 _wrapcmd(ui, 'incoming', commands.table, gincoming)
361 _wrapcmd(ui, 'outgoing', commands.table, goutgoing)
363 _wrapcmd(ui, 'outgoing', commands.table, goutgoing)
362
364
363 def _wrapcmd(ui, cmd, table, wrapfn):
365 def _wrapcmd(ui, cmd, table, wrapfn):
364 '''wrap the command'''
366 '''wrap the command'''
365 def graph(orig, *args, **kwargs):
367 def graph(orig, *args, **kwargs):
366 if kwargs['graph']:
368 if kwargs['graph']:
367 return wrapfn(*args, **kwargs)
369 return wrapfn(*args, **kwargs)
368 return orig(*args, **kwargs)
370 return orig(*args, **kwargs)
369 entry = extensions.wrapcommand(table, cmd, graph)
371 entry = extensions.wrapcommand(table, cmd, graph)
370 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
372 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
371
373
372 cmdtable = {
374 cmdtable = {
373 "glog":
375 "glog":
374 (graphlog,
376 (graphlog,
375 [('l', 'limit', '',
377 [('l', 'limit', '',
376 _('limit number of changes displayed'), _('NUM')),
378 _('limit number of changes displayed'), _('NUM')),
377 ('p', 'patch', False, _('show patch')),
379 ('p', 'patch', False, _('show patch')),
378 ('r', 'rev', [],
380 ('r', 'rev', [],
379 _('show the specified revision or range'), _('REV')),
381 _('show the specified revision or range'), _('REV')),
380 ] + templateopts,
382 ] + templateopts,
381 _('hg glog [OPTION]... [FILE]')),
383 _('hg glog [OPTION]... [FILE]')),
382 }
384 }
@@ -1,879 +1,890
1 @ (34) head
1 @ (34) head
2 |
2 |
3 | o (33) head
3 | o (33) head
4 | |
4 | |
5 o | (32) expand
5 o | (32) expand
6 |\ \
6 |\ \
7 | o \ (31) expand
7 | o \ (31) expand
8 | |\ \
8 | |\ \
9 | | o \ (30) expand
9 | | o \ (30) expand
10 | | |\ \
10 | | |\ \
11 | | | o | (29) regular commit
11 | | | o | (29) regular commit
12 | | | | |
12 | | | | |
13 | | o | | (28) merge zero known
13 | | o | | (28) merge zero known
14 | | |\ \ \
14 | | |\ \ \
15 o | | | | | (27) collapse
15 o | | | | | (27) collapse
16 |/ / / / /
16 |/ / / / /
17 | | o---+ (26) merge one known; far right
17 | | o---+ (26) merge one known; far right
18 | | | | |
18 | | | | |
19 +---o | | (25) merge one known; far left
19 +---o | | (25) merge one known; far left
20 | | | | |
20 | | | | |
21 | | o | | (24) merge one known; immediate right
21 | | o | | (24) merge one known; immediate right
22 | | |\| |
22 | | |\| |
23 | | o | | (23) merge one known; immediate left
23 | | o | | (23) merge one known; immediate left
24 | |/| | |
24 | |/| | |
25 +---o---+ (22) merge two known; one far left, one far right
25 +---o---+ (22) merge two known; one far left, one far right
26 | | / /
26 | | / /
27 o | | | (21) expand
27 o | | | (21) expand
28 |\ \ \ \
28 |\ \ \ \
29 | o---+-+ (20) merge two known; two far right
29 | o---+-+ (20) merge two known; two far right
30 | / / /
30 | / / /
31 o | | | (19) expand
31 o | | | (19) expand
32 |\ \ \ \
32 |\ \ \ \
33 +---+---o (18) merge two known; two far left
33 +---+---o (18) merge two known; two far left
34 | | | |
34 | | | |
35 | o | | (17) expand
35 | o | | (17) expand
36 | |\ \ \
36 | |\ \ \
37 | | o---+ (16) merge two known; one immediate right, one near right
37 | | o---+ (16) merge two known; one immediate right, one near right
38 | | |/ /
38 | | |/ /
39 o | | | (15) expand
39 o | | | (15) expand
40 |\ \ \ \
40 |\ \ \ \
41 | o-----+ (14) merge two known; one immediate right, one far right
41 | o-----+ (14) merge two known; one immediate right, one far right
42 | |/ / /
42 | |/ / /
43 o | | | (13) expand
43 o | | | (13) expand
44 |\ \ \ \
44 |\ \ \ \
45 +---o | | (12) merge two known; one immediate right, one far left
45 +---o | | (12) merge two known; one immediate right, one far left
46 | | |/ /
46 | | |/ /
47 | o | | (11) expand
47 | o | | (11) expand
48 | |\ \ \
48 | |\ \ \
49 | | o---+ (10) merge two known; one immediate left, one near right
49 | | o---+ (10) merge two known; one immediate left, one near right
50 | |/ / /
50 | |/ / /
51 o | | | (9) expand
51 o | | | (9) expand
52 |\ \ \ \
52 |\ \ \ \
53 | o-----+ (8) merge two known; one immediate left, one far right
53 | o-----+ (8) merge two known; one immediate left, one far right
54 |/ / / /
54 |/ / / /
55 o | | | (7) expand
55 o | | | (7) expand
56 |\ \ \ \
56 |\ \ \ \
57 +---o | | (6) merge two known; one immediate left, one far left
57 +---o | | (6) merge two known; one immediate left, one far left
58 | |/ / /
58 | |/ / /
59 | o | | (5) expand
59 | o | | (5) expand
60 | |\ \ \
60 | |\ \ \
61 | | o | | (4) merge two known; one immediate left, one immediate right
61 | | o | | (4) merge two known; one immediate left, one immediate right
62 | |/|/ /
62 | |/|/ /
63 | o / / (3) collapse
63 | o / / (3) collapse
64 |/ / /
64 |/ / /
65 o / / (2) collapse
65 o / / (2) collapse
66 |/ /
66 |/ /
67 o / (1) collapse
67 o / (1) collapse
68 |/
68 |/
69 o (0) root
69 o (0) root
70
70
71
71
72 $ "$TESTDIR/hghave" no-outer-repo || exit 80
72 $ "$TESTDIR/hghave" no-outer-repo || exit 80
73
73
74 $ commit()
74 $ commit()
75 > {
75 > {
76 > rev=$1
76 > rev=$1
77 > msg=$2
77 > msg=$2
78 > shift 2
78 > shift 2
79 > if [ "$#" -gt 0 ]; then
79 > if [ "$#" -gt 0 ]; then
80 > hg debugsetparents "$@"
80 > hg debugsetparents "$@"
81 > fi
81 > fi
82 > echo $rev > a
82 > echo $rev > a
83 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
83 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
84 > }
84 > }
85
85
86 $ echo "[extensions]" >> $HGRCPATH
86 $ echo "[extensions]" >> $HGRCPATH
87 $ echo "graphlog=" >> $HGRCPATH
87 $ echo "graphlog=" >> $HGRCPATH
88
88
89 $ hg init repo
89 $ hg init repo
90 $ cd repo
90 $ cd repo
91
91
92 Empty repo:
92 Empty repo:
93
93
94 $ hg glog
94 $ hg glog
95
95
96
96
97 Building DAG:
97 Building DAG:
98
98
99 $ commit 0 "root"
99 $ commit 0 "root"
100 $ commit 1 "collapse" 0
100 $ commit 1 "collapse" 0
101 $ commit 2 "collapse" 1
101 $ commit 2 "collapse" 1
102 $ commit 3 "collapse" 2
102 $ commit 3 "collapse" 2
103 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
103 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
104 $ commit 5 "expand" 3 4
104 $ commit 5 "expand" 3 4
105 $ commit 6 "merge two known; one immediate left, one far left" 2 5
105 $ commit 6 "merge two known; one immediate left, one far left" 2 5
106 $ commit 7 "expand" 2 5
106 $ commit 7 "expand" 2 5
107 $ commit 8 "merge two known; one immediate left, one far right" 0 7
107 $ commit 8 "merge two known; one immediate left, one far right" 0 7
108 $ commit 9 "expand" 7 8
108 $ commit 9 "expand" 7 8
109 $ commit 10 "merge two known; one immediate left, one near right" 0 6
109 $ commit 10 "merge two known; one immediate left, one near right" 0 6
110 $ commit 11 "expand" 6 10
110 $ commit 11 "expand" 6 10
111 $ commit 12 "merge two known; one immediate right, one far left" 1 9
111 $ commit 12 "merge two known; one immediate right, one far left" 1 9
112 $ commit 13 "expand" 9 11
112 $ commit 13 "expand" 9 11
113 $ commit 14 "merge two known; one immediate right, one far right" 0 12
113 $ commit 14 "merge two known; one immediate right, one far right" 0 12
114 $ commit 15 "expand" 13 14
114 $ commit 15 "expand" 13 14
115 $ commit 16 "merge two known; one immediate right, one near right" 0 1
115 $ commit 16 "merge two known; one immediate right, one near right" 0 1
116 $ commit 17 "expand" 12 16
116 $ commit 17 "expand" 12 16
117 $ commit 18 "merge two known; two far left" 1 15
117 $ commit 18 "merge two known; two far left" 1 15
118 $ commit 19 "expand" 15 17
118 $ commit 19 "expand" 15 17
119 $ commit 20 "merge two known; two far right" 0 18
119 $ commit 20 "merge two known; two far right" 0 18
120 $ commit 21 "expand" 19 20
120 $ commit 21 "expand" 19 20
121 $ commit 22 "merge two known; one far left, one far right" 18 21
121 $ commit 22 "merge two known; one far left, one far right" 18 21
122 $ commit 23 "merge one known; immediate left" 1 22
122 $ commit 23 "merge one known; immediate left" 1 22
123 $ commit 24 "merge one known; immediate right" 0 23
123 $ commit 24 "merge one known; immediate right" 0 23
124 $ commit 25 "merge one known; far left" 21 24
124 $ commit 25 "merge one known; far left" 21 24
125 $ commit 26 "merge one known; far right" 18 25
125 $ commit 26 "merge one known; far right" 18 25
126 $ commit 27 "collapse" 21
126 $ commit 27 "collapse" 21
127 $ commit 28 "merge zero known" 1 26
127 $ commit 28 "merge zero known" 1 26
128 $ commit 29 "regular commit" 0
128 $ commit 29 "regular commit" 0
129 $ commit 30 "expand" 28 29
129 $ commit 30 "expand" 28 29
130 $ commit 31 "expand" 21 30
130 $ commit 31 "expand" 21 30
131 $ commit 32 "expand" 27 31
131 $ commit 32 "expand" 27 31
132 $ commit 33 "head" 18
132 $ commit 33 "head" 18
133 $ commit 34 "head" 32
133 $ commit 34 "head" 32
134
134
135
135
136 $ hg glog -q
136 $ hg glog -q
137 @ 34:fea3ac5810e0
137 @ 34:fea3ac5810e0
138 |
138 |
139 | o 33:68608f5145f9
139 | o 33:68608f5145f9
140 | |
140 | |
141 o | 32:d06dffa21a31
141 o | 32:d06dffa21a31
142 |\ \
142 |\ \
143 | o \ 31:621d83e11f67
143 | o \ 31:621d83e11f67
144 | |\ \
144 | |\ \
145 | | o \ 30:6e11cd4b648f
145 | | o \ 30:6e11cd4b648f
146 | | |\ \
146 | | |\ \
147 | | | o | 29:cd9bb2be7593
147 | | | o | 29:cd9bb2be7593
148 | | | | |
148 | | | | |
149 | | o | | 28:44ecd0b9ae99
149 | | o | | 28:44ecd0b9ae99
150 | | |\ \ \
150 | | |\ \ \
151 o | | | | | 27:886ed638191b
151 o | | | | | 27:886ed638191b
152 |/ / / / /
152 |/ / / / /
153 | | o---+ 26:7f25b6c2f0b9
153 | | o---+ 26:7f25b6c2f0b9
154 | | | | |
154 | | | | |
155 +---o | | 25:91da8ed57247
155 +---o | | 25:91da8ed57247
156 | | | | |
156 | | | | |
157 | | o | | 24:a9c19a3d96b7
157 | | o | | 24:a9c19a3d96b7
158 | | |\| |
158 | | |\| |
159 | | o | | 23:a01cddf0766d
159 | | o | | 23:a01cddf0766d
160 | |/| | |
160 | |/| | |
161 +---o---+ 22:e0d9cccacb5d
161 +---o---+ 22:e0d9cccacb5d
162 | | / /
162 | | / /
163 o | | | 21:d42a756af44d
163 o | | | 21:d42a756af44d
164 |\ \ \ \
164 |\ \ \ \
165 | o---+-+ 20:d30ed6450e32
165 | o---+-+ 20:d30ed6450e32
166 | / / /
166 | / / /
167 o | | | 19:31ddc2c1573b
167 o | | | 19:31ddc2c1573b
168 |\ \ \ \
168 |\ \ \ \
169 +---+---o 18:1aa84d96232a
169 +---+---o 18:1aa84d96232a
170 | | | |
170 | | | |
171 | o | | 17:44765d7c06e0
171 | o | | 17:44765d7c06e0
172 | |\ \ \
172 | |\ \ \
173 | | o---+ 16:3677d192927d
173 | | o---+ 16:3677d192927d
174 | | |/ /
174 | | |/ /
175 o | | | 15:1dda3f72782d
175 o | | | 15:1dda3f72782d
176 |\ \ \ \
176 |\ \ \ \
177 | o-----+ 14:8eac370358ef
177 | o-----+ 14:8eac370358ef
178 | |/ / /
178 | |/ / /
179 o | | | 13:22d8966a97e3
179 o | | | 13:22d8966a97e3
180 |\ \ \ \
180 |\ \ \ \
181 +---o | | 12:86b91144a6e9
181 +---o | | 12:86b91144a6e9
182 | | |/ /
182 | | |/ /
183 | o | | 11:832d76e6bdf2
183 | o | | 11:832d76e6bdf2
184 | |\ \ \
184 | |\ \ \
185 | | o---+ 10:74c64d036d72
185 | | o---+ 10:74c64d036d72
186 | |/ / /
186 | |/ / /
187 o | | | 9:7010c0af0a35
187 o | | | 9:7010c0af0a35
188 |\ \ \ \
188 |\ \ \ \
189 | o-----+ 8:7a0b11f71937
189 | o-----+ 8:7a0b11f71937
190 |/ / / /
190 |/ / / /
191 o | | | 7:b632bb1b1224
191 o | | | 7:b632bb1b1224
192 |\ \ \ \
192 |\ \ \ \
193 +---o | | 6:b105a072e251
193 +---o | | 6:b105a072e251
194 | |/ / /
194 | |/ / /
195 | o | | 5:4409d547b708
195 | o | | 5:4409d547b708
196 | |\ \ \
196 | |\ \ \
197 | | o | | 4:26a8bac39d9f
197 | | o | | 4:26a8bac39d9f
198 | |/|/ /
198 | |/|/ /
199 | o / / 3:27eef8ed80b4
199 | o / / 3:27eef8ed80b4
200 |/ / /
200 |/ / /
201 o / / 2:3d9a33b8d1e1
201 o / / 2:3d9a33b8d1e1
202 |/ /
202 |/ /
203 o / 1:6db2ef61d156
203 o / 1:6db2ef61d156
204 |/
204 |/
205 o 0:e6eb3150255d
205 o 0:e6eb3150255d
206
206
207
207
208 $ hg glog
208 $ hg glog
209 @ changeset: 34:fea3ac5810e0
209 @ changeset: 34:fea3ac5810e0
210 | tag: tip
210 | tag: tip
211 | parent: 32:d06dffa21a31
211 | parent: 32:d06dffa21a31
212 | user: test
212 | user: test
213 | date: Thu Jan 01 00:00:34 1970 +0000
213 | date: Thu Jan 01 00:00:34 1970 +0000
214 | summary: (34) head
214 | summary: (34) head
215 |
215 |
216 | o changeset: 33:68608f5145f9
216 | o changeset: 33:68608f5145f9
217 | | parent: 18:1aa84d96232a
217 | | parent: 18:1aa84d96232a
218 | | user: test
218 | | user: test
219 | | date: Thu Jan 01 00:00:33 1970 +0000
219 | | date: Thu Jan 01 00:00:33 1970 +0000
220 | | summary: (33) head
220 | | summary: (33) head
221 | |
221 | |
222 o | changeset: 32:d06dffa21a31
222 o | changeset: 32:d06dffa21a31
223 |\ \ parent: 27:886ed638191b
223 |\ \ parent: 27:886ed638191b
224 | | | parent: 31:621d83e11f67
224 | | | parent: 31:621d83e11f67
225 | | | user: test
225 | | | user: test
226 | | | date: Thu Jan 01 00:00:32 1970 +0000
226 | | | date: Thu Jan 01 00:00:32 1970 +0000
227 | | | summary: (32) expand
227 | | | summary: (32) expand
228 | | |
228 | | |
229 | o | changeset: 31:621d83e11f67
229 | o | changeset: 31:621d83e11f67
230 | |\ \ parent: 21:d42a756af44d
230 | |\ \ parent: 21:d42a756af44d
231 | | | | parent: 30:6e11cd4b648f
231 | | | | parent: 30:6e11cd4b648f
232 | | | | user: test
232 | | | | user: test
233 | | | | date: Thu Jan 01 00:00:31 1970 +0000
233 | | | | date: Thu Jan 01 00:00:31 1970 +0000
234 | | | | summary: (31) expand
234 | | | | summary: (31) expand
235 | | | |
235 | | | |
236 | | o | changeset: 30:6e11cd4b648f
236 | | o | changeset: 30:6e11cd4b648f
237 | | |\ \ parent: 28:44ecd0b9ae99
237 | | |\ \ parent: 28:44ecd0b9ae99
238 | | | | | parent: 29:cd9bb2be7593
238 | | | | | parent: 29:cd9bb2be7593
239 | | | | | user: test
239 | | | | | user: test
240 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
240 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
241 | | | | | summary: (30) expand
241 | | | | | summary: (30) expand
242 | | | | |
242 | | | | |
243 | | | o | changeset: 29:cd9bb2be7593
243 | | | o | changeset: 29:cd9bb2be7593
244 | | | | | parent: 0:e6eb3150255d
244 | | | | | parent: 0:e6eb3150255d
245 | | | | | user: test
245 | | | | | user: test
246 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
246 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
247 | | | | | summary: (29) regular commit
247 | | | | | summary: (29) regular commit
248 | | | | |
248 | | | | |
249 | | o | | changeset: 28:44ecd0b9ae99
249 | | o | | changeset: 28:44ecd0b9ae99
250 | | |\ \ \ parent: 1:6db2ef61d156
250 | | |\ \ \ parent: 1:6db2ef61d156
251 | | | | | | parent: 26:7f25b6c2f0b9
251 | | | | | | parent: 26:7f25b6c2f0b9
252 | | | | | | user: test
252 | | | | | | user: test
253 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
253 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
254 | | | | | | summary: (28) merge zero known
254 | | | | | | summary: (28) merge zero known
255 | | | | | |
255 | | | | | |
256 o | | | | | changeset: 27:886ed638191b
256 o | | | | | changeset: 27:886ed638191b
257 |/ / / / / parent: 21:d42a756af44d
257 |/ / / / / parent: 21:d42a756af44d
258 | | | | | user: test
258 | | | | | user: test
259 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
259 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
260 | | | | | summary: (27) collapse
260 | | | | | summary: (27) collapse
261 | | | | |
261 | | | | |
262 | | o---+ changeset: 26:7f25b6c2f0b9
262 | | o---+ changeset: 26:7f25b6c2f0b9
263 | | | | | parent: 18:1aa84d96232a
263 | | | | | parent: 18:1aa84d96232a
264 | | | | | parent: 25:91da8ed57247
264 | | | | | parent: 25:91da8ed57247
265 | | | | | user: test
265 | | | | | user: test
266 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
266 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
267 | | | | | summary: (26) merge one known; far right
267 | | | | | summary: (26) merge one known; far right
268 | | | | |
268 | | | | |
269 +---o | | changeset: 25:91da8ed57247
269 +---o | | changeset: 25:91da8ed57247
270 | | | | | parent: 21:d42a756af44d
270 | | | | | parent: 21:d42a756af44d
271 | | | | | parent: 24:a9c19a3d96b7
271 | | | | | parent: 24:a9c19a3d96b7
272 | | | | | user: test
272 | | | | | user: test
273 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
273 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
274 | | | | | summary: (25) merge one known; far left
274 | | | | | summary: (25) merge one known; far left
275 | | | | |
275 | | | | |
276 | | o | | changeset: 24:a9c19a3d96b7
276 | | o | | changeset: 24:a9c19a3d96b7
277 | | |\| | parent: 0:e6eb3150255d
277 | | |\| | parent: 0:e6eb3150255d
278 | | | | | parent: 23:a01cddf0766d
278 | | | | | parent: 23:a01cddf0766d
279 | | | | | user: test
279 | | | | | user: test
280 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
280 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
281 | | | | | summary: (24) merge one known; immediate right
281 | | | | | summary: (24) merge one known; immediate right
282 | | | | |
282 | | | | |
283 | | o | | changeset: 23:a01cddf0766d
283 | | o | | changeset: 23:a01cddf0766d
284 | |/| | | parent: 1:6db2ef61d156
284 | |/| | | parent: 1:6db2ef61d156
285 | | | | | parent: 22:e0d9cccacb5d
285 | | | | | parent: 22:e0d9cccacb5d
286 | | | | | user: test
286 | | | | | user: test
287 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
287 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
288 | | | | | summary: (23) merge one known; immediate left
288 | | | | | summary: (23) merge one known; immediate left
289 | | | | |
289 | | | | |
290 +---o---+ changeset: 22:e0d9cccacb5d
290 +---o---+ changeset: 22:e0d9cccacb5d
291 | | | | parent: 18:1aa84d96232a
291 | | | | parent: 18:1aa84d96232a
292 | | / / parent: 21:d42a756af44d
292 | | / / parent: 21:d42a756af44d
293 | | | | user: test
293 | | | | user: test
294 | | | | date: Thu Jan 01 00:00:22 1970 +0000
294 | | | | date: Thu Jan 01 00:00:22 1970 +0000
295 | | | | summary: (22) merge two known; one far left, one far right
295 | | | | summary: (22) merge two known; one far left, one far right
296 | | | |
296 | | | |
297 o | | | changeset: 21:d42a756af44d
297 o | | | changeset: 21:d42a756af44d
298 |\ \ \ \ parent: 19:31ddc2c1573b
298 |\ \ \ \ parent: 19:31ddc2c1573b
299 | | | | | parent: 20:d30ed6450e32
299 | | | | | parent: 20:d30ed6450e32
300 | | | | | user: test
300 | | | | | user: test
301 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
301 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
302 | | | | | summary: (21) expand
302 | | | | | summary: (21) expand
303 | | | | |
303 | | | | |
304 | o---+-+ changeset: 20:d30ed6450e32
304 | o---+-+ changeset: 20:d30ed6450e32
305 | | | | parent: 0:e6eb3150255d
305 | | | | parent: 0:e6eb3150255d
306 | / / / parent: 18:1aa84d96232a
306 | / / / parent: 18:1aa84d96232a
307 | | | | user: test
307 | | | | user: test
308 | | | | date: Thu Jan 01 00:00:20 1970 +0000
308 | | | | date: Thu Jan 01 00:00:20 1970 +0000
309 | | | | summary: (20) merge two known; two far right
309 | | | | summary: (20) merge two known; two far right
310 | | | |
310 | | | |
311 o | | | changeset: 19:31ddc2c1573b
311 o | | | changeset: 19:31ddc2c1573b
312 |\ \ \ \ parent: 15:1dda3f72782d
312 |\ \ \ \ parent: 15:1dda3f72782d
313 | | | | | parent: 17:44765d7c06e0
313 | | | | | parent: 17:44765d7c06e0
314 | | | | | user: test
314 | | | | | user: test
315 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
315 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
316 | | | | | summary: (19) expand
316 | | | | | summary: (19) expand
317 | | | | |
317 | | | | |
318 +---+---o changeset: 18:1aa84d96232a
318 +---+---o changeset: 18:1aa84d96232a
319 | | | | parent: 1:6db2ef61d156
319 | | | | parent: 1:6db2ef61d156
320 | | | | parent: 15:1dda3f72782d
320 | | | | parent: 15:1dda3f72782d
321 | | | | user: test
321 | | | | user: test
322 | | | | date: Thu Jan 01 00:00:18 1970 +0000
322 | | | | date: Thu Jan 01 00:00:18 1970 +0000
323 | | | | summary: (18) merge two known; two far left
323 | | | | summary: (18) merge two known; two far left
324 | | | |
324 | | | |
325 | o | | changeset: 17:44765d7c06e0
325 | o | | changeset: 17:44765d7c06e0
326 | |\ \ \ parent: 12:86b91144a6e9
326 | |\ \ \ parent: 12:86b91144a6e9
327 | | | | | parent: 16:3677d192927d
327 | | | | | parent: 16:3677d192927d
328 | | | | | user: test
328 | | | | | user: test
329 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
329 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
330 | | | | | summary: (17) expand
330 | | | | | summary: (17) expand
331 | | | | |
331 | | | | |
332 | | o---+ changeset: 16:3677d192927d
332 | | o---+ changeset: 16:3677d192927d
333 | | | | | parent: 0:e6eb3150255d
333 | | | | | parent: 0:e6eb3150255d
334 | | |/ / parent: 1:6db2ef61d156
334 | | |/ / parent: 1:6db2ef61d156
335 | | | | user: test
335 | | | | user: test
336 | | | | date: Thu Jan 01 00:00:16 1970 +0000
336 | | | | date: Thu Jan 01 00:00:16 1970 +0000
337 | | | | summary: (16) merge two known; one immediate right, one near right
337 | | | | summary: (16) merge two known; one immediate right, one near right
338 | | | |
338 | | | |
339 o | | | changeset: 15:1dda3f72782d
339 o | | | changeset: 15:1dda3f72782d
340 |\ \ \ \ parent: 13:22d8966a97e3
340 |\ \ \ \ parent: 13:22d8966a97e3
341 | | | | | parent: 14:8eac370358ef
341 | | | | | parent: 14:8eac370358ef
342 | | | | | user: test
342 | | | | | user: test
343 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
343 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
344 | | | | | summary: (15) expand
344 | | | | | summary: (15) expand
345 | | | | |
345 | | | | |
346 | o-----+ changeset: 14:8eac370358ef
346 | o-----+ changeset: 14:8eac370358ef
347 | | | | | parent: 0:e6eb3150255d
347 | | | | | parent: 0:e6eb3150255d
348 | |/ / / parent: 12:86b91144a6e9
348 | |/ / / parent: 12:86b91144a6e9
349 | | | | user: test
349 | | | | user: test
350 | | | | date: Thu Jan 01 00:00:14 1970 +0000
350 | | | | date: Thu Jan 01 00:00:14 1970 +0000
351 | | | | summary: (14) merge two known; one immediate right, one far right
351 | | | | summary: (14) merge two known; one immediate right, one far right
352 | | | |
352 | | | |
353 o | | | changeset: 13:22d8966a97e3
353 o | | | changeset: 13:22d8966a97e3
354 |\ \ \ \ parent: 9:7010c0af0a35
354 |\ \ \ \ parent: 9:7010c0af0a35
355 | | | | | parent: 11:832d76e6bdf2
355 | | | | | parent: 11:832d76e6bdf2
356 | | | | | user: test
356 | | | | | user: test
357 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
357 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
358 | | | | | summary: (13) expand
358 | | | | | summary: (13) expand
359 | | | | |
359 | | | | |
360 +---o | | changeset: 12:86b91144a6e9
360 +---o | | changeset: 12:86b91144a6e9
361 | | |/ / parent: 1:6db2ef61d156
361 | | |/ / parent: 1:6db2ef61d156
362 | | | | parent: 9:7010c0af0a35
362 | | | | parent: 9:7010c0af0a35
363 | | | | user: test
363 | | | | user: test
364 | | | | date: Thu Jan 01 00:00:12 1970 +0000
364 | | | | date: Thu Jan 01 00:00:12 1970 +0000
365 | | | | summary: (12) merge two known; one immediate right, one far left
365 | | | | summary: (12) merge two known; one immediate right, one far left
366 | | | |
366 | | | |
367 | o | | changeset: 11:832d76e6bdf2
367 | o | | changeset: 11:832d76e6bdf2
368 | |\ \ \ parent: 6:b105a072e251
368 | |\ \ \ parent: 6:b105a072e251
369 | | | | | parent: 10:74c64d036d72
369 | | | | | parent: 10:74c64d036d72
370 | | | | | user: test
370 | | | | | user: test
371 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
371 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
372 | | | | | summary: (11) expand
372 | | | | | summary: (11) expand
373 | | | | |
373 | | | | |
374 | | o---+ changeset: 10:74c64d036d72
374 | | o---+ changeset: 10:74c64d036d72
375 | | | | | parent: 0:e6eb3150255d
375 | | | | | parent: 0:e6eb3150255d
376 | |/ / / parent: 6:b105a072e251
376 | |/ / / parent: 6:b105a072e251
377 | | | | user: test
377 | | | | user: test
378 | | | | date: Thu Jan 01 00:00:10 1970 +0000
378 | | | | date: Thu Jan 01 00:00:10 1970 +0000
379 | | | | summary: (10) merge two known; one immediate left, one near right
379 | | | | summary: (10) merge two known; one immediate left, one near right
380 | | | |
380 | | | |
381 o | | | changeset: 9:7010c0af0a35
381 o | | | changeset: 9:7010c0af0a35
382 |\ \ \ \ parent: 7:b632bb1b1224
382 |\ \ \ \ parent: 7:b632bb1b1224
383 | | | | | parent: 8:7a0b11f71937
383 | | | | | parent: 8:7a0b11f71937
384 | | | | | user: test
384 | | | | | user: test
385 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
385 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
386 | | | | | summary: (9) expand
386 | | | | | summary: (9) expand
387 | | | | |
387 | | | | |
388 | o-----+ changeset: 8:7a0b11f71937
388 | o-----+ changeset: 8:7a0b11f71937
389 | | | | | parent: 0:e6eb3150255d
389 | | | | | parent: 0:e6eb3150255d
390 |/ / / / parent: 7:b632bb1b1224
390 |/ / / / parent: 7:b632bb1b1224
391 | | | | user: test
391 | | | | user: test
392 | | | | date: Thu Jan 01 00:00:08 1970 +0000
392 | | | | date: Thu Jan 01 00:00:08 1970 +0000
393 | | | | summary: (8) merge two known; one immediate left, one far right
393 | | | | summary: (8) merge two known; one immediate left, one far right
394 | | | |
394 | | | |
395 o | | | changeset: 7:b632bb1b1224
395 o | | | changeset: 7:b632bb1b1224
396 |\ \ \ \ parent: 2:3d9a33b8d1e1
396 |\ \ \ \ parent: 2:3d9a33b8d1e1
397 | | | | | parent: 5:4409d547b708
397 | | | | | parent: 5:4409d547b708
398 | | | | | user: test
398 | | | | | user: test
399 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
399 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
400 | | | | | summary: (7) expand
400 | | | | | summary: (7) expand
401 | | | | |
401 | | | | |
402 +---o | | changeset: 6:b105a072e251
402 +---o | | changeset: 6:b105a072e251
403 | |/ / / parent: 2:3d9a33b8d1e1
403 | |/ / / parent: 2:3d9a33b8d1e1
404 | | | | parent: 5:4409d547b708
404 | | | | parent: 5:4409d547b708
405 | | | | user: test
405 | | | | user: test
406 | | | | date: Thu Jan 01 00:00:06 1970 +0000
406 | | | | date: Thu Jan 01 00:00:06 1970 +0000
407 | | | | summary: (6) merge two known; one immediate left, one far left
407 | | | | summary: (6) merge two known; one immediate left, one far left
408 | | | |
408 | | | |
409 | o | | changeset: 5:4409d547b708
409 | o | | changeset: 5:4409d547b708
410 | |\ \ \ parent: 3:27eef8ed80b4
410 | |\ \ \ parent: 3:27eef8ed80b4
411 | | | | | parent: 4:26a8bac39d9f
411 | | | | | parent: 4:26a8bac39d9f
412 | | | | | user: test
412 | | | | | user: test
413 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
413 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
414 | | | | | summary: (5) expand
414 | | | | | summary: (5) expand
415 | | | | |
415 | | | | |
416 | | o | | changeset: 4:26a8bac39d9f
416 | | o | | changeset: 4:26a8bac39d9f
417 | |/|/ / parent: 1:6db2ef61d156
417 | |/|/ / parent: 1:6db2ef61d156
418 | | | | parent: 3:27eef8ed80b4
418 | | | | parent: 3:27eef8ed80b4
419 | | | | user: test
419 | | | | user: test
420 | | | | date: Thu Jan 01 00:00:04 1970 +0000
420 | | | | date: Thu Jan 01 00:00:04 1970 +0000
421 | | | | summary: (4) merge two known; one immediate left, one immediate right
421 | | | | summary: (4) merge two known; one immediate left, one immediate right
422 | | | |
422 | | | |
423 | o | | changeset: 3:27eef8ed80b4
423 | o | | changeset: 3:27eef8ed80b4
424 |/ / / user: test
424 |/ / / user: test
425 | | | date: Thu Jan 01 00:00:03 1970 +0000
425 | | | date: Thu Jan 01 00:00:03 1970 +0000
426 | | | summary: (3) collapse
426 | | | summary: (3) collapse
427 | | |
427 | | |
428 o | | changeset: 2:3d9a33b8d1e1
428 o | | changeset: 2:3d9a33b8d1e1
429 |/ / user: test
429 |/ / user: test
430 | | date: Thu Jan 01 00:00:02 1970 +0000
430 | | date: Thu Jan 01 00:00:02 1970 +0000
431 | | summary: (2) collapse
431 | | summary: (2) collapse
432 | |
432 | |
433 o | changeset: 1:6db2ef61d156
433 o | changeset: 1:6db2ef61d156
434 |/ user: test
434 |/ user: test
435 | date: Thu Jan 01 00:00:01 1970 +0000
435 | date: Thu Jan 01 00:00:01 1970 +0000
436 | summary: (1) collapse
436 | summary: (1) collapse
437 |
437 |
438 o changeset: 0:e6eb3150255d
438 o changeset: 0:e6eb3150255d
439 user: test
439 user: test
440 date: Thu Jan 01 00:00:00 1970 +0000
440 date: Thu Jan 01 00:00:00 1970 +0000
441 summary: (0) root
441 summary: (0) root
442
442
443
443
444 File glog:
444 File glog:
445 $ hg glog a
445 $ hg glog a
446 @ changeset: 34:fea3ac5810e0
446 @ changeset: 34:fea3ac5810e0
447 | tag: tip
447 | tag: tip
448 | parent: 32:d06dffa21a31
448 | parent: 32:d06dffa21a31
449 | user: test
449 | user: test
450 | date: Thu Jan 01 00:00:34 1970 +0000
450 | date: Thu Jan 01 00:00:34 1970 +0000
451 | summary: (34) head
451 | summary: (34) head
452 |
452 |
453 | o changeset: 33:68608f5145f9
453 | o changeset: 33:68608f5145f9
454 | | parent: 18:1aa84d96232a
454 | | parent: 18:1aa84d96232a
455 | | user: test
455 | | user: test
456 | | date: Thu Jan 01 00:00:33 1970 +0000
456 | | date: Thu Jan 01 00:00:33 1970 +0000
457 | | summary: (33) head
457 | | summary: (33) head
458 | |
458 | |
459 o | changeset: 32:d06dffa21a31
459 o | changeset: 32:d06dffa21a31
460 |\ \ parent: 27:886ed638191b
460 |\ \ parent: 27:886ed638191b
461 | | | parent: 31:621d83e11f67
461 | | | parent: 31:621d83e11f67
462 | | | user: test
462 | | | user: test
463 | | | date: Thu Jan 01 00:00:32 1970 +0000
463 | | | date: Thu Jan 01 00:00:32 1970 +0000
464 | | | summary: (32) expand
464 | | | summary: (32) expand
465 | | |
465 | | |
466 | o | changeset: 31:621d83e11f67
466 | o | changeset: 31:621d83e11f67
467 | | | parent: 21:d42a756af44d
467 | | | parent: 21:d42a756af44d
468 | | | parent: 30:6e11cd4b648f
468 | | | parent: 30:6e11cd4b648f
469 | | | user: test
469 | | | user: test
470 | | | date: Thu Jan 01 00:00:31 1970 +0000
470 | | | date: Thu Jan 01 00:00:31 1970 +0000
471 | | | summary: (31) expand
471 | | | summary: (31) expand
472 | | |
472 | | |
473 | o | changeset: 30:6e11cd4b648f
473 | o | changeset: 30:6e11cd4b648f
474 | |\ \ parent: 28:44ecd0b9ae99
474 | |\ \ parent: 28:44ecd0b9ae99
475 | | | | parent: 29:cd9bb2be7593
475 | | | | parent: 29:cd9bb2be7593
476 | | | | user: test
476 | | | | user: test
477 | | | | date: Thu Jan 01 00:00:30 1970 +0000
477 | | | | date: Thu Jan 01 00:00:30 1970 +0000
478 | | | | summary: (30) expand
478 | | | | summary: (30) expand
479 | | | |
479 | | | |
480 | | o | changeset: 29:cd9bb2be7593
480 | | o | changeset: 29:cd9bb2be7593
481 | | | | parent: 0:e6eb3150255d
481 | | | | parent: 0:e6eb3150255d
482 | | | | user: test
482 | | | | user: test
483 | | | | date: Thu Jan 01 00:00:29 1970 +0000
483 | | | | date: Thu Jan 01 00:00:29 1970 +0000
484 | | | | summary: (29) regular commit
484 | | | | summary: (29) regular commit
485 | | | |
485 | | | |
486 | o | | changeset: 28:44ecd0b9ae99
486 | o | | changeset: 28:44ecd0b9ae99
487 | | | | parent: 1:6db2ef61d156
487 | | | | parent: 1:6db2ef61d156
488 | | | | parent: 26:7f25b6c2f0b9
488 | | | | parent: 26:7f25b6c2f0b9
489 | | | | user: test
489 | | | | user: test
490 | | | | date: Thu Jan 01 00:00:28 1970 +0000
490 | | | | date: Thu Jan 01 00:00:28 1970 +0000
491 | | | | summary: (28) merge zero known
491 | | | | summary: (28) merge zero known
492 | | | |
492 | | | |
493 o | | | changeset: 27:886ed638191b
493 o | | | changeset: 27:886ed638191b
494 | | | | parent: 21:d42a756af44d
494 | | | | parent: 21:d42a756af44d
495 | | | | user: test
495 | | | | user: test
496 | | | | date: Thu Jan 01 00:00:27 1970 +0000
496 | | | | date: Thu Jan 01 00:00:27 1970 +0000
497 | | | | summary: (27) collapse
497 | | | | summary: (27) collapse
498 | | | |
498 | | | |
499 | o | | changeset: 26:7f25b6c2f0b9
499 | o | | changeset: 26:7f25b6c2f0b9
500 | | | | parent: 18:1aa84d96232a
500 | | | | parent: 18:1aa84d96232a
501 | | | | parent: 25:91da8ed57247
501 | | | | parent: 25:91da8ed57247
502 | | | | user: test
502 | | | | user: test
503 | | | | date: Thu Jan 01 00:00:26 1970 +0000
503 | | | | date: Thu Jan 01 00:00:26 1970 +0000
504 | | | | summary: (26) merge one known; far right
504 | | | | summary: (26) merge one known; far right
505 | | | |
505 | | | |
506 | o | | changeset: 25:91da8ed57247
506 | o | | changeset: 25:91da8ed57247
507 | | | | parent: 21:d42a756af44d
507 | | | | parent: 21:d42a756af44d
508 | | | | parent: 24:a9c19a3d96b7
508 | | | | parent: 24:a9c19a3d96b7
509 | | | | user: test
509 | | | | user: test
510 | | | | date: Thu Jan 01 00:00:25 1970 +0000
510 | | | | date: Thu Jan 01 00:00:25 1970 +0000
511 | | | | summary: (25) merge one known; far left
511 | | | | summary: (25) merge one known; far left
512 | | | |
512 | | | |
513 | o | | changeset: 24:a9c19a3d96b7
513 | o | | changeset: 24:a9c19a3d96b7
514 | | | | parent: 0:e6eb3150255d
514 | | | | parent: 0:e6eb3150255d
515 | | | | parent: 23:a01cddf0766d
515 | | | | parent: 23:a01cddf0766d
516 | | | | user: test
516 | | | | user: test
517 | | | | date: Thu Jan 01 00:00:24 1970 +0000
517 | | | | date: Thu Jan 01 00:00:24 1970 +0000
518 | | | | summary: (24) merge one known; immediate right
518 | | | | summary: (24) merge one known; immediate right
519 | | | |
519 | | | |
520 | o | | changeset: 23:a01cddf0766d
520 | o | | changeset: 23:a01cddf0766d
521 | | | | parent: 1:6db2ef61d156
521 | | | | parent: 1:6db2ef61d156
522 | | | | parent: 22:e0d9cccacb5d
522 | | | | parent: 22:e0d9cccacb5d
523 | | | | user: test
523 | | | | user: test
524 | | | | date: Thu Jan 01 00:00:23 1970 +0000
524 | | | | date: Thu Jan 01 00:00:23 1970 +0000
525 | | | | summary: (23) merge one known; immediate left
525 | | | | summary: (23) merge one known; immediate left
526 | | | |
526 | | | |
527 | o | | changeset: 22:e0d9cccacb5d
527 | o | | changeset: 22:e0d9cccacb5d
528 |/ / / parent: 18:1aa84d96232a
528 |/ / / parent: 18:1aa84d96232a
529 | | | parent: 21:d42a756af44d
529 | | | parent: 21:d42a756af44d
530 | | | user: test
530 | | | user: test
531 | | | date: Thu Jan 01 00:00:22 1970 +0000
531 | | | date: Thu Jan 01 00:00:22 1970 +0000
532 | | | summary: (22) merge two known; one far left, one far right
532 | | | summary: (22) merge two known; one far left, one far right
533 | | |
533 | | |
534 o | | changeset: 21:d42a756af44d
534 o | | changeset: 21:d42a756af44d
535 |\ \ \ parent: 19:31ddc2c1573b
535 |\ \ \ parent: 19:31ddc2c1573b
536 | | | | parent: 20:d30ed6450e32
536 | | | | parent: 20:d30ed6450e32
537 | | | | user: test
537 | | | | user: test
538 | | | | date: Thu Jan 01 00:00:21 1970 +0000
538 | | | | date: Thu Jan 01 00:00:21 1970 +0000
539 | | | | summary: (21) expand
539 | | | | summary: (21) expand
540 | | | |
540 | | | |
541 | o---+ changeset: 20:d30ed6450e32
541 | o---+ changeset: 20:d30ed6450e32
542 | | | parent: 0:e6eb3150255d
542 | | | parent: 0:e6eb3150255d
543 | / / parent: 18:1aa84d96232a
543 | / / parent: 18:1aa84d96232a
544 | | | user: test
544 | | | user: test
545 | | | date: Thu Jan 01 00:00:20 1970 +0000
545 | | | date: Thu Jan 01 00:00:20 1970 +0000
546 | | | summary: (20) merge two known; two far right
546 | | | summary: (20) merge two known; two far right
547 | | |
547 | | |
548 o | | changeset: 19:31ddc2c1573b
548 o | | changeset: 19:31ddc2c1573b
549 |\ \ \ parent: 15:1dda3f72782d
549 |\ \ \ parent: 15:1dda3f72782d
550 | | | | parent: 17:44765d7c06e0
550 | | | | parent: 17:44765d7c06e0
551 | | | | user: test
551 | | | | user: test
552 | | | | date: Thu Jan 01 00:00:19 1970 +0000
552 | | | | date: Thu Jan 01 00:00:19 1970 +0000
553 | | | | summary: (19) expand
553 | | | | summary: (19) expand
554 | | | |
554 | | | |
555 +-----o changeset: 18:1aa84d96232a
555 +-----o changeset: 18:1aa84d96232a
556 | | | parent: 1:6db2ef61d156
556 | | | parent: 1:6db2ef61d156
557 | | | parent: 15:1dda3f72782d
557 | | | parent: 15:1dda3f72782d
558 | | | user: test
558 | | | user: test
559 | | | date: Thu Jan 01 00:00:18 1970 +0000
559 | | | date: Thu Jan 01 00:00:18 1970 +0000
560 | | | summary: (18) merge two known; two far left
560 | | | summary: (18) merge two known; two far left
561 | | |
561 | | |
562 | o | changeset: 17:44765d7c06e0
562 | o | changeset: 17:44765d7c06e0
563 | |\ \ parent: 12:86b91144a6e9
563 | |\ \ parent: 12:86b91144a6e9
564 | | | | parent: 16:3677d192927d
564 | | | | parent: 16:3677d192927d
565 | | | | user: test
565 | | | | user: test
566 | | | | date: Thu Jan 01 00:00:17 1970 +0000
566 | | | | date: Thu Jan 01 00:00:17 1970 +0000
567 | | | | summary: (17) expand
567 | | | | summary: (17) expand
568 | | | |
568 | | | |
569 | | o | changeset: 16:3677d192927d
569 | | o | changeset: 16:3677d192927d
570 | | | | parent: 0:e6eb3150255d
570 | | | | parent: 0:e6eb3150255d
571 | | | | parent: 1:6db2ef61d156
571 | | | | parent: 1:6db2ef61d156
572 | | | | user: test
572 | | | | user: test
573 | | | | date: Thu Jan 01 00:00:16 1970 +0000
573 | | | | date: Thu Jan 01 00:00:16 1970 +0000
574 | | | | summary: (16) merge two known; one immediate right, one near right
574 | | | | summary: (16) merge two known; one immediate right, one near right
575 | | | |
575 | | | |
576 o | | | changeset: 15:1dda3f72782d
576 o | | | changeset: 15:1dda3f72782d
577 |\ \ \ \ parent: 13:22d8966a97e3
577 |\ \ \ \ parent: 13:22d8966a97e3
578 | | | | | parent: 14:8eac370358ef
578 | | | | | parent: 14:8eac370358ef
579 | | | | | user: test
579 | | | | | user: test
580 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
580 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
581 | | | | | summary: (15) expand
581 | | | | | summary: (15) expand
582 | | | | |
582 | | | | |
583 | o | | | changeset: 14:8eac370358ef
583 | o | | | changeset: 14:8eac370358ef
584 | |/ / / parent: 0:e6eb3150255d
584 | |/ / / parent: 0:e6eb3150255d
585 | | | | parent: 12:86b91144a6e9
585 | | | | parent: 12:86b91144a6e9
586 | | | | user: test
586 | | | | user: test
587 | | | | date: Thu Jan 01 00:00:14 1970 +0000
587 | | | | date: Thu Jan 01 00:00:14 1970 +0000
588 | | | | summary: (14) merge two known; one immediate right, one far right
588 | | | | summary: (14) merge two known; one immediate right, one far right
589 | | | |
589 | | | |
590 o | | | changeset: 13:22d8966a97e3
590 o | | | changeset: 13:22d8966a97e3
591 |\ \ \ \ parent: 9:7010c0af0a35
591 |\ \ \ \ parent: 9:7010c0af0a35
592 | | | | | parent: 11:832d76e6bdf2
592 | | | | | parent: 11:832d76e6bdf2
593 | | | | | user: test
593 | | | | | user: test
594 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
594 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
595 | | | | | summary: (13) expand
595 | | | | | summary: (13) expand
596 | | | | |
596 | | | | |
597 +---o | | changeset: 12:86b91144a6e9
597 +---o | | changeset: 12:86b91144a6e9
598 | | / / parent: 1:6db2ef61d156
598 | | / / parent: 1:6db2ef61d156
599 | | | | parent: 9:7010c0af0a35
599 | | | | parent: 9:7010c0af0a35
600 | | | | user: test
600 | | | | user: test
601 | | | | date: Thu Jan 01 00:00:12 1970 +0000
601 | | | | date: Thu Jan 01 00:00:12 1970 +0000
602 | | | | summary: (12) merge two known; one immediate right, one far left
602 | | | | summary: (12) merge two known; one immediate right, one far left
603 | | | |
603 | | | |
604 | o | | changeset: 11:832d76e6bdf2
604 | o | | changeset: 11:832d76e6bdf2
605 | | | | parent: 6:b105a072e251
605 | | | | parent: 6:b105a072e251
606 | | | | parent: 10:74c64d036d72
606 | | | | parent: 10:74c64d036d72
607 | | | | user: test
607 | | | | user: test
608 | | | | date: Thu Jan 01 00:00:11 1970 +0000
608 | | | | date: Thu Jan 01 00:00:11 1970 +0000
609 | | | | summary: (11) expand
609 | | | | summary: (11) expand
610 | | | |
610 | | | |
611 | o | | changeset: 10:74c64d036d72
611 | o | | changeset: 10:74c64d036d72
612 | | | | parent: 0:e6eb3150255d
612 | | | | parent: 0:e6eb3150255d
613 | | | | parent: 6:b105a072e251
613 | | | | parent: 6:b105a072e251
614 | | | | user: test
614 | | | | user: test
615 | | | | date: Thu Jan 01 00:00:10 1970 +0000
615 | | | | date: Thu Jan 01 00:00:10 1970 +0000
616 | | | | summary: (10) merge two known; one immediate left, one near right
616 | | | | summary: (10) merge two known; one immediate left, one near right
617 | | | |
617 | | | |
618 o | | | changeset: 9:7010c0af0a35
618 o | | | changeset: 9:7010c0af0a35
619 | | | | parent: 7:b632bb1b1224
619 | | | | parent: 7:b632bb1b1224
620 | | | | parent: 8:7a0b11f71937
620 | | | | parent: 8:7a0b11f71937
621 | | | | user: test
621 | | | | user: test
622 | | | | date: Thu Jan 01 00:00:09 1970 +0000
622 | | | | date: Thu Jan 01 00:00:09 1970 +0000
623 | | | | summary: (9) expand
623 | | | | summary: (9) expand
624 | | | |
624 | | | |
625 o | | | changeset: 8:7a0b11f71937
625 o | | | changeset: 8:7a0b11f71937
626 | | | | parent: 0:e6eb3150255d
626 | | | | parent: 0:e6eb3150255d
627 | | | | parent: 7:b632bb1b1224
627 | | | | parent: 7:b632bb1b1224
628 | | | | user: test
628 | | | | user: test
629 | | | | date: Thu Jan 01 00:00:08 1970 +0000
629 | | | | date: Thu Jan 01 00:00:08 1970 +0000
630 | | | | summary: (8) merge two known; one immediate left, one far right
630 | | | | summary: (8) merge two known; one immediate left, one far right
631 | | | |
631 | | | |
632 o | | | changeset: 7:b632bb1b1224
632 o | | | changeset: 7:b632bb1b1224
633 | | | | parent: 2:3d9a33b8d1e1
633 | | | | parent: 2:3d9a33b8d1e1
634 | | | | parent: 5:4409d547b708
634 | | | | parent: 5:4409d547b708
635 | | | | user: test
635 | | | | user: test
636 | | | | date: Thu Jan 01 00:00:07 1970 +0000
636 | | | | date: Thu Jan 01 00:00:07 1970 +0000
637 | | | | summary: (7) expand
637 | | | | summary: (7) expand
638 | | | |
638 | | | |
639 | o | | changeset: 6:b105a072e251
639 | o | | changeset: 6:b105a072e251
640 |/ / / parent: 2:3d9a33b8d1e1
640 |/ / / parent: 2:3d9a33b8d1e1
641 | | | parent: 5:4409d547b708
641 | | | parent: 5:4409d547b708
642 | | | user: test
642 | | | user: test
643 | | | date: Thu Jan 01 00:00:06 1970 +0000
643 | | | date: Thu Jan 01 00:00:06 1970 +0000
644 | | | summary: (6) merge two known; one immediate left, one far left
644 | | | summary: (6) merge two known; one immediate left, one far left
645 | | |
645 | | |
646 o | | changeset: 5:4409d547b708
646 o | | changeset: 5:4409d547b708
647 | | | parent: 3:27eef8ed80b4
647 | | | parent: 3:27eef8ed80b4
648 | | | parent: 4:26a8bac39d9f
648 | | | parent: 4:26a8bac39d9f
649 | | | user: test
649 | | | user: test
650 | | | date: Thu Jan 01 00:00:05 1970 +0000
650 | | | date: Thu Jan 01 00:00:05 1970 +0000
651 | | | summary: (5) expand
651 | | | summary: (5) expand
652 | | |
652 | | |
653 o | | changeset: 4:26a8bac39d9f
653 o | | changeset: 4:26a8bac39d9f
654 | | | parent: 1:6db2ef61d156
654 | | | parent: 1:6db2ef61d156
655 | | | parent: 3:27eef8ed80b4
655 | | | parent: 3:27eef8ed80b4
656 | | | user: test
656 | | | user: test
657 | | | date: Thu Jan 01 00:00:04 1970 +0000
657 | | | date: Thu Jan 01 00:00:04 1970 +0000
658 | | | summary: (4) merge two known; one immediate left, one immediate right
658 | | | summary: (4) merge two known; one immediate left, one immediate right
659 | | |
659 | | |
660 o | | changeset: 3:27eef8ed80b4
660 o | | changeset: 3:27eef8ed80b4
661 | | | user: test
661 | | | user: test
662 | | | date: Thu Jan 01 00:00:03 1970 +0000
662 | | | date: Thu Jan 01 00:00:03 1970 +0000
663 | | | summary: (3) collapse
663 | | | summary: (3) collapse
664 | | |
664 | | |
665 o | | changeset: 2:3d9a33b8d1e1
665 o | | changeset: 2:3d9a33b8d1e1
666 |/ / user: test
666 |/ / user: test
667 | | date: Thu Jan 01 00:00:02 1970 +0000
667 | | date: Thu Jan 01 00:00:02 1970 +0000
668 | | summary: (2) collapse
668 | | summary: (2) collapse
669 | |
669 | |
670 o | changeset: 1:6db2ef61d156
670 o | changeset: 1:6db2ef61d156
671 |/ user: test
671 |/ user: test
672 | date: Thu Jan 01 00:00:01 1970 +0000
672 | date: Thu Jan 01 00:00:01 1970 +0000
673 | summary: (1) collapse
673 | summary: (1) collapse
674 |
674 |
675 o changeset: 0:e6eb3150255d
675 o changeset: 0:e6eb3150255d
676 user: test
676 user: test
677 date: Thu Jan 01 00:00:00 1970 +0000
677 date: Thu Jan 01 00:00:00 1970 +0000
678 summary: (0) root
678 summary: (0) root
679
679
680
680
681 Unused arguments:
681 Unused arguments:
682 $ hg glog -q foo bar
682 $ hg glog -q foo bar
683 hg glog: invalid arguments
683 hg glog: invalid arguments
684 hg glog [OPTION]... [FILE]
684 hg glog [OPTION]... [FILE]
685
685
686 show revision history alongside an ASCII revision graph
686 show revision history alongside an ASCII revision graph
687 [255]
687 [255]
688
688
689 Empty revision range - display nothing:
689 Empty revision range - display nothing:
690 $ hg glog -r 1..0
690 $ hg glog -r 1..0
691
691
692 From outer space:
692 From outer space:
693 $ cd ..
693 $ cd ..
694 $ hg glog -l1 repo
694 $ hg glog -l1 repo
695 @ changeset: 34:fea3ac5810e0
695 @ changeset: 34:fea3ac5810e0
696 | tag: tip
696 | tag: tip
697 | parent: 32:d06dffa21a31
697 | parent: 32:d06dffa21a31
698 | user: test
698 | user: test
699 | date: Thu Jan 01 00:00:34 1970 +0000
699 | date: Thu Jan 01 00:00:34 1970 +0000
700 | summary: (34) head
700 | summary: (34) head
701 |
701 |
702 $ hg glog -l1 repo/a
702 $ hg glog -l1 repo/a
703 @ changeset: 34:fea3ac5810e0
703 @ changeset: 34:fea3ac5810e0
704 | tag: tip
704 | tag: tip
705 | parent: 32:d06dffa21a31
705 | parent: 32:d06dffa21a31
706 | user: test
706 | user: test
707 | date: Thu Jan 01 00:00:34 1970 +0000
707 | date: Thu Jan 01 00:00:34 1970 +0000
708 | summary: (34) head
708 | summary: (34) head
709 |
709 |
710 $ hg glog -l1 repo/missing
710 $ hg glog -l1 repo/missing
711
711
712 File log with revs != cset revs:
712 File log with revs != cset revs:
713 $ hg init flog
713 $ hg init flog
714 $ cd flog
714 $ cd flog
715 $ echo one >one
715 $ echo one >one
716 $ hg add one
716 $ hg add one
717 $ hg commit -mone
717 $ hg commit -mone
718 $ echo two >two
718 $ echo two >two
719 $ hg add two
719 $ hg add two
720 $ hg commit -mtwo
720 $ hg commit -mtwo
721 $ echo more >two
721 $ echo more >two
722 $ hg commit -mmore
722 $ hg commit -mmore
723 $ hg glog two
723 $ hg glog two
724 @ changeset: 2:12c28321755b
724 @ changeset: 2:12c28321755b
725 | tag: tip
725 | tag: tip
726 | user: test
726 | user: test
727 | date: Thu Jan 01 00:00:00 1970 +0000
727 | date: Thu Jan 01 00:00:00 1970 +0000
728 | summary: more
728 | summary: more
729 |
729 |
730 o changeset: 1:5ac72c0599bf
730 o changeset: 1:5ac72c0599bf
731 user: test
731 user: test
732 date: Thu Jan 01 00:00:00 1970 +0000
732 date: Thu Jan 01 00:00:00 1970 +0000
733 summary: two
733 summary: two
734
734
735
735
736 Issue1896: File log with explicit style
736 Issue1896: File log with explicit style
737 $ hg glog --style=default one
737 $ hg glog --style=default one
738 o changeset: 0:3d578b4a1f53
738 o changeset: 0:3d578b4a1f53
739 user: test
739 user: test
740 date: Thu Jan 01 00:00:00 1970 +0000
740 date: Thu Jan 01 00:00:00 1970 +0000
741 summary: one
741 summary: one
742
742
743 Issue2395: glog --style header and footer
744 $ hg glog --style=xml one
745 <?xml version="1.0"?>
746 <log>
747 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
748 <author email="test">test</author>
749 <date>1970-01-01T00:00:00+00:00</date>
750 <msg xml:space="preserve">one</msg>
751 </logentry>
752 </log>
753
743 $ cd ..
754 $ cd ..
744
755
745 Incoming and outgoing:
756 Incoming and outgoing:
746
757
747 $ hg clone -U -r31 repo repo2
758 $ hg clone -U -r31 repo repo2
748 requesting all changes
759 requesting all changes
749 adding changesets
760 adding changesets
750 adding manifests
761 adding manifests
751 adding file changes
762 adding file changes
752 added 31 changesets with 31 changes to 1 files
763 added 31 changesets with 31 changes to 1 files
753 $ cd repo2
764 $ cd repo2
754
765
755 $ hg incoming --graph ../repo
766 $ hg incoming --graph ../repo
756 comparing with ../repo
767 comparing with ../repo
757 searching for changes
768 searching for changes
758 o changeset: 34:fea3ac5810e0
769 o changeset: 34:fea3ac5810e0
759 | tag: tip
770 | tag: tip
760 | parent: 32:d06dffa21a31
771 | parent: 32:d06dffa21a31
761 | user: test
772 | user: test
762 | date: Thu Jan 01 00:00:34 1970 +0000
773 | date: Thu Jan 01 00:00:34 1970 +0000
763 | summary: (34) head
774 | summary: (34) head
764 |
775 |
765 | o changeset: 33:68608f5145f9
776 | o changeset: 33:68608f5145f9
766 | parent: 18:1aa84d96232a
777 | parent: 18:1aa84d96232a
767 | user: test
778 | user: test
768 | date: Thu Jan 01 00:00:33 1970 +0000
779 | date: Thu Jan 01 00:00:33 1970 +0000
769 | summary: (33) head
780 | summary: (33) head
770 |
781 |
771 o changeset: 32:d06dffa21a31
782 o changeset: 32:d06dffa21a31
772 | parent: 27:886ed638191b
783 | parent: 27:886ed638191b
773 | parent: 31:621d83e11f67
784 | parent: 31:621d83e11f67
774 | user: test
785 | user: test
775 | date: Thu Jan 01 00:00:32 1970 +0000
786 | date: Thu Jan 01 00:00:32 1970 +0000
776 | summary: (32) expand
787 | summary: (32) expand
777 |
788 |
778 o changeset: 27:886ed638191b
789 o changeset: 27:886ed638191b
779 parent: 21:d42a756af44d
790 parent: 21:d42a756af44d
780 user: test
791 user: test
781 date: Thu Jan 01 00:00:27 1970 +0000
792 date: Thu Jan 01 00:00:27 1970 +0000
782 summary: (27) collapse
793 summary: (27) collapse
783
794
784 $ cd ..
795 $ cd ..
785
796
786 $ hg -R repo outgoing --graph repo2
797 $ hg -R repo outgoing --graph repo2
787 comparing with repo2
798 comparing with repo2
788 searching for changes
799 searching for changes
789 @ changeset: 34:fea3ac5810e0
800 @ changeset: 34:fea3ac5810e0
790 | tag: tip
801 | tag: tip
791 | parent: 32:d06dffa21a31
802 | parent: 32:d06dffa21a31
792 | user: test
803 | user: test
793 | date: Thu Jan 01 00:00:34 1970 +0000
804 | date: Thu Jan 01 00:00:34 1970 +0000
794 | summary: (34) head
805 | summary: (34) head
795 |
806 |
796 | o changeset: 33:68608f5145f9
807 | o changeset: 33:68608f5145f9
797 | parent: 18:1aa84d96232a
808 | parent: 18:1aa84d96232a
798 | user: test
809 | user: test
799 | date: Thu Jan 01 00:00:33 1970 +0000
810 | date: Thu Jan 01 00:00:33 1970 +0000
800 | summary: (33) head
811 | summary: (33) head
801 |
812 |
802 o changeset: 32:d06dffa21a31
813 o changeset: 32:d06dffa21a31
803 | parent: 27:886ed638191b
814 | parent: 27:886ed638191b
804 | parent: 31:621d83e11f67
815 | parent: 31:621d83e11f67
805 | user: test
816 | user: test
806 | date: Thu Jan 01 00:00:32 1970 +0000
817 | date: Thu Jan 01 00:00:32 1970 +0000
807 | summary: (32) expand
818 | summary: (32) expand
808 |
819 |
809 o changeset: 27:886ed638191b
820 o changeset: 27:886ed638191b
810 parent: 21:d42a756af44d
821 parent: 21:d42a756af44d
811 user: test
822 user: test
812 date: Thu Jan 01 00:00:27 1970 +0000
823 date: Thu Jan 01 00:00:27 1970 +0000
813 summary: (27) collapse
824 summary: (27) collapse
814
825
815
826
816 File + limit with revs != cset revs:
827 File + limit with revs != cset revs:
817 $ cd repo
828 $ cd repo
818 $ touch b
829 $ touch b
819 $ hg ci -Aqm0
830 $ hg ci -Aqm0
820 $ hg glog -l2 a
831 $ hg glog -l2 a
821 o changeset: 34:fea3ac5810e0
832 o changeset: 34:fea3ac5810e0
822 | parent: 32:d06dffa21a31
833 | parent: 32:d06dffa21a31
823 | user: test
834 | user: test
824 | date: Thu Jan 01 00:00:34 1970 +0000
835 | date: Thu Jan 01 00:00:34 1970 +0000
825 | summary: (34) head
836 | summary: (34) head
826 |
837 |
827 | o changeset: 33:68608f5145f9
838 | o changeset: 33:68608f5145f9
828 | | parent: 18:1aa84d96232a
839 | | parent: 18:1aa84d96232a
829 | | user: test
840 | | user: test
830 | | date: Thu Jan 01 00:00:33 1970 +0000
841 | | date: Thu Jan 01 00:00:33 1970 +0000
831 | | summary: (33) head
842 | | summary: (33) head
832 | |
843 | |
833
844
834 File + limit + -ra:b, (b - a) < limit:
845 File + limit + -ra:b, (b - a) < limit:
835 $ hg glog -l3000 -r32:tip a
846 $ hg glog -l3000 -r32:tip a
836 o changeset: 34:fea3ac5810e0
847 o changeset: 34:fea3ac5810e0
837 | parent: 32:d06dffa21a31
848 | parent: 32:d06dffa21a31
838 | user: test
849 | user: test
839 | date: Thu Jan 01 00:00:34 1970 +0000
850 | date: Thu Jan 01 00:00:34 1970 +0000
840 | summary: (34) head
851 | summary: (34) head
841 |
852 |
842 | o changeset: 33:68608f5145f9
853 | o changeset: 33:68608f5145f9
843 | | parent: 18:1aa84d96232a
854 | | parent: 18:1aa84d96232a
844 | | user: test
855 | | user: test
845 | | date: Thu Jan 01 00:00:33 1970 +0000
856 | | date: Thu Jan 01 00:00:33 1970 +0000
846 | | summary: (33) head
857 | | summary: (33) head
847 | |
858 | |
848 o | changeset: 32:d06dffa21a31
859 o | changeset: 32:d06dffa21a31
849 |\ \ parent: 27:886ed638191b
860 |\ \ parent: 27:886ed638191b
850 | | | parent: 31:621d83e11f67
861 | | | parent: 31:621d83e11f67
851 | | | user: test
862 | | | user: test
852 | | | date: Thu Jan 01 00:00:32 1970 +0000
863 | | | date: Thu Jan 01 00:00:32 1970 +0000
853 | | | summary: (32) expand
864 | | | summary: (32) expand
854 | | |
865 | | |
855
866
856 File + limit + -ra:b, b < tip:
867 File + limit + -ra:b, b < tip:
857 $ hg glog -l1 -r32:34 a
868 $ hg glog -l1 -r32:34 a
858 o changeset: 34:fea3ac5810e0
869 o changeset: 34:fea3ac5810e0
859 | parent: 32:d06dffa21a31
870 | parent: 32:d06dffa21a31
860 | user: test
871 | user: test
861 | date: Thu Jan 01 00:00:34 1970 +0000
872 | date: Thu Jan 01 00:00:34 1970 +0000
862 | summary: (34) head
873 | summary: (34) head
863 |
874 |
864
875
865 File + limit + -ra:b, b < tip, (b - a) < limit:
876 File + limit + -ra:b, b < tip, (b - a) < limit:
866 $ hg glog -l10 -r33:34 a
877 $ hg glog -l10 -r33:34 a
867 o changeset: 34:fea3ac5810e0
878 o changeset: 34:fea3ac5810e0
868 | parent: 32:d06dffa21a31
879 | parent: 32:d06dffa21a31
869 | user: test
880 | user: test
870 | date: Thu Jan 01 00:00:34 1970 +0000
881 | date: Thu Jan 01 00:00:34 1970 +0000
871 | summary: (34) head
882 | summary: (34) head
872 |
883 |
873 | o changeset: 33:68608f5145f9
884 | o changeset: 33:68608f5145f9
874 | | parent: 18:1aa84d96232a
885 | | parent: 18:1aa84d96232a
875 | | user: test
886 | | user: test
876 | | date: Thu Jan 01 00:00:33 1970 +0000
887 | | date: Thu Jan 01 00:00:33 1970 +0000
877 | | summary: (33) head
888 | | summary: (33) head
878 | |
889 | |
879
890
General Comments 0
You need to be logged in to leave comments. Login now