##// END OF EJS Templates
graphlog: don't truncate template value at last \n...
Mads Kiilerich -
r17120:01d847e0 default
parent child Browse files
Show More
@@ -1,592 +1,594 b''
1 # ASCII graph log extension for Mercurial
1 # ASCII graph log extension for Mercurial
2 #
2 #
3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of 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 from mercurial.cmdutil import show_changeset
15 from mercurial.cmdutil import show_changeset
16 from mercurial.i18n import _
16 from mercurial.i18n import _
17 from mercurial.node import nullrev
17 from mercurial.node import nullrev
18 from mercurial import cmdutil, commands, extensions, scmutil
18 from mercurial import cmdutil, commands, extensions, scmutil
19 from mercurial import hg, util, graphmod, templatekw, revset
19 from mercurial import hg, util, graphmod, templatekw, revset
20
20
21 cmdtable = {}
21 cmdtable = {}
22 command = cmdutil.command(cmdtable)
22 command = cmdutil.command(cmdtable)
23 testedwith = 'internal'
23 testedwith = 'internal'
24
24
25 ASCIIDATA = 'ASC'
25 ASCIIDATA = 'ASC'
26
26
27 def asciiedges(type, char, lines, seen, rev, parents):
27 def asciiedges(type, char, lines, seen, rev, parents):
28 """adds edge info to changelog DAG walk suitable for ascii()"""
28 """adds edge info to changelog DAG walk suitable for ascii()"""
29 if rev not in seen:
29 if rev not in seen:
30 seen.append(rev)
30 seen.append(rev)
31 nodeidx = seen.index(rev)
31 nodeidx = seen.index(rev)
32
32
33 knownparents = []
33 knownparents = []
34 newparents = []
34 newparents = []
35 for parent in parents:
35 for parent in parents:
36 if parent in seen:
36 if parent in seen:
37 knownparents.append(parent)
37 knownparents.append(parent)
38 else:
38 else:
39 newparents.append(parent)
39 newparents.append(parent)
40
40
41 ncols = len(seen)
41 ncols = len(seen)
42 nextseen = seen[:]
42 nextseen = seen[:]
43 nextseen[nodeidx:nodeidx + 1] = newparents
43 nextseen[nodeidx:nodeidx + 1] = newparents
44 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
44 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
45
45
46 while len(newparents) > 2:
46 while len(newparents) > 2:
47 # ascii() only knows how to add or remove a single column between two
47 # ascii() only knows how to add or remove a single column between two
48 # calls. Nodes with more than two parents break this constraint so we
48 # calls. Nodes with more than two parents break this constraint so we
49 # introduce intermediate expansion lines to grow the active node list
49 # introduce intermediate expansion lines to grow the active node list
50 # slowly.
50 # slowly.
51 edges.append((nodeidx, nodeidx))
51 edges.append((nodeidx, nodeidx))
52 edges.append((nodeidx, nodeidx + 1))
52 edges.append((nodeidx, nodeidx + 1))
53 nmorecols = 1
53 nmorecols = 1
54 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
54 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
55 char = '\\'
55 char = '\\'
56 lines = []
56 lines = []
57 nodeidx += 1
57 nodeidx += 1
58 ncols += 1
58 ncols += 1
59 edges = []
59 edges = []
60 del newparents[0]
60 del newparents[0]
61
61
62 if len(newparents) > 0:
62 if len(newparents) > 0:
63 edges.append((nodeidx, nodeidx))
63 edges.append((nodeidx, nodeidx))
64 if len(newparents) > 1:
64 if len(newparents) > 1:
65 edges.append((nodeidx, nodeidx + 1))
65 edges.append((nodeidx, nodeidx + 1))
66 nmorecols = len(nextseen) - ncols
66 nmorecols = len(nextseen) - ncols
67 seen[:] = nextseen
67 seen[:] = nextseen
68 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
68 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
69
69
70 def fix_long_right_edges(edges):
70 def fix_long_right_edges(edges):
71 for (i, (start, end)) in enumerate(edges):
71 for (i, (start, end)) in enumerate(edges):
72 if end > start:
72 if end > start:
73 edges[i] = (start, end + 1)
73 edges[i] = (start, end + 1)
74
74
75 def get_nodeline_edges_tail(
75 def get_nodeline_edges_tail(
76 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
76 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
77 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
77 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
78 # Still going in the same non-vertical direction.
78 # Still going in the same non-vertical direction.
79 if n_columns_diff == -1:
79 if n_columns_diff == -1:
80 start = max(node_index + 1, p_node_index)
80 start = max(node_index + 1, p_node_index)
81 tail = ["|", " "] * (start - node_index - 1)
81 tail = ["|", " "] * (start - node_index - 1)
82 tail.extend(["/", " "] * (n_columns - start))
82 tail.extend(["/", " "] * (n_columns - start))
83 return tail
83 return tail
84 else:
84 else:
85 return ["\\", " "] * (n_columns - node_index - 1)
85 return ["\\", " "] * (n_columns - node_index - 1)
86 else:
86 else:
87 return ["|", " "] * (n_columns - node_index - 1)
87 return ["|", " "] * (n_columns - node_index - 1)
88
88
89 def draw_edges(edges, nodeline, interline):
89 def draw_edges(edges, nodeline, interline):
90 for (start, end) in edges:
90 for (start, end) in edges:
91 if start == end + 1:
91 if start == end + 1:
92 interline[2 * end + 1] = "/"
92 interline[2 * end + 1] = "/"
93 elif start == end - 1:
93 elif start == end - 1:
94 interline[2 * start + 1] = "\\"
94 interline[2 * start + 1] = "\\"
95 elif start == end:
95 elif start == end:
96 interline[2 * start] = "|"
96 interline[2 * start] = "|"
97 else:
97 else:
98 if 2 * end >= len(nodeline):
98 if 2 * end >= len(nodeline):
99 continue
99 continue
100 nodeline[2 * end] = "+"
100 nodeline[2 * end] = "+"
101 if start > end:
101 if start > end:
102 (start, end) = (end, start)
102 (start, end) = (end, start)
103 for i in range(2 * start + 1, 2 * end):
103 for i in range(2 * start + 1, 2 * end):
104 if nodeline[i] != "+":
104 if nodeline[i] != "+":
105 nodeline[i] = "-"
105 nodeline[i] = "-"
106
106
107 def get_padding_line(ni, n_columns, edges):
107 def get_padding_line(ni, n_columns, edges):
108 line = []
108 line = []
109 line.extend(["|", " "] * ni)
109 line.extend(["|", " "] * ni)
110 if (ni, ni - 1) in edges or (ni, ni) in edges:
110 if (ni, ni - 1) in edges or (ni, ni) in edges:
111 # (ni, ni - 1) (ni, ni)
111 # (ni, ni - 1) (ni, ni)
112 # | | | | | | | |
112 # | | | | | | | |
113 # +---o | | o---+
113 # +---o | | o---+
114 # | | c | | c | |
114 # | | c | | c | |
115 # | |/ / | |/ /
115 # | |/ / | |/ /
116 # | | | | | |
116 # | | | | | |
117 c = "|"
117 c = "|"
118 else:
118 else:
119 c = " "
119 c = " "
120 line.extend([c, " "])
120 line.extend([c, " "])
121 line.extend(["|", " "] * (n_columns - ni - 1))
121 line.extend(["|", " "] * (n_columns - ni - 1))
122 return line
122 return line
123
123
124 def asciistate():
124 def asciistate():
125 """returns the initial value for the "state" argument to ascii()"""
125 """returns the initial value for the "state" argument to ascii()"""
126 return [0, 0]
126 return [0, 0]
127
127
128 def ascii(ui, state, type, char, text, coldata):
128 def ascii(ui, state, type, char, text, coldata):
129 """prints an ASCII graph of the DAG
129 """prints an ASCII graph of the DAG
130
130
131 takes the following arguments (one call per node in the graph):
131 takes the following arguments (one call per node in the graph):
132
132
133 - ui to write to
133 - ui to write to
134 - Somewhere to keep the needed state in (init to asciistate())
134 - Somewhere to keep the needed state in (init to asciistate())
135 - Column of the current node in the set of ongoing edges.
135 - Column of the current node in the set of ongoing edges.
136 - Type indicator of node data == ASCIIDATA.
136 - Type indicator of node data == ASCIIDATA.
137 - Payload: (char, lines):
137 - Payload: (char, lines):
138 - Character to use as node's symbol.
138 - Character to use as node's symbol.
139 - List of lines to display as the node's text.
139 - List of lines to display as the node's text.
140 - Edges; a list of (col, next_col) indicating the edges between
140 - Edges; a list of (col, next_col) indicating the edges between
141 the current node and its parents.
141 the current node and its parents.
142 - Number of columns (ongoing edges) in the current revision.
142 - Number of columns (ongoing edges) in the current revision.
143 - The difference between the number of columns (ongoing edges)
143 - The difference between the number of columns (ongoing edges)
144 in the next revision and the number of columns (ongoing edges)
144 in the next revision and the number of columns (ongoing edges)
145 in the current revision. That is: -1 means one column removed;
145 in the current revision. That is: -1 means one column removed;
146 0 means no columns added or removed; 1 means one column added.
146 0 means no columns added or removed; 1 means one column added.
147 """
147 """
148
148
149 idx, edges, ncols, coldiff = coldata
149 idx, edges, ncols, coldiff = coldata
150 assert -2 < coldiff < 2
150 assert -2 < coldiff < 2
151 if coldiff == -1:
151 if coldiff == -1:
152 # Transform
152 # Transform
153 #
153 #
154 # | | | | | |
154 # | | | | | |
155 # o | | into o---+
155 # o | | into o---+
156 # |X / |/ /
156 # |X / |/ /
157 # | | | |
157 # | | | |
158 fix_long_right_edges(edges)
158 fix_long_right_edges(edges)
159
159
160 # add_padding_line says whether to rewrite
160 # add_padding_line says whether to rewrite
161 #
161 #
162 # | | | | | | | |
162 # | | | | | | | |
163 # | o---+ into | o---+
163 # | o---+ into | o---+
164 # | / / | | | # <--- padding line
164 # | / / | | | # <--- padding line
165 # o | | | / /
165 # o | | | / /
166 # o | |
166 # o | |
167 add_padding_line = (len(text) > 2 and coldiff == -1 and
167 add_padding_line = (len(text) > 2 and coldiff == -1 and
168 [x for (x, y) in edges if x + 1 < y])
168 [x for (x, y) in edges if x + 1 < y])
169
169
170 # fix_nodeline_tail says whether to rewrite
170 # fix_nodeline_tail says whether to rewrite
171 #
171 #
172 # | | o | | | | o | |
172 # | | o | | | | o | |
173 # | | |/ / | | |/ /
173 # | | |/ / | | |/ /
174 # | o | | into | o / / # <--- fixed nodeline tail
174 # | o | | into | o / / # <--- fixed nodeline tail
175 # | |/ / | |/ /
175 # | |/ / | |/ /
176 # o | | o | |
176 # o | | o | |
177 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
177 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
178
178
179 # nodeline is the line containing the node character (typically o)
179 # nodeline is the line containing the node character (typically o)
180 nodeline = ["|", " "] * idx
180 nodeline = ["|", " "] * idx
181 nodeline.extend([char, " "])
181 nodeline.extend([char, " "])
182
182
183 nodeline.extend(
183 nodeline.extend(
184 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
184 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
185 state[0], fix_nodeline_tail))
185 state[0], fix_nodeline_tail))
186
186
187 # shift_interline is the line containing the non-vertical
187 # shift_interline is the line containing the non-vertical
188 # edges between this entry and the next
188 # edges between this entry and the next
189 shift_interline = ["|", " "] * idx
189 shift_interline = ["|", " "] * idx
190 if coldiff == -1:
190 if coldiff == -1:
191 n_spaces = 1
191 n_spaces = 1
192 edge_ch = "/"
192 edge_ch = "/"
193 elif coldiff == 0:
193 elif coldiff == 0:
194 n_spaces = 2
194 n_spaces = 2
195 edge_ch = "|"
195 edge_ch = "|"
196 else:
196 else:
197 n_spaces = 3
197 n_spaces = 3
198 edge_ch = "\\"
198 edge_ch = "\\"
199 shift_interline.extend(n_spaces * [" "])
199 shift_interline.extend(n_spaces * [" "])
200 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
200 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
201
201
202 # draw edges from the current node to its parents
202 # draw edges from the current node to its parents
203 draw_edges(edges, nodeline, shift_interline)
203 draw_edges(edges, nodeline, shift_interline)
204
204
205 # lines is the list of all graph lines to print
205 # lines is the list of all graph lines to print
206 lines = [nodeline]
206 lines = [nodeline]
207 if add_padding_line:
207 if add_padding_line:
208 lines.append(get_padding_line(idx, ncols, edges))
208 lines.append(get_padding_line(idx, ncols, edges))
209 lines.append(shift_interline)
209 lines.append(shift_interline)
210
210
211 # make sure that there are as many graph lines as there are
211 # make sure that there are as many graph lines as there are
212 # log strings
212 # log strings
213 while len(text) < len(lines):
213 while len(text) < len(lines):
214 text.append("")
214 text.append("")
215 if len(lines) < len(text):
215 if len(lines) < len(text):
216 extra_interline = ["|", " "] * (ncols + coldiff)
216 extra_interline = ["|", " "] * (ncols + coldiff)
217 while len(lines) < len(text):
217 while len(lines) < len(text):
218 lines.append(extra_interline)
218 lines.append(extra_interline)
219
219
220 # print lines
220 # print lines
221 indentation_level = max(ncols, ncols + coldiff)
221 indentation_level = max(ncols, ncols + coldiff)
222 for (line, logstr) in zip(lines, text):
222 for (line, logstr) in zip(lines, text):
223 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
223 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
224 ui.write(ln.rstrip() + '\n')
224 ui.write(ln.rstrip() + '\n')
225
225
226 # ... and start over
226 # ... and start over
227 state[0] = coldiff
227 state[0] = coldiff
228 state[1] = idx
228 state[1] = idx
229
229
230 def get_revs(repo, rev_opt):
230 def get_revs(repo, rev_opt):
231 if rev_opt:
231 if rev_opt:
232 revs = scmutil.revrange(repo, rev_opt)
232 revs = scmutil.revrange(repo, rev_opt)
233 if len(revs) == 0:
233 if len(revs) == 0:
234 return (nullrev, nullrev)
234 return (nullrev, nullrev)
235 return (max(revs), min(revs))
235 return (max(revs), min(revs))
236 else:
236 else:
237 return (len(repo) - 1, 0)
237 return (len(repo) - 1, 0)
238
238
239 def check_unsupported_flags(pats, opts):
239 def check_unsupported_flags(pats, opts):
240 for op in ["newest_first"]:
240 for op in ["newest_first"]:
241 if op in opts and opts[op]:
241 if op in opts and opts[op]:
242 raise util.Abort(_("-G/--graph option is incompatible with --%s")
242 raise util.Abort(_("-G/--graph option is incompatible with --%s")
243 % op.replace("_", "-"))
243 % op.replace("_", "-"))
244
244
245 def _makefilematcher(repo, pats, followfirst):
245 def _makefilematcher(repo, pats, followfirst):
246 # When displaying a revision with --patch --follow FILE, we have
246 # When displaying a revision with --patch --follow FILE, we have
247 # to know which file of the revision must be diffed. With
247 # to know which file of the revision must be diffed. With
248 # --follow, we want the names of the ancestors of FILE in the
248 # --follow, we want the names of the ancestors of FILE in the
249 # revision, stored in "fcache". "fcache" is populated by
249 # revision, stored in "fcache". "fcache" is populated by
250 # reproducing the graph traversal already done by --follow revset
250 # reproducing the graph traversal already done by --follow revset
251 # and relating linkrevs to file names (which is not "correct" but
251 # and relating linkrevs to file names (which is not "correct" but
252 # good enough).
252 # good enough).
253 fcache = {}
253 fcache = {}
254 fcacheready = [False]
254 fcacheready = [False]
255 pctx = repo['.']
255 pctx = repo['.']
256 wctx = repo[None]
256 wctx = repo[None]
257
257
258 def populate():
258 def populate():
259 for fn in pats:
259 for fn in pats:
260 for i in ((pctx[fn],), pctx[fn].ancestors(followfirst=followfirst)):
260 for i in ((pctx[fn],), pctx[fn].ancestors(followfirst=followfirst)):
261 for c in i:
261 for c in i:
262 fcache.setdefault(c.linkrev(), set()).add(c.path())
262 fcache.setdefault(c.linkrev(), set()).add(c.path())
263
263
264 def filematcher(rev):
264 def filematcher(rev):
265 if not fcacheready[0]:
265 if not fcacheready[0]:
266 # Lazy initialization
266 # Lazy initialization
267 fcacheready[0] = True
267 fcacheready[0] = True
268 populate()
268 populate()
269 return scmutil.match(wctx, fcache.get(rev, []), default='path')
269 return scmutil.match(wctx, fcache.get(rev, []), default='path')
270
270
271 return filematcher
271 return filematcher
272
272
273 def _makelogrevset(repo, pats, opts, revs):
273 def _makelogrevset(repo, pats, opts, revs):
274 """Return (expr, filematcher) where expr is a revset string built
274 """Return (expr, filematcher) where expr is a revset string built
275 from log options and file patterns or None. If --stat or --patch
275 from log options and file patterns or None. If --stat or --patch
276 are not passed filematcher is None. Otherwise it is a callable
276 are not passed filematcher is None. Otherwise it is a callable
277 taking a revision number and returning a match objects filtering
277 taking a revision number and returning a match objects filtering
278 the files to be detailed when displaying the revision.
278 the files to be detailed when displaying the revision.
279 """
279 """
280 opt2revset = {
280 opt2revset = {
281 'no_merges': ('not merge()', None),
281 'no_merges': ('not merge()', None),
282 'only_merges': ('merge()', None),
282 'only_merges': ('merge()', None),
283 '_ancestors': ('ancestors(%(val)s)', None),
283 '_ancestors': ('ancestors(%(val)s)', None),
284 '_fancestors': ('_firstancestors(%(val)s)', None),
284 '_fancestors': ('_firstancestors(%(val)s)', None),
285 '_descendants': ('descendants(%(val)s)', None),
285 '_descendants': ('descendants(%(val)s)', None),
286 '_fdescendants': ('_firstdescendants(%(val)s)', None),
286 '_fdescendants': ('_firstdescendants(%(val)s)', None),
287 '_matchfiles': ('_matchfiles(%(val)s)', None),
287 '_matchfiles': ('_matchfiles(%(val)s)', None),
288 'date': ('date(%(val)r)', None),
288 'date': ('date(%(val)r)', None),
289 'branch': ('branch(%(val)r)', ' or '),
289 'branch': ('branch(%(val)r)', ' or '),
290 '_patslog': ('filelog(%(val)r)', ' or '),
290 '_patslog': ('filelog(%(val)r)', ' or '),
291 '_patsfollow': ('follow(%(val)r)', ' or '),
291 '_patsfollow': ('follow(%(val)r)', ' or '),
292 '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '),
292 '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '),
293 'keyword': ('keyword(%(val)r)', ' or '),
293 'keyword': ('keyword(%(val)r)', ' or '),
294 'prune': ('not (%(val)r or ancestors(%(val)r))', ' and '),
294 'prune': ('not (%(val)r or ancestors(%(val)r))', ' and '),
295 'user': ('user(%(val)r)', ' or '),
295 'user': ('user(%(val)r)', ' or '),
296 }
296 }
297
297
298 opts = dict(opts)
298 opts = dict(opts)
299 # follow or not follow?
299 # follow or not follow?
300 follow = opts.get('follow') or opts.get('follow_first')
300 follow = opts.get('follow') or opts.get('follow_first')
301 followfirst = opts.get('follow_first') and 1 or 0
301 followfirst = opts.get('follow_first') and 1 or 0
302 # --follow with FILE behaviour depends on revs...
302 # --follow with FILE behaviour depends on revs...
303 startrev = revs[0]
303 startrev = revs[0]
304 followdescendants = (len(revs) > 1 and revs[0] < revs[1]) and 1 or 0
304 followdescendants = (len(revs) > 1 and revs[0] < revs[1]) and 1 or 0
305
305
306 # branch and only_branch are really aliases and must be handled at
306 # branch and only_branch are really aliases and must be handled at
307 # the same time
307 # the same time
308 opts['branch'] = opts.get('branch', []) + opts.get('only_branch', [])
308 opts['branch'] = opts.get('branch', []) + opts.get('only_branch', [])
309 opts['branch'] = [repo.lookupbranch(b) for b in opts['branch']]
309 opts['branch'] = [repo.lookupbranch(b) for b in opts['branch']]
310 # pats/include/exclude are passed to match.match() directly in
310 # pats/include/exclude are passed to match.match() directly in
311 # _matchfile() revset but walkchangerevs() builds its matcher with
311 # _matchfile() revset but walkchangerevs() builds its matcher with
312 # scmutil.match(). The difference is input pats are globbed on
312 # scmutil.match(). The difference is input pats are globbed on
313 # platforms without shell expansion (windows).
313 # platforms without shell expansion (windows).
314 pctx = repo[None]
314 pctx = repo[None]
315 match, pats = scmutil.matchandpats(pctx, pats, opts)
315 match, pats = scmutil.matchandpats(pctx, pats, opts)
316 slowpath = match.anypats() or (match.files() and opts.get('removed'))
316 slowpath = match.anypats() or (match.files() and opts.get('removed'))
317 if not slowpath:
317 if not slowpath:
318 for f in match.files():
318 for f in match.files():
319 if follow and f not in pctx:
319 if follow and f not in pctx:
320 raise util.Abort(_('cannot follow file not in parent '
320 raise util.Abort(_('cannot follow file not in parent '
321 'revision: "%s"') % f)
321 'revision: "%s"') % f)
322 filelog = repo.file(f)
322 filelog = repo.file(f)
323 if not len(filelog):
323 if not len(filelog):
324 # A zero count may be a directory or deleted file, so
324 # A zero count may be a directory or deleted file, so
325 # try to find matching entries on the slow path.
325 # try to find matching entries on the slow path.
326 if follow:
326 if follow:
327 raise util.Abort(
327 raise util.Abort(
328 _('cannot follow nonexistent file: "%s"') % f)
328 _('cannot follow nonexistent file: "%s"') % f)
329 slowpath = True
329 slowpath = True
330 if slowpath:
330 if slowpath:
331 # See cmdutil.walkchangerevs() slow path.
331 # See cmdutil.walkchangerevs() slow path.
332 #
332 #
333 if follow:
333 if follow:
334 raise util.Abort(_('can only follow copies/renames for explicit '
334 raise util.Abort(_('can only follow copies/renames for explicit '
335 'filenames'))
335 'filenames'))
336 # pats/include/exclude cannot be represented as separate
336 # pats/include/exclude cannot be represented as separate
337 # revset expressions as their filtering logic applies at file
337 # revset expressions as their filtering logic applies at file
338 # level. For instance "-I a -X a" matches a revision touching
338 # level. For instance "-I a -X a" matches a revision touching
339 # "a" and "b" while "file(a) and not file(b)" does
339 # "a" and "b" while "file(a) and not file(b)" does
340 # not. Besides, filesets are evaluated against the working
340 # not. Besides, filesets are evaluated against the working
341 # directory.
341 # directory.
342 matchargs = ['r:', 'd:relpath']
342 matchargs = ['r:', 'd:relpath']
343 for p in pats:
343 for p in pats:
344 matchargs.append('p:' + p)
344 matchargs.append('p:' + p)
345 for p in opts.get('include', []):
345 for p in opts.get('include', []):
346 matchargs.append('i:' + p)
346 matchargs.append('i:' + p)
347 for p in opts.get('exclude', []):
347 for p in opts.get('exclude', []):
348 matchargs.append('x:' + p)
348 matchargs.append('x:' + p)
349 matchargs = ','.join(('%r' % p) for p in matchargs)
349 matchargs = ','.join(('%r' % p) for p in matchargs)
350 opts['_matchfiles'] = matchargs
350 opts['_matchfiles'] = matchargs
351 else:
351 else:
352 if follow:
352 if follow:
353 fpats = ('_patsfollow', '_patsfollowfirst')
353 fpats = ('_patsfollow', '_patsfollowfirst')
354 fnopats = (('_ancestors', '_fancestors'),
354 fnopats = (('_ancestors', '_fancestors'),
355 ('_descendants', '_fdescendants'))
355 ('_descendants', '_fdescendants'))
356 if pats:
356 if pats:
357 # follow() revset inteprets its file argument as a
357 # follow() revset inteprets its file argument as a
358 # manifest entry, so use match.files(), not pats.
358 # manifest entry, so use match.files(), not pats.
359 opts[fpats[followfirst]] = list(match.files())
359 opts[fpats[followfirst]] = list(match.files())
360 else:
360 else:
361 opts[fnopats[followdescendants][followfirst]] = str(startrev)
361 opts[fnopats[followdescendants][followfirst]] = str(startrev)
362 else:
362 else:
363 opts['_patslog'] = list(pats)
363 opts['_patslog'] = list(pats)
364
364
365 filematcher = None
365 filematcher = None
366 if opts.get('patch') or opts.get('stat'):
366 if opts.get('patch') or opts.get('stat'):
367 if follow:
367 if follow:
368 filematcher = _makefilematcher(repo, pats, followfirst)
368 filematcher = _makefilematcher(repo, pats, followfirst)
369 else:
369 else:
370 filematcher = lambda rev: match
370 filematcher = lambda rev: match
371
371
372 expr = []
372 expr = []
373 for op, val in opts.iteritems():
373 for op, val in opts.iteritems():
374 if not val:
374 if not val:
375 continue
375 continue
376 if op not in opt2revset:
376 if op not in opt2revset:
377 continue
377 continue
378 revop, andor = opt2revset[op]
378 revop, andor = opt2revset[op]
379 if '%(val)' not in revop:
379 if '%(val)' not in revop:
380 expr.append(revop)
380 expr.append(revop)
381 else:
381 else:
382 if not isinstance(val, list):
382 if not isinstance(val, list):
383 e = revop % {'val': val}
383 e = revop % {'val': val}
384 else:
384 else:
385 e = '(' + andor.join((revop % {'val': v}) for v in val) + ')'
385 e = '(' + andor.join((revop % {'val': v}) for v in val) + ')'
386 expr.append(e)
386 expr.append(e)
387
387
388 if expr:
388 if expr:
389 expr = '(' + ' and '.join(expr) + ')'
389 expr = '(' + ' and '.join(expr) + ')'
390 else:
390 else:
391 expr = None
391 expr = None
392 return expr, filematcher
392 return expr, filematcher
393
393
394 def getlogrevs(repo, pats, opts):
394 def getlogrevs(repo, pats, opts):
395 """Return (revs, expr, filematcher) where revs is an iterable of
395 """Return (revs, expr, filematcher) where revs is an iterable of
396 revision numbers, expr is a revset string built from log options
396 revision numbers, expr is a revset string built from log options
397 and file patterns or None, and used to filter 'revs'. If --stat or
397 and file patterns or None, and used to filter 'revs'. If --stat or
398 --patch are not passed filematcher is None. Otherwise it is a
398 --patch are not passed filematcher is None. Otherwise it is a
399 callable taking a revision number and returning a match objects
399 callable taking a revision number and returning a match objects
400 filtering the files to be detailed when displaying the revision.
400 filtering the files to be detailed when displaying the revision.
401 """
401 """
402 def increasingrevs(repo, revs, matcher):
402 def increasingrevs(repo, revs, matcher):
403 # The sorted input rev sequence is chopped in sub-sequences
403 # The sorted input rev sequence is chopped in sub-sequences
404 # which are sorted in ascending order and passed to the
404 # which are sorted in ascending order and passed to the
405 # matcher. The filtered revs are sorted again as they were in
405 # matcher. The filtered revs are sorted again as they were in
406 # the original sub-sequence. This achieve several things:
406 # the original sub-sequence. This achieve several things:
407 #
407 #
408 # - getlogrevs() now returns a generator which behaviour is
408 # - getlogrevs() now returns a generator which behaviour is
409 # adapted to log need. First results come fast, last ones
409 # adapted to log need. First results come fast, last ones
410 # are batched for performances.
410 # are batched for performances.
411 #
411 #
412 # - revset matchers often operate faster on revision in
412 # - revset matchers often operate faster on revision in
413 # changelog order, because most filters deal with the
413 # changelog order, because most filters deal with the
414 # changelog.
414 # changelog.
415 #
415 #
416 # - revset matchers can reorder revisions. "A or B" typically
416 # - revset matchers can reorder revisions. "A or B" typically
417 # returns returns the revision matching A then the revision
417 # returns returns the revision matching A then the revision
418 # matching B. We want to hide this internal implementation
418 # matching B. We want to hide this internal implementation
419 # detail from the caller, and sorting the filtered revision
419 # detail from the caller, and sorting the filtered revision
420 # again achieves this.
420 # again achieves this.
421 for i, window in cmdutil.increasingwindows(0, len(revs), windowsize=1):
421 for i, window in cmdutil.increasingwindows(0, len(revs), windowsize=1):
422 orevs = revs[i:i + window]
422 orevs = revs[i:i + window]
423 nrevs = set(matcher(repo, sorted(orevs)))
423 nrevs = set(matcher(repo, sorted(orevs)))
424 for rev in orevs:
424 for rev in orevs:
425 if rev in nrevs:
425 if rev in nrevs:
426 yield rev
426 yield rev
427
427
428 if not len(repo):
428 if not len(repo):
429 return iter([]), None, None
429 return iter([]), None, None
430 # Default --rev value depends on --follow but --follow behaviour
430 # Default --rev value depends on --follow but --follow behaviour
431 # depends on revisions resolved from --rev...
431 # depends on revisions resolved from --rev...
432 follow = opts.get('follow') or opts.get('follow_first')
432 follow = opts.get('follow') or opts.get('follow_first')
433 if opts.get('rev'):
433 if opts.get('rev'):
434 revs = scmutil.revrange(repo, opts['rev'])
434 revs = scmutil.revrange(repo, opts['rev'])
435 else:
435 else:
436 if follow and len(repo) > 0:
436 if follow and len(repo) > 0:
437 revs = scmutil.revrange(repo, ['.:0'])
437 revs = scmutil.revrange(repo, ['.:0'])
438 else:
438 else:
439 revs = range(len(repo) - 1, -1, -1)
439 revs = range(len(repo) - 1, -1, -1)
440 if not revs:
440 if not revs:
441 return iter([]), None, None
441 return iter([]), None, None
442 expr, filematcher = _makelogrevset(repo, pats, opts, revs)
442 expr, filematcher = _makelogrevset(repo, pats, opts, revs)
443 if expr:
443 if expr:
444 matcher = revset.match(repo.ui, expr)
444 matcher = revset.match(repo.ui, expr)
445 revs = increasingrevs(repo, revs, matcher)
445 revs = increasingrevs(repo, revs, matcher)
446 if not opts.get('hidden'):
446 if not opts.get('hidden'):
447 # --hidden is still experimental and not worth a dedicated revset
447 # --hidden is still experimental and not worth a dedicated revset
448 # yet. Fortunately, filtering revision number is fast.
448 # yet. Fortunately, filtering revision number is fast.
449 revs = (r for r in revs if r not in repo.changelog.hiddenrevs)
449 revs = (r for r in revs if r not in repo.changelog.hiddenrevs)
450 else:
450 else:
451 revs = iter(revs)
451 revs = iter(revs)
452 return revs, expr, filematcher
452 return revs, expr, filematcher
453
453
454 def generate(ui, dag, displayer, showparents, edgefn, getrenamed=None,
454 def generate(ui, dag, displayer, showparents, edgefn, getrenamed=None,
455 filematcher=None):
455 filematcher=None):
456 seen, state = [], asciistate()
456 seen, state = [], asciistate()
457 for rev, type, ctx, parents in dag:
457 for rev, type, ctx, parents in dag:
458 char = 'o'
458 char = 'o'
459 if ctx.node() in showparents:
459 if ctx.node() in showparents:
460 char = '@'
460 char = '@'
461 elif ctx.obsolete():
461 elif ctx.obsolete():
462 char = 'x'
462 char = 'x'
463 copies = None
463 copies = None
464 if getrenamed and ctx.rev():
464 if getrenamed and ctx.rev():
465 copies = []
465 copies = []
466 for fn in ctx.files():
466 for fn in ctx.files():
467 rename = getrenamed(fn, ctx.rev())
467 rename = getrenamed(fn, ctx.rev())
468 if rename:
468 if rename:
469 copies.append((fn, rename[0]))
469 copies.append((fn, rename[0]))
470 revmatchfn = None
470 revmatchfn = None
471 if filematcher is not None:
471 if filematcher is not None:
472 revmatchfn = filematcher(ctx.rev())
472 revmatchfn = filematcher(ctx.rev())
473 displayer.show(ctx, copies=copies, matchfn=revmatchfn)
473 displayer.show(ctx, copies=copies, matchfn=revmatchfn)
474 lines = displayer.hunk.pop(rev).split('\n')[:-1]
474 lines = displayer.hunk.pop(rev).split('\n')
475 if not lines[-1]:
476 del lines[-1]
475 displayer.flush(rev)
477 displayer.flush(rev)
476 edges = edgefn(type, char, lines, seen, rev, parents)
478 edges = edgefn(type, char, lines, seen, rev, parents)
477 for type, char, lines, coldata in edges:
479 for type, char, lines, coldata in edges:
478 ascii(ui, state, type, char, lines, coldata)
480 ascii(ui, state, type, char, lines, coldata)
479 displayer.close()
481 displayer.close()
480
482
481 @command('glog',
483 @command('glog',
482 [('f', 'follow', None,
484 [('f', 'follow', None,
483 _('follow changeset history, or file history across copies and renames')),
485 _('follow changeset history, or file history across copies and renames')),
484 ('', 'follow-first', None,
486 ('', 'follow-first', None,
485 _('only follow the first parent of merge changesets (DEPRECATED)')),
487 _('only follow the first parent of merge changesets (DEPRECATED)')),
486 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')),
488 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')),
487 ('C', 'copies', None, _('show copied files')),
489 ('C', 'copies', None, _('show copied files')),
488 ('k', 'keyword', [],
490 ('k', 'keyword', [],
489 _('do case-insensitive search for a given text'), _('TEXT')),
491 _('do case-insensitive search for a given text'), _('TEXT')),
490 ('r', 'rev', [], _('show the specified revision or range'), _('REV')),
492 ('r', 'rev', [], _('show the specified revision or range'), _('REV')),
491 ('', 'removed', None, _('include revisions where files were removed')),
493 ('', 'removed', None, _('include revisions where files were removed')),
492 ('m', 'only-merges', None, _('show only merges (DEPRECATED)')),
494 ('m', 'only-merges', None, _('show only merges (DEPRECATED)')),
493 ('u', 'user', [], _('revisions committed by user'), _('USER')),
495 ('u', 'user', [], _('revisions committed by user'), _('USER')),
494 ('', 'only-branch', [],
496 ('', 'only-branch', [],
495 _('show only changesets within the given named branch (DEPRECATED)'),
497 _('show only changesets within the given named branch (DEPRECATED)'),
496 _('BRANCH')),
498 _('BRANCH')),
497 ('b', 'branch', [],
499 ('b', 'branch', [],
498 _('show changesets within the given named branch'), _('BRANCH')),
500 _('show changesets within the given named branch'), _('BRANCH')),
499 ('P', 'prune', [],
501 ('P', 'prune', [],
500 _('do not display revision or any of its ancestors'), _('REV')),
502 _('do not display revision or any of its ancestors'), _('REV')),
501 ('', 'hidden', False, _('show hidden changesets (DEPRECATED)')),
503 ('', 'hidden', False, _('show hidden changesets (DEPRECATED)')),
502 ] + commands.logopts + commands.walkopts,
504 ] + commands.logopts + commands.walkopts,
503 _('[OPTION]... [FILE]'))
505 _('[OPTION]... [FILE]'))
504 def graphlog(ui, repo, *pats, **opts):
506 def graphlog(ui, repo, *pats, **opts):
505 """show revision history alongside an ASCII revision graph
507 """show revision history alongside an ASCII revision graph
506
508
507 Print a revision history alongside a revision graph drawn with
509 Print a revision history alongside a revision graph drawn with
508 ASCII characters.
510 ASCII characters.
509
511
510 Nodes printed as an @ character are parents of the working
512 Nodes printed as an @ character are parents of the working
511 directory.
513 directory.
512 """
514 """
513
515
514 revs, expr, filematcher = getlogrevs(repo, pats, opts)
516 revs, expr, filematcher = getlogrevs(repo, pats, opts)
515 revs = sorted(revs, reverse=1)
517 revs = sorted(revs, reverse=1)
516 limit = cmdutil.loglimit(opts)
518 limit = cmdutil.loglimit(opts)
517 if limit is not None:
519 if limit is not None:
518 revs = revs[:limit]
520 revs = revs[:limit]
519 revdag = graphmod.dagwalker(repo, revs)
521 revdag = graphmod.dagwalker(repo, revs)
520
522
521 getrenamed = None
523 getrenamed = None
522 if opts.get('copies'):
524 if opts.get('copies'):
523 endrev = None
525 endrev = None
524 if opts.get('rev'):
526 if opts.get('rev'):
525 endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1
527 endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1
526 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
528 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
527 displayer = show_changeset(ui, repo, opts, buffered=True)
529 displayer = show_changeset(ui, repo, opts, buffered=True)
528 showparents = [ctx.node() for ctx in repo[None].parents()]
530 showparents = [ctx.node() for ctx in repo[None].parents()]
529 generate(ui, revdag, displayer, showparents, asciiedges, getrenamed,
531 generate(ui, revdag, displayer, showparents, asciiedges, getrenamed,
530 filematcher)
532 filematcher)
531
533
532 def graphrevs(repo, nodes, opts):
534 def graphrevs(repo, nodes, opts):
533 limit = cmdutil.loglimit(opts)
535 limit = cmdutil.loglimit(opts)
534 nodes.reverse()
536 nodes.reverse()
535 if limit is not None:
537 if limit is not None:
536 nodes = nodes[:limit]
538 nodes = nodes[:limit]
537 return graphmod.nodes(repo, nodes)
539 return graphmod.nodes(repo, nodes)
538
540
539 def goutgoing(ui, repo, dest=None, **opts):
541 def goutgoing(ui, repo, dest=None, **opts):
540 """show the outgoing changesets alongside an ASCII revision graph
542 """show the outgoing changesets alongside an ASCII revision graph
541
543
542 Print the outgoing changesets alongside a revision graph drawn with
544 Print the outgoing changesets alongside a revision graph drawn with
543 ASCII characters.
545 ASCII characters.
544
546
545 Nodes printed as an @ character are parents of the working
547 Nodes printed as an @ character are parents of the working
546 directory.
548 directory.
547 """
549 """
548
550
549 check_unsupported_flags([], opts)
551 check_unsupported_flags([], opts)
550 o = hg._outgoing(ui, repo, dest, opts)
552 o = hg._outgoing(ui, repo, dest, opts)
551 if o is None:
553 if o is None:
552 return
554 return
553
555
554 revdag = graphrevs(repo, o, opts)
556 revdag = graphrevs(repo, o, opts)
555 displayer = show_changeset(ui, repo, opts, buffered=True)
557 displayer = show_changeset(ui, repo, opts, buffered=True)
556 showparents = [ctx.node() for ctx in repo[None].parents()]
558 showparents = [ctx.node() for ctx in repo[None].parents()]
557 generate(ui, revdag, displayer, showparents, asciiedges)
559 generate(ui, revdag, displayer, showparents, asciiedges)
558
560
559 def gincoming(ui, repo, source="default", **opts):
561 def gincoming(ui, repo, source="default", **opts):
560 """show the incoming changesets alongside an ASCII revision graph
562 """show the incoming changesets alongside an ASCII revision graph
561
563
562 Print the incoming changesets alongside a revision graph drawn with
564 Print the incoming changesets alongside a revision graph drawn with
563 ASCII characters.
565 ASCII characters.
564
566
565 Nodes printed as an @ character are parents of the working
567 Nodes printed as an @ character are parents of the working
566 directory.
568 directory.
567 """
569 """
568 def subreporecurse():
570 def subreporecurse():
569 return 1
571 return 1
570
572
571 check_unsupported_flags([], opts)
573 check_unsupported_flags([], opts)
572 def display(other, chlist, displayer):
574 def display(other, chlist, displayer):
573 revdag = graphrevs(other, chlist, opts)
575 revdag = graphrevs(other, chlist, opts)
574 showparents = [ctx.node() for ctx in repo[None].parents()]
576 showparents = [ctx.node() for ctx in repo[None].parents()]
575 generate(ui, revdag, displayer, showparents, asciiedges)
577 generate(ui, revdag, displayer, showparents, asciiedges)
576
578
577 hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
579 hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
578
580
579 def uisetup(ui):
581 def uisetup(ui):
580 '''Initialize the extension.'''
582 '''Initialize the extension.'''
581 _wrapcmd('log', commands.table, graphlog)
583 _wrapcmd('log', commands.table, graphlog)
582 _wrapcmd('incoming', commands.table, gincoming)
584 _wrapcmd('incoming', commands.table, gincoming)
583 _wrapcmd('outgoing', commands.table, goutgoing)
585 _wrapcmd('outgoing', commands.table, goutgoing)
584
586
585 def _wrapcmd(cmd, table, wrapfn):
587 def _wrapcmd(cmd, table, wrapfn):
586 '''wrap the command'''
588 '''wrap the command'''
587 def graph(orig, *args, **kwargs):
589 def graph(orig, *args, **kwargs):
588 if kwargs['graph']:
590 if kwargs['graph']:
589 return wrapfn(*args, **kwargs)
591 return wrapfn(*args, **kwargs)
590 return orig(*args, **kwargs)
592 return orig(*args, **kwargs)
591 entry = extensions.wrapcommand(table, cmd, graph)
593 entry = extensions.wrapcommand(table, cmd, graph)
592 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
594 entry[1].append(('G', 'graph', None, _("show the revision DAG")))
@@ -1,2063 +1,2089 b''
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 $ commit()
72 $ commit()
73 > {
73 > {
74 > rev=$1
74 > rev=$1
75 > msg=$2
75 > msg=$2
76 > shift 2
76 > shift 2
77 > if [ "$#" -gt 0 ]; then
77 > if [ "$#" -gt 0 ]; then
78 > hg debugsetparents "$@"
78 > hg debugsetparents "$@"
79 > fi
79 > fi
80 > echo $rev > a
80 > echo $rev > a
81 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
81 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
82 > }
82 > }
83
83
84 $ cat > printrevset.py <<EOF
84 $ cat > printrevset.py <<EOF
85 > from mercurial import extensions, revset, commands
85 > from mercurial import extensions, revset, commands
86 > from hgext import graphlog
86 > from hgext import graphlog
87 >
87 >
88 > def uisetup(ui):
88 > def uisetup(ui):
89 > def printrevset(orig, ui, repo, *pats, **opts):
89 > def printrevset(orig, ui, repo, *pats, **opts):
90 > if opts.get('print_revset'):
90 > if opts.get('print_revset'):
91 > expr = graphlog.getlogrevs(repo, pats, opts)[1]
91 > expr = graphlog.getlogrevs(repo, pats, opts)[1]
92 > if expr:
92 > if expr:
93 > tree = revset.parse(expr)[0]
93 > tree = revset.parse(expr)[0]
94 > else:
94 > else:
95 > tree = []
95 > tree = []
96 > ui.write('%r\n' % (opts.get('rev', []),))
96 > ui.write('%r\n' % (opts.get('rev', []),))
97 > ui.write(revset.prettyformat(tree) + '\n')
97 > ui.write(revset.prettyformat(tree) + '\n')
98 > return 0
98 > return 0
99 > return orig(ui, repo, *pats, **opts)
99 > return orig(ui, repo, *pats, **opts)
100 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
100 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
101 > entry[1].append(('', 'print-revset', False,
101 > entry[1].append(('', 'print-revset', False,
102 > 'print generated revset and exit (DEPRECATED)'))
102 > 'print generated revset and exit (DEPRECATED)'))
103 > EOF
103 > EOF
104
104
105 $ echo "[extensions]" >> $HGRCPATH
105 $ echo "[extensions]" >> $HGRCPATH
106 $ echo "graphlog=" >> $HGRCPATH
106 $ echo "graphlog=" >> $HGRCPATH
107 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
107 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
108
108
109 $ hg init repo
109 $ hg init repo
110 $ cd repo
110 $ cd repo
111
111
112 Empty repo:
112 Empty repo:
113
113
114 $ hg glog
114 $ hg glog
115
115
116
116
117 Building DAG:
117 Building DAG:
118
118
119 $ commit 0 "root"
119 $ commit 0 "root"
120 $ commit 1 "collapse" 0
120 $ commit 1 "collapse" 0
121 $ commit 2 "collapse" 1
121 $ commit 2 "collapse" 1
122 $ commit 3 "collapse" 2
122 $ commit 3 "collapse" 2
123 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
123 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
124 $ commit 5 "expand" 3 4
124 $ commit 5 "expand" 3 4
125 $ commit 6 "merge two known; one immediate left, one far left" 2 5
125 $ commit 6 "merge two known; one immediate left, one far left" 2 5
126 $ commit 7 "expand" 2 5
126 $ commit 7 "expand" 2 5
127 $ commit 8 "merge two known; one immediate left, one far right" 0 7
127 $ commit 8 "merge two known; one immediate left, one far right" 0 7
128 $ commit 9 "expand" 7 8
128 $ commit 9 "expand" 7 8
129 $ commit 10 "merge two known; one immediate left, one near right" 0 6
129 $ commit 10 "merge two known; one immediate left, one near right" 0 6
130 $ commit 11 "expand" 6 10
130 $ commit 11 "expand" 6 10
131 $ commit 12 "merge two known; one immediate right, one far left" 1 9
131 $ commit 12 "merge two known; one immediate right, one far left" 1 9
132 $ commit 13 "expand" 9 11
132 $ commit 13 "expand" 9 11
133 $ commit 14 "merge two known; one immediate right, one far right" 0 12
133 $ commit 14 "merge two known; one immediate right, one far right" 0 12
134 $ commit 15 "expand" 13 14
134 $ commit 15 "expand" 13 14
135 $ commit 16 "merge two known; one immediate right, one near right" 0 1
135 $ commit 16 "merge two known; one immediate right, one near right" 0 1
136 $ commit 17 "expand" 12 16
136 $ commit 17 "expand" 12 16
137 $ commit 18 "merge two known; two far left" 1 15
137 $ commit 18 "merge two known; two far left" 1 15
138 $ commit 19 "expand" 15 17
138 $ commit 19 "expand" 15 17
139 $ commit 20 "merge two known; two far right" 0 18
139 $ commit 20 "merge two known; two far right" 0 18
140 $ commit 21 "expand" 19 20
140 $ commit 21 "expand" 19 20
141 $ commit 22 "merge two known; one far left, one far right" 18 21
141 $ commit 22 "merge two known; one far left, one far right" 18 21
142 $ commit 23 "merge one known; immediate left" 1 22
142 $ commit 23 "merge one known; immediate left" 1 22
143 $ commit 24 "merge one known; immediate right" 0 23
143 $ commit 24 "merge one known; immediate right" 0 23
144 $ commit 25 "merge one known; far left" 21 24
144 $ commit 25 "merge one known; far left" 21 24
145 $ commit 26 "merge one known; far right" 18 25
145 $ commit 26 "merge one known; far right" 18 25
146 $ commit 27 "collapse" 21
146 $ commit 27 "collapse" 21
147 $ commit 28 "merge zero known" 1 26
147 $ commit 28 "merge zero known" 1 26
148 $ commit 29 "regular commit" 0
148 $ commit 29 "regular commit" 0
149 $ commit 30 "expand" 28 29
149 $ commit 30 "expand" 28 29
150 $ commit 31 "expand" 21 30
150 $ commit 31 "expand" 21 30
151 $ commit 32 "expand" 27 31
151 $ commit 32 "expand" 27 31
152 $ commit 33 "head" 18
152 $ commit 33 "head" 18
153 $ commit 34 "head" 32
153 $ commit 34 "head" 32
154
154
155
155
156 $ hg glog -q
156 $ hg glog -q
157 @ 34:fea3ac5810e0
157 @ 34:fea3ac5810e0
158 |
158 |
159 | o 33:68608f5145f9
159 | o 33:68608f5145f9
160 | |
160 | |
161 o | 32:d06dffa21a31
161 o | 32:d06dffa21a31
162 |\ \
162 |\ \
163 | o \ 31:621d83e11f67
163 | o \ 31:621d83e11f67
164 | |\ \
164 | |\ \
165 | | o \ 30:6e11cd4b648f
165 | | o \ 30:6e11cd4b648f
166 | | |\ \
166 | | |\ \
167 | | | o | 29:cd9bb2be7593
167 | | | o | 29:cd9bb2be7593
168 | | | | |
168 | | | | |
169 | | o | | 28:44ecd0b9ae99
169 | | o | | 28:44ecd0b9ae99
170 | | |\ \ \
170 | | |\ \ \
171 o | | | | | 27:886ed638191b
171 o | | | | | 27:886ed638191b
172 |/ / / / /
172 |/ / / / /
173 | | o---+ 26:7f25b6c2f0b9
173 | | o---+ 26:7f25b6c2f0b9
174 | | | | |
174 | | | | |
175 +---o | | 25:91da8ed57247
175 +---o | | 25:91da8ed57247
176 | | | | |
176 | | | | |
177 | | o | | 24:a9c19a3d96b7
177 | | o | | 24:a9c19a3d96b7
178 | | |\| |
178 | | |\| |
179 | | o | | 23:a01cddf0766d
179 | | o | | 23:a01cddf0766d
180 | |/| | |
180 | |/| | |
181 +---o---+ 22:e0d9cccacb5d
181 +---o---+ 22:e0d9cccacb5d
182 | | / /
182 | | / /
183 o | | | 21:d42a756af44d
183 o | | | 21:d42a756af44d
184 |\ \ \ \
184 |\ \ \ \
185 | o---+-+ 20:d30ed6450e32
185 | o---+-+ 20:d30ed6450e32
186 | / / /
186 | / / /
187 o | | | 19:31ddc2c1573b
187 o | | | 19:31ddc2c1573b
188 |\ \ \ \
188 |\ \ \ \
189 +---+---o 18:1aa84d96232a
189 +---+---o 18:1aa84d96232a
190 | | | |
190 | | | |
191 | o | | 17:44765d7c06e0
191 | o | | 17:44765d7c06e0
192 | |\ \ \
192 | |\ \ \
193 | | o---+ 16:3677d192927d
193 | | o---+ 16:3677d192927d
194 | | |/ /
194 | | |/ /
195 o | | | 15:1dda3f72782d
195 o | | | 15:1dda3f72782d
196 |\ \ \ \
196 |\ \ \ \
197 | o-----+ 14:8eac370358ef
197 | o-----+ 14:8eac370358ef
198 | |/ / /
198 | |/ / /
199 o | | | 13:22d8966a97e3
199 o | | | 13:22d8966a97e3
200 |\ \ \ \
200 |\ \ \ \
201 +---o | | 12:86b91144a6e9
201 +---o | | 12:86b91144a6e9
202 | | |/ /
202 | | |/ /
203 | o | | 11:832d76e6bdf2
203 | o | | 11:832d76e6bdf2
204 | |\ \ \
204 | |\ \ \
205 | | o---+ 10:74c64d036d72
205 | | o---+ 10:74c64d036d72
206 | |/ / /
206 | |/ / /
207 o | | | 9:7010c0af0a35
207 o | | | 9:7010c0af0a35
208 |\ \ \ \
208 |\ \ \ \
209 | o-----+ 8:7a0b11f71937
209 | o-----+ 8:7a0b11f71937
210 |/ / / /
210 |/ / / /
211 o | | | 7:b632bb1b1224
211 o | | | 7:b632bb1b1224
212 |\ \ \ \
212 |\ \ \ \
213 +---o | | 6:b105a072e251
213 +---o | | 6:b105a072e251
214 | |/ / /
214 | |/ / /
215 | o | | 5:4409d547b708
215 | o | | 5:4409d547b708
216 | |\ \ \
216 | |\ \ \
217 | | o | | 4:26a8bac39d9f
217 | | o | | 4:26a8bac39d9f
218 | |/|/ /
218 | |/|/ /
219 | o / / 3:27eef8ed80b4
219 | o / / 3:27eef8ed80b4
220 |/ / /
220 |/ / /
221 o / / 2:3d9a33b8d1e1
221 o / / 2:3d9a33b8d1e1
222 |/ /
222 |/ /
223 o / 1:6db2ef61d156
223 o / 1:6db2ef61d156
224 |/
224 |/
225 o 0:e6eb3150255d
225 o 0:e6eb3150255d
226
226
227
227
228 $ hg glog
228 $ hg glog
229 @ changeset: 34:fea3ac5810e0
229 @ changeset: 34:fea3ac5810e0
230 | tag: tip
230 | tag: tip
231 | parent: 32:d06dffa21a31
231 | parent: 32:d06dffa21a31
232 | user: test
232 | user: test
233 | date: Thu Jan 01 00:00:34 1970 +0000
233 | date: Thu Jan 01 00:00:34 1970 +0000
234 | summary: (34) head
234 | summary: (34) head
235 |
235 |
236 | o changeset: 33:68608f5145f9
236 | o changeset: 33:68608f5145f9
237 | | parent: 18:1aa84d96232a
237 | | parent: 18:1aa84d96232a
238 | | user: test
238 | | user: test
239 | | date: Thu Jan 01 00:00:33 1970 +0000
239 | | date: Thu Jan 01 00:00:33 1970 +0000
240 | | summary: (33) head
240 | | summary: (33) head
241 | |
241 | |
242 o | changeset: 32:d06dffa21a31
242 o | changeset: 32:d06dffa21a31
243 |\ \ parent: 27:886ed638191b
243 |\ \ parent: 27:886ed638191b
244 | | | parent: 31:621d83e11f67
244 | | | parent: 31:621d83e11f67
245 | | | user: test
245 | | | user: test
246 | | | date: Thu Jan 01 00:00:32 1970 +0000
246 | | | date: Thu Jan 01 00:00:32 1970 +0000
247 | | | summary: (32) expand
247 | | | summary: (32) expand
248 | | |
248 | | |
249 | o | changeset: 31:621d83e11f67
249 | o | changeset: 31:621d83e11f67
250 | |\ \ parent: 21:d42a756af44d
250 | |\ \ parent: 21:d42a756af44d
251 | | | | parent: 30:6e11cd4b648f
251 | | | | parent: 30:6e11cd4b648f
252 | | | | user: test
252 | | | | user: test
253 | | | | date: Thu Jan 01 00:00:31 1970 +0000
253 | | | | date: Thu Jan 01 00:00:31 1970 +0000
254 | | | | summary: (31) expand
254 | | | | summary: (31) expand
255 | | | |
255 | | | |
256 | | o | changeset: 30:6e11cd4b648f
256 | | o | changeset: 30:6e11cd4b648f
257 | | |\ \ parent: 28:44ecd0b9ae99
257 | | |\ \ parent: 28:44ecd0b9ae99
258 | | | | | parent: 29:cd9bb2be7593
258 | | | | | parent: 29:cd9bb2be7593
259 | | | | | user: test
259 | | | | | user: test
260 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
260 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
261 | | | | | summary: (30) expand
261 | | | | | summary: (30) expand
262 | | | | |
262 | | | | |
263 | | | o | changeset: 29:cd9bb2be7593
263 | | | o | changeset: 29:cd9bb2be7593
264 | | | | | parent: 0:e6eb3150255d
264 | | | | | parent: 0:e6eb3150255d
265 | | | | | user: test
265 | | | | | user: test
266 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
266 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
267 | | | | | summary: (29) regular commit
267 | | | | | summary: (29) regular commit
268 | | | | |
268 | | | | |
269 | | o | | changeset: 28:44ecd0b9ae99
269 | | o | | changeset: 28:44ecd0b9ae99
270 | | |\ \ \ parent: 1:6db2ef61d156
270 | | |\ \ \ parent: 1:6db2ef61d156
271 | | | | | | parent: 26:7f25b6c2f0b9
271 | | | | | | parent: 26:7f25b6c2f0b9
272 | | | | | | user: test
272 | | | | | | user: test
273 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
273 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
274 | | | | | | summary: (28) merge zero known
274 | | | | | | summary: (28) merge zero known
275 | | | | | |
275 | | | | | |
276 o | | | | | changeset: 27:886ed638191b
276 o | | | | | changeset: 27:886ed638191b
277 |/ / / / / parent: 21:d42a756af44d
277 |/ / / / / parent: 21:d42a756af44d
278 | | | | | user: test
278 | | | | | user: test
279 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
279 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
280 | | | | | summary: (27) collapse
280 | | | | | summary: (27) collapse
281 | | | | |
281 | | | | |
282 | | o---+ changeset: 26:7f25b6c2f0b9
282 | | o---+ changeset: 26:7f25b6c2f0b9
283 | | | | | parent: 18:1aa84d96232a
283 | | | | | parent: 18:1aa84d96232a
284 | | | | | parent: 25:91da8ed57247
284 | | | | | parent: 25:91da8ed57247
285 | | | | | user: test
285 | | | | | user: test
286 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
286 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
287 | | | | | summary: (26) merge one known; far right
287 | | | | | summary: (26) merge one known; far right
288 | | | | |
288 | | | | |
289 +---o | | changeset: 25:91da8ed57247
289 +---o | | changeset: 25:91da8ed57247
290 | | | | | parent: 21:d42a756af44d
290 | | | | | parent: 21:d42a756af44d
291 | | | | | parent: 24:a9c19a3d96b7
291 | | | | | parent: 24:a9c19a3d96b7
292 | | | | | user: test
292 | | | | | user: test
293 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
293 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
294 | | | | | summary: (25) merge one known; far left
294 | | | | | summary: (25) merge one known; far left
295 | | | | |
295 | | | | |
296 | | o | | changeset: 24:a9c19a3d96b7
296 | | o | | changeset: 24:a9c19a3d96b7
297 | | |\| | parent: 0:e6eb3150255d
297 | | |\| | parent: 0:e6eb3150255d
298 | | | | | parent: 23:a01cddf0766d
298 | | | | | parent: 23:a01cddf0766d
299 | | | | | user: test
299 | | | | | user: test
300 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
300 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
301 | | | | | summary: (24) merge one known; immediate right
301 | | | | | summary: (24) merge one known; immediate right
302 | | | | |
302 | | | | |
303 | | o | | changeset: 23:a01cddf0766d
303 | | o | | changeset: 23:a01cddf0766d
304 | |/| | | parent: 1:6db2ef61d156
304 | |/| | | parent: 1:6db2ef61d156
305 | | | | | parent: 22:e0d9cccacb5d
305 | | | | | parent: 22:e0d9cccacb5d
306 | | | | | user: test
306 | | | | | user: test
307 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
307 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
308 | | | | | summary: (23) merge one known; immediate left
308 | | | | | summary: (23) merge one known; immediate left
309 | | | | |
309 | | | | |
310 +---o---+ changeset: 22:e0d9cccacb5d
310 +---o---+ changeset: 22:e0d9cccacb5d
311 | | | | parent: 18:1aa84d96232a
311 | | | | parent: 18:1aa84d96232a
312 | | / / parent: 21:d42a756af44d
312 | | / / parent: 21:d42a756af44d
313 | | | | user: test
313 | | | | user: test
314 | | | | date: Thu Jan 01 00:00:22 1970 +0000
314 | | | | date: Thu Jan 01 00:00:22 1970 +0000
315 | | | | summary: (22) merge two known; one far left, one far right
315 | | | | summary: (22) merge two known; one far left, one far right
316 | | | |
316 | | | |
317 o | | | changeset: 21:d42a756af44d
317 o | | | changeset: 21:d42a756af44d
318 |\ \ \ \ parent: 19:31ddc2c1573b
318 |\ \ \ \ parent: 19:31ddc2c1573b
319 | | | | | parent: 20:d30ed6450e32
319 | | | | | parent: 20:d30ed6450e32
320 | | | | | user: test
320 | | | | | user: test
321 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
321 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
322 | | | | | summary: (21) expand
322 | | | | | summary: (21) expand
323 | | | | |
323 | | | | |
324 | o---+-+ changeset: 20:d30ed6450e32
324 | o---+-+ changeset: 20:d30ed6450e32
325 | | | | parent: 0:e6eb3150255d
325 | | | | parent: 0:e6eb3150255d
326 | / / / parent: 18:1aa84d96232a
326 | / / / parent: 18:1aa84d96232a
327 | | | | user: test
327 | | | | user: test
328 | | | | date: Thu Jan 01 00:00:20 1970 +0000
328 | | | | date: Thu Jan 01 00:00:20 1970 +0000
329 | | | | summary: (20) merge two known; two far right
329 | | | | summary: (20) merge two known; two far right
330 | | | |
330 | | | |
331 o | | | changeset: 19:31ddc2c1573b
331 o | | | changeset: 19:31ddc2c1573b
332 |\ \ \ \ parent: 15:1dda3f72782d
332 |\ \ \ \ parent: 15:1dda3f72782d
333 | | | | | parent: 17:44765d7c06e0
333 | | | | | parent: 17:44765d7c06e0
334 | | | | | user: test
334 | | | | | user: test
335 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
335 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
336 | | | | | summary: (19) expand
336 | | | | | summary: (19) expand
337 | | | | |
337 | | | | |
338 +---+---o changeset: 18:1aa84d96232a
338 +---+---o changeset: 18:1aa84d96232a
339 | | | | parent: 1:6db2ef61d156
339 | | | | parent: 1:6db2ef61d156
340 | | | | parent: 15:1dda3f72782d
340 | | | | parent: 15:1dda3f72782d
341 | | | | user: test
341 | | | | user: test
342 | | | | date: Thu Jan 01 00:00:18 1970 +0000
342 | | | | date: Thu Jan 01 00:00:18 1970 +0000
343 | | | | summary: (18) merge two known; two far left
343 | | | | summary: (18) merge two known; two far left
344 | | | |
344 | | | |
345 | o | | changeset: 17:44765d7c06e0
345 | o | | changeset: 17:44765d7c06e0
346 | |\ \ \ parent: 12:86b91144a6e9
346 | |\ \ \ parent: 12:86b91144a6e9
347 | | | | | parent: 16:3677d192927d
347 | | | | | parent: 16:3677d192927d
348 | | | | | user: test
348 | | | | | user: test
349 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
349 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
350 | | | | | summary: (17) expand
350 | | | | | summary: (17) expand
351 | | | | |
351 | | | | |
352 | | o---+ changeset: 16:3677d192927d
352 | | o---+ changeset: 16:3677d192927d
353 | | | | | parent: 0:e6eb3150255d
353 | | | | | parent: 0:e6eb3150255d
354 | | |/ / parent: 1:6db2ef61d156
354 | | |/ / parent: 1:6db2ef61d156
355 | | | | user: test
355 | | | | user: test
356 | | | | date: Thu Jan 01 00:00:16 1970 +0000
356 | | | | date: Thu Jan 01 00:00:16 1970 +0000
357 | | | | summary: (16) merge two known; one immediate right, one near right
357 | | | | summary: (16) merge two known; one immediate right, one near right
358 | | | |
358 | | | |
359 o | | | changeset: 15:1dda3f72782d
359 o | | | changeset: 15:1dda3f72782d
360 |\ \ \ \ parent: 13:22d8966a97e3
360 |\ \ \ \ parent: 13:22d8966a97e3
361 | | | | | parent: 14:8eac370358ef
361 | | | | | parent: 14:8eac370358ef
362 | | | | | user: test
362 | | | | | user: test
363 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
363 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
364 | | | | | summary: (15) expand
364 | | | | | summary: (15) expand
365 | | | | |
365 | | | | |
366 | o-----+ changeset: 14:8eac370358ef
366 | o-----+ changeset: 14:8eac370358ef
367 | | | | | parent: 0:e6eb3150255d
367 | | | | | parent: 0:e6eb3150255d
368 | |/ / / parent: 12:86b91144a6e9
368 | |/ / / parent: 12:86b91144a6e9
369 | | | | user: test
369 | | | | user: test
370 | | | | date: Thu Jan 01 00:00:14 1970 +0000
370 | | | | date: Thu Jan 01 00:00:14 1970 +0000
371 | | | | summary: (14) merge two known; one immediate right, one far right
371 | | | | summary: (14) merge two known; one immediate right, one far right
372 | | | |
372 | | | |
373 o | | | changeset: 13:22d8966a97e3
373 o | | | changeset: 13:22d8966a97e3
374 |\ \ \ \ parent: 9:7010c0af0a35
374 |\ \ \ \ parent: 9:7010c0af0a35
375 | | | | | parent: 11:832d76e6bdf2
375 | | | | | parent: 11:832d76e6bdf2
376 | | | | | user: test
376 | | | | | user: test
377 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
377 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
378 | | | | | summary: (13) expand
378 | | | | | summary: (13) expand
379 | | | | |
379 | | | | |
380 +---o | | changeset: 12:86b91144a6e9
380 +---o | | changeset: 12:86b91144a6e9
381 | | |/ / parent: 1:6db2ef61d156
381 | | |/ / parent: 1:6db2ef61d156
382 | | | | parent: 9:7010c0af0a35
382 | | | | parent: 9:7010c0af0a35
383 | | | | user: test
383 | | | | user: test
384 | | | | date: Thu Jan 01 00:00:12 1970 +0000
384 | | | | date: Thu Jan 01 00:00:12 1970 +0000
385 | | | | summary: (12) merge two known; one immediate right, one far left
385 | | | | summary: (12) merge two known; one immediate right, one far left
386 | | | |
386 | | | |
387 | o | | changeset: 11:832d76e6bdf2
387 | o | | changeset: 11:832d76e6bdf2
388 | |\ \ \ parent: 6:b105a072e251
388 | |\ \ \ parent: 6:b105a072e251
389 | | | | | parent: 10:74c64d036d72
389 | | | | | parent: 10:74c64d036d72
390 | | | | | user: test
390 | | | | | user: test
391 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
391 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
392 | | | | | summary: (11) expand
392 | | | | | summary: (11) expand
393 | | | | |
393 | | | | |
394 | | o---+ changeset: 10:74c64d036d72
394 | | o---+ changeset: 10:74c64d036d72
395 | | | | | parent: 0:e6eb3150255d
395 | | | | | parent: 0:e6eb3150255d
396 | |/ / / parent: 6:b105a072e251
396 | |/ / / parent: 6:b105a072e251
397 | | | | user: test
397 | | | | user: test
398 | | | | date: Thu Jan 01 00:00:10 1970 +0000
398 | | | | date: Thu Jan 01 00:00:10 1970 +0000
399 | | | | summary: (10) merge two known; one immediate left, one near right
399 | | | | summary: (10) merge two known; one immediate left, one near right
400 | | | |
400 | | | |
401 o | | | changeset: 9:7010c0af0a35
401 o | | | changeset: 9:7010c0af0a35
402 |\ \ \ \ parent: 7:b632bb1b1224
402 |\ \ \ \ parent: 7:b632bb1b1224
403 | | | | | parent: 8:7a0b11f71937
403 | | | | | parent: 8:7a0b11f71937
404 | | | | | user: test
404 | | | | | user: test
405 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
405 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
406 | | | | | summary: (9) expand
406 | | | | | summary: (9) expand
407 | | | | |
407 | | | | |
408 | o-----+ changeset: 8:7a0b11f71937
408 | o-----+ changeset: 8:7a0b11f71937
409 | | | | | parent: 0:e6eb3150255d
409 | | | | | parent: 0:e6eb3150255d
410 |/ / / / parent: 7:b632bb1b1224
410 |/ / / / parent: 7:b632bb1b1224
411 | | | | user: test
411 | | | | user: test
412 | | | | date: Thu Jan 01 00:00:08 1970 +0000
412 | | | | date: Thu Jan 01 00:00:08 1970 +0000
413 | | | | summary: (8) merge two known; one immediate left, one far right
413 | | | | summary: (8) merge two known; one immediate left, one far right
414 | | | |
414 | | | |
415 o | | | changeset: 7:b632bb1b1224
415 o | | | changeset: 7:b632bb1b1224
416 |\ \ \ \ parent: 2:3d9a33b8d1e1
416 |\ \ \ \ parent: 2:3d9a33b8d1e1
417 | | | | | parent: 5:4409d547b708
417 | | | | | parent: 5:4409d547b708
418 | | | | | user: test
418 | | | | | user: test
419 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
419 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
420 | | | | | summary: (7) expand
420 | | | | | summary: (7) expand
421 | | | | |
421 | | | | |
422 +---o | | changeset: 6:b105a072e251
422 +---o | | changeset: 6:b105a072e251
423 | |/ / / parent: 2:3d9a33b8d1e1
423 | |/ / / parent: 2:3d9a33b8d1e1
424 | | | | parent: 5:4409d547b708
424 | | | | parent: 5:4409d547b708
425 | | | | user: test
425 | | | | user: test
426 | | | | date: Thu Jan 01 00:00:06 1970 +0000
426 | | | | date: Thu Jan 01 00:00:06 1970 +0000
427 | | | | summary: (6) merge two known; one immediate left, one far left
427 | | | | summary: (6) merge two known; one immediate left, one far left
428 | | | |
428 | | | |
429 | o | | changeset: 5:4409d547b708
429 | o | | changeset: 5:4409d547b708
430 | |\ \ \ parent: 3:27eef8ed80b4
430 | |\ \ \ parent: 3:27eef8ed80b4
431 | | | | | parent: 4:26a8bac39d9f
431 | | | | | parent: 4:26a8bac39d9f
432 | | | | | user: test
432 | | | | | user: test
433 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
433 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
434 | | | | | summary: (5) expand
434 | | | | | summary: (5) expand
435 | | | | |
435 | | | | |
436 | | o | | changeset: 4:26a8bac39d9f
436 | | o | | changeset: 4:26a8bac39d9f
437 | |/|/ / parent: 1:6db2ef61d156
437 | |/|/ / parent: 1:6db2ef61d156
438 | | | | parent: 3:27eef8ed80b4
438 | | | | parent: 3:27eef8ed80b4
439 | | | | user: test
439 | | | | user: test
440 | | | | date: Thu Jan 01 00:00:04 1970 +0000
440 | | | | date: Thu Jan 01 00:00:04 1970 +0000
441 | | | | summary: (4) merge two known; one immediate left, one immediate right
441 | | | | summary: (4) merge two known; one immediate left, one immediate right
442 | | | |
442 | | | |
443 | o | | changeset: 3:27eef8ed80b4
443 | o | | changeset: 3:27eef8ed80b4
444 |/ / / user: test
444 |/ / / user: test
445 | | | date: Thu Jan 01 00:00:03 1970 +0000
445 | | | date: Thu Jan 01 00:00:03 1970 +0000
446 | | | summary: (3) collapse
446 | | | summary: (3) collapse
447 | | |
447 | | |
448 o | | changeset: 2:3d9a33b8d1e1
448 o | | changeset: 2:3d9a33b8d1e1
449 |/ / user: test
449 |/ / user: test
450 | | date: Thu Jan 01 00:00:02 1970 +0000
450 | | date: Thu Jan 01 00:00:02 1970 +0000
451 | | summary: (2) collapse
451 | | summary: (2) collapse
452 | |
452 | |
453 o | changeset: 1:6db2ef61d156
453 o | changeset: 1:6db2ef61d156
454 |/ user: test
454 |/ user: test
455 | date: Thu Jan 01 00:00:01 1970 +0000
455 | date: Thu Jan 01 00:00:01 1970 +0000
456 | summary: (1) collapse
456 | summary: (1) collapse
457 |
457 |
458 o changeset: 0:e6eb3150255d
458 o changeset: 0:e6eb3150255d
459 user: test
459 user: test
460 date: Thu Jan 01 00:00:00 1970 +0000
460 date: Thu Jan 01 00:00:00 1970 +0000
461 summary: (0) root
461 summary: (0) root
462
462
463
463
464 File glog:
464 File glog:
465 $ hg glog a
465 $ hg glog a
466 @ changeset: 34:fea3ac5810e0
466 @ changeset: 34:fea3ac5810e0
467 | tag: tip
467 | tag: tip
468 | parent: 32:d06dffa21a31
468 | parent: 32:d06dffa21a31
469 | user: test
469 | user: test
470 | date: Thu Jan 01 00:00:34 1970 +0000
470 | date: Thu Jan 01 00:00:34 1970 +0000
471 | summary: (34) head
471 | summary: (34) head
472 |
472 |
473 | o changeset: 33:68608f5145f9
473 | o changeset: 33:68608f5145f9
474 | | parent: 18:1aa84d96232a
474 | | parent: 18:1aa84d96232a
475 | | user: test
475 | | user: test
476 | | date: Thu Jan 01 00:00:33 1970 +0000
476 | | date: Thu Jan 01 00:00:33 1970 +0000
477 | | summary: (33) head
477 | | summary: (33) head
478 | |
478 | |
479 o | changeset: 32:d06dffa21a31
479 o | changeset: 32:d06dffa21a31
480 |\ \ parent: 27:886ed638191b
480 |\ \ parent: 27:886ed638191b
481 | | | parent: 31:621d83e11f67
481 | | | parent: 31:621d83e11f67
482 | | | user: test
482 | | | user: test
483 | | | date: Thu Jan 01 00:00:32 1970 +0000
483 | | | date: Thu Jan 01 00:00:32 1970 +0000
484 | | | summary: (32) expand
484 | | | summary: (32) expand
485 | | |
485 | | |
486 | o | changeset: 31:621d83e11f67
486 | o | changeset: 31:621d83e11f67
487 | |\ \ parent: 21:d42a756af44d
487 | |\ \ parent: 21:d42a756af44d
488 | | | | parent: 30:6e11cd4b648f
488 | | | | parent: 30:6e11cd4b648f
489 | | | | user: test
489 | | | | user: test
490 | | | | date: Thu Jan 01 00:00:31 1970 +0000
490 | | | | date: Thu Jan 01 00:00:31 1970 +0000
491 | | | | summary: (31) expand
491 | | | | summary: (31) expand
492 | | | |
492 | | | |
493 | | o | changeset: 30:6e11cd4b648f
493 | | o | changeset: 30:6e11cd4b648f
494 | | |\ \ parent: 28:44ecd0b9ae99
494 | | |\ \ parent: 28:44ecd0b9ae99
495 | | | | | parent: 29:cd9bb2be7593
495 | | | | | parent: 29:cd9bb2be7593
496 | | | | | user: test
496 | | | | | user: test
497 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
497 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
498 | | | | | summary: (30) expand
498 | | | | | summary: (30) expand
499 | | | | |
499 | | | | |
500 | | | o | changeset: 29:cd9bb2be7593
500 | | | o | changeset: 29:cd9bb2be7593
501 | | | | | parent: 0:e6eb3150255d
501 | | | | | parent: 0:e6eb3150255d
502 | | | | | user: test
502 | | | | | user: test
503 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
503 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
504 | | | | | summary: (29) regular commit
504 | | | | | summary: (29) regular commit
505 | | | | |
505 | | | | |
506 | | o | | changeset: 28:44ecd0b9ae99
506 | | o | | changeset: 28:44ecd0b9ae99
507 | | |\ \ \ parent: 1:6db2ef61d156
507 | | |\ \ \ parent: 1:6db2ef61d156
508 | | | | | | parent: 26:7f25b6c2f0b9
508 | | | | | | parent: 26:7f25b6c2f0b9
509 | | | | | | user: test
509 | | | | | | user: test
510 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
510 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
511 | | | | | | summary: (28) merge zero known
511 | | | | | | summary: (28) merge zero known
512 | | | | | |
512 | | | | | |
513 o | | | | | changeset: 27:886ed638191b
513 o | | | | | changeset: 27:886ed638191b
514 |/ / / / / parent: 21:d42a756af44d
514 |/ / / / / parent: 21:d42a756af44d
515 | | | | | user: test
515 | | | | | user: test
516 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
516 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
517 | | | | | summary: (27) collapse
517 | | | | | summary: (27) collapse
518 | | | | |
518 | | | | |
519 | | o---+ changeset: 26:7f25b6c2f0b9
519 | | o---+ changeset: 26:7f25b6c2f0b9
520 | | | | | parent: 18:1aa84d96232a
520 | | | | | parent: 18:1aa84d96232a
521 | | | | | parent: 25:91da8ed57247
521 | | | | | parent: 25:91da8ed57247
522 | | | | | user: test
522 | | | | | user: test
523 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
523 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
524 | | | | | summary: (26) merge one known; far right
524 | | | | | summary: (26) merge one known; far right
525 | | | | |
525 | | | | |
526 +---o | | changeset: 25:91da8ed57247
526 +---o | | changeset: 25:91da8ed57247
527 | | | | | parent: 21:d42a756af44d
527 | | | | | parent: 21:d42a756af44d
528 | | | | | parent: 24:a9c19a3d96b7
528 | | | | | parent: 24:a9c19a3d96b7
529 | | | | | user: test
529 | | | | | user: test
530 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
530 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
531 | | | | | summary: (25) merge one known; far left
531 | | | | | summary: (25) merge one known; far left
532 | | | | |
532 | | | | |
533 | | o | | changeset: 24:a9c19a3d96b7
533 | | o | | changeset: 24:a9c19a3d96b7
534 | | |\| | parent: 0:e6eb3150255d
534 | | |\| | parent: 0:e6eb3150255d
535 | | | | | parent: 23:a01cddf0766d
535 | | | | | parent: 23:a01cddf0766d
536 | | | | | user: test
536 | | | | | user: test
537 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
537 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
538 | | | | | summary: (24) merge one known; immediate right
538 | | | | | summary: (24) merge one known; immediate right
539 | | | | |
539 | | | | |
540 | | o | | changeset: 23:a01cddf0766d
540 | | o | | changeset: 23:a01cddf0766d
541 | |/| | | parent: 1:6db2ef61d156
541 | |/| | | parent: 1:6db2ef61d156
542 | | | | | parent: 22:e0d9cccacb5d
542 | | | | | parent: 22:e0d9cccacb5d
543 | | | | | user: test
543 | | | | | user: test
544 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
544 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
545 | | | | | summary: (23) merge one known; immediate left
545 | | | | | summary: (23) merge one known; immediate left
546 | | | | |
546 | | | | |
547 +---o---+ changeset: 22:e0d9cccacb5d
547 +---o---+ changeset: 22:e0d9cccacb5d
548 | | | | parent: 18:1aa84d96232a
548 | | | | parent: 18:1aa84d96232a
549 | | / / parent: 21:d42a756af44d
549 | | / / parent: 21:d42a756af44d
550 | | | | user: test
550 | | | | user: test
551 | | | | date: Thu Jan 01 00:00:22 1970 +0000
551 | | | | date: Thu Jan 01 00:00:22 1970 +0000
552 | | | | summary: (22) merge two known; one far left, one far right
552 | | | | summary: (22) merge two known; one far left, one far right
553 | | | |
553 | | | |
554 o | | | changeset: 21:d42a756af44d
554 o | | | changeset: 21:d42a756af44d
555 |\ \ \ \ parent: 19:31ddc2c1573b
555 |\ \ \ \ parent: 19:31ddc2c1573b
556 | | | | | parent: 20:d30ed6450e32
556 | | | | | parent: 20:d30ed6450e32
557 | | | | | user: test
557 | | | | | user: test
558 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
558 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
559 | | | | | summary: (21) expand
559 | | | | | summary: (21) expand
560 | | | | |
560 | | | | |
561 | o---+-+ changeset: 20:d30ed6450e32
561 | o---+-+ changeset: 20:d30ed6450e32
562 | | | | parent: 0:e6eb3150255d
562 | | | | parent: 0:e6eb3150255d
563 | / / / parent: 18:1aa84d96232a
563 | / / / parent: 18:1aa84d96232a
564 | | | | user: test
564 | | | | user: test
565 | | | | date: Thu Jan 01 00:00:20 1970 +0000
565 | | | | date: Thu Jan 01 00:00:20 1970 +0000
566 | | | | summary: (20) merge two known; two far right
566 | | | | summary: (20) merge two known; two far right
567 | | | |
567 | | | |
568 o | | | changeset: 19:31ddc2c1573b
568 o | | | changeset: 19:31ddc2c1573b
569 |\ \ \ \ parent: 15:1dda3f72782d
569 |\ \ \ \ parent: 15:1dda3f72782d
570 | | | | | parent: 17:44765d7c06e0
570 | | | | | parent: 17:44765d7c06e0
571 | | | | | user: test
571 | | | | | user: test
572 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
572 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
573 | | | | | summary: (19) expand
573 | | | | | summary: (19) expand
574 | | | | |
574 | | | | |
575 +---+---o changeset: 18:1aa84d96232a
575 +---+---o changeset: 18:1aa84d96232a
576 | | | | parent: 1:6db2ef61d156
576 | | | | parent: 1:6db2ef61d156
577 | | | | parent: 15:1dda3f72782d
577 | | | | parent: 15:1dda3f72782d
578 | | | | user: test
578 | | | | user: test
579 | | | | date: Thu Jan 01 00:00:18 1970 +0000
579 | | | | date: Thu Jan 01 00:00:18 1970 +0000
580 | | | | summary: (18) merge two known; two far left
580 | | | | summary: (18) merge two known; two far left
581 | | | |
581 | | | |
582 | o | | changeset: 17:44765d7c06e0
582 | o | | changeset: 17:44765d7c06e0
583 | |\ \ \ parent: 12:86b91144a6e9
583 | |\ \ \ parent: 12:86b91144a6e9
584 | | | | | parent: 16:3677d192927d
584 | | | | | parent: 16:3677d192927d
585 | | | | | user: test
585 | | | | | user: test
586 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
586 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
587 | | | | | summary: (17) expand
587 | | | | | summary: (17) expand
588 | | | | |
588 | | | | |
589 | | o---+ changeset: 16:3677d192927d
589 | | o---+ changeset: 16:3677d192927d
590 | | | | | parent: 0:e6eb3150255d
590 | | | | | parent: 0:e6eb3150255d
591 | | |/ / parent: 1:6db2ef61d156
591 | | |/ / parent: 1:6db2ef61d156
592 | | | | user: test
592 | | | | user: test
593 | | | | date: Thu Jan 01 00:00:16 1970 +0000
593 | | | | date: Thu Jan 01 00:00:16 1970 +0000
594 | | | | summary: (16) merge two known; one immediate right, one near right
594 | | | | summary: (16) merge two known; one immediate right, one near right
595 | | | |
595 | | | |
596 o | | | changeset: 15:1dda3f72782d
596 o | | | changeset: 15:1dda3f72782d
597 |\ \ \ \ parent: 13:22d8966a97e3
597 |\ \ \ \ parent: 13:22d8966a97e3
598 | | | | | parent: 14:8eac370358ef
598 | | | | | parent: 14:8eac370358ef
599 | | | | | user: test
599 | | | | | user: test
600 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
600 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
601 | | | | | summary: (15) expand
601 | | | | | summary: (15) expand
602 | | | | |
602 | | | | |
603 | o-----+ changeset: 14:8eac370358ef
603 | o-----+ changeset: 14:8eac370358ef
604 | | | | | parent: 0:e6eb3150255d
604 | | | | | parent: 0:e6eb3150255d
605 | |/ / / parent: 12:86b91144a6e9
605 | |/ / / parent: 12:86b91144a6e9
606 | | | | user: test
606 | | | | user: test
607 | | | | date: Thu Jan 01 00:00:14 1970 +0000
607 | | | | date: Thu Jan 01 00:00:14 1970 +0000
608 | | | | summary: (14) merge two known; one immediate right, one far right
608 | | | | summary: (14) merge two known; one immediate right, one far right
609 | | | |
609 | | | |
610 o | | | changeset: 13:22d8966a97e3
610 o | | | changeset: 13:22d8966a97e3
611 |\ \ \ \ parent: 9:7010c0af0a35
611 |\ \ \ \ parent: 9:7010c0af0a35
612 | | | | | parent: 11:832d76e6bdf2
612 | | | | | parent: 11:832d76e6bdf2
613 | | | | | user: test
613 | | | | | user: test
614 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
614 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
615 | | | | | summary: (13) expand
615 | | | | | summary: (13) expand
616 | | | | |
616 | | | | |
617 +---o | | changeset: 12:86b91144a6e9
617 +---o | | changeset: 12:86b91144a6e9
618 | | |/ / parent: 1:6db2ef61d156
618 | | |/ / parent: 1:6db2ef61d156
619 | | | | parent: 9:7010c0af0a35
619 | | | | parent: 9:7010c0af0a35
620 | | | | user: test
620 | | | | user: test
621 | | | | date: Thu Jan 01 00:00:12 1970 +0000
621 | | | | date: Thu Jan 01 00:00:12 1970 +0000
622 | | | | summary: (12) merge two known; one immediate right, one far left
622 | | | | summary: (12) merge two known; one immediate right, one far left
623 | | | |
623 | | | |
624 | o | | changeset: 11:832d76e6bdf2
624 | o | | changeset: 11:832d76e6bdf2
625 | |\ \ \ parent: 6:b105a072e251
625 | |\ \ \ parent: 6:b105a072e251
626 | | | | | parent: 10:74c64d036d72
626 | | | | | parent: 10:74c64d036d72
627 | | | | | user: test
627 | | | | | user: test
628 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
628 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
629 | | | | | summary: (11) expand
629 | | | | | summary: (11) expand
630 | | | | |
630 | | | | |
631 | | o---+ changeset: 10:74c64d036d72
631 | | o---+ changeset: 10:74c64d036d72
632 | | | | | parent: 0:e6eb3150255d
632 | | | | | parent: 0:e6eb3150255d
633 | |/ / / parent: 6:b105a072e251
633 | |/ / / parent: 6:b105a072e251
634 | | | | user: test
634 | | | | user: test
635 | | | | date: Thu Jan 01 00:00:10 1970 +0000
635 | | | | date: Thu Jan 01 00:00:10 1970 +0000
636 | | | | summary: (10) merge two known; one immediate left, one near right
636 | | | | summary: (10) merge two known; one immediate left, one near right
637 | | | |
637 | | | |
638 o | | | changeset: 9:7010c0af0a35
638 o | | | changeset: 9:7010c0af0a35
639 |\ \ \ \ parent: 7:b632bb1b1224
639 |\ \ \ \ parent: 7:b632bb1b1224
640 | | | | | parent: 8:7a0b11f71937
640 | | | | | parent: 8:7a0b11f71937
641 | | | | | user: test
641 | | | | | user: test
642 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
642 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
643 | | | | | summary: (9) expand
643 | | | | | summary: (9) expand
644 | | | | |
644 | | | | |
645 | o-----+ changeset: 8:7a0b11f71937
645 | o-----+ changeset: 8:7a0b11f71937
646 | | | | | parent: 0:e6eb3150255d
646 | | | | | parent: 0:e6eb3150255d
647 |/ / / / parent: 7:b632bb1b1224
647 |/ / / / parent: 7:b632bb1b1224
648 | | | | user: test
648 | | | | user: test
649 | | | | date: Thu Jan 01 00:00:08 1970 +0000
649 | | | | date: Thu Jan 01 00:00:08 1970 +0000
650 | | | | summary: (8) merge two known; one immediate left, one far right
650 | | | | summary: (8) merge two known; one immediate left, one far right
651 | | | |
651 | | | |
652 o | | | changeset: 7:b632bb1b1224
652 o | | | changeset: 7:b632bb1b1224
653 |\ \ \ \ parent: 2:3d9a33b8d1e1
653 |\ \ \ \ parent: 2:3d9a33b8d1e1
654 | | | | | parent: 5:4409d547b708
654 | | | | | parent: 5:4409d547b708
655 | | | | | user: test
655 | | | | | user: test
656 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
656 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
657 | | | | | summary: (7) expand
657 | | | | | summary: (7) expand
658 | | | | |
658 | | | | |
659 +---o | | changeset: 6:b105a072e251
659 +---o | | changeset: 6:b105a072e251
660 | |/ / / parent: 2:3d9a33b8d1e1
660 | |/ / / parent: 2:3d9a33b8d1e1
661 | | | | parent: 5:4409d547b708
661 | | | | parent: 5:4409d547b708
662 | | | | user: test
662 | | | | user: test
663 | | | | date: Thu Jan 01 00:00:06 1970 +0000
663 | | | | date: Thu Jan 01 00:00:06 1970 +0000
664 | | | | summary: (6) merge two known; one immediate left, one far left
664 | | | | summary: (6) merge two known; one immediate left, one far left
665 | | | |
665 | | | |
666 | o | | changeset: 5:4409d547b708
666 | o | | changeset: 5:4409d547b708
667 | |\ \ \ parent: 3:27eef8ed80b4
667 | |\ \ \ parent: 3:27eef8ed80b4
668 | | | | | parent: 4:26a8bac39d9f
668 | | | | | parent: 4:26a8bac39d9f
669 | | | | | user: test
669 | | | | | user: test
670 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
670 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
671 | | | | | summary: (5) expand
671 | | | | | summary: (5) expand
672 | | | | |
672 | | | | |
673 | | o | | changeset: 4:26a8bac39d9f
673 | | o | | changeset: 4:26a8bac39d9f
674 | |/|/ / parent: 1:6db2ef61d156
674 | |/|/ / parent: 1:6db2ef61d156
675 | | | | parent: 3:27eef8ed80b4
675 | | | | parent: 3:27eef8ed80b4
676 | | | | user: test
676 | | | | user: test
677 | | | | date: Thu Jan 01 00:00:04 1970 +0000
677 | | | | date: Thu Jan 01 00:00:04 1970 +0000
678 | | | | summary: (4) merge two known; one immediate left, one immediate right
678 | | | | summary: (4) merge two known; one immediate left, one immediate right
679 | | | |
679 | | | |
680 | o | | changeset: 3:27eef8ed80b4
680 | o | | changeset: 3:27eef8ed80b4
681 |/ / / user: test
681 |/ / / user: test
682 | | | date: Thu Jan 01 00:00:03 1970 +0000
682 | | | date: Thu Jan 01 00:00:03 1970 +0000
683 | | | summary: (3) collapse
683 | | | summary: (3) collapse
684 | | |
684 | | |
685 o | | changeset: 2:3d9a33b8d1e1
685 o | | changeset: 2:3d9a33b8d1e1
686 |/ / user: test
686 |/ / user: test
687 | | date: Thu Jan 01 00:00:02 1970 +0000
687 | | date: Thu Jan 01 00:00:02 1970 +0000
688 | | summary: (2) collapse
688 | | summary: (2) collapse
689 | |
689 | |
690 o | changeset: 1:6db2ef61d156
690 o | changeset: 1:6db2ef61d156
691 |/ user: test
691 |/ user: test
692 | date: Thu Jan 01 00:00:01 1970 +0000
692 | date: Thu Jan 01 00:00:01 1970 +0000
693 | summary: (1) collapse
693 | summary: (1) collapse
694 |
694 |
695 o changeset: 0:e6eb3150255d
695 o changeset: 0:e6eb3150255d
696 user: test
696 user: test
697 date: Thu Jan 01 00:00:00 1970 +0000
697 date: Thu Jan 01 00:00:00 1970 +0000
698 summary: (0) root
698 summary: (0) root
699
699
700
700
701 File glog per revset:
701 File glog per revset:
702
702
703 $ hg glog -r 'file("a")'
703 $ hg glog -r 'file("a")'
704 @ changeset: 34:fea3ac5810e0
704 @ changeset: 34:fea3ac5810e0
705 | tag: tip
705 | tag: tip
706 | parent: 32:d06dffa21a31
706 | parent: 32:d06dffa21a31
707 | user: test
707 | user: test
708 | date: Thu Jan 01 00:00:34 1970 +0000
708 | date: Thu Jan 01 00:00:34 1970 +0000
709 | summary: (34) head
709 | summary: (34) head
710 |
710 |
711 | o changeset: 33:68608f5145f9
711 | o changeset: 33:68608f5145f9
712 | | parent: 18:1aa84d96232a
712 | | parent: 18:1aa84d96232a
713 | | user: test
713 | | user: test
714 | | date: Thu Jan 01 00:00:33 1970 +0000
714 | | date: Thu Jan 01 00:00:33 1970 +0000
715 | | summary: (33) head
715 | | summary: (33) head
716 | |
716 | |
717 o | changeset: 32:d06dffa21a31
717 o | changeset: 32:d06dffa21a31
718 |\ \ parent: 27:886ed638191b
718 |\ \ parent: 27:886ed638191b
719 | | | parent: 31:621d83e11f67
719 | | | parent: 31:621d83e11f67
720 | | | user: test
720 | | | user: test
721 | | | date: Thu Jan 01 00:00:32 1970 +0000
721 | | | date: Thu Jan 01 00:00:32 1970 +0000
722 | | | summary: (32) expand
722 | | | summary: (32) expand
723 | | |
723 | | |
724 | o | changeset: 31:621d83e11f67
724 | o | changeset: 31:621d83e11f67
725 | |\ \ parent: 21:d42a756af44d
725 | |\ \ parent: 21:d42a756af44d
726 | | | | parent: 30:6e11cd4b648f
726 | | | | parent: 30:6e11cd4b648f
727 | | | | user: test
727 | | | | user: test
728 | | | | date: Thu Jan 01 00:00:31 1970 +0000
728 | | | | date: Thu Jan 01 00:00:31 1970 +0000
729 | | | | summary: (31) expand
729 | | | | summary: (31) expand
730 | | | |
730 | | | |
731 | | o | changeset: 30:6e11cd4b648f
731 | | o | changeset: 30:6e11cd4b648f
732 | | |\ \ parent: 28:44ecd0b9ae99
732 | | |\ \ parent: 28:44ecd0b9ae99
733 | | | | | parent: 29:cd9bb2be7593
733 | | | | | parent: 29:cd9bb2be7593
734 | | | | | user: test
734 | | | | | user: test
735 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
735 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
736 | | | | | summary: (30) expand
736 | | | | | summary: (30) expand
737 | | | | |
737 | | | | |
738 | | | o | changeset: 29:cd9bb2be7593
738 | | | o | changeset: 29:cd9bb2be7593
739 | | | | | parent: 0:e6eb3150255d
739 | | | | | parent: 0:e6eb3150255d
740 | | | | | user: test
740 | | | | | user: test
741 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
741 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
742 | | | | | summary: (29) regular commit
742 | | | | | summary: (29) regular commit
743 | | | | |
743 | | | | |
744 | | o | | changeset: 28:44ecd0b9ae99
744 | | o | | changeset: 28:44ecd0b9ae99
745 | | |\ \ \ parent: 1:6db2ef61d156
745 | | |\ \ \ parent: 1:6db2ef61d156
746 | | | | | | parent: 26:7f25b6c2f0b9
746 | | | | | | parent: 26:7f25b6c2f0b9
747 | | | | | | user: test
747 | | | | | | user: test
748 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
748 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
749 | | | | | | summary: (28) merge zero known
749 | | | | | | summary: (28) merge zero known
750 | | | | | |
750 | | | | | |
751 o | | | | | changeset: 27:886ed638191b
751 o | | | | | changeset: 27:886ed638191b
752 |/ / / / / parent: 21:d42a756af44d
752 |/ / / / / parent: 21:d42a756af44d
753 | | | | | user: test
753 | | | | | user: test
754 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
754 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
755 | | | | | summary: (27) collapse
755 | | | | | summary: (27) collapse
756 | | | | |
756 | | | | |
757 | | o---+ changeset: 26:7f25b6c2f0b9
757 | | o---+ changeset: 26:7f25b6c2f0b9
758 | | | | | parent: 18:1aa84d96232a
758 | | | | | parent: 18:1aa84d96232a
759 | | | | | parent: 25:91da8ed57247
759 | | | | | parent: 25:91da8ed57247
760 | | | | | user: test
760 | | | | | user: test
761 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
761 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
762 | | | | | summary: (26) merge one known; far right
762 | | | | | summary: (26) merge one known; far right
763 | | | | |
763 | | | | |
764 +---o | | changeset: 25:91da8ed57247
764 +---o | | changeset: 25:91da8ed57247
765 | | | | | parent: 21:d42a756af44d
765 | | | | | parent: 21:d42a756af44d
766 | | | | | parent: 24:a9c19a3d96b7
766 | | | | | parent: 24:a9c19a3d96b7
767 | | | | | user: test
767 | | | | | user: test
768 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
768 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
769 | | | | | summary: (25) merge one known; far left
769 | | | | | summary: (25) merge one known; far left
770 | | | | |
770 | | | | |
771 | | o | | changeset: 24:a9c19a3d96b7
771 | | o | | changeset: 24:a9c19a3d96b7
772 | | |\| | parent: 0:e6eb3150255d
772 | | |\| | parent: 0:e6eb3150255d
773 | | | | | parent: 23:a01cddf0766d
773 | | | | | parent: 23:a01cddf0766d
774 | | | | | user: test
774 | | | | | user: test
775 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
775 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
776 | | | | | summary: (24) merge one known; immediate right
776 | | | | | summary: (24) merge one known; immediate right
777 | | | | |
777 | | | | |
778 | | o | | changeset: 23:a01cddf0766d
778 | | o | | changeset: 23:a01cddf0766d
779 | |/| | | parent: 1:6db2ef61d156
779 | |/| | | parent: 1:6db2ef61d156
780 | | | | | parent: 22:e0d9cccacb5d
780 | | | | | parent: 22:e0d9cccacb5d
781 | | | | | user: test
781 | | | | | user: test
782 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
782 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
783 | | | | | summary: (23) merge one known; immediate left
783 | | | | | summary: (23) merge one known; immediate left
784 | | | | |
784 | | | | |
785 +---o---+ changeset: 22:e0d9cccacb5d
785 +---o---+ changeset: 22:e0d9cccacb5d
786 | | | | parent: 18:1aa84d96232a
786 | | | | parent: 18:1aa84d96232a
787 | | / / parent: 21:d42a756af44d
787 | | / / parent: 21:d42a756af44d
788 | | | | user: test
788 | | | | user: test
789 | | | | date: Thu Jan 01 00:00:22 1970 +0000
789 | | | | date: Thu Jan 01 00:00:22 1970 +0000
790 | | | | summary: (22) merge two known; one far left, one far right
790 | | | | summary: (22) merge two known; one far left, one far right
791 | | | |
791 | | | |
792 o | | | changeset: 21:d42a756af44d
792 o | | | changeset: 21:d42a756af44d
793 |\ \ \ \ parent: 19:31ddc2c1573b
793 |\ \ \ \ parent: 19:31ddc2c1573b
794 | | | | | parent: 20:d30ed6450e32
794 | | | | | parent: 20:d30ed6450e32
795 | | | | | user: test
795 | | | | | user: test
796 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
796 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
797 | | | | | summary: (21) expand
797 | | | | | summary: (21) expand
798 | | | | |
798 | | | | |
799 | o---+-+ changeset: 20:d30ed6450e32
799 | o---+-+ changeset: 20:d30ed6450e32
800 | | | | parent: 0:e6eb3150255d
800 | | | | parent: 0:e6eb3150255d
801 | / / / parent: 18:1aa84d96232a
801 | / / / parent: 18:1aa84d96232a
802 | | | | user: test
802 | | | | user: test
803 | | | | date: Thu Jan 01 00:00:20 1970 +0000
803 | | | | date: Thu Jan 01 00:00:20 1970 +0000
804 | | | | summary: (20) merge two known; two far right
804 | | | | summary: (20) merge two known; two far right
805 | | | |
805 | | | |
806 o | | | changeset: 19:31ddc2c1573b
806 o | | | changeset: 19:31ddc2c1573b
807 |\ \ \ \ parent: 15:1dda3f72782d
807 |\ \ \ \ parent: 15:1dda3f72782d
808 | | | | | parent: 17:44765d7c06e0
808 | | | | | parent: 17:44765d7c06e0
809 | | | | | user: test
809 | | | | | user: test
810 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
810 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
811 | | | | | summary: (19) expand
811 | | | | | summary: (19) expand
812 | | | | |
812 | | | | |
813 +---+---o changeset: 18:1aa84d96232a
813 +---+---o changeset: 18:1aa84d96232a
814 | | | | parent: 1:6db2ef61d156
814 | | | | parent: 1:6db2ef61d156
815 | | | | parent: 15:1dda3f72782d
815 | | | | parent: 15:1dda3f72782d
816 | | | | user: test
816 | | | | user: test
817 | | | | date: Thu Jan 01 00:00:18 1970 +0000
817 | | | | date: Thu Jan 01 00:00:18 1970 +0000
818 | | | | summary: (18) merge two known; two far left
818 | | | | summary: (18) merge two known; two far left
819 | | | |
819 | | | |
820 | o | | changeset: 17:44765d7c06e0
820 | o | | changeset: 17:44765d7c06e0
821 | |\ \ \ parent: 12:86b91144a6e9
821 | |\ \ \ parent: 12:86b91144a6e9
822 | | | | | parent: 16:3677d192927d
822 | | | | | parent: 16:3677d192927d
823 | | | | | user: test
823 | | | | | user: test
824 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
824 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
825 | | | | | summary: (17) expand
825 | | | | | summary: (17) expand
826 | | | | |
826 | | | | |
827 | | o---+ changeset: 16:3677d192927d
827 | | o---+ changeset: 16:3677d192927d
828 | | | | | parent: 0:e6eb3150255d
828 | | | | | parent: 0:e6eb3150255d
829 | | |/ / parent: 1:6db2ef61d156
829 | | |/ / parent: 1:6db2ef61d156
830 | | | | user: test
830 | | | | user: test
831 | | | | date: Thu Jan 01 00:00:16 1970 +0000
831 | | | | date: Thu Jan 01 00:00:16 1970 +0000
832 | | | | summary: (16) merge two known; one immediate right, one near right
832 | | | | summary: (16) merge two known; one immediate right, one near right
833 | | | |
833 | | | |
834 o | | | changeset: 15:1dda3f72782d
834 o | | | changeset: 15:1dda3f72782d
835 |\ \ \ \ parent: 13:22d8966a97e3
835 |\ \ \ \ parent: 13:22d8966a97e3
836 | | | | | parent: 14:8eac370358ef
836 | | | | | parent: 14:8eac370358ef
837 | | | | | user: test
837 | | | | | user: test
838 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
838 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
839 | | | | | summary: (15) expand
839 | | | | | summary: (15) expand
840 | | | | |
840 | | | | |
841 | o-----+ changeset: 14:8eac370358ef
841 | o-----+ changeset: 14:8eac370358ef
842 | | | | | parent: 0:e6eb3150255d
842 | | | | | parent: 0:e6eb3150255d
843 | |/ / / parent: 12:86b91144a6e9
843 | |/ / / parent: 12:86b91144a6e9
844 | | | | user: test
844 | | | | user: test
845 | | | | date: Thu Jan 01 00:00:14 1970 +0000
845 | | | | date: Thu Jan 01 00:00:14 1970 +0000
846 | | | | summary: (14) merge two known; one immediate right, one far right
846 | | | | summary: (14) merge two known; one immediate right, one far right
847 | | | |
847 | | | |
848 o | | | changeset: 13:22d8966a97e3
848 o | | | changeset: 13:22d8966a97e3
849 |\ \ \ \ parent: 9:7010c0af0a35
849 |\ \ \ \ parent: 9:7010c0af0a35
850 | | | | | parent: 11:832d76e6bdf2
850 | | | | | parent: 11:832d76e6bdf2
851 | | | | | user: test
851 | | | | | user: test
852 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
852 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
853 | | | | | summary: (13) expand
853 | | | | | summary: (13) expand
854 | | | | |
854 | | | | |
855 +---o | | changeset: 12:86b91144a6e9
855 +---o | | changeset: 12:86b91144a6e9
856 | | |/ / parent: 1:6db2ef61d156
856 | | |/ / parent: 1:6db2ef61d156
857 | | | | parent: 9:7010c0af0a35
857 | | | | parent: 9:7010c0af0a35
858 | | | | user: test
858 | | | | user: test
859 | | | | date: Thu Jan 01 00:00:12 1970 +0000
859 | | | | date: Thu Jan 01 00:00:12 1970 +0000
860 | | | | summary: (12) merge two known; one immediate right, one far left
860 | | | | summary: (12) merge two known; one immediate right, one far left
861 | | | |
861 | | | |
862 | o | | changeset: 11:832d76e6bdf2
862 | o | | changeset: 11:832d76e6bdf2
863 | |\ \ \ parent: 6:b105a072e251
863 | |\ \ \ parent: 6:b105a072e251
864 | | | | | parent: 10:74c64d036d72
864 | | | | | parent: 10:74c64d036d72
865 | | | | | user: test
865 | | | | | user: test
866 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
866 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
867 | | | | | summary: (11) expand
867 | | | | | summary: (11) expand
868 | | | | |
868 | | | | |
869 | | o---+ changeset: 10:74c64d036d72
869 | | o---+ changeset: 10:74c64d036d72
870 | | | | | parent: 0:e6eb3150255d
870 | | | | | parent: 0:e6eb3150255d
871 | |/ / / parent: 6:b105a072e251
871 | |/ / / parent: 6:b105a072e251
872 | | | | user: test
872 | | | | user: test
873 | | | | date: Thu Jan 01 00:00:10 1970 +0000
873 | | | | date: Thu Jan 01 00:00:10 1970 +0000
874 | | | | summary: (10) merge two known; one immediate left, one near right
874 | | | | summary: (10) merge two known; one immediate left, one near right
875 | | | |
875 | | | |
876 o | | | changeset: 9:7010c0af0a35
876 o | | | changeset: 9:7010c0af0a35
877 |\ \ \ \ parent: 7:b632bb1b1224
877 |\ \ \ \ parent: 7:b632bb1b1224
878 | | | | | parent: 8:7a0b11f71937
878 | | | | | parent: 8:7a0b11f71937
879 | | | | | user: test
879 | | | | | user: test
880 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
880 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
881 | | | | | summary: (9) expand
881 | | | | | summary: (9) expand
882 | | | | |
882 | | | | |
883 | o-----+ changeset: 8:7a0b11f71937
883 | o-----+ changeset: 8:7a0b11f71937
884 | | | | | parent: 0:e6eb3150255d
884 | | | | | parent: 0:e6eb3150255d
885 |/ / / / parent: 7:b632bb1b1224
885 |/ / / / parent: 7:b632bb1b1224
886 | | | | user: test
886 | | | | user: test
887 | | | | date: Thu Jan 01 00:00:08 1970 +0000
887 | | | | date: Thu Jan 01 00:00:08 1970 +0000
888 | | | | summary: (8) merge two known; one immediate left, one far right
888 | | | | summary: (8) merge two known; one immediate left, one far right
889 | | | |
889 | | | |
890 o | | | changeset: 7:b632bb1b1224
890 o | | | changeset: 7:b632bb1b1224
891 |\ \ \ \ parent: 2:3d9a33b8d1e1
891 |\ \ \ \ parent: 2:3d9a33b8d1e1
892 | | | | | parent: 5:4409d547b708
892 | | | | | parent: 5:4409d547b708
893 | | | | | user: test
893 | | | | | user: test
894 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
894 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
895 | | | | | summary: (7) expand
895 | | | | | summary: (7) expand
896 | | | | |
896 | | | | |
897 +---o | | changeset: 6:b105a072e251
897 +---o | | changeset: 6:b105a072e251
898 | |/ / / parent: 2:3d9a33b8d1e1
898 | |/ / / parent: 2:3d9a33b8d1e1
899 | | | | parent: 5:4409d547b708
899 | | | | parent: 5:4409d547b708
900 | | | | user: test
900 | | | | user: test
901 | | | | date: Thu Jan 01 00:00:06 1970 +0000
901 | | | | date: Thu Jan 01 00:00:06 1970 +0000
902 | | | | summary: (6) merge two known; one immediate left, one far left
902 | | | | summary: (6) merge two known; one immediate left, one far left
903 | | | |
903 | | | |
904 | o | | changeset: 5:4409d547b708
904 | o | | changeset: 5:4409d547b708
905 | |\ \ \ parent: 3:27eef8ed80b4
905 | |\ \ \ parent: 3:27eef8ed80b4
906 | | | | | parent: 4:26a8bac39d9f
906 | | | | | parent: 4:26a8bac39d9f
907 | | | | | user: test
907 | | | | | user: test
908 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
908 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
909 | | | | | summary: (5) expand
909 | | | | | summary: (5) expand
910 | | | | |
910 | | | | |
911 | | o | | changeset: 4:26a8bac39d9f
911 | | o | | changeset: 4:26a8bac39d9f
912 | |/|/ / parent: 1:6db2ef61d156
912 | |/|/ / parent: 1:6db2ef61d156
913 | | | | parent: 3:27eef8ed80b4
913 | | | | parent: 3:27eef8ed80b4
914 | | | | user: test
914 | | | | user: test
915 | | | | date: Thu Jan 01 00:00:04 1970 +0000
915 | | | | date: Thu Jan 01 00:00:04 1970 +0000
916 | | | | summary: (4) merge two known; one immediate left, one immediate right
916 | | | | summary: (4) merge two known; one immediate left, one immediate right
917 | | | |
917 | | | |
918 | o | | changeset: 3:27eef8ed80b4
918 | o | | changeset: 3:27eef8ed80b4
919 |/ / / user: test
919 |/ / / user: test
920 | | | date: Thu Jan 01 00:00:03 1970 +0000
920 | | | date: Thu Jan 01 00:00:03 1970 +0000
921 | | | summary: (3) collapse
921 | | | summary: (3) collapse
922 | | |
922 | | |
923 o | | changeset: 2:3d9a33b8d1e1
923 o | | changeset: 2:3d9a33b8d1e1
924 |/ / user: test
924 |/ / user: test
925 | | date: Thu Jan 01 00:00:02 1970 +0000
925 | | date: Thu Jan 01 00:00:02 1970 +0000
926 | | summary: (2) collapse
926 | | summary: (2) collapse
927 | |
927 | |
928 o | changeset: 1:6db2ef61d156
928 o | changeset: 1:6db2ef61d156
929 |/ user: test
929 |/ user: test
930 | date: Thu Jan 01 00:00:01 1970 +0000
930 | date: Thu Jan 01 00:00:01 1970 +0000
931 | summary: (1) collapse
931 | summary: (1) collapse
932 |
932 |
933 o changeset: 0:e6eb3150255d
933 o changeset: 0:e6eb3150255d
934 user: test
934 user: test
935 date: Thu Jan 01 00:00:00 1970 +0000
935 date: Thu Jan 01 00:00:00 1970 +0000
936 summary: (0) root
936 summary: (0) root
937
937
938
938
939
939
940 File glog per revset (only merges):
940 File glog per revset (only merges):
941
941
942 $ hg log -G -r 'file("a")' -m
942 $ hg log -G -r 'file("a")' -m
943 o changeset: 32:d06dffa21a31
943 o changeset: 32:d06dffa21a31
944 |\ parent: 27:886ed638191b
944 |\ parent: 27:886ed638191b
945 | | parent: 31:621d83e11f67
945 | | parent: 31:621d83e11f67
946 | | user: test
946 | | user: test
947 | | date: Thu Jan 01 00:00:32 1970 +0000
947 | | date: Thu Jan 01 00:00:32 1970 +0000
948 | | summary: (32) expand
948 | | summary: (32) expand
949 | |
949 | |
950 o | changeset: 31:621d83e11f67
950 o | changeset: 31:621d83e11f67
951 |\| parent: 21:d42a756af44d
951 |\| parent: 21:d42a756af44d
952 | | parent: 30:6e11cd4b648f
952 | | parent: 30:6e11cd4b648f
953 | | user: test
953 | | user: test
954 | | date: Thu Jan 01 00:00:31 1970 +0000
954 | | date: Thu Jan 01 00:00:31 1970 +0000
955 | | summary: (31) expand
955 | | summary: (31) expand
956 | |
956 | |
957 o | changeset: 30:6e11cd4b648f
957 o | changeset: 30:6e11cd4b648f
958 |\ \ parent: 28:44ecd0b9ae99
958 |\ \ parent: 28:44ecd0b9ae99
959 | | | parent: 29:cd9bb2be7593
959 | | | parent: 29:cd9bb2be7593
960 | | | user: test
960 | | | user: test
961 | | | date: Thu Jan 01 00:00:30 1970 +0000
961 | | | date: Thu Jan 01 00:00:30 1970 +0000
962 | | | summary: (30) expand
962 | | | summary: (30) expand
963 | | |
963 | | |
964 o | | changeset: 28:44ecd0b9ae99
964 o | | changeset: 28:44ecd0b9ae99
965 |\ \ \ parent: 1:6db2ef61d156
965 |\ \ \ parent: 1:6db2ef61d156
966 | | | | parent: 26:7f25b6c2f0b9
966 | | | | parent: 26:7f25b6c2f0b9
967 | | | | user: test
967 | | | | user: test
968 | | | | date: Thu Jan 01 00:00:28 1970 +0000
968 | | | | date: Thu Jan 01 00:00:28 1970 +0000
969 | | | | summary: (28) merge zero known
969 | | | | summary: (28) merge zero known
970 | | | |
970 | | | |
971 o | | | changeset: 26:7f25b6c2f0b9
971 o | | | changeset: 26:7f25b6c2f0b9
972 |\ \ \ \ parent: 18:1aa84d96232a
972 |\ \ \ \ parent: 18:1aa84d96232a
973 | | | | | parent: 25:91da8ed57247
973 | | | | | parent: 25:91da8ed57247
974 | | | | | user: test
974 | | | | | user: test
975 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
975 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
976 | | | | | summary: (26) merge one known; far right
976 | | | | | summary: (26) merge one known; far right
977 | | | | |
977 | | | | |
978 | o-----+ changeset: 25:91da8ed57247
978 | o-----+ changeset: 25:91da8ed57247
979 | | | | | parent: 21:d42a756af44d
979 | | | | | parent: 21:d42a756af44d
980 | | | | | parent: 24:a9c19a3d96b7
980 | | | | | parent: 24:a9c19a3d96b7
981 | | | | | user: test
981 | | | | | user: test
982 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
982 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
983 | | | | | summary: (25) merge one known; far left
983 | | | | | summary: (25) merge one known; far left
984 | | | | |
984 | | | | |
985 | o | | | changeset: 24:a9c19a3d96b7
985 | o | | | changeset: 24:a9c19a3d96b7
986 | |\ \ \ \ parent: 0:e6eb3150255d
986 | |\ \ \ \ parent: 0:e6eb3150255d
987 | | | | | | parent: 23:a01cddf0766d
987 | | | | | | parent: 23:a01cddf0766d
988 | | | | | | user: test
988 | | | | | | user: test
989 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
989 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
990 | | | | | | summary: (24) merge one known; immediate right
990 | | | | | | summary: (24) merge one known; immediate right
991 | | | | | |
991 | | | | | |
992 | o---+ | | changeset: 23:a01cddf0766d
992 | o---+ | | changeset: 23:a01cddf0766d
993 | | | | | | parent: 1:6db2ef61d156
993 | | | | | | parent: 1:6db2ef61d156
994 | | | | | | parent: 22:e0d9cccacb5d
994 | | | | | | parent: 22:e0d9cccacb5d
995 | | | | | | user: test
995 | | | | | | user: test
996 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
996 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
997 | | | | | | summary: (23) merge one known; immediate left
997 | | | | | | summary: (23) merge one known; immediate left
998 | | | | | |
998 | | | | | |
999 | o-------+ changeset: 22:e0d9cccacb5d
999 | o-------+ changeset: 22:e0d9cccacb5d
1000 | | | | | | parent: 18:1aa84d96232a
1000 | | | | | | parent: 18:1aa84d96232a
1001 |/ / / / / parent: 21:d42a756af44d
1001 |/ / / / / parent: 21:d42a756af44d
1002 | | | | | user: test
1002 | | | | | user: test
1003 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
1003 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
1004 | | | | | summary: (22) merge two known; one far left, one far right
1004 | | | | | summary: (22) merge two known; one far left, one far right
1005 | | | | |
1005 | | | | |
1006 | | | | o changeset: 21:d42a756af44d
1006 | | | | o changeset: 21:d42a756af44d
1007 | | | | |\ parent: 19:31ddc2c1573b
1007 | | | | |\ parent: 19:31ddc2c1573b
1008 | | | | | | parent: 20:d30ed6450e32
1008 | | | | | | parent: 20:d30ed6450e32
1009 | | | | | | user: test
1009 | | | | | | user: test
1010 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
1010 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
1011 | | | | | | summary: (21) expand
1011 | | | | | | summary: (21) expand
1012 | | | | | |
1012 | | | | | |
1013 +-+-------o changeset: 20:d30ed6450e32
1013 +-+-------o changeset: 20:d30ed6450e32
1014 | | | | | parent: 0:e6eb3150255d
1014 | | | | | parent: 0:e6eb3150255d
1015 | | | | | parent: 18:1aa84d96232a
1015 | | | | | parent: 18:1aa84d96232a
1016 | | | | | user: test
1016 | | | | | user: test
1017 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
1017 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
1018 | | | | | summary: (20) merge two known; two far right
1018 | | | | | summary: (20) merge two known; two far right
1019 | | | | |
1019 | | | | |
1020 | | | | o changeset: 19:31ddc2c1573b
1020 | | | | o changeset: 19:31ddc2c1573b
1021 | | | | |\ parent: 15:1dda3f72782d
1021 | | | | |\ parent: 15:1dda3f72782d
1022 | | | | | | parent: 17:44765d7c06e0
1022 | | | | | | parent: 17:44765d7c06e0
1023 | | | | | | user: test
1023 | | | | | | user: test
1024 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
1024 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
1025 | | | | | | summary: (19) expand
1025 | | | | | | summary: (19) expand
1026 | | | | | |
1026 | | | | | |
1027 o---+---+ | changeset: 18:1aa84d96232a
1027 o---+---+ | changeset: 18:1aa84d96232a
1028 | | | | | parent: 1:6db2ef61d156
1028 | | | | | parent: 1:6db2ef61d156
1029 / / / / / parent: 15:1dda3f72782d
1029 / / / / / parent: 15:1dda3f72782d
1030 | | | | | user: test
1030 | | | | | user: test
1031 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
1031 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
1032 | | | | | summary: (18) merge two known; two far left
1032 | | | | | summary: (18) merge two known; two far left
1033 | | | | |
1033 | | | | |
1034 | | | | o changeset: 17:44765d7c06e0
1034 | | | | o changeset: 17:44765d7c06e0
1035 | | | | |\ parent: 12:86b91144a6e9
1035 | | | | |\ parent: 12:86b91144a6e9
1036 | | | | | | parent: 16:3677d192927d
1036 | | | | | | parent: 16:3677d192927d
1037 | | | | | | user: test
1037 | | | | | | user: test
1038 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
1038 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
1039 | | | | | | summary: (17) expand
1039 | | | | | | summary: (17) expand
1040 | | | | | |
1040 | | | | | |
1041 +-+-------o changeset: 16:3677d192927d
1041 +-+-------o changeset: 16:3677d192927d
1042 | | | | | parent: 0:e6eb3150255d
1042 | | | | | parent: 0:e6eb3150255d
1043 | | | | | parent: 1:6db2ef61d156
1043 | | | | | parent: 1:6db2ef61d156
1044 | | | | | user: test
1044 | | | | | user: test
1045 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
1045 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
1046 | | | | | summary: (16) merge two known; one immediate right, one near right
1046 | | | | | summary: (16) merge two known; one immediate right, one near right
1047 | | | | |
1047 | | | | |
1048 | | | o | changeset: 15:1dda3f72782d
1048 | | | o | changeset: 15:1dda3f72782d
1049 | | | |\ \ parent: 13:22d8966a97e3
1049 | | | |\ \ parent: 13:22d8966a97e3
1050 | | | | | | parent: 14:8eac370358ef
1050 | | | | | | parent: 14:8eac370358ef
1051 | | | | | | user: test
1051 | | | | | | user: test
1052 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
1052 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
1053 | | | | | | summary: (15) expand
1053 | | | | | | summary: (15) expand
1054 | | | | | |
1054 | | | | | |
1055 +-------o | changeset: 14:8eac370358ef
1055 +-------o | changeset: 14:8eac370358ef
1056 | | | | |/ parent: 0:e6eb3150255d
1056 | | | | |/ parent: 0:e6eb3150255d
1057 | | | | | parent: 12:86b91144a6e9
1057 | | | | | parent: 12:86b91144a6e9
1058 | | | | | user: test
1058 | | | | | user: test
1059 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
1059 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
1060 | | | | | summary: (14) merge two known; one immediate right, one far right
1060 | | | | | summary: (14) merge two known; one immediate right, one far right
1061 | | | | |
1061 | | | | |
1062 | | | o | changeset: 13:22d8966a97e3
1062 | | | o | changeset: 13:22d8966a97e3
1063 | | | |\ \ parent: 9:7010c0af0a35
1063 | | | |\ \ parent: 9:7010c0af0a35
1064 | | | | | | parent: 11:832d76e6bdf2
1064 | | | | | | parent: 11:832d76e6bdf2
1065 | | | | | | user: test
1065 | | | | | | user: test
1066 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
1066 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
1067 | | | | | | summary: (13) expand
1067 | | | | | | summary: (13) expand
1068 | | | | | |
1068 | | | | | |
1069 | +---+---o changeset: 12:86b91144a6e9
1069 | +---+---o changeset: 12:86b91144a6e9
1070 | | | | | parent: 1:6db2ef61d156
1070 | | | | | parent: 1:6db2ef61d156
1071 | | | | | parent: 9:7010c0af0a35
1071 | | | | | parent: 9:7010c0af0a35
1072 | | | | | user: test
1072 | | | | | user: test
1073 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
1073 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
1074 | | | | | summary: (12) merge two known; one immediate right, one far left
1074 | | | | | summary: (12) merge two known; one immediate right, one far left
1075 | | | | |
1075 | | | | |
1076 | | | | o changeset: 11:832d76e6bdf2
1076 | | | | o changeset: 11:832d76e6bdf2
1077 | | | | |\ parent: 6:b105a072e251
1077 | | | | |\ parent: 6:b105a072e251
1078 | | | | | | parent: 10:74c64d036d72
1078 | | | | | | parent: 10:74c64d036d72
1079 | | | | | | user: test
1079 | | | | | | user: test
1080 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
1080 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
1081 | | | | | | summary: (11) expand
1081 | | | | | | summary: (11) expand
1082 | | | | | |
1082 | | | | | |
1083 +---------o changeset: 10:74c64d036d72
1083 +---------o changeset: 10:74c64d036d72
1084 | | | | |/ parent: 0:e6eb3150255d
1084 | | | | |/ parent: 0:e6eb3150255d
1085 | | | | | parent: 6:b105a072e251
1085 | | | | | parent: 6:b105a072e251
1086 | | | | | user: test
1086 | | | | | user: test
1087 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
1087 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
1088 | | | | | summary: (10) merge two known; one immediate left, one near right
1088 | | | | | summary: (10) merge two known; one immediate left, one near right
1089 | | | | |
1089 | | | | |
1090 | | | o | changeset: 9:7010c0af0a35
1090 | | | o | changeset: 9:7010c0af0a35
1091 | | | |\ \ parent: 7:b632bb1b1224
1091 | | | |\ \ parent: 7:b632bb1b1224
1092 | | | | | | parent: 8:7a0b11f71937
1092 | | | | | | parent: 8:7a0b11f71937
1093 | | | | | | user: test
1093 | | | | | | user: test
1094 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
1094 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
1095 | | | | | | summary: (9) expand
1095 | | | | | | summary: (9) expand
1096 | | | | | |
1096 | | | | | |
1097 +-------o | changeset: 8:7a0b11f71937
1097 +-------o | changeset: 8:7a0b11f71937
1098 | | | |/ / parent: 0:e6eb3150255d
1098 | | | |/ / parent: 0:e6eb3150255d
1099 | | | | | parent: 7:b632bb1b1224
1099 | | | | | parent: 7:b632bb1b1224
1100 | | | | | user: test
1100 | | | | | user: test
1101 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
1101 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
1102 | | | | | summary: (8) merge two known; one immediate left, one far right
1102 | | | | | summary: (8) merge two known; one immediate left, one far right
1103 | | | | |
1103 | | | | |
1104 | | | o | changeset: 7:b632bb1b1224
1104 | | | o | changeset: 7:b632bb1b1224
1105 | | | |\ \ parent: 2:3d9a33b8d1e1
1105 | | | |\ \ parent: 2:3d9a33b8d1e1
1106 | | | | | | parent: 5:4409d547b708
1106 | | | | | | parent: 5:4409d547b708
1107 | | | | | | user: test
1107 | | | | | | user: test
1108 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
1108 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
1109 | | | | | | summary: (7) expand
1109 | | | | | | summary: (7) expand
1110 | | | | | |
1110 | | | | | |
1111 | | | +---o changeset: 6:b105a072e251
1111 | | | +---o changeset: 6:b105a072e251
1112 | | | | |/ parent: 2:3d9a33b8d1e1
1112 | | | | |/ parent: 2:3d9a33b8d1e1
1113 | | | | | parent: 5:4409d547b708
1113 | | | | | parent: 5:4409d547b708
1114 | | | | | user: test
1114 | | | | | user: test
1115 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
1115 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
1116 | | | | | summary: (6) merge two known; one immediate left, one far left
1116 | | | | | summary: (6) merge two known; one immediate left, one far left
1117 | | | | |
1117 | | | | |
1118 | | | o | changeset: 5:4409d547b708
1118 | | | o | changeset: 5:4409d547b708
1119 | | | |\ \ parent: 3:27eef8ed80b4
1119 | | | |\ \ parent: 3:27eef8ed80b4
1120 | | | | | | parent: 4:26a8bac39d9f
1120 | | | | | | parent: 4:26a8bac39d9f
1121 | | | | | | user: test
1121 | | | | | | user: test
1122 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
1122 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
1123 | | | | | | summary: (5) expand
1123 | | | | | | summary: (5) expand
1124 | | | | | |
1124 | | | | | |
1125 | +---o | | changeset: 4:26a8bac39d9f
1125 | +---o | | changeset: 4:26a8bac39d9f
1126 | | | |/ / parent: 1:6db2ef61d156
1126 | | | |/ / parent: 1:6db2ef61d156
1127 | | | | | parent: 3:27eef8ed80b4
1127 | | | | | parent: 3:27eef8ed80b4
1128 | | | | | user: test
1128 | | | | | user: test
1129 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
1129 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
1130 | | | | | summary: (4) merge two known; one immediate left, one immediate right
1130 | | | | | summary: (4) merge two known; one immediate left, one immediate right
1131 | | | | |
1131 | | | | |
1132
1132
1133
1133
1134 Empty revision range - display nothing:
1134 Empty revision range - display nothing:
1135 $ hg glog -r 1..0
1135 $ hg glog -r 1..0
1136
1136
1137 $ cd ..
1137 $ cd ..
1138
1138
1139 #if no-outer-repo
1139 #if no-outer-repo
1140
1140
1141 From outer space:
1141 From outer space:
1142 $ hg glog -l1 repo
1142 $ hg glog -l1 repo
1143 @ changeset: 34:fea3ac5810e0
1143 @ changeset: 34:fea3ac5810e0
1144 | tag: tip
1144 | tag: tip
1145 | parent: 32:d06dffa21a31
1145 | parent: 32:d06dffa21a31
1146 | user: test
1146 | user: test
1147 | date: Thu Jan 01 00:00:34 1970 +0000
1147 | date: Thu Jan 01 00:00:34 1970 +0000
1148 | summary: (34) head
1148 | summary: (34) head
1149 |
1149 |
1150 $ hg glog -l1 repo/a
1150 $ hg glog -l1 repo/a
1151 @ changeset: 34:fea3ac5810e0
1151 @ changeset: 34:fea3ac5810e0
1152 | tag: tip
1152 | tag: tip
1153 | parent: 32:d06dffa21a31
1153 | parent: 32:d06dffa21a31
1154 | user: test
1154 | user: test
1155 | date: Thu Jan 01 00:00:34 1970 +0000
1155 | date: Thu Jan 01 00:00:34 1970 +0000
1156 | summary: (34) head
1156 | summary: (34) head
1157 |
1157 |
1158 $ hg glog -l1 repo/missing
1158 $ hg glog -l1 repo/missing
1159
1159
1160 #endif
1160 #endif
1161
1161
1162 File log with revs != cset revs:
1162 File log with revs != cset revs:
1163 $ hg init flog
1163 $ hg init flog
1164 $ cd flog
1164 $ cd flog
1165 $ echo one >one
1165 $ echo one >one
1166 $ hg add one
1166 $ hg add one
1167 $ hg commit -mone
1167 $ hg commit -mone
1168 $ echo two >two
1168 $ echo two >two
1169 $ hg add two
1169 $ hg add two
1170 $ hg commit -mtwo
1170 $ hg commit -mtwo
1171 $ echo more >two
1171 $ echo more >two
1172 $ hg commit -mmore
1172 $ hg commit -mmore
1173 $ hg glog two
1173 $ hg glog two
1174 @ changeset: 2:12c28321755b
1174 @ changeset: 2:12c28321755b
1175 | tag: tip
1175 | tag: tip
1176 | user: test
1176 | user: test
1177 | date: Thu Jan 01 00:00:00 1970 +0000
1177 | date: Thu Jan 01 00:00:00 1970 +0000
1178 | summary: more
1178 | summary: more
1179 |
1179 |
1180 o changeset: 1:5ac72c0599bf
1180 o changeset: 1:5ac72c0599bf
1181 | user: test
1181 | user: test
1182 | date: Thu Jan 01 00:00:00 1970 +0000
1182 | date: Thu Jan 01 00:00:00 1970 +0000
1183 | summary: two
1183 | summary: two
1184 |
1184 |
1185
1185
1186 Issue1896: File log with explicit style
1186 Issue1896: File log with explicit style
1187 $ hg glog --style=default one
1187 $ hg glog --style=default one
1188 o changeset: 0:3d578b4a1f53
1188 o changeset: 0:3d578b4a1f53
1189 user: test
1189 user: test
1190 date: Thu Jan 01 00:00:00 1970 +0000
1190 date: Thu Jan 01 00:00:00 1970 +0000
1191 summary: one
1191 summary: one
1192
1192
1193 Issue2395: glog --style header and footer
1193 Issue2395: glog --style header and footer
1194 $ hg glog --style=xml one
1194 $ hg glog --style=xml one
1195 <?xml version="1.0"?>
1195 <?xml version="1.0"?>
1196 <log>
1196 <log>
1197 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1197 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1198 <author email="test">test</author>
1198 <author email="test">test</author>
1199 <date>1970-01-01T00:00:00+00:00</date>
1199 <date>1970-01-01T00:00:00+00:00</date>
1200 <msg xml:space="preserve">one</msg>
1200 <msg xml:space="preserve">one</msg>
1201 </logentry>
1201 </logentry>
1202 </log>
1202 </log>
1203
1203
1204 $ cd ..
1204 $ cd ..
1205
1205
1206 Incoming and outgoing:
1206 Incoming and outgoing:
1207
1207
1208 $ hg clone -U -r31 repo repo2
1208 $ hg clone -U -r31 repo repo2
1209 adding changesets
1209 adding changesets
1210 adding manifests
1210 adding manifests
1211 adding file changes
1211 adding file changes
1212 added 31 changesets with 31 changes to 1 files
1212 added 31 changesets with 31 changes to 1 files
1213 $ cd repo2
1213 $ cd repo2
1214
1214
1215 $ hg incoming --graph ../repo
1215 $ hg incoming --graph ../repo
1216 comparing with ../repo
1216 comparing with ../repo
1217 searching for changes
1217 searching for changes
1218 o changeset: 34:fea3ac5810e0
1218 o changeset: 34:fea3ac5810e0
1219 | tag: tip
1219 | tag: tip
1220 | parent: 32:d06dffa21a31
1220 | parent: 32:d06dffa21a31
1221 | user: test
1221 | user: test
1222 | date: Thu Jan 01 00:00:34 1970 +0000
1222 | date: Thu Jan 01 00:00:34 1970 +0000
1223 | summary: (34) head
1223 | summary: (34) head
1224 |
1224 |
1225 | o changeset: 33:68608f5145f9
1225 | o changeset: 33:68608f5145f9
1226 | parent: 18:1aa84d96232a
1226 | parent: 18:1aa84d96232a
1227 | user: test
1227 | user: test
1228 | date: Thu Jan 01 00:00:33 1970 +0000
1228 | date: Thu Jan 01 00:00:33 1970 +0000
1229 | summary: (33) head
1229 | summary: (33) head
1230 |
1230 |
1231 o changeset: 32:d06dffa21a31
1231 o changeset: 32:d06dffa21a31
1232 | parent: 27:886ed638191b
1232 | parent: 27:886ed638191b
1233 | parent: 31:621d83e11f67
1233 | parent: 31:621d83e11f67
1234 | user: test
1234 | user: test
1235 | date: Thu Jan 01 00:00:32 1970 +0000
1235 | date: Thu Jan 01 00:00:32 1970 +0000
1236 | summary: (32) expand
1236 | summary: (32) expand
1237 |
1237 |
1238 o changeset: 27:886ed638191b
1238 o changeset: 27:886ed638191b
1239 parent: 21:d42a756af44d
1239 parent: 21:d42a756af44d
1240 user: test
1240 user: test
1241 date: Thu Jan 01 00:00:27 1970 +0000
1241 date: Thu Jan 01 00:00:27 1970 +0000
1242 summary: (27) collapse
1242 summary: (27) collapse
1243
1243
1244 $ cd ..
1244 $ cd ..
1245
1245
1246 $ hg -R repo outgoing --graph repo2
1246 $ hg -R repo outgoing --graph repo2
1247 comparing with repo2
1247 comparing with repo2
1248 searching for changes
1248 searching for changes
1249 @ changeset: 34:fea3ac5810e0
1249 @ changeset: 34:fea3ac5810e0
1250 | tag: tip
1250 | tag: tip
1251 | parent: 32:d06dffa21a31
1251 | parent: 32:d06dffa21a31
1252 | user: test
1252 | user: test
1253 | date: Thu Jan 01 00:00:34 1970 +0000
1253 | date: Thu Jan 01 00:00:34 1970 +0000
1254 | summary: (34) head
1254 | summary: (34) head
1255 |
1255 |
1256 | o changeset: 33:68608f5145f9
1256 | o changeset: 33:68608f5145f9
1257 | parent: 18:1aa84d96232a
1257 | parent: 18:1aa84d96232a
1258 | user: test
1258 | user: test
1259 | date: Thu Jan 01 00:00:33 1970 +0000
1259 | date: Thu Jan 01 00:00:33 1970 +0000
1260 | summary: (33) head
1260 | summary: (33) head
1261 |
1261 |
1262 o changeset: 32:d06dffa21a31
1262 o changeset: 32:d06dffa21a31
1263 | parent: 27:886ed638191b
1263 | parent: 27:886ed638191b
1264 | parent: 31:621d83e11f67
1264 | parent: 31:621d83e11f67
1265 | user: test
1265 | user: test
1266 | date: Thu Jan 01 00:00:32 1970 +0000
1266 | date: Thu Jan 01 00:00:32 1970 +0000
1267 | summary: (32) expand
1267 | summary: (32) expand
1268 |
1268 |
1269 o changeset: 27:886ed638191b
1269 o changeset: 27:886ed638191b
1270 parent: 21:d42a756af44d
1270 parent: 21:d42a756af44d
1271 user: test
1271 user: test
1272 date: Thu Jan 01 00:00:27 1970 +0000
1272 date: Thu Jan 01 00:00:27 1970 +0000
1273 summary: (27) collapse
1273 summary: (27) collapse
1274
1274
1275
1275
1276 File + limit with revs != cset revs:
1276 File + limit with revs != cset revs:
1277 $ cd repo
1277 $ cd repo
1278 $ touch b
1278 $ touch b
1279 $ hg ci -Aqm0
1279 $ hg ci -Aqm0
1280 $ hg glog -l2 a
1280 $ hg glog -l2 a
1281 o changeset: 34:fea3ac5810e0
1281 o changeset: 34:fea3ac5810e0
1282 | parent: 32:d06dffa21a31
1282 | parent: 32:d06dffa21a31
1283 | user: test
1283 | user: test
1284 | date: Thu Jan 01 00:00:34 1970 +0000
1284 | date: Thu Jan 01 00:00:34 1970 +0000
1285 | summary: (34) head
1285 | summary: (34) head
1286 |
1286 |
1287 | o changeset: 33:68608f5145f9
1287 | o changeset: 33:68608f5145f9
1288 | | parent: 18:1aa84d96232a
1288 | | parent: 18:1aa84d96232a
1289 | | user: test
1289 | | user: test
1290 | | date: Thu Jan 01 00:00:33 1970 +0000
1290 | | date: Thu Jan 01 00:00:33 1970 +0000
1291 | | summary: (33) head
1291 | | summary: (33) head
1292 | |
1292 | |
1293
1293
1294 File + limit + -ra:b, (b - a) < limit:
1294 File + limit + -ra:b, (b - a) < limit:
1295 $ hg glog -l3000 -r32:tip a
1295 $ hg glog -l3000 -r32:tip a
1296 o changeset: 34:fea3ac5810e0
1296 o changeset: 34:fea3ac5810e0
1297 | parent: 32:d06dffa21a31
1297 | parent: 32:d06dffa21a31
1298 | user: test
1298 | user: test
1299 | date: Thu Jan 01 00:00:34 1970 +0000
1299 | date: Thu Jan 01 00:00:34 1970 +0000
1300 | summary: (34) head
1300 | summary: (34) head
1301 |
1301 |
1302 | o changeset: 33:68608f5145f9
1302 | o changeset: 33:68608f5145f9
1303 | | parent: 18:1aa84d96232a
1303 | | parent: 18:1aa84d96232a
1304 | | user: test
1304 | | user: test
1305 | | date: Thu Jan 01 00:00:33 1970 +0000
1305 | | date: Thu Jan 01 00:00:33 1970 +0000
1306 | | summary: (33) head
1306 | | summary: (33) head
1307 | |
1307 | |
1308 o | changeset: 32:d06dffa21a31
1308 o | changeset: 32:d06dffa21a31
1309 |\ \ parent: 27:886ed638191b
1309 |\ \ parent: 27:886ed638191b
1310 | | | parent: 31:621d83e11f67
1310 | | | parent: 31:621d83e11f67
1311 | | | user: test
1311 | | | user: test
1312 | | | date: Thu Jan 01 00:00:32 1970 +0000
1312 | | | date: Thu Jan 01 00:00:32 1970 +0000
1313 | | | summary: (32) expand
1313 | | | summary: (32) expand
1314 | | |
1314 | | |
1315
1315
1316 Point out a common and an uncommon unshown parent
1316 Point out a common and an uncommon unshown parent
1317
1317
1318 $ hg glog -r 'rev(8) or rev(9)'
1318 $ hg glog -r 'rev(8) or rev(9)'
1319 o changeset: 9:7010c0af0a35
1319 o changeset: 9:7010c0af0a35
1320 |\ parent: 7:b632bb1b1224
1320 |\ parent: 7:b632bb1b1224
1321 | | parent: 8:7a0b11f71937
1321 | | parent: 8:7a0b11f71937
1322 | | user: test
1322 | | user: test
1323 | | date: Thu Jan 01 00:00:09 1970 +0000
1323 | | date: Thu Jan 01 00:00:09 1970 +0000
1324 | | summary: (9) expand
1324 | | summary: (9) expand
1325 | |
1325 | |
1326 o | changeset: 8:7a0b11f71937
1326 o | changeset: 8:7a0b11f71937
1327 |\| parent: 0:e6eb3150255d
1327 |\| parent: 0:e6eb3150255d
1328 | | parent: 7:b632bb1b1224
1328 | | parent: 7:b632bb1b1224
1329 | | user: test
1329 | | user: test
1330 | | date: Thu Jan 01 00:00:08 1970 +0000
1330 | | date: Thu Jan 01 00:00:08 1970 +0000
1331 | | summary: (8) merge two known; one immediate left, one far right
1331 | | summary: (8) merge two known; one immediate left, one far right
1332 | |
1332 | |
1333
1333
1334 File + limit + -ra:b, b < tip:
1334 File + limit + -ra:b, b < tip:
1335
1335
1336 $ hg glog -l1 -r32:34 a
1336 $ hg glog -l1 -r32:34 a
1337 o changeset: 34:fea3ac5810e0
1337 o changeset: 34:fea3ac5810e0
1338 | parent: 32:d06dffa21a31
1338 | parent: 32:d06dffa21a31
1339 | user: test
1339 | user: test
1340 | date: Thu Jan 01 00:00:34 1970 +0000
1340 | date: Thu Jan 01 00:00:34 1970 +0000
1341 | summary: (34) head
1341 | summary: (34) head
1342 |
1342 |
1343
1343
1344 file(File) + limit + -ra:b, b < tip:
1344 file(File) + limit + -ra:b, b < tip:
1345
1345
1346 $ hg glog -l1 -r32:34 -r 'file("a")'
1346 $ hg glog -l1 -r32:34 -r 'file("a")'
1347 o changeset: 34:fea3ac5810e0
1347 o changeset: 34:fea3ac5810e0
1348 | parent: 32:d06dffa21a31
1348 | parent: 32:d06dffa21a31
1349 | user: test
1349 | user: test
1350 | date: Thu Jan 01 00:00:34 1970 +0000
1350 | date: Thu Jan 01 00:00:34 1970 +0000
1351 | summary: (34) head
1351 | summary: (34) head
1352 |
1352 |
1353
1353
1354 limit(file(File) and a::b), b < tip:
1354 limit(file(File) and a::b), b < tip:
1355
1355
1356 $ hg glog -r 'limit(file("a") and 32::34, 1)'
1356 $ hg glog -r 'limit(file("a") and 32::34, 1)'
1357 o changeset: 32:d06dffa21a31
1357 o changeset: 32:d06dffa21a31
1358 |\ parent: 27:886ed638191b
1358 |\ parent: 27:886ed638191b
1359 | | parent: 31:621d83e11f67
1359 | | parent: 31:621d83e11f67
1360 | | user: test
1360 | | user: test
1361 | | date: Thu Jan 01 00:00:32 1970 +0000
1361 | | date: Thu Jan 01 00:00:32 1970 +0000
1362 | | summary: (32) expand
1362 | | summary: (32) expand
1363 | |
1363 | |
1364
1364
1365 File + limit + -ra:b, b < tip:
1365 File + limit + -ra:b, b < tip:
1366
1366
1367 $ hg glog -r 'limit(file("a") and 34::32, 1)'
1367 $ hg glog -r 'limit(file("a") and 34::32, 1)'
1368
1368
1369 File + limit + -ra:b, b < tip, (b - a) < limit:
1369 File + limit + -ra:b, b < tip, (b - a) < limit:
1370
1370
1371 $ hg glog -l10 -r33:34 a
1371 $ hg glog -l10 -r33:34 a
1372 o changeset: 34:fea3ac5810e0
1372 o changeset: 34:fea3ac5810e0
1373 | parent: 32:d06dffa21a31
1373 | parent: 32:d06dffa21a31
1374 | user: test
1374 | user: test
1375 | date: Thu Jan 01 00:00:34 1970 +0000
1375 | date: Thu Jan 01 00:00:34 1970 +0000
1376 | summary: (34) head
1376 | summary: (34) head
1377 |
1377 |
1378 | o changeset: 33:68608f5145f9
1378 | o changeset: 33:68608f5145f9
1379 | | parent: 18:1aa84d96232a
1379 | | parent: 18:1aa84d96232a
1380 | | user: test
1380 | | user: test
1381 | | date: Thu Jan 01 00:00:33 1970 +0000
1381 | | date: Thu Jan 01 00:00:33 1970 +0000
1382 | | summary: (33) head
1382 | | summary: (33) head
1383 | |
1383 | |
1384
1384
1385 Do not crash or produce strange graphs if history is buggy
1385 Do not crash or produce strange graphs if history is buggy
1386
1386
1387 $ hg branch branch
1387 $ hg branch branch
1388 marked working directory as branch branch
1388 marked working directory as branch branch
1389 (branches are permanent and global, did you want a bookmark?)
1389 (branches are permanent and global, did you want a bookmark?)
1390 $ commit 36 "buggy merge: identical parents" 35 35
1390 $ commit 36 "buggy merge: identical parents" 35 35
1391 $ hg glog -l5
1391 $ hg glog -l5
1392 @ changeset: 36:08a19a744424
1392 @ changeset: 36:08a19a744424
1393 | branch: branch
1393 | branch: branch
1394 | tag: tip
1394 | tag: tip
1395 | parent: 35:9159c3644c5e
1395 | parent: 35:9159c3644c5e
1396 | parent: 35:9159c3644c5e
1396 | parent: 35:9159c3644c5e
1397 | user: test
1397 | user: test
1398 | date: Thu Jan 01 00:00:36 1970 +0000
1398 | date: Thu Jan 01 00:00:36 1970 +0000
1399 | summary: (36) buggy merge: identical parents
1399 | summary: (36) buggy merge: identical parents
1400 |
1400 |
1401 o changeset: 35:9159c3644c5e
1401 o changeset: 35:9159c3644c5e
1402 | user: test
1402 | user: test
1403 | date: Thu Jan 01 00:00:00 1970 +0000
1403 | date: Thu Jan 01 00:00:00 1970 +0000
1404 | summary: 0
1404 | summary: 0
1405 |
1405 |
1406 o changeset: 34:fea3ac5810e0
1406 o changeset: 34:fea3ac5810e0
1407 | parent: 32:d06dffa21a31
1407 | parent: 32:d06dffa21a31
1408 | user: test
1408 | user: test
1409 | date: Thu Jan 01 00:00:34 1970 +0000
1409 | date: Thu Jan 01 00:00:34 1970 +0000
1410 | summary: (34) head
1410 | summary: (34) head
1411 |
1411 |
1412 | o changeset: 33:68608f5145f9
1412 | o changeset: 33:68608f5145f9
1413 | | parent: 18:1aa84d96232a
1413 | | parent: 18:1aa84d96232a
1414 | | user: test
1414 | | user: test
1415 | | date: Thu Jan 01 00:00:33 1970 +0000
1415 | | date: Thu Jan 01 00:00:33 1970 +0000
1416 | | summary: (33) head
1416 | | summary: (33) head
1417 | |
1417 | |
1418 o | changeset: 32:d06dffa21a31
1418 o | changeset: 32:d06dffa21a31
1419 |\ \ parent: 27:886ed638191b
1419 |\ \ parent: 27:886ed638191b
1420 | | | parent: 31:621d83e11f67
1420 | | | parent: 31:621d83e11f67
1421 | | | user: test
1421 | | | user: test
1422 | | | date: Thu Jan 01 00:00:32 1970 +0000
1422 | | | date: Thu Jan 01 00:00:32 1970 +0000
1423 | | | summary: (32) expand
1423 | | | summary: (32) expand
1424 | | |
1424 | | |
1425
1425
1426 Test log -G options
1426 Test log -G options
1427
1427
1428 $ testlog() {
1428 $ testlog() {
1429 > hg log -G --print-revset "$@"
1429 > hg log -G --print-revset "$@"
1430 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1430 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1431 > | sed 's/.*nodetag/nodetag/' > log.nodes
1431 > | sed 's/.*nodetag/nodetag/' > log.nodes
1432 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1432 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1433 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1433 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1434 > diff -u log.nodes glog.nodes | grep '^[-+@ ]' || :
1434 > diff -u log.nodes glog.nodes | grep '^[-+@ ]' || :
1435 > }
1435 > }
1436
1436
1437 glog always reorders nodes which explains the difference with log
1437 glog always reorders nodes which explains the difference with log
1438
1438
1439 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1439 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1440 ['27', '25', '21', '34', '32', '31']
1440 ['27', '25', '21', '34', '32', '31']
1441 []
1441 []
1442 --- log.nodes * (glob)
1442 --- log.nodes * (glob)
1443 +++ glog.nodes * (glob)
1443 +++ glog.nodes * (glob)
1444 @@ -1,6 +1,6 @@
1444 @@ -1,6 +1,6 @@
1445 -nodetag 27
1445 -nodetag 27
1446 -nodetag 25
1446 -nodetag 25
1447 -nodetag 21
1447 -nodetag 21
1448 nodetag 34
1448 nodetag 34
1449 nodetag 32
1449 nodetag 32
1450 nodetag 31
1450 nodetag 31
1451 +nodetag 27
1451 +nodetag 27
1452 +nodetag 25
1452 +nodetag 25
1453 +nodetag 21
1453 +nodetag 21
1454 $ testlog -u test -u not-a-user
1454 $ testlog -u test -u not-a-user
1455 []
1455 []
1456 (group
1456 (group
1457 (group
1457 (group
1458 (or
1458 (or
1459 (func
1459 (func
1460 ('symbol', 'user')
1460 ('symbol', 'user')
1461 ('string', 'test'))
1461 ('string', 'test'))
1462 (func
1462 (func
1463 ('symbol', 'user')
1463 ('symbol', 'user')
1464 ('string', 'not-a-user')))))
1464 ('string', 'not-a-user')))))
1465 $ testlog -b not-a-branch
1465 $ testlog -b not-a-branch
1466 abort: unknown revision 'not-a-branch'!
1466 abort: unknown revision 'not-a-branch'!
1467 abort: unknown revision 'not-a-branch'!
1467 abort: unknown revision 'not-a-branch'!
1468 abort: unknown revision 'not-a-branch'!
1468 abort: unknown revision 'not-a-branch'!
1469 $ testlog -b 35 -b 36 --only-branch branch
1469 $ testlog -b 35 -b 36 --only-branch branch
1470 []
1470 []
1471 (group
1471 (group
1472 (group
1472 (group
1473 (or
1473 (or
1474 (or
1474 (or
1475 (func
1475 (func
1476 ('symbol', 'branch')
1476 ('symbol', 'branch')
1477 ('string', 'default'))
1477 ('string', 'default'))
1478 (func
1478 (func
1479 ('symbol', 'branch')
1479 ('symbol', 'branch')
1480 ('string', 'branch')))
1480 ('string', 'branch')))
1481 (func
1481 (func
1482 ('symbol', 'branch')
1482 ('symbol', 'branch')
1483 ('string', 'branch')))))
1483 ('string', 'branch')))))
1484 $ testlog -k expand -k merge
1484 $ testlog -k expand -k merge
1485 []
1485 []
1486 (group
1486 (group
1487 (group
1487 (group
1488 (or
1488 (or
1489 (func
1489 (func
1490 ('symbol', 'keyword')
1490 ('symbol', 'keyword')
1491 ('string', 'expand'))
1491 ('string', 'expand'))
1492 (func
1492 (func
1493 ('symbol', 'keyword')
1493 ('symbol', 'keyword')
1494 ('string', 'merge')))))
1494 ('string', 'merge')))))
1495 $ testlog --only-merges
1495 $ testlog --only-merges
1496 []
1496 []
1497 (group
1497 (group
1498 (func
1498 (func
1499 ('symbol', 'merge')
1499 ('symbol', 'merge')
1500 None))
1500 None))
1501 $ testlog --no-merges
1501 $ testlog --no-merges
1502 []
1502 []
1503 (group
1503 (group
1504 (not
1504 (not
1505 (func
1505 (func
1506 ('symbol', 'merge')
1506 ('symbol', 'merge')
1507 None)))
1507 None)))
1508 $ testlog --date '2 0 to 4 0'
1508 $ testlog --date '2 0 to 4 0'
1509 []
1509 []
1510 (group
1510 (group
1511 (func
1511 (func
1512 ('symbol', 'date')
1512 ('symbol', 'date')
1513 ('string', '2 0 to 4 0')))
1513 ('string', '2 0 to 4 0')))
1514 $ hg log -G -d 'brace ) in a date'
1514 $ hg log -G -d 'brace ) in a date'
1515 abort: invalid date: 'brace ) in a date'
1515 abort: invalid date: 'brace ) in a date'
1516 [255]
1516 [255]
1517 $ testlog --prune 31 --prune 32
1517 $ testlog --prune 31 --prune 32
1518 []
1518 []
1519 (group
1519 (group
1520 (group
1520 (group
1521 (and
1521 (and
1522 (not
1522 (not
1523 (group
1523 (group
1524 (or
1524 (or
1525 ('string', '31')
1525 ('string', '31')
1526 (func
1526 (func
1527 ('symbol', 'ancestors')
1527 ('symbol', 'ancestors')
1528 ('string', '31')))))
1528 ('string', '31')))))
1529 (not
1529 (not
1530 (group
1530 (group
1531 (or
1531 (or
1532 ('string', '32')
1532 ('string', '32')
1533 (func
1533 (func
1534 ('symbol', 'ancestors')
1534 ('symbol', 'ancestors')
1535 ('string', '32'))))))))
1535 ('string', '32'))))))))
1536
1536
1537 Dedicated repo for --follow and paths filtering. The g is crafted to
1537 Dedicated repo for --follow and paths filtering. The g is crafted to
1538 have 2 filelog topological heads in a linear changeset graph.
1538 have 2 filelog topological heads in a linear changeset graph.
1539
1539
1540 $ cd ..
1540 $ cd ..
1541 $ hg init follow
1541 $ hg init follow
1542 $ cd follow
1542 $ cd follow
1543 $ testlog --follow
1543 $ testlog --follow
1544 []
1544 []
1545 []
1545 []
1546 $ echo a > a
1546 $ echo a > a
1547 $ echo aa > aa
1547 $ echo aa > aa
1548 $ echo f > f
1548 $ echo f > f
1549 $ hg ci -Am "add a" a aa f
1549 $ hg ci -Am "add a" a aa f
1550 $ hg cp a b
1550 $ hg cp a b
1551 $ hg cp f g
1551 $ hg cp f g
1552 $ hg ci -m "copy a b"
1552 $ hg ci -m "copy a b"
1553 $ mkdir dir
1553 $ mkdir dir
1554 $ hg mv b dir
1554 $ hg mv b dir
1555 $ echo g >> g
1555 $ echo g >> g
1556 $ echo f >> f
1556 $ echo f >> f
1557 $ hg ci -m "mv b dir/b"
1557 $ hg ci -m "mv b dir/b"
1558 $ hg mv a b
1558 $ hg mv a b
1559 $ hg cp -f f g
1559 $ hg cp -f f g
1560 $ echo a > d
1560 $ echo a > d
1561 $ hg add d
1561 $ hg add d
1562 $ hg ci -m "mv a b; add d"
1562 $ hg ci -m "mv a b; add d"
1563 $ hg mv dir/b e
1563 $ hg mv dir/b e
1564 $ hg ci -m "mv dir/b e"
1564 $ hg ci -m "mv dir/b e"
1565 $ hg glog --template '({rev}) {desc|firstline}\n'
1565 $ hg glog --template '({rev}) {desc|firstline}\n'
1566 @ (4) mv dir/b e
1566 @ (4) mv dir/b e
1567 |
1567 |
1568 o (3) mv a b; add d
1568 o (3) mv a b; add d
1569 |
1569 |
1570 o (2) mv b dir/b
1570 o (2) mv b dir/b
1571 |
1571 |
1572 o (1) copy a b
1572 o (1) copy a b
1573 |
1573 |
1574 o (0) add a
1574 o (0) add a
1575
1575
1576
1576
1577 $ testlog a
1577 $ testlog a
1578 []
1578 []
1579 (group
1579 (group
1580 (group
1580 (group
1581 (func
1581 (func
1582 ('symbol', 'filelog')
1582 ('symbol', 'filelog')
1583 ('string', 'a'))))
1583 ('string', 'a'))))
1584 $ testlog a b
1584 $ testlog a b
1585 []
1585 []
1586 (group
1586 (group
1587 (group
1587 (group
1588 (or
1588 (or
1589 (func
1589 (func
1590 ('symbol', 'filelog')
1590 ('symbol', 'filelog')
1591 ('string', 'a'))
1591 ('string', 'a'))
1592 (func
1592 (func
1593 ('symbol', 'filelog')
1593 ('symbol', 'filelog')
1594 ('string', 'b')))))
1594 ('string', 'b')))))
1595
1595
1596 Test falling back to slow path for non-existing files
1596 Test falling back to slow path for non-existing files
1597
1597
1598 $ testlog a c
1598 $ testlog a c
1599 []
1599 []
1600 (group
1600 (group
1601 (func
1601 (func
1602 ('symbol', '_matchfiles')
1602 ('symbol', '_matchfiles')
1603 (list
1603 (list
1604 (list
1604 (list
1605 (list
1605 (list
1606 ('string', 'r:')
1606 ('string', 'r:')
1607 ('string', 'd:relpath'))
1607 ('string', 'd:relpath'))
1608 ('string', 'p:a'))
1608 ('string', 'p:a'))
1609 ('string', 'p:c'))))
1609 ('string', 'p:c'))))
1610
1610
1611 Test multiple --include/--exclude/paths
1611 Test multiple --include/--exclude/paths
1612
1612
1613 $ testlog --include a --include e --exclude b --exclude e a e
1613 $ testlog --include a --include e --exclude b --exclude e a e
1614 []
1614 []
1615 (group
1615 (group
1616 (func
1616 (func
1617 ('symbol', '_matchfiles')
1617 ('symbol', '_matchfiles')
1618 (list
1618 (list
1619 (list
1619 (list
1620 (list
1620 (list
1621 (list
1621 (list
1622 (list
1622 (list
1623 (list
1623 (list
1624 (list
1624 (list
1625 ('string', 'r:')
1625 ('string', 'r:')
1626 ('string', 'd:relpath'))
1626 ('string', 'd:relpath'))
1627 ('string', 'p:a'))
1627 ('string', 'p:a'))
1628 ('string', 'p:e'))
1628 ('string', 'p:e'))
1629 ('string', 'i:a'))
1629 ('string', 'i:a'))
1630 ('string', 'i:e'))
1630 ('string', 'i:e'))
1631 ('string', 'x:b'))
1631 ('string', 'x:b'))
1632 ('string', 'x:e'))))
1632 ('string', 'x:e'))))
1633
1633
1634 Test glob expansion of pats
1634 Test glob expansion of pats
1635
1635
1636 $ expandglobs=`python -c "import mercurial.util; \
1636 $ expandglobs=`python -c "import mercurial.util; \
1637 > print mercurial.util.expandglobs and 'true' or 'false'"`
1637 > print mercurial.util.expandglobs and 'true' or 'false'"`
1638 $ if [ $expandglobs = "true" ]; then
1638 $ if [ $expandglobs = "true" ]; then
1639 > testlog 'a*';
1639 > testlog 'a*';
1640 > else
1640 > else
1641 > testlog a*;
1641 > testlog a*;
1642 > fi;
1642 > fi;
1643 []
1643 []
1644 (group
1644 (group
1645 (group
1645 (group
1646 (func
1646 (func
1647 ('symbol', 'filelog')
1647 ('symbol', 'filelog')
1648 ('string', 'aa'))))
1648 ('string', 'aa'))))
1649
1649
1650 Test --follow on a directory
1650 Test --follow on a directory
1651
1651
1652 $ testlog -f dir
1652 $ testlog -f dir
1653 abort: cannot follow file not in parent revision: "dir"
1653 abort: cannot follow file not in parent revision: "dir"
1654 abort: cannot follow file not in parent revision: "dir"
1654 abort: cannot follow file not in parent revision: "dir"
1655 abort: cannot follow file not in parent revision: "dir"
1655 abort: cannot follow file not in parent revision: "dir"
1656
1656
1657 Test --follow on file not in parent revision
1657 Test --follow on file not in parent revision
1658
1658
1659 $ testlog -f a
1659 $ testlog -f a
1660 abort: cannot follow file not in parent revision: "a"
1660 abort: cannot follow file not in parent revision: "a"
1661 abort: cannot follow file not in parent revision: "a"
1661 abort: cannot follow file not in parent revision: "a"
1662 abort: cannot follow file not in parent revision: "a"
1662 abort: cannot follow file not in parent revision: "a"
1663
1663
1664 Test --follow and patterns
1664 Test --follow and patterns
1665
1665
1666 $ testlog -f 'glob:*'
1666 $ testlog -f 'glob:*'
1667 abort: can only follow copies/renames for explicit filenames
1667 abort: can only follow copies/renames for explicit filenames
1668 abort: can only follow copies/renames for explicit filenames
1668 abort: can only follow copies/renames for explicit filenames
1669 abort: can only follow copies/renames for explicit filenames
1669 abort: can only follow copies/renames for explicit filenames
1670
1670
1671 Test --follow on a single rename
1671 Test --follow on a single rename
1672
1672
1673 $ hg up -q 2
1673 $ hg up -q 2
1674 $ testlog -f a
1674 $ testlog -f a
1675 []
1675 []
1676 (group
1676 (group
1677 (group
1677 (group
1678 (func
1678 (func
1679 ('symbol', 'follow')
1679 ('symbol', 'follow')
1680 ('string', 'a'))))
1680 ('string', 'a'))))
1681
1681
1682 Test --follow and multiple renames
1682 Test --follow and multiple renames
1683
1683
1684 $ hg up -q tip
1684 $ hg up -q tip
1685 $ testlog -f e
1685 $ testlog -f e
1686 []
1686 []
1687 (group
1687 (group
1688 (group
1688 (group
1689 (func
1689 (func
1690 ('symbol', 'follow')
1690 ('symbol', 'follow')
1691 ('string', 'e'))))
1691 ('string', 'e'))))
1692
1692
1693 Test --follow and multiple filelog heads
1693 Test --follow and multiple filelog heads
1694
1694
1695 $ hg up -q 2
1695 $ hg up -q 2
1696 $ testlog -f g
1696 $ testlog -f g
1697 []
1697 []
1698 (group
1698 (group
1699 (group
1699 (group
1700 (func
1700 (func
1701 ('symbol', 'follow')
1701 ('symbol', 'follow')
1702 ('string', 'g'))))
1702 ('string', 'g'))))
1703 $ cat log.nodes
1703 $ cat log.nodes
1704 nodetag 2
1704 nodetag 2
1705 nodetag 1
1705 nodetag 1
1706 nodetag 0
1706 nodetag 0
1707 $ hg up -q tip
1707 $ hg up -q tip
1708 $ testlog -f g
1708 $ testlog -f g
1709 []
1709 []
1710 (group
1710 (group
1711 (group
1711 (group
1712 (func
1712 (func
1713 ('symbol', 'follow')
1713 ('symbol', 'follow')
1714 ('string', 'g'))))
1714 ('string', 'g'))))
1715 $ cat log.nodes
1715 $ cat log.nodes
1716 nodetag 3
1716 nodetag 3
1717 nodetag 2
1717 nodetag 2
1718 nodetag 0
1718 nodetag 0
1719
1719
1720 Test --follow and multiple files
1720 Test --follow and multiple files
1721
1721
1722 $ testlog -f g e
1722 $ testlog -f g e
1723 []
1723 []
1724 (group
1724 (group
1725 (group
1725 (group
1726 (or
1726 (or
1727 (func
1727 (func
1728 ('symbol', 'follow')
1728 ('symbol', 'follow')
1729 ('string', 'g'))
1729 ('string', 'g'))
1730 (func
1730 (func
1731 ('symbol', 'follow')
1731 ('symbol', 'follow')
1732 ('string', 'e')))))
1732 ('string', 'e')))))
1733 $ cat log.nodes
1733 $ cat log.nodes
1734 nodetag 4
1734 nodetag 4
1735 nodetag 3
1735 nodetag 3
1736 nodetag 2
1736 nodetag 2
1737 nodetag 1
1737 nodetag 1
1738 nodetag 0
1738 nodetag 0
1739
1739
1740 Test --follow-first
1740 Test --follow-first
1741
1741
1742 $ hg up -q 3
1742 $ hg up -q 3
1743 $ echo ee > e
1743 $ echo ee > e
1744 $ hg ci -Am "add another e" e
1744 $ hg ci -Am "add another e" e
1745 created new head
1745 created new head
1746 $ hg merge --tool internal:other 4
1746 $ hg merge --tool internal:other 4
1747 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1747 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1748 (branch merge, don't forget to commit)
1748 (branch merge, don't forget to commit)
1749 $ echo merge > e
1749 $ echo merge > e
1750 $ hg ci -m "merge 5 and 4"
1750 $ hg ci -m "merge 5 and 4"
1751 $ testlog --follow-first
1751 $ testlog --follow-first
1752 []
1752 []
1753 (group
1753 (group
1754 (func
1754 (func
1755 ('symbol', '_firstancestors')
1755 ('symbol', '_firstancestors')
1756 ('symbol', '6')))
1756 ('symbol', '6')))
1757
1757
1758 Cannot compare with log --follow-first FILE as it never worked
1758 Cannot compare with log --follow-first FILE as it never worked
1759
1759
1760 $ hg log -G --print-revset --follow-first e
1760 $ hg log -G --print-revset --follow-first e
1761 []
1761 []
1762 (group
1762 (group
1763 (group
1763 (group
1764 (func
1764 (func
1765 ('symbol', '_followfirst')
1765 ('symbol', '_followfirst')
1766 ('string', 'e'))))
1766 ('string', 'e'))))
1767 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1767 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1768 @ 6 merge 5 and 4
1768 @ 6 merge 5 and 4
1769 |\
1769 |\
1770 o | 5 add another e
1770 o | 5 add another e
1771 | |
1771 | |
1772
1772
1773 Test --copies
1773 Test --copies
1774
1774
1775 $ hg log -G --copies --template "{rev} {desc|firstline} \
1775 $ hg log -G --copies --template "{rev} {desc|firstline} \
1776 > copies: {file_copies_switch}\n"
1776 > copies: {file_copies_switch}\n"
1777 @ 6 merge 5 and 4 copies:
1777 @ 6 merge 5 and 4 copies:
1778 |\
1778 |\
1779 | o 5 add another e copies:
1779 | o 5 add another e copies:
1780 | |
1780 | |
1781 o | 4 mv dir/b e copies: e (dir/b)
1781 o | 4 mv dir/b e copies: e (dir/b)
1782 |/
1782 |/
1783 o 3 mv a b; add d copies: b (a)g (f)
1783 o 3 mv a b; add d copies: b (a)g (f)
1784 |
1784 |
1785 o 2 mv b dir/b copies: dir/b (b)
1785 o 2 mv b dir/b copies: dir/b (b)
1786 |
1786 |
1787 o 1 copy a b copies: b (a)g (f)
1787 o 1 copy a b copies: b (a)g (f)
1788 |
1788 |
1789 o 0 add a copies:
1789 o 0 add a copies:
1790
1790
1791 Test "set:..." and parent revision
1791 Test "set:..." and parent revision
1792
1792
1793 $ hg up -q 4
1793 $ hg up -q 4
1794 $ testlog "set:copied()"
1794 $ testlog "set:copied()"
1795 []
1795 []
1796 (group
1796 (group
1797 (func
1797 (func
1798 ('symbol', '_matchfiles')
1798 ('symbol', '_matchfiles')
1799 (list
1799 (list
1800 (list
1800 (list
1801 ('string', 'r:')
1801 ('string', 'r:')
1802 ('string', 'd:relpath'))
1802 ('string', 'd:relpath'))
1803 ('string', 'p:set:copied()'))))
1803 ('string', 'p:set:copied()'))))
1804 $ testlog --include "set:copied()"
1804 $ testlog --include "set:copied()"
1805 []
1805 []
1806 (group
1806 (group
1807 (func
1807 (func
1808 ('symbol', '_matchfiles')
1808 ('symbol', '_matchfiles')
1809 (list
1809 (list
1810 (list
1810 (list
1811 ('string', 'r:')
1811 ('string', 'r:')
1812 ('string', 'd:relpath'))
1812 ('string', 'd:relpath'))
1813 ('string', 'i:set:copied()'))))
1813 ('string', 'i:set:copied()'))))
1814 $ testlog -r "sort(file('set:copied()'), -rev)"
1814 $ testlog -r "sort(file('set:copied()'), -rev)"
1815 ["sort(file('set:copied()'), -rev)"]
1815 ["sort(file('set:copied()'), -rev)"]
1816 []
1816 []
1817
1817
1818 Test --removed
1818 Test --removed
1819
1819
1820 $ testlog --removed
1820 $ testlog --removed
1821 []
1821 []
1822 []
1822 []
1823 $ testlog --removed a
1823 $ testlog --removed a
1824 []
1824 []
1825 (group
1825 (group
1826 (func
1826 (func
1827 ('symbol', '_matchfiles')
1827 ('symbol', '_matchfiles')
1828 (list
1828 (list
1829 (list
1829 (list
1830 ('string', 'r:')
1830 ('string', 'r:')
1831 ('string', 'd:relpath'))
1831 ('string', 'd:relpath'))
1832 ('string', 'p:a'))))
1832 ('string', 'p:a'))))
1833 $ testlog --removed --follow a
1833 $ testlog --removed --follow a
1834 abort: can only follow copies/renames for explicit filenames
1834 abort: can only follow copies/renames for explicit filenames
1835 abort: can only follow copies/renames for explicit filenames
1835 abort: can only follow copies/renames for explicit filenames
1836 abort: can only follow copies/renames for explicit filenames
1836 abort: can only follow copies/renames for explicit filenames
1837
1837
1838 Test --patch and --stat with --follow and --follow-first
1838 Test --patch and --stat with --follow and --follow-first
1839
1839
1840 $ hg up -q 3
1840 $ hg up -q 3
1841 $ hg log -G --git --patch b
1841 $ hg log -G --git --patch b
1842 o changeset: 1:216d4c92cf98
1842 o changeset: 1:216d4c92cf98
1843 | user: test
1843 | user: test
1844 | date: Thu Jan 01 00:00:00 1970 +0000
1844 | date: Thu Jan 01 00:00:00 1970 +0000
1845 | summary: copy a b
1845 | summary: copy a b
1846 |
1846 |
1847 | diff --git a/a b/b
1847 | diff --git a/a b/b
1848 | copy from a
1848 | copy from a
1849 | copy to b
1849 | copy to b
1850 |
1850 |
1851
1851
1852 $ hg log -G --git --stat b
1852 $ hg log -G --git --stat b
1853 o changeset: 1:216d4c92cf98
1853 o changeset: 1:216d4c92cf98
1854 | user: test
1854 | user: test
1855 | date: Thu Jan 01 00:00:00 1970 +0000
1855 | date: Thu Jan 01 00:00:00 1970 +0000
1856 | summary: copy a b
1856 | summary: copy a b
1857 |
1857 |
1858 | a | 0
1858 | a | 0
1859 | 1 files changed, 0 insertions(+), 0 deletions(-)
1859 | 1 files changed, 0 insertions(+), 0 deletions(-)
1860 |
1860 |
1861
1861
1862 $ hg log -G --git --patch --follow b
1862 $ hg log -G --git --patch --follow b
1863 o changeset: 1:216d4c92cf98
1863 o changeset: 1:216d4c92cf98
1864 | user: test
1864 | user: test
1865 | date: Thu Jan 01 00:00:00 1970 +0000
1865 | date: Thu Jan 01 00:00:00 1970 +0000
1866 | summary: copy a b
1866 | summary: copy a b
1867 |
1867 |
1868 | diff --git a/a b/b
1868 | diff --git a/a b/b
1869 | copy from a
1869 | copy from a
1870 | copy to b
1870 | copy to b
1871 |
1871 |
1872 o changeset: 0:f8035bb17114
1872 o changeset: 0:f8035bb17114
1873 user: test
1873 user: test
1874 date: Thu Jan 01 00:00:00 1970 +0000
1874 date: Thu Jan 01 00:00:00 1970 +0000
1875 summary: add a
1875 summary: add a
1876
1876
1877 diff --git a/a b/a
1877 diff --git a/a b/a
1878 new file mode 100644
1878 new file mode 100644
1879 --- /dev/null
1879 --- /dev/null
1880 +++ b/a
1880 +++ b/a
1881 @@ -0,0 +1,1 @@
1881 @@ -0,0 +1,1 @@
1882 +a
1882 +a
1883
1883
1884
1884
1885 $ hg log -G --git --stat --follow b
1885 $ hg log -G --git --stat --follow b
1886 o changeset: 1:216d4c92cf98
1886 o changeset: 1:216d4c92cf98
1887 | user: test
1887 | user: test
1888 | date: Thu Jan 01 00:00:00 1970 +0000
1888 | date: Thu Jan 01 00:00:00 1970 +0000
1889 | summary: copy a b
1889 | summary: copy a b
1890 |
1890 |
1891 | a | 0
1891 | a | 0
1892 | 1 files changed, 0 insertions(+), 0 deletions(-)
1892 | 1 files changed, 0 insertions(+), 0 deletions(-)
1893 |
1893 |
1894 o changeset: 0:f8035bb17114
1894 o changeset: 0:f8035bb17114
1895 user: test
1895 user: test
1896 date: Thu Jan 01 00:00:00 1970 +0000
1896 date: Thu Jan 01 00:00:00 1970 +0000
1897 summary: add a
1897 summary: add a
1898
1898
1899 a | 1 +
1899 a | 1 +
1900 1 files changed, 1 insertions(+), 0 deletions(-)
1900 1 files changed, 1 insertions(+), 0 deletions(-)
1901
1901
1902
1902
1903 $ hg up -q 6
1903 $ hg up -q 6
1904 $ hg log -G --git --patch --follow-first e
1904 $ hg log -G --git --patch --follow-first e
1905 @ changeset: 6:fc281d8ff18d
1905 @ changeset: 6:fc281d8ff18d
1906 |\ tag: tip
1906 |\ tag: tip
1907 | | parent: 5:99b31f1c2782
1907 | | parent: 5:99b31f1c2782
1908 | | parent: 4:17d952250a9d
1908 | | parent: 4:17d952250a9d
1909 | | user: test
1909 | | user: test
1910 | | date: Thu Jan 01 00:00:00 1970 +0000
1910 | | date: Thu Jan 01 00:00:00 1970 +0000
1911 | | summary: merge 5 and 4
1911 | | summary: merge 5 and 4
1912 | |
1912 | |
1913 | | diff --git a/e b/e
1913 | | diff --git a/e b/e
1914 | | --- a/e
1914 | | --- a/e
1915 | | +++ b/e
1915 | | +++ b/e
1916 | | @@ -1,1 +1,1 @@
1916 | | @@ -1,1 +1,1 @@
1917 | | -ee
1917 | | -ee
1918 | | +merge
1918 | | +merge
1919 | |
1919 | |
1920 o | changeset: 5:99b31f1c2782
1920 o | changeset: 5:99b31f1c2782
1921 | | parent: 3:5918b8d165d1
1921 | | parent: 3:5918b8d165d1
1922 | | user: test
1922 | | user: test
1923 | | date: Thu Jan 01 00:00:00 1970 +0000
1923 | | date: Thu Jan 01 00:00:00 1970 +0000
1924 | | summary: add another e
1924 | | summary: add another e
1925 | |
1925 | |
1926 | | diff --git a/e b/e
1926 | | diff --git a/e b/e
1927 | | new file mode 100644
1927 | | new file mode 100644
1928 | | --- /dev/null
1928 | | --- /dev/null
1929 | | +++ b/e
1929 | | +++ b/e
1930 | | @@ -0,0 +1,1 @@
1930 | | @@ -0,0 +1,1 @@
1931 | | +ee
1931 | | +ee
1932 | |
1932 | |
1933
1933
1934 Test old-style --rev
1934 Test old-style --rev
1935
1935
1936 $ hg tag 'foo-bar'
1936 $ hg tag 'foo-bar'
1937 $ testlog -r 'foo-bar'
1937 $ testlog -r 'foo-bar'
1938 ['foo-bar']
1938 ['foo-bar']
1939 []
1939 []
1940
1940
1941 Test --follow and forward --rev
1941 Test --follow and forward --rev
1942
1942
1943 $ hg up -q 6
1943 $ hg up -q 6
1944 $ echo g > g
1944 $ echo g > g
1945 $ hg ci -Am 'add g' g
1945 $ hg ci -Am 'add g' g
1946 created new head
1946 created new head
1947 $ hg up -q 2
1947 $ hg up -q 2
1948 $ hg log -G --template "{rev} {desc|firstline}\n"
1948 $ hg log -G --template "{rev} {desc|firstline}\n"
1949 o 8 add g
1949 o 8 add g
1950 |
1950 |
1951 | o 7 Added tag foo-bar for changeset fc281d8ff18d
1951 | o 7 Added tag foo-bar for changeset fc281d8ff18d
1952 |/
1952 |/
1953 o 6 merge 5 and 4
1953 o 6 merge 5 and 4
1954 |\
1954 |\
1955 | o 5 add another e
1955 | o 5 add another e
1956 | |
1956 | |
1957 o | 4 mv dir/b e
1957 o | 4 mv dir/b e
1958 |/
1958 |/
1959 o 3 mv a b; add d
1959 o 3 mv a b; add d
1960 |
1960 |
1961 @ 2 mv b dir/b
1961 @ 2 mv b dir/b
1962 |
1962 |
1963 o 1 copy a b
1963 o 1 copy a b
1964 |
1964 |
1965 o 0 add a
1965 o 0 add a
1966
1966
1967 $ testlog --follow -r6 -r8 -r5 -r7 -r4
1967 $ testlog --follow -r6 -r8 -r5 -r7 -r4
1968 ['6', '8', '5', '7', '4']
1968 ['6', '8', '5', '7', '4']
1969 (group
1969 (group
1970 (func
1970 (func
1971 ('symbol', 'descendants')
1971 ('symbol', 'descendants')
1972 ('symbol', '6')))
1972 ('symbol', '6')))
1973 --- log.nodes * (glob)
1973 --- log.nodes * (glob)
1974 +++ glog.nodes * (glob)
1974 +++ glog.nodes * (glob)
1975 @@ -1,3 +1,3 @@
1975 @@ -1,3 +1,3 @@
1976 -nodetag 6
1976 -nodetag 6
1977 nodetag 8
1977 nodetag 8
1978 nodetag 7
1978 nodetag 7
1979 +nodetag 6
1979 +nodetag 6
1980
1980
1981 Test --follow-first and forward --rev
1981 Test --follow-first and forward --rev
1982
1982
1983 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
1983 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
1984 ['6', '8', '5', '7', '4']
1984 ['6', '8', '5', '7', '4']
1985 (group
1985 (group
1986 (func
1986 (func
1987 ('symbol', '_firstdescendants')
1987 ('symbol', '_firstdescendants')
1988 ('symbol', '6')))
1988 ('symbol', '6')))
1989 --- log.nodes * (glob)
1989 --- log.nodes * (glob)
1990 +++ glog.nodes * (glob)
1990 +++ glog.nodes * (glob)
1991 @@ -1,3 +1,3 @@
1991 @@ -1,3 +1,3 @@
1992 -nodetag 6
1992 -nodetag 6
1993 nodetag 8
1993 nodetag 8
1994 nodetag 7
1994 nodetag 7
1995 +nodetag 6
1995 +nodetag 6
1996
1996
1997 Test --follow and backward --rev
1997 Test --follow and backward --rev
1998
1998
1999 $ testlog --follow -r6 -r5 -r7 -r8 -r4
1999 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2000 ['6', '5', '7', '8', '4']
2000 ['6', '5', '7', '8', '4']
2001 (group
2001 (group
2002 (func
2002 (func
2003 ('symbol', 'ancestors')
2003 ('symbol', 'ancestors')
2004 ('symbol', '6')))
2004 ('symbol', '6')))
2005
2005
2006 Test --follow-first and backward --rev
2006 Test --follow-first and backward --rev
2007
2007
2008 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2008 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2009 ['6', '5', '7', '8', '4']
2009 ['6', '5', '7', '8', '4']
2010 (group
2010 (group
2011 (func
2011 (func
2012 ('symbol', '_firstancestors')
2012 ('symbol', '_firstancestors')
2013 ('symbol', '6')))
2013 ('symbol', '6')))
2014
2014
2015 Test subdir
2015 Test subdir
2016
2016
2017 $ hg up -q 3
2017 $ hg up -q 3
2018 $ cd dir
2018 $ cd dir
2019 $ testlog .
2019 $ testlog .
2020 []
2020 []
2021 (group
2021 (group
2022 (func
2022 (func
2023 ('symbol', '_matchfiles')
2023 ('symbol', '_matchfiles')
2024 (list
2024 (list
2025 (list
2025 (list
2026 ('string', 'r:')
2026 ('string', 'r:')
2027 ('string', 'd:relpath'))
2027 ('string', 'd:relpath'))
2028 ('string', 'p:.'))))
2028 ('string', 'p:.'))))
2029 $ testlog ../b
2029 $ testlog ../b
2030 []
2030 []
2031 (group
2031 (group
2032 (group
2032 (group
2033 (func
2033 (func
2034 ('symbol', 'filelog')
2034 ('symbol', 'filelog')
2035 ('string', '../b'))))
2035 ('string', '../b'))))
2036 $ testlog -f ../b
2036 $ testlog -f ../b
2037 []
2037 []
2038 (group
2038 (group
2039 (group
2039 (group
2040 (func
2040 (func
2041 ('symbol', 'follow')
2041 ('symbol', 'follow')
2042 ('string', 'b'))))
2042 ('string', 'b'))))
2043 $ cd ..
2043 $ cd ..
2044
2044
2045 Test --hidden
2045 Test --hidden
2046
2046
2047 $ cat > $HGTMP/testhidden.py << EOF
2047 $ cat > $HGTMP/testhidden.py << EOF
2048 > def reposetup(ui, repo):
2048 > def reposetup(ui, repo):
2049 > for line in repo.opener('hidden'):
2049 > for line in repo.opener('hidden'):
2050 > ctx = repo[line.strip()]
2050 > ctx = repo[line.strip()]
2051 > repo.changelog.hiddenrevs.add(ctx.rev())
2051 > repo.changelog.hiddenrevs.add(ctx.rev())
2052 > EOF
2052 > EOF
2053 $ echo '[extensions]' >> .hg/hgrc
2053 $ echo '[extensions]' >> .hg/hgrc
2054 $ echo "hidden=$HGTMP/testhidden.py" >> .hg/hgrc
2054 $ echo "hidden=$HGTMP/testhidden.py" >> .hg/hgrc
2055 $ hg id --debug -i -r 0 > .hg/hidden
2055 $ hg id --debug -i -r 0 > .hg/hidden
2056 $ testlog
2056 $ testlog
2057 []
2057 []
2058 []
2058 []
2059 $ testlog --hidden
2059 $ testlog --hidden
2060 []
2060 []
2061 []
2061 []
2062
2062
2063 A template without trailing newline should do something sane
2064
2065 $ hg glog -r ::2 --template '{rev} {desc}'
2066 o 2 mv b dir/b
2067 |
2068 o 1 copy a b
2069 |
2070
2071 Extra newlines must be preserved
2072
2073 $ hg glog -r ::2 --template '\n{rev} {desc}\n\n'
2074 o
2075 | 2 mv b dir/b
2076 |
2077 o
2078 | 1 copy a b
2079 |
2080
2081 The almost-empty template should do something sane too ...
2082
2083 $ hg glog -r ::2 --template '\n'
2084 o
2085 |
2086 o
2087 |
2088
2063 $ cd ..
2089 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now