##// END OF EJS Templates
graphmod: partial edge styling...
Martijn Pieters -
r29134:8d5584d8 default
parent child Browse files
Show More
@@ -1,664 +1,682 b''
1 # Revision graph generator for Mercurial
1 # Revision graph generator for Mercurial
2 #
2 #
3 # Copyright 2008 Dirkjan Ochtman <dirkjan@ochtman.nl>
3 # Copyright 2008 Dirkjan Ochtman <dirkjan@ochtman.nl>
4 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
5 #
5 #
6 # This software may be used and distributed according to the terms of the
6 # This software may be used and distributed according to the terms of the
7 # GNU General Public License version 2 or any later version.
7 # GNU General Public License version 2 or any later version.
8
8
9 """supports walking the history as DAGs suitable for graphical output
9 """supports walking the history as DAGs suitable for graphical output
10
10
11 The most basic format we use is that of::
11 The most basic format we use is that of::
12
12
13 (id, type, data, [parentids])
13 (id, type, data, [parentids])
14
14
15 The node and parent ids are arbitrary integers which identify a node in the
15 The node and parent ids are arbitrary integers which identify a node in the
16 context of the graph returned. Type is a constant specifying the node type.
16 context of the graph returned. Type is a constant specifying the node type.
17 Data depends on type.
17 Data depends on type.
18 """
18 """
19
19
20 from __future__ import absolute_import
20 from __future__ import absolute_import
21
21
22 import heapq
22 import heapq
23
23
24 from .node import nullrev
24 from .node import nullrev
25 from . import (
25 from . import (
26 revset,
26 revset,
27 util,
27 util,
28 )
28 )
29
29
30 CHANGESET = 'C'
30 CHANGESET = 'C'
31 PARENT = 'P'
31 PARENT = 'P'
32 GRANDPARENT = 'G'
32 GRANDPARENT = 'G'
33 MISSINGPARENT = 'M'
33 MISSINGPARENT = 'M'
34 # Style of line to draw. None signals a line that ends and is removed at this
34 # Style of line to draw. None signals a line that ends and is removed at this
35 # point.
35 # point. A number prefix means only the last N characters of the current block
36 # will use that style, the rest will use the PARENT style. Add a - sign
37 # (so making N negative) and all but the first N characters use that style.
36 EDGES = {PARENT: '|', GRANDPARENT: ':', MISSINGPARENT: None}
38 EDGES = {PARENT: '|', GRANDPARENT: ':', MISSINGPARENT: None}
37
39
38 def groupbranchiter(revs, parentsfunc, firstbranch=()):
40 def groupbranchiter(revs, parentsfunc, firstbranch=()):
39 """Yield revisions from heads to roots one (topo) branch at a time.
41 """Yield revisions from heads to roots one (topo) branch at a time.
40
42
41 This function aims to be used by a graph generator that wishes to minimize
43 This function aims to be used by a graph generator that wishes to minimize
42 the number of parallel branches and their interleaving.
44 the number of parallel branches and their interleaving.
43
45
44 Example iteration order (numbers show the "true" order in a changelog):
46 Example iteration order (numbers show the "true" order in a changelog):
45
47
46 o 4
48 o 4
47 |
49 |
48 o 1
50 o 1
49 |
51 |
50 | o 3
52 | o 3
51 | |
53 | |
52 | o 2
54 | o 2
53 |/
55 |/
54 o 0
56 o 0
55
57
56 Note that the ancestors of merges are understood by the current
58 Note that the ancestors of merges are understood by the current
57 algorithm to be on the same branch. This means no reordering will
59 algorithm to be on the same branch. This means no reordering will
58 occur behind a merge.
60 occur behind a merge.
59 """
61 """
60
62
61 ### Quick summary of the algorithm
63 ### Quick summary of the algorithm
62 #
64 #
63 # This function is based around a "retention" principle. We keep revisions
65 # This function is based around a "retention" principle. We keep revisions
64 # in memory until we are ready to emit a whole branch that immediately
66 # in memory until we are ready to emit a whole branch that immediately
65 # "merges" into an existing one. This reduces the number of parallel
67 # "merges" into an existing one. This reduces the number of parallel
66 # branches with interleaved revisions.
68 # branches with interleaved revisions.
67 #
69 #
68 # During iteration revs are split into two groups:
70 # During iteration revs are split into two groups:
69 # A) revision already emitted
71 # A) revision already emitted
70 # B) revision in "retention". They are stored as different subgroups.
72 # B) revision in "retention". They are stored as different subgroups.
71 #
73 #
72 # for each REV, we do the following logic:
74 # for each REV, we do the following logic:
73 #
75 #
74 # 1) if REV is a parent of (A), we will emit it. If there is a
76 # 1) if REV is a parent of (A), we will emit it. If there is a
75 # retention group ((B) above) that is blocked on REV being
77 # retention group ((B) above) that is blocked on REV being
76 # available, we emit all the revisions out of that retention
78 # available, we emit all the revisions out of that retention
77 # group first.
79 # group first.
78 #
80 #
79 # 2) else, we'll search for a subgroup in (B) awaiting for REV to be
81 # 2) else, we'll search for a subgroup in (B) awaiting for REV to be
80 # available, if such subgroup exist, we add REV to it and the subgroup is
82 # available, if such subgroup exist, we add REV to it and the subgroup is
81 # now awaiting for REV.parents() to be available.
83 # now awaiting for REV.parents() to be available.
82 #
84 #
83 # 3) finally if no such group existed in (B), we create a new subgroup.
85 # 3) finally if no such group existed in (B), we create a new subgroup.
84 #
86 #
85 #
87 #
86 # To bootstrap the algorithm, we emit the tipmost revision (which
88 # To bootstrap the algorithm, we emit the tipmost revision (which
87 # puts it in group (A) from above).
89 # puts it in group (A) from above).
88
90
89 revs.sort(reverse=True)
91 revs.sort(reverse=True)
90
92
91 # Set of parents of revision that have been emitted. They can be considered
93 # Set of parents of revision that have been emitted. They can be considered
92 # unblocked as the graph generator is already aware of them so there is no
94 # unblocked as the graph generator is already aware of them so there is no
93 # need to delay the revisions that reference them.
95 # need to delay the revisions that reference them.
94 #
96 #
95 # If someone wants to prioritize a branch over the others, pre-filling this
97 # If someone wants to prioritize a branch over the others, pre-filling this
96 # set will force all other branches to wait until this branch is ready to be
98 # set will force all other branches to wait until this branch is ready to be
97 # emitted.
99 # emitted.
98 unblocked = set(firstbranch)
100 unblocked = set(firstbranch)
99
101
100 # list of groups waiting to be displayed, each group is defined by:
102 # list of groups waiting to be displayed, each group is defined by:
101 #
103 #
102 # (revs: lists of revs waiting to be displayed,
104 # (revs: lists of revs waiting to be displayed,
103 # blocked: set of that cannot be displayed before those in 'revs')
105 # blocked: set of that cannot be displayed before those in 'revs')
104 #
106 #
105 # The second value ('blocked') correspond to parents of any revision in the
107 # The second value ('blocked') correspond to parents of any revision in the
106 # group ('revs') that is not itself contained in the group. The main idea
108 # group ('revs') that is not itself contained in the group. The main idea
107 # of this algorithm is to delay as much as possible the emission of any
109 # of this algorithm is to delay as much as possible the emission of any
108 # revision. This means waiting for the moment we are about to display
110 # revision. This means waiting for the moment we are about to display
109 # these parents to display the revs in a group.
111 # these parents to display the revs in a group.
110 #
112 #
111 # This first implementation is smart until it encounters a merge: it will
113 # This first implementation is smart until it encounters a merge: it will
112 # emit revs as soon as any parent is about to be emitted and can grow an
114 # emit revs as soon as any parent is about to be emitted and can grow an
113 # arbitrary number of revs in 'blocked'. In practice this mean we properly
115 # arbitrary number of revs in 'blocked'. In practice this mean we properly
114 # retains new branches but gives up on any special ordering for ancestors
116 # retains new branches but gives up on any special ordering for ancestors
115 # of merges. The implementation can be improved to handle this better.
117 # of merges. The implementation can be improved to handle this better.
116 #
118 #
117 # The first subgroup is special. It corresponds to all the revision that
119 # The first subgroup is special. It corresponds to all the revision that
118 # were already emitted. The 'revs' lists is expected to be empty and the
120 # were already emitted. The 'revs' lists is expected to be empty and the
119 # 'blocked' set contains the parents revisions of already emitted revision.
121 # 'blocked' set contains the parents revisions of already emitted revision.
120 #
122 #
121 # You could pre-seed the <parents> set of groups[0] to a specific
123 # You could pre-seed the <parents> set of groups[0] to a specific
122 # changesets to select what the first emitted branch should be.
124 # changesets to select what the first emitted branch should be.
123 groups = [([], unblocked)]
125 groups = [([], unblocked)]
124 pendingheap = []
126 pendingheap = []
125 pendingset = set()
127 pendingset = set()
126
128
127 heapq.heapify(pendingheap)
129 heapq.heapify(pendingheap)
128 heappop = heapq.heappop
130 heappop = heapq.heappop
129 heappush = heapq.heappush
131 heappush = heapq.heappush
130 for currentrev in revs:
132 for currentrev in revs:
131 # Heap works with smallest element, we want highest so we invert
133 # Heap works with smallest element, we want highest so we invert
132 if currentrev not in pendingset:
134 if currentrev not in pendingset:
133 heappush(pendingheap, -currentrev)
135 heappush(pendingheap, -currentrev)
134 pendingset.add(currentrev)
136 pendingset.add(currentrev)
135 # iterates on pending rev until after the current rev have been
137 # iterates on pending rev until after the current rev have been
136 # processed.
138 # processed.
137 rev = None
139 rev = None
138 while rev != currentrev:
140 while rev != currentrev:
139 rev = -heappop(pendingheap)
141 rev = -heappop(pendingheap)
140 pendingset.remove(rev)
142 pendingset.remove(rev)
141
143
142 # Seek for a subgroup blocked, waiting for the current revision.
144 # Seek for a subgroup blocked, waiting for the current revision.
143 matching = [i for i, g in enumerate(groups) if rev in g[1]]
145 matching = [i for i, g in enumerate(groups) if rev in g[1]]
144
146
145 if matching:
147 if matching:
146 # The main idea is to gather together all sets that are blocked
148 # The main idea is to gather together all sets that are blocked
147 # on the same revision.
149 # on the same revision.
148 #
150 #
149 # Groups are merged when a common blocking ancestor is
151 # Groups are merged when a common blocking ancestor is
150 # observed. For example, given two groups:
152 # observed. For example, given two groups:
151 #
153 #
152 # revs [5, 4] waiting for 1
154 # revs [5, 4] waiting for 1
153 # revs [3, 2] waiting for 1
155 # revs [3, 2] waiting for 1
154 #
156 #
155 # These two groups will be merged when we process
157 # These two groups will be merged when we process
156 # 1. In theory, we could have merged the groups when
158 # 1. In theory, we could have merged the groups when
157 # we added 2 to the group it is now in (we could have
159 # we added 2 to the group it is now in (we could have
158 # noticed the groups were both blocked on 1 then), but
160 # noticed the groups were both blocked on 1 then), but
159 # the way it works now makes the algorithm simpler.
161 # the way it works now makes the algorithm simpler.
160 #
162 #
161 # We also always keep the oldest subgroup first. We can
163 # We also always keep the oldest subgroup first. We can
162 # probably improve the behavior by having the longest set
164 # probably improve the behavior by having the longest set
163 # first. That way, graph algorithms could minimise the length
165 # first. That way, graph algorithms could minimise the length
164 # of parallel lines their drawing. This is currently not done.
166 # of parallel lines their drawing. This is currently not done.
165 targetidx = matching.pop(0)
167 targetidx = matching.pop(0)
166 trevs, tparents = groups[targetidx]
168 trevs, tparents = groups[targetidx]
167 for i in matching:
169 for i in matching:
168 gr = groups[i]
170 gr = groups[i]
169 trevs.extend(gr[0])
171 trevs.extend(gr[0])
170 tparents |= gr[1]
172 tparents |= gr[1]
171 # delete all merged subgroups (except the one we kept)
173 # delete all merged subgroups (except the one we kept)
172 # (starting from the last subgroup for performance and
174 # (starting from the last subgroup for performance and
173 # sanity reasons)
175 # sanity reasons)
174 for i in reversed(matching):
176 for i in reversed(matching):
175 del groups[i]
177 del groups[i]
176 else:
178 else:
177 # This is a new head. We create a new subgroup for it.
179 # This is a new head. We create a new subgroup for it.
178 targetidx = len(groups)
180 targetidx = len(groups)
179 groups.append(([], set([rev])))
181 groups.append(([], set([rev])))
180
182
181 gr = groups[targetidx]
183 gr = groups[targetidx]
182
184
183 # We now add the current nodes to this subgroups. This is done
185 # We now add the current nodes to this subgroups. This is done
184 # after the subgroup merging because all elements from a subgroup
186 # after the subgroup merging because all elements from a subgroup
185 # that relied on this rev must precede it.
187 # that relied on this rev must precede it.
186 #
188 #
187 # we also update the <parents> set to include the parents of the
189 # we also update the <parents> set to include the parents of the
188 # new nodes.
190 # new nodes.
189 if rev == currentrev: # only display stuff in rev
191 if rev == currentrev: # only display stuff in rev
190 gr[0].append(rev)
192 gr[0].append(rev)
191 gr[1].remove(rev)
193 gr[1].remove(rev)
192 parents = [p for p in parentsfunc(rev) if p > nullrev]
194 parents = [p for p in parentsfunc(rev) if p > nullrev]
193 gr[1].update(parents)
195 gr[1].update(parents)
194 for p in parents:
196 for p in parents:
195 if p not in pendingset:
197 if p not in pendingset:
196 pendingset.add(p)
198 pendingset.add(p)
197 heappush(pendingheap, -p)
199 heappush(pendingheap, -p)
198
200
199 # Look for a subgroup to display
201 # Look for a subgroup to display
200 #
202 #
201 # When unblocked is empty (if clause), we were not waiting for any
203 # When unblocked is empty (if clause), we were not waiting for any
202 # revisions during the first iteration (if no priority was given) or
204 # revisions during the first iteration (if no priority was given) or
203 # if we emitted a whole disconnected set of the graph (reached a
205 # if we emitted a whole disconnected set of the graph (reached a
204 # root). In that case we arbitrarily take the oldest known
206 # root). In that case we arbitrarily take the oldest known
205 # subgroup. The heuristic could probably be better.
207 # subgroup. The heuristic could probably be better.
206 #
208 #
207 # Otherwise (elif clause) if the subgroup is blocked on
209 # Otherwise (elif clause) if the subgroup is blocked on
208 # a revision we just emitted, we can safely emit it as
210 # a revision we just emitted, we can safely emit it as
209 # well.
211 # well.
210 if not unblocked:
212 if not unblocked:
211 if len(groups) > 1: # display other subset
213 if len(groups) > 1: # display other subset
212 targetidx = 1
214 targetidx = 1
213 gr = groups[1]
215 gr = groups[1]
214 elif not gr[1] & unblocked:
216 elif not gr[1] & unblocked:
215 gr = None
217 gr = None
216
218
217 if gr is not None:
219 if gr is not None:
218 # update the set of awaited revisions with the one from the
220 # update the set of awaited revisions with the one from the
219 # subgroup
221 # subgroup
220 unblocked |= gr[1]
222 unblocked |= gr[1]
221 # output all revisions in the subgroup
223 # output all revisions in the subgroup
222 for r in gr[0]:
224 for r in gr[0]:
223 yield r
225 yield r
224 # delete the subgroup that you just output
226 # delete the subgroup that you just output
225 # unless it is groups[0] in which case you just empty it.
227 # unless it is groups[0] in which case you just empty it.
226 if targetidx:
228 if targetidx:
227 del groups[targetidx]
229 del groups[targetidx]
228 else:
230 else:
229 gr[0][:] = []
231 gr[0][:] = []
230 # Check if we have some subgroup waiting for revisions we are not going to
232 # Check if we have some subgroup waiting for revisions we are not going to
231 # iterate over
233 # iterate over
232 for g in groups:
234 for g in groups:
233 for r in g[0]:
235 for r in g[0]:
234 yield r
236 yield r
235
237
236 def dagwalker(repo, revs):
238 def dagwalker(repo, revs):
237 """cset DAG generator yielding (id, CHANGESET, ctx, [parentinfo]) tuples
239 """cset DAG generator yielding (id, CHANGESET, ctx, [parentinfo]) tuples
238
240
239 This generator function walks through revisions (which should be ordered
241 This generator function walks through revisions (which should be ordered
240 from bigger to lower). It returns a tuple for each node.
242 from bigger to lower). It returns a tuple for each node.
241
243
242 Each parentinfo entry is a tuple with (edgetype, parentid), where edgetype
244 Each parentinfo entry is a tuple with (edgetype, parentid), where edgetype
243 is one of PARENT, GRANDPARENT or MISSINGPARENT. The node and parent ids
245 is one of PARENT, GRANDPARENT or MISSINGPARENT. The node and parent ids
244 are arbitrary integers which identify a node in the context of the graph
246 are arbitrary integers which identify a node in the context of the graph
245 returned.
247 returned.
246
248
247 """
249 """
248 if not revs:
250 if not revs:
249 return
251 return
250
252
251 gpcache = {}
253 gpcache = {}
252
254
253 if repo.ui.configbool('experimental', 'graph-group-branches', False):
255 if repo.ui.configbool('experimental', 'graph-group-branches', False):
254 firstbranch = ()
256 firstbranch = ()
255 firstbranchrevset = repo.ui.config(
257 firstbranchrevset = repo.ui.config(
256 'experimental', 'graph-group-branches.firstbranch', '')
258 'experimental', 'graph-group-branches.firstbranch', '')
257 if firstbranchrevset:
259 if firstbranchrevset:
258 firstbranch = repo.revs(firstbranchrevset)
260 firstbranch = repo.revs(firstbranchrevset)
259 parentrevs = repo.changelog.parentrevs
261 parentrevs = repo.changelog.parentrevs
260 revs = groupbranchiter(revs, parentrevs, firstbranch)
262 revs = groupbranchiter(revs, parentrevs, firstbranch)
261 revs = revset.baseset(revs)
263 revs = revset.baseset(revs)
262
264
263 for rev in revs:
265 for rev in revs:
264 ctx = repo[rev]
266 ctx = repo[rev]
265 # partition into parents in the rev set and missing parents, then
267 # partition into parents in the rev set and missing parents, then
266 # augment the lists with markers, to inform graph drawing code about
268 # augment the lists with markers, to inform graph drawing code about
267 # what kind of edge to draw between nodes.
269 # what kind of edge to draw between nodes.
268 pset = set(p.rev() for p in ctx.parents() if p.rev() in revs)
270 pset = set(p.rev() for p in ctx.parents() if p.rev() in revs)
269 mpars = [p.rev() for p in ctx.parents()
271 mpars = [p.rev() for p in ctx.parents()
270 if p.rev() != nullrev and p.rev() not in pset]
272 if p.rev() != nullrev and p.rev() not in pset]
271 parents = [(PARENT, p) for p in sorted(pset)]
273 parents = [(PARENT, p) for p in sorted(pset)]
272
274
273 for mpar in mpars:
275 for mpar in mpars:
274 gp = gpcache.get(mpar)
276 gp = gpcache.get(mpar)
275 if gp is None:
277 if gp is None:
276 # precompute slow query as we know reachableroots() goes
278 # precompute slow query as we know reachableroots() goes
277 # through all revs (issue4782)
279 # through all revs (issue4782)
278 if not isinstance(revs, revset.baseset):
280 if not isinstance(revs, revset.baseset):
279 revs = revset.baseset(revs)
281 revs = revset.baseset(revs)
280 gp = gpcache[mpar] = sorted(set(revset.reachableroots(
282 gp = gpcache[mpar] = sorted(set(revset.reachableroots(
281 repo, revs, [mpar])))
283 repo, revs, [mpar])))
282 if not gp:
284 if not gp:
283 parents.append((MISSINGPARENT, mpar))
285 parents.append((MISSINGPARENT, mpar))
284 pset.add(mpar)
286 pset.add(mpar)
285 else:
287 else:
286 parents.extend((GRANDPARENT, g) for g in gp if g not in pset)
288 parents.extend((GRANDPARENT, g) for g in gp if g not in pset)
287 pset.update(gp)
289 pset.update(gp)
288
290
289 yield (ctx.rev(), CHANGESET, ctx, parents)
291 yield (ctx.rev(), CHANGESET, ctx, parents)
290
292
291 def nodes(repo, nodes):
293 def nodes(repo, nodes):
292 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
294 """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
293
295
294 This generator function walks the given nodes. It only returns parents
296 This generator function walks the given nodes. It only returns parents
295 that are in nodes, too.
297 that are in nodes, too.
296 """
298 """
297 include = set(nodes)
299 include = set(nodes)
298 for node in nodes:
300 for node in nodes:
299 ctx = repo[node]
301 ctx = repo[node]
300 parents = set((PARENT, p.rev()) for p in ctx.parents()
302 parents = set((PARENT, p.rev()) for p in ctx.parents()
301 if p.node() in include)
303 if p.node() in include)
302 yield (ctx.rev(), CHANGESET, ctx, sorted(parents))
304 yield (ctx.rev(), CHANGESET, ctx, sorted(parents))
303
305
304 def colored(dag, repo):
306 def colored(dag, repo):
305 """annotates a DAG with colored edge information
307 """annotates a DAG with colored edge information
306
308
307 For each DAG node this function emits tuples::
309 For each DAG node this function emits tuples::
308
310
309 (id, type, data, (col, color), [(col, nextcol, color)])
311 (id, type, data, (col, color), [(col, nextcol, color)])
310
312
311 with the following new elements:
313 with the following new elements:
312
314
313 - Tuple (col, color) with column and color index for the current node
315 - Tuple (col, color) with column and color index for the current node
314 - A list of tuples indicating the edges between the current node and its
316 - A list of tuples indicating the edges between the current node and its
315 parents.
317 parents.
316 """
318 """
317 seen = []
319 seen = []
318 colors = {}
320 colors = {}
319 newcolor = 1
321 newcolor = 1
320 config = {}
322 config = {}
321
323
322 for key, val in repo.ui.configitems('graph'):
324 for key, val in repo.ui.configitems('graph'):
323 if '.' in key:
325 if '.' in key:
324 branch, setting = key.rsplit('.', 1)
326 branch, setting = key.rsplit('.', 1)
325 # Validation
327 # Validation
326 if setting == "width" and val.isdigit():
328 if setting == "width" and val.isdigit():
327 config.setdefault(branch, {})[setting] = int(val)
329 config.setdefault(branch, {})[setting] = int(val)
328 elif setting == "color" and val.isalnum():
330 elif setting == "color" and val.isalnum():
329 config.setdefault(branch, {})[setting] = val
331 config.setdefault(branch, {})[setting] = val
330
332
331 if config:
333 if config:
332 getconf = util.lrucachefunc(
334 getconf = util.lrucachefunc(
333 lambda rev: config.get(repo[rev].branch(), {}))
335 lambda rev: config.get(repo[rev].branch(), {}))
334 else:
336 else:
335 getconf = lambda rev: {}
337 getconf = lambda rev: {}
336
338
337 for (cur, type, data, parents) in dag:
339 for (cur, type, data, parents) in dag:
338
340
339 # Compute seen and next
341 # Compute seen and next
340 if cur not in seen:
342 if cur not in seen:
341 seen.append(cur) # new head
343 seen.append(cur) # new head
342 colors[cur] = newcolor
344 colors[cur] = newcolor
343 newcolor += 1
345 newcolor += 1
344
346
345 col = seen.index(cur)
347 col = seen.index(cur)
346 color = colors.pop(cur)
348 color = colors.pop(cur)
347 next = seen[:]
349 next = seen[:]
348
350
349 # Add parents to next
351 # Add parents to next
350 addparents = [p for pt, p in parents if p not in next]
352 addparents = [p for pt, p in parents if p not in next]
351 next[col:col + 1] = addparents
353 next[col:col + 1] = addparents
352
354
353 # Set colors for the parents
355 # Set colors for the parents
354 for i, p in enumerate(addparents):
356 for i, p in enumerate(addparents):
355 if not i:
357 if not i:
356 colors[p] = color
358 colors[p] = color
357 else:
359 else:
358 colors[p] = newcolor
360 colors[p] = newcolor
359 newcolor += 1
361 newcolor += 1
360
362
361 # Add edges to the graph
363 # Add edges to the graph
362 edges = []
364 edges = []
363 for ecol, eid in enumerate(seen):
365 for ecol, eid in enumerate(seen):
364 if eid in next:
366 if eid in next:
365 bconf = getconf(eid)
367 bconf = getconf(eid)
366 edges.append((
368 edges.append((
367 ecol, next.index(eid), colors[eid],
369 ecol, next.index(eid), colors[eid],
368 bconf.get('width', -1),
370 bconf.get('width', -1),
369 bconf.get('color', '')))
371 bconf.get('color', '')))
370 elif eid == cur:
372 elif eid == cur:
371 for ptype, p in parents:
373 for ptype, p in parents:
372 bconf = getconf(p)
374 bconf = getconf(p)
373 edges.append((
375 edges.append((
374 ecol, next.index(p), color,
376 ecol, next.index(p), color,
375 bconf.get('width', -1),
377 bconf.get('width', -1),
376 bconf.get('color', '')))
378 bconf.get('color', '')))
377
379
378 # Yield and move on
380 # Yield and move on
379 yield (cur, type, data, (col, color), edges)
381 yield (cur, type, data, (col, color), edges)
380 seen = next
382 seen = next
381
383
382 def asciiedges(type, char, lines, state, rev, parents):
384 def asciiedges(type, char, lines, state, rev, parents):
383 """adds edge info to changelog DAG walk suitable for ascii()"""
385 """adds edge info to changelog DAG walk suitable for ascii()"""
384 seen = state['seen']
386 seen = state['seen']
385 if rev not in seen:
387 if rev not in seen:
386 seen.append(rev)
388 seen.append(rev)
387 nodeidx = seen.index(rev)
389 nodeidx = seen.index(rev)
388
390
389 knownparents = []
391 knownparents = []
390 newparents = []
392 newparents = []
391 for ptype, parent in parents:
393 for ptype, parent in parents:
392 if parent in seen:
394 if parent in seen:
393 knownparents.append(parent)
395 knownparents.append(parent)
394 else:
396 else:
395 newparents.append(parent)
397 newparents.append(parent)
396 state['edges'][parent] = state['styles'].get(ptype, '|')
398 state['edges'][parent] = state['styles'].get(ptype, '|')
397
399
398 ncols = len(seen)
400 ncols = len(seen)
399 nextseen = seen[:]
401 nextseen = seen[:]
400 nextseen[nodeidx:nodeidx + 1] = newparents
402 nextseen[nodeidx:nodeidx + 1] = newparents
401 edges = [(nodeidx, nextseen.index(p))
403 edges = [(nodeidx, nextseen.index(p))
402 for p in knownparents if p != nullrev]
404 for p in knownparents if p != nullrev]
403
405
404 seen[:] = nextseen
406 seen[:] = nextseen
405 while len(newparents) > 2:
407 while len(newparents) > 2:
406 # ascii() only knows how to add or remove a single column between two
408 # ascii() only knows how to add or remove a single column between two
407 # calls. Nodes with more than two parents break this constraint so we
409 # calls. Nodes with more than two parents break this constraint so we
408 # introduce intermediate expansion lines to grow the active node list
410 # introduce intermediate expansion lines to grow the active node list
409 # slowly.
411 # slowly.
410 edges.append((nodeidx, nodeidx))
412 edges.append((nodeidx, nodeidx))
411 edges.append((nodeidx, nodeidx + 1))
413 edges.append((nodeidx, nodeidx + 1))
412 nmorecols = 1
414 nmorecols = 1
413 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
415 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
414 char = '\\'
416 char = '\\'
415 lines = []
417 lines = []
416 nodeidx += 1
418 nodeidx += 1
417 ncols += 1
419 ncols += 1
418 edges = []
420 edges = []
419 del newparents[0]
421 del newparents[0]
420
422
421 if len(newparents) > 0:
423 if len(newparents) > 0:
422 edges.append((nodeidx, nodeidx))
424 edges.append((nodeidx, nodeidx))
423 if len(newparents) > 1:
425 if len(newparents) > 1:
424 edges.append((nodeidx, nodeidx + 1))
426 edges.append((nodeidx, nodeidx + 1))
425 nmorecols = len(nextseen) - ncols
427 nmorecols = len(nextseen) - ncols
426 # remove current node from edge characters, no longer needed
428 # remove current node from edge characters, no longer needed
427 state['edges'].pop(rev, None)
429 state['edges'].pop(rev, None)
428 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
430 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
429
431
430 def _fixlongrightedges(edges):
432 def _fixlongrightedges(edges):
431 for (i, (start, end)) in enumerate(edges):
433 for (i, (start, end)) in enumerate(edges):
432 if end > start:
434 if end > start:
433 edges[i] = (start, end + 1)
435 edges[i] = (start, end + 1)
434
436
435 def _getnodelineedgestail(
437 def _getnodelineedgestail(
436 echars, idx, pidx, ncols, coldiff, pdiff, fix_tail):
438 echars, idx, pidx, ncols, coldiff, pdiff, fix_tail):
437 if fix_tail and coldiff == pdiff and coldiff != 0:
439 if fix_tail and coldiff == pdiff and coldiff != 0:
438 # Still going in the same non-vertical direction.
440 # Still going in the same non-vertical direction.
439 if coldiff == -1:
441 if coldiff == -1:
440 start = max(idx + 1, pidx)
442 start = max(idx + 1, pidx)
441 tail = echars[idx * 2:(start - 1) * 2]
443 tail = echars[idx * 2:(start - 1) * 2]
442 tail.extend(["/", " "] * (ncols - start))
444 tail.extend(["/", " "] * (ncols - start))
443 return tail
445 return tail
444 else:
446 else:
445 return ["\\", " "] * (ncols - idx - 1)
447 return ["\\", " "] * (ncols - idx - 1)
446 else:
448 else:
447 remainder = (ncols - idx - 1)
449 remainder = (ncols - idx - 1)
448 return echars[-(remainder * 2):] if remainder > 0 else []
450 return echars[-(remainder * 2):] if remainder > 0 else []
449
451
450 def _drawedges(echars, edges, nodeline, interline):
452 def _drawedges(echars, edges, nodeline, interline):
451 for (start, end) in edges:
453 for (start, end) in edges:
452 if start == end + 1:
454 if start == end + 1:
453 interline[2 * end + 1] = "/"
455 interline[2 * end + 1] = "/"
454 elif start == end - 1:
456 elif start == end - 1:
455 interline[2 * start + 1] = "\\"
457 interline[2 * start + 1] = "\\"
456 elif start == end:
458 elif start == end:
457 interline[2 * start] = echars[2 * start]
459 interline[2 * start] = echars[2 * start]
458 else:
460 else:
459 if 2 * end >= len(nodeline):
461 if 2 * end >= len(nodeline):
460 continue
462 continue
461 nodeline[2 * end] = "+"
463 nodeline[2 * end] = "+"
462 if start > end:
464 if start > end:
463 (start, end) = (end, start)
465 (start, end) = (end, start)
464 for i in range(2 * start + 1, 2 * end):
466 for i in range(2 * start + 1, 2 * end):
465 if nodeline[i] != "+":
467 if nodeline[i] != "+":
466 nodeline[i] = "-"
468 nodeline[i] = "-"
467
469
468 def _getpaddingline(echars, idx, ncols, edges):
470 def _getpaddingline(echars, idx, ncols, edges):
469 # all edges up to the current node
471 # all edges up to the current node
470 line = echars[:idx * 2]
472 line = echars[:idx * 2]
471 # an edge for the current node, if there is one
473 # an edge for the current node, if there is one
472 if (idx, idx - 1) in edges or (idx, idx) in edges:
474 if (idx, idx - 1) in edges or (idx, idx) in edges:
473 # (idx, idx - 1) (idx, idx)
475 # (idx, idx - 1) (idx, idx)
474 # | | | | | | | |
476 # | | | | | | | |
475 # +---o | | o---+
477 # +---o | | o---+
476 # | | X | | X | |
478 # | | X | | X | |
477 # | |/ / | |/ /
479 # | |/ / | |/ /
478 # | | | | | |
480 # | | | | | |
479 line.extend(echars[idx * 2:(idx + 1) * 2])
481 line.extend(echars[idx * 2:(idx + 1) * 2])
480 else:
482 else:
481 line.extend(' ')
483 line.extend(' ')
482 # all edges to the right of the current node
484 # all edges to the right of the current node
483 remainder = ncols - idx - 1
485 remainder = ncols - idx - 1
484 if remainder > 0:
486 if remainder > 0:
485 line.extend(echars[-(remainder * 2):])
487 line.extend(echars[-(remainder * 2):])
486 return line
488 return line
487
489
488 def _drawendinglines(lines, extra, edgemap, seen):
490 def _drawendinglines(lines, extra, edgemap, seen):
489 """Draw ending lines for missing parent edges
491 """Draw ending lines for missing parent edges
490
492
491 None indicates an edge that ends at between this node and the next
493 None indicates an edge that ends at between this node and the next
492 Replace with a short line ending in ~ and add / lines to any edges to
494 Replace with a short line ending in ~ and add / lines to any edges to
493 the right.
495 the right.
494
496
495 """
497 """
496 if None not in edgemap.values():
498 if None not in edgemap.values():
497 return
499 return
498
500
499 # Check for more edges to the right of our ending edges.
501 # Check for more edges to the right of our ending edges.
500 # We need enough space to draw adjustment lines for these.
502 # We need enough space to draw adjustment lines for these.
501 edgechars = extra[::2]
503 edgechars = extra[::2]
502 while edgechars and edgechars[-1] is None:
504 while edgechars and edgechars[-1] is None:
503 edgechars.pop()
505 edgechars.pop()
504 shift_size = max((edgechars.count(None) * 2) - 1, 0)
506 shift_size = max((edgechars.count(None) * 2) - 1, 0)
505 while len(lines) < 3 + shift_size:
507 while len(lines) < 3 + shift_size:
506 lines.append(extra[:])
508 lines.append(extra[:])
507
509
508 if shift_size:
510 if shift_size:
509 empties = []
511 empties = []
510 toshift = []
512 toshift = []
511 first_empty = extra.index(None)
513 first_empty = extra.index(None)
512 for i, c in enumerate(extra[first_empty::2], first_empty // 2):
514 for i, c in enumerate(extra[first_empty::2], first_empty // 2):
513 if c is None:
515 if c is None:
514 empties.append(i * 2)
516 empties.append(i * 2)
515 else:
517 else:
516 toshift.append(i * 2)
518 toshift.append(i * 2)
517 targets = list(range(first_empty, first_empty + len(toshift) * 2, 2))
519 targets = list(range(first_empty, first_empty + len(toshift) * 2, 2))
518 positions = toshift[:]
520 positions = toshift[:]
519 for line in lines[-shift_size:]:
521 for line in lines[-shift_size:]:
520 line[first_empty:] = [' '] * (len(line) - first_empty)
522 line[first_empty:] = [' '] * (len(line) - first_empty)
521 for i in range(len(positions)):
523 for i in range(len(positions)):
522 pos = positions[i] - 1
524 pos = positions[i] - 1
523 positions[i] = max(pos, targets[i])
525 positions[i] = max(pos, targets[i])
524 line[pos] = '/' if pos > targets[i] else extra[toshift[i]]
526 line[pos] = '/' if pos > targets[i] else extra[toshift[i]]
525
527
526 map = {1: '|', 2: '~'}
528 map = {1: '|', 2: '~'}
527 for i, line in enumerate(lines):
529 for i, line in enumerate(lines):
528 if None not in line:
530 if None not in line:
529 continue
531 continue
530 line[:] = [c or map.get(i, ' ') for c in line]
532 line[:] = [c or map.get(i, ' ') for c in line]
531
533
532 # remove edges that ended
534 # remove edges that ended
533 remove = [p for p, c in edgemap.items() if c is None]
535 remove = [p for p, c in edgemap.items() if c is None]
534 for parent in remove:
536 for parent in remove:
535 del edgemap[parent]
537 del edgemap[parent]
536 seen.remove(parent)
538 seen.remove(parent)
537
539
538 def asciistate():
540 def asciistate():
539 """returns the initial value for the "state" argument to ascii()"""
541 """returns the initial value for the "state" argument to ascii()"""
540 return {
542 return {
541 'seen': [],
543 'seen': [],
542 'edges': {},
544 'edges': {},
543 'lastcoldiff': 0,
545 'lastcoldiff': 0,
544 'lastindex': 0,
546 'lastindex': 0,
545 'styles': EDGES.copy(),
547 'styles': EDGES.copy(),
546 'graphshorten': False,
548 'graphshorten': False,
547 }
549 }
548
550
549 def ascii(ui, state, type, char, text, coldata):
551 def ascii(ui, state, type, char, text, coldata):
550 """prints an ASCII graph of the DAG
552 """prints an ASCII graph of the DAG
551
553
552 takes the following arguments (one call per node in the graph):
554 takes the following arguments (one call per node in the graph):
553
555
554 - ui to write to
556 - ui to write to
555 - Somewhere to keep the needed state in (init to asciistate())
557 - Somewhere to keep the needed state in (init to asciistate())
556 - Column of the current node in the set of ongoing edges.
558 - Column of the current node in the set of ongoing edges.
557 - Type indicator of node data, usually 'C' for changesets.
559 - Type indicator of node data, usually 'C' for changesets.
558 - Payload: (char, lines):
560 - Payload: (char, lines):
559 - Character to use as node's symbol.
561 - Character to use as node's symbol.
560 - List of lines to display as the node's text.
562 - List of lines to display as the node's text.
561 - Edges; a list of (col, next_col) indicating the edges between
563 - Edges; a list of (col, next_col) indicating the edges between
562 the current node and its parents.
564 the current node and its parents.
563 - Number of columns (ongoing edges) in the current revision.
565 - Number of columns (ongoing edges) in the current revision.
564 - The difference between the number of columns (ongoing edges)
566 - The difference between the number of columns (ongoing edges)
565 in the next revision and the number of columns (ongoing edges)
567 in the next revision and the number of columns (ongoing edges)
566 in the current revision. That is: -1 means one column removed;
568 in the current revision. That is: -1 means one column removed;
567 0 means no columns added or removed; 1 means one column added.
569 0 means no columns added or removed; 1 means one column added.
568 """
570 """
569 idx, edges, ncols, coldiff = coldata
571 idx, edges, ncols, coldiff = coldata
570 assert -2 < coldiff < 2
572 assert -2 < coldiff < 2
571
573
572 edgemap, seen = state['edges'], state['seen']
574 edgemap, seen = state['edges'], state['seen']
573 # Be tolerant of history issues; make sure we have at least ncols + coldiff
575 # Be tolerant of history issues; make sure we have at least ncols + coldiff
574 # elements to work with. See test-glog.t for broken history test cases.
576 # elements to work with. See test-glog.t for broken history test cases.
575 echars = [c for p in seen for c in (edgemap.get(p, '|'), ' ')]
577 echars = [c for p in seen for c in (edgemap.get(p, '|'), ' ')]
576 echars.extend(('|', ' ') * max(ncols + coldiff - len(seen), 0))
578 echars.extend(('|', ' ') * max(ncols + coldiff - len(seen), 0))
577
579
578 if coldiff == -1:
580 if coldiff == -1:
579 # Transform
581 # Transform
580 #
582 #
581 # | | | | | |
583 # | | | | | |
582 # o | | into o---+
584 # o | | into o---+
583 # |X / |/ /
585 # |X / |/ /
584 # | | | |
586 # | | | |
585 _fixlongrightedges(edges)
587 _fixlongrightedges(edges)
586
588
587 # add_padding_line says whether to rewrite
589 # add_padding_line says whether to rewrite
588 #
590 #
589 # | | | | | | | |
591 # | | | | | | | |
590 # | o---+ into | o---+
592 # | o---+ into | o---+
591 # | / / | | | # <--- padding line
593 # | / / | | | # <--- padding line
592 # o | | | / /
594 # o | | | / /
593 # o | |
595 # o | |
594 add_padding_line = (len(text) > 2 and coldiff == -1 and
596 add_padding_line = (len(text) > 2 and coldiff == -1 and
595 [x for (x, y) in edges if x + 1 < y])
597 [x for (x, y) in edges if x + 1 < y])
596
598
597 # fix_nodeline_tail says whether to rewrite
599 # fix_nodeline_tail says whether to rewrite
598 #
600 #
599 # | | o | | | | o | |
601 # | | o | | | | o | |
600 # | | |/ / | | |/ /
602 # | | |/ / | | |/ /
601 # | o | | into | o / / # <--- fixed nodeline tail
603 # | o | | into | o / / # <--- fixed nodeline tail
602 # | |/ / | |/ /
604 # | |/ / | |/ /
603 # o | | o | |
605 # o | | o | |
604 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
606 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
605
607
606 # nodeline is the line containing the node character (typically o)
608 # nodeline is the line containing the node character (typically o)
607 nodeline = echars[:idx * 2]
609 nodeline = echars[:idx * 2]
608 nodeline.extend([char, " "])
610 nodeline.extend([char, " "])
609
611
610 nodeline.extend(
612 nodeline.extend(
611 _getnodelineedgestail(
613 _getnodelineedgestail(
612 echars, idx, state['lastindex'], ncols, coldiff,
614 echars, idx, state['lastindex'], ncols, coldiff,
613 state['lastcoldiff'], fix_nodeline_tail))
615 state['lastcoldiff'], fix_nodeline_tail))
614
616
615 # shift_interline is the line containing the non-vertical
617 # shift_interline is the line containing the non-vertical
616 # edges between this entry and the next
618 # edges between this entry and the next
617 shift_interline = echars[:idx * 2]
619 shift_interline = echars[:idx * 2]
618 shift_interline.extend(' ' * (2 + coldiff))
620 shift_interline.extend(' ' * (2 + coldiff))
619 count = ncols - idx - 1
621 count = ncols - idx - 1
620 if coldiff == -1:
622 if coldiff == -1:
621 shift_interline.extend('/ ' * count)
623 shift_interline.extend('/ ' * count)
622 elif coldiff == 0:
624 elif coldiff == 0:
623 shift_interline.extend(echars[(idx + 1) * 2:ncols * 2])
625 shift_interline.extend(echars[(idx + 1) * 2:ncols * 2])
624 else:
626 else:
625 shift_interline.extend(r'\ ' * count)
627 shift_interline.extend(r'\ ' * count)
626
628
627 # draw edges from the current node to its parents
629 # draw edges from the current node to its parents
628 _drawedges(echars, edges, nodeline, shift_interline)
630 _drawedges(echars, edges, nodeline, shift_interline)
629
631
630 # lines is the list of all graph lines to print
632 # lines is the list of all graph lines to print
631 lines = [nodeline]
633 lines = [nodeline]
632 if add_padding_line:
634 if add_padding_line:
633 lines.append(_getpaddingline(echars, idx, ncols, edges))
635 lines.append(_getpaddingline(echars, idx, ncols, edges))
634
636
635 # If 'graphshorten' config, only draw shift_interline
637 # If 'graphshorten' config, only draw shift_interline
636 # when there is any non vertical flow in graph.
638 # when there is any non vertical flow in graph.
637 if state['graphshorten']:
639 if state['graphshorten']:
638 if any(c in '\/' for c in shift_interline if c):
640 if any(c in '\/' for c in shift_interline if c):
639 lines.append(shift_interline)
641 lines.append(shift_interline)
640 # Else, no 'graphshorten' config so draw shift_interline.
642 # Else, no 'graphshorten' config so draw shift_interline.
641 else:
643 else:
642 lines.append(shift_interline)
644 lines.append(shift_interline)
643
645
644 # make sure that there are as many graph lines as there are
646 # make sure that there are as many graph lines as there are
645 # log strings
647 # log strings
646 extra_interline = echars[:(ncols + coldiff) * 2]
648 extra_interline = echars[:(ncols + coldiff) * 2]
647 if len(lines) < len(text):
649 if len(lines) < len(text):
648 while len(lines) < len(text):
650 while len(lines) < len(text):
649 lines.append(extra_interline[:])
651 lines.append(extra_interline[:])
650
652
651 _drawendinglines(lines, extra_interline, edgemap, seen)
653 _drawendinglines(lines, extra_interline, edgemap, seen)
652
654
653 while len(text) < len(lines):
655 while len(text) < len(lines):
654 text.append("")
656 text.append("")
655
657
658 if any(len(char) > 1 for char in edgemap.values()):
659 # limit drawing an edge to the first or last N lines of the current
660 # section the rest of the edge is drawn like a parent line.
661 parent = state['styles'][PARENT][-1]
662 def _drawgp(char, i):
663 # should a grandparent character be drawn for this line?
664 if len(char) < 2:
665 return True
666 num = int(char[:-1])
667 # either skip first num lines or take last num lines, based on sign
668 return -num <= i if num < 0 else (len(lines) - i) <= num
669 for i, line in enumerate(lines):
670 line[:] = [c[-1] if _drawgp(c, i) else parent for c in line]
671 edgemap = dict(
672 (e, c if len(c) < 2 else parent) for e, c in edgemap.items())
673
656 # print lines
674 # print lines
657 indentation_level = max(ncols, ncols + coldiff)
675 indentation_level = max(ncols, ncols + coldiff)
658 for (line, logstr) in zip(lines, text):
676 for (line, logstr) in zip(lines, text):
659 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
677 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
660 ui.write(ln.rstrip() + '\n')
678 ui.write(ln.rstrip() + '\n')
661
679
662 # ... and start over
680 # ... and start over
663 state['lastcoldiff'] = coldiff
681 state['lastcoldiff'] = coldiff
664 state['lastindex'] = idx
682 state['lastindex'] = idx
@@ -1,3197 +1,3419 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, cmdutil
85 > from mercurial import extensions, revset, commands, cmdutil
86 >
86 >
87 > def uisetup(ui):
87 > def uisetup(ui):
88 > def printrevset(orig, ui, repo, *pats, **opts):
88 > def printrevset(orig, ui, repo, *pats, **opts):
89 > if opts.get('print_revset'):
89 > if opts.get('print_revset'):
90 > expr = cmdutil.getgraphlogrevs(repo, pats, opts)[1]
90 > expr = cmdutil.getgraphlogrevs(repo, pats, opts)[1]
91 > if expr:
91 > if expr:
92 > tree = revset.parse(expr)
92 > tree = revset.parse(expr)
93 > else:
93 > else:
94 > tree = []
94 > tree = []
95 > ui.write('%r\n' % (opts.get('rev', []),))
95 > ui.write('%r\n' % (opts.get('rev', []),))
96 > ui.write(revset.prettyformat(tree) + '\n')
96 > ui.write(revset.prettyformat(tree) + '\n')
97 > return 0
97 > return 0
98 > return orig(ui, repo, *pats, **opts)
98 > return orig(ui, repo, *pats, **opts)
99 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
99 > entry = extensions.wrapcommand(commands.table, 'log', printrevset)
100 > entry[1].append(('', 'print-revset', False,
100 > entry[1].append(('', 'print-revset', False,
101 > 'print generated revset and exit (DEPRECATED)'))
101 > 'print generated revset and exit (DEPRECATED)'))
102 > EOF
102 > EOF
103
103
104 $ echo "[extensions]" >> $HGRCPATH
104 $ echo "[extensions]" >> $HGRCPATH
105 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
105 $ echo "printrevset=`pwd`/printrevset.py" >> $HGRCPATH
106
106
107 $ hg init repo
107 $ hg init repo
108 $ cd repo
108 $ cd repo
109
109
110 Empty repo:
110 Empty repo:
111
111
112 $ hg log -G
112 $ hg log -G
113
113
114
114
115 Building DAG:
115 Building DAG:
116
116
117 $ commit 0 "root"
117 $ commit 0 "root"
118 $ commit 1 "collapse" 0
118 $ commit 1 "collapse" 0
119 $ commit 2 "collapse" 1
119 $ commit 2 "collapse" 1
120 $ commit 3 "collapse" 2
120 $ commit 3 "collapse" 2
121 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
121 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
122 $ commit 5 "expand" 3 4
122 $ commit 5 "expand" 3 4
123 $ commit 6 "merge two known; one immediate left, one far left" 2 5
123 $ commit 6 "merge two known; one immediate left, one far left" 2 5
124 $ commit 7 "expand" 2 5
124 $ commit 7 "expand" 2 5
125 $ commit 8 "merge two known; one immediate left, one far right" 0 7
125 $ commit 8 "merge two known; one immediate left, one far right" 0 7
126 $ commit 9 "expand" 7 8
126 $ commit 9 "expand" 7 8
127 $ commit 10 "merge two known; one immediate left, one near right" 0 6
127 $ commit 10 "merge two known; one immediate left, one near right" 0 6
128 $ commit 11 "expand" 6 10
128 $ commit 11 "expand" 6 10
129 $ commit 12 "merge two known; one immediate right, one far left" 1 9
129 $ commit 12 "merge two known; one immediate right, one far left" 1 9
130 $ commit 13 "expand" 9 11
130 $ commit 13 "expand" 9 11
131 $ commit 14 "merge two known; one immediate right, one far right" 0 12
131 $ commit 14 "merge two known; one immediate right, one far right" 0 12
132 $ commit 15 "expand" 13 14
132 $ commit 15 "expand" 13 14
133 $ commit 16 "merge two known; one immediate right, one near right" 0 1
133 $ commit 16 "merge two known; one immediate right, one near right" 0 1
134 $ commit 17 "expand" 12 16
134 $ commit 17 "expand" 12 16
135 $ commit 18 "merge two known; two far left" 1 15
135 $ commit 18 "merge two known; two far left" 1 15
136 $ commit 19 "expand" 15 17
136 $ commit 19 "expand" 15 17
137 $ commit 20 "merge two known; two far right" 0 18
137 $ commit 20 "merge two known; two far right" 0 18
138 $ commit 21 "expand" 19 20
138 $ commit 21 "expand" 19 20
139 $ commit 22 "merge two known; one far left, one far right" 18 21
139 $ commit 22 "merge two known; one far left, one far right" 18 21
140 $ commit 23 "merge one known; immediate left" 1 22
140 $ commit 23 "merge one known; immediate left" 1 22
141 $ commit 24 "merge one known; immediate right" 0 23
141 $ commit 24 "merge one known; immediate right" 0 23
142 $ commit 25 "merge one known; far left" 21 24
142 $ commit 25 "merge one known; far left" 21 24
143 $ commit 26 "merge one known; far right" 18 25
143 $ commit 26 "merge one known; far right" 18 25
144 $ commit 27 "collapse" 21
144 $ commit 27 "collapse" 21
145 $ commit 28 "merge zero known" 1 26
145 $ commit 28 "merge zero known" 1 26
146 $ commit 29 "regular commit" 0
146 $ commit 29 "regular commit" 0
147 $ commit 30 "expand" 28 29
147 $ commit 30 "expand" 28 29
148 $ commit 31 "expand" 21 30
148 $ commit 31 "expand" 21 30
149 $ commit 32 "expand" 27 31
149 $ commit 32 "expand" 27 31
150 $ commit 33 "head" 18
150 $ commit 33 "head" 18
151 $ commit 34 "head" 32
151 $ commit 34 "head" 32
152
152
153
153
154 $ hg log -G -q
154 $ hg log -G -q
155 @ 34:fea3ac5810e0
155 @ 34:fea3ac5810e0
156 |
156 |
157 | o 33:68608f5145f9
157 | o 33:68608f5145f9
158 | |
158 | |
159 o | 32:d06dffa21a31
159 o | 32:d06dffa21a31
160 |\ \
160 |\ \
161 | o \ 31:621d83e11f67
161 | o \ 31:621d83e11f67
162 | |\ \
162 | |\ \
163 | | o \ 30:6e11cd4b648f
163 | | o \ 30:6e11cd4b648f
164 | | |\ \
164 | | |\ \
165 | | | o | 29:cd9bb2be7593
165 | | | o | 29:cd9bb2be7593
166 | | | | |
166 | | | | |
167 | | o | | 28:44ecd0b9ae99
167 | | o | | 28:44ecd0b9ae99
168 | | |\ \ \
168 | | |\ \ \
169 o | | | | | 27:886ed638191b
169 o | | | | | 27:886ed638191b
170 |/ / / / /
170 |/ / / / /
171 | | o---+ 26:7f25b6c2f0b9
171 | | o---+ 26:7f25b6c2f0b9
172 | | | | |
172 | | | | |
173 +---o | | 25:91da8ed57247
173 +---o | | 25:91da8ed57247
174 | | | | |
174 | | | | |
175 | | o | | 24:a9c19a3d96b7
175 | | o | | 24:a9c19a3d96b7
176 | | |\| |
176 | | |\| |
177 | | o | | 23:a01cddf0766d
177 | | o | | 23:a01cddf0766d
178 | |/| | |
178 | |/| | |
179 +---o---+ 22:e0d9cccacb5d
179 +---o---+ 22:e0d9cccacb5d
180 | | / /
180 | | / /
181 o | | | 21:d42a756af44d
181 o | | | 21:d42a756af44d
182 |\ \ \ \
182 |\ \ \ \
183 | o---+-+ 20:d30ed6450e32
183 | o---+-+ 20:d30ed6450e32
184 | / / /
184 | / / /
185 o | | | 19:31ddc2c1573b
185 o | | | 19:31ddc2c1573b
186 |\ \ \ \
186 |\ \ \ \
187 +---+---o 18:1aa84d96232a
187 +---+---o 18:1aa84d96232a
188 | | | |
188 | | | |
189 | o | | 17:44765d7c06e0
189 | o | | 17:44765d7c06e0
190 | |\ \ \
190 | |\ \ \
191 | | o---+ 16:3677d192927d
191 | | o---+ 16:3677d192927d
192 | | |/ /
192 | | |/ /
193 o | | | 15:1dda3f72782d
193 o | | | 15:1dda3f72782d
194 |\ \ \ \
194 |\ \ \ \
195 | o-----+ 14:8eac370358ef
195 | o-----+ 14:8eac370358ef
196 | |/ / /
196 | |/ / /
197 o | | | 13:22d8966a97e3
197 o | | | 13:22d8966a97e3
198 |\ \ \ \
198 |\ \ \ \
199 +---o | | 12:86b91144a6e9
199 +---o | | 12:86b91144a6e9
200 | | |/ /
200 | | |/ /
201 | o | | 11:832d76e6bdf2
201 | o | | 11:832d76e6bdf2
202 | |\ \ \
202 | |\ \ \
203 | | o---+ 10:74c64d036d72
203 | | o---+ 10:74c64d036d72
204 | |/ / /
204 | |/ / /
205 o | | | 9:7010c0af0a35
205 o | | | 9:7010c0af0a35
206 |\ \ \ \
206 |\ \ \ \
207 | o-----+ 8:7a0b11f71937
207 | o-----+ 8:7a0b11f71937
208 |/ / / /
208 |/ / / /
209 o | | | 7:b632bb1b1224
209 o | | | 7:b632bb1b1224
210 |\ \ \ \
210 |\ \ \ \
211 +---o | | 6:b105a072e251
211 +---o | | 6:b105a072e251
212 | |/ / /
212 | |/ / /
213 | o | | 5:4409d547b708
213 | o | | 5:4409d547b708
214 | |\ \ \
214 | |\ \ \
215 | | o | | 4:26a8bac39d9f
215 | | o | | 4:26a8bac39d9f
216 | |/|/ /
216 | |/|/ /
217 | o / / 3:27eef8ed80b4
217 | o / / 3:27eef8ed80b4
218 |/ / /
218 |/ / /
219 o / / 2:3d9a33b8d1e1
219 o / / 2:3d9a33b8d1e1
220 |/ /
220 |/ /
221 o / 1:6db2ef61d156
221 o / 1:6db2ef61d156
222 |/
222 |/
223 o 0:e6eb3150255d
223 o 0:e6eb3150255d
224
224
225
225
226 $ hg log -G
226 $ hg log -G
227 @ changeset: 34:fea3ac5810e0
227 @ changeset: 34:fea3ac5810e0
228 | tag: tip
228 | tag: tip
229 | parent: 32:d06dffa21a31
229 | parent: 32:d06dffa21a31
230 | user: test
230 | user: test
231 | date: Thu Jan 01 00:00:34 1970 +0000
231 | date: Thu Jan 01 00:00:34 1970 +0000
232 | summary: (34) head
232 | summary: (34) head
233 |
233 |
234 | o changeset: 33:68608f5145f9
234 | o changeset: 33:68608f5145f9
235 | | parent: 18:1aa84d96232a
235 | | parent: 18:1aa84d96232a
236 | | user: test
236 | | user: test
237 | | date: Thu Jan 01 00:00:33 1970 +0000
237 | | date: Thu Jan 01 00:00:33 1970 +0000
238 | | summary: (33) head
238 | | summary: (33) head
239 | |
239 | |
240 o | changeset: 32:d06dffa21a31
240 o | changeset: 32:d06dffa21a31
241 |\ \ parent: 27:886ed638191b
241 |\ \ parent: 27:886ed638191b
242 | | | parent: 31:621d83e11f67
242 | | | parent: 31:621d83e11f67
243 | | | user: test
243 | | | user: test
244 | | | date: Thu Jan 01 00:00:32 1970 +0000
244 | | | date: Thu Jan 01 00:00:32 1970 +0000
245 | | | summary: (32) expand
245 | | | summary: (32) expand
246 | | |
246 | | |
247 | o | changeset: 31:621d83e11f67
247 | o | changeset: 31:621d83e11f67
248 | |\ \ parent: 21:d42a756af44d
248 | |\ \ parent: 21:d42a756af44d
249 | | | | parent: 30:6e11cd4b648f
249 | | | | parent: 30:6e11cd4b648f
250 | | | | user: test
250 | | | | user: test
251 | | | | date: Thu Jan 01 00:00:31 1970 +0000
251 | | | | date: Thu Jan 01 00:00:31 1970 +0000
252 | | | | summary: (31) expand
252 | | | | summary: (31) expand
253 | | | |
253 | | | |
254 | | o | changeset: 30:6e11cd4b648f
254 | | o | changeset: 30:6e11cd4b648f
255 | | |\ \ parent: 28:44ecd0b9ae99
255 | | |\ \ parent: 28:44ecd0b9ae99
256 | | | | | parent: 29:cd9bb2be7593
256 | | | | | parent: 29:cd9bb2be7593
257 | | | | | user: test
257 | | | | | user: test
258 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
258 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
259 | | | | | summary: (30) expand
259 | | | | | summary: (30) expand
260 | | | | |
260 | | | | |
261 | | | o | changeset: 29:cd9bb2be7593
261 | | | o | changeset: 29:cd9bb2be7593
262 | | | | | parent: 0:e6eb3150255d
262 | | | | | parent: 0:e6eb3150255d
263 | | | | | user: test
263 | | | | | user: test
264 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
264 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
265 | | | | | summary: (29) regular commit
265 | | | | | summary: (29) regular commit
266 | | | | |
266 | | | | |
267 | | o | | changeset: 28:44ecd0b9ae99
267 | | o | | changeset: 28:44ecd0b9ae99
268 | | |\ \ \ parent: 1:6db2ef61d156
268 | | |\ \ \ parent: 1:6db2ef61d156
269 | | | | | | parent: 26:7f25b6c2f0b9
269 | | | | | | parent: 26:7f25b6c2f0b9
270 | | | | | | user: test
270 | | | | | | user: test
271 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
271 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
272 | | | | | | summary: (28) merge zero known
272 | | | | | | summary: (28) merge zero known
273 | | | | | |
273 | | | | | |
274 o | | | | | changeset: 27:886ed638191b
274 o | | | | | changeset: 27:886ed638191b
275 |/ / / / / parent: 21:d42a756af44d
275 |/ / / / / parent: 21:d42a756af44d
276 | | | | | user: test
276 | | | | | user: test
277 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
277 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
278 | | | | | summary: (27) collapse
278 | | | | | summary: (27) collapse
279 | | | | |
279 | | | | |
280 | | o---+ changeset: 26:7f25b6c2f0b9
280 | | o---+ changeset: 26:7f25b6c2f0b9
281 | | | | | parent: 18:1aa84d96232a
281 | | | | | parent: 18:1aa84d96232a
282 | | | | | parent: 25:91da8ed57247
282 | | | | | parent: 25:91da8ed57247
283 | | | | | user: test
283 | | | | | user: test
284 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
284 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
285 | | | | | summary: (26) merge one known; far right
285 | | | | | summary: (26) merge one known; far right
286 | | | | |
286 | | | | |
287 +---o | | changeset: 25:91da8ed57247
287 +---o | | changeset: 25:91da8ed57247
288 | | | | | parent: 21:d42a756af44d
288 | | | | | parent: 21:d42a756af44d
289 | | | | | parent: 24:a9c19a3d96b7
289 | | | | | parent: 24:a9c19a3d96b7
290 | | | | | user: test
290 | | | | | user: test
291 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
291 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
292 | | | | | summary: (25) merge one known; far left
292 | | | | | summary: (25) merge one known; far left
293 | | | | |
293 | | | | |
294 | | o | | changeset: 24:a9c19a3d96b7
294 | | o | | changeset: 24:a9c19a3d96b7
295 | | |\| | parent: 0:e6eb3150255d
295 | | |\| | parent: 0:e6eb3150255d
296 | | | | | parent: 23:a01cddf0766d
296 | | | | | parent: 23:a01cddf0766d
297 | | | | | user: test
297 | | | | | user: test
298 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
298 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
299 | | | | | summary: (24) merge one known; immediate right
299 | | | | | summary: (24) merge one known; immediate right
300 | | | | |
300 | | | | |
301 | | o | | changeset: 23:a01cddf0766d
301 | | o | | changeset: 23:a01cddf0766d
302 | |/| | | parent: 1:6db2ef61d156
302 | |/| | | parent: 1:6db2ef61d156
303 | | | | | parent: 22:e0d9cccacb5d
303 | | | | | parent: 22:e0d9cccacb5d
304 | | | | | user: test
304 | | | | | user: test
305 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
305 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
306 | | | | | summary: (23) merge one known; immediate left
306 | | | | | summary: (23) merge one known; immediate left
307 | | | | |
307 | | | | |
308 +---o---+ changeset: 22:e0d9cccacb5d
308 +---o---+ changeset: 22:e0d9cccacb5d
309 | | | | parent: 18:1aa84d96232a
309 | | | | parent: 18:1aa84d96232a
310 | | / / parent: 21:d42a756af44d
310 | | / / parent: 21:d42a756af44d
311 | | | | user: test
311 | | | | user: test
312 | | | | date: Thu Jan 01 00:00:22 1970 +0000
312 | | | | date: Thu Jan 01 00:00:22 1970 +0000
313 | | | | summary: (22) merge two known; one far left, one far right
313 | | | | summary: (22) merge two known; one far left, one far right
314 | | | |
314 | | | |
315 o | | | changeset: 21:d42a756af44d
315 o | | | changeset: 21:d42a756af44d
316 |\ \ \ \ parent: 19:31ddc2c1573b
316 |\ \ \ \ parent: 19:31ddc2c1573b
317 | | | | | parent: 20:d30ed6450e32
317 | | | | | parent: 20:d30ed6450e32
318 | | | | | user: test
318 | | | | | user: test
319 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
319 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
320 | | | | | summary: (21) expand
320 | | | | | summary: (21) expand
321 | | | | |
321 | | | | |
322 | o---+-+ changeset: 20:d30ed6450e32
322 | o---+-+ changeset: 20:d30ed6450e32
323 | | | | parent: 0:e6eb3150255d
323 | | | | parent: 0:e6eb3150255d
324 | / / / parent: 18:1aa84d96232a
324 | / / / parent: 18:1aa84d96232a
325 | | | | user: test
325 | | | | user: test
326 | | | | date: Thu Jan 01 00:00:20 1970 +0000
326 | | | | date: Thu Jan 01 00:00:20 1970 +0000
327 | | | | summary: (20) merge two known; two far right
327 | | | | summary: (20) merge two known; two far right
328 | | | |
328 | | | |
329 o | | | changeset: 19:31ddc2c1573b
329 o | | | changeset: 19:31ddc2c1573b
330 |\ \ \ \ parent: 15:1dda3f72782d
330 |\ \ \ \ parent: 15:1dda3f72782d
331 | | | | | parent: 17:44765d7c06e0
331 | | | | | parent: 17:44765d7c06e0
332 | | | | | user: test
332 | | | | | user: test
333 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
333 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
334 | | | | | summary: (19) expand
334 | | | | | summary: (19) expand
335 | | | | |
335 | | | | |
336 +---+---o changeset: 18:1aa84d96232a
336 +---+---o changeset: 18:1aa84d96232a
337 | | | | parent: 1:6db2ef61d156
337 | | | | parent: 1:6db2ef61d156
338 | | | | parent: 15:1dda3f72782d
338 | | | | parent: 15:1dda3f72782d
339 | | | | user: test
339 | | | | user: test
340 | | | | date: Thu Jan 01 00:00:18 1970 +0000
340 | | | | date: Thu Jan 01 00:00:18 1970 +0000
341 | | | | summary: (18) merge two known; two far left
341 | | | | summary: (18) merge two known; two far left
342 | | | |
342 | | | |
343 | o | | changeset: 17:44765d7c06e0
343 | o | | changeset: 17:44765d7c06e0
344 | |\ \ \ parent: 12:86b91144a6e9
344 | |\ \ \ parent: 12:86b91144a6e9
345 | | | | | parent: 16:3677d192927d
345 | | | | | parent: 16:3677d192927d
346 | | | | | user: test
346 | | | | | user: test
347 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
347 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
348 | | | | | summary: (17) expand
348 | | | | | summary: (17) expand
349 | | | | |
349 | | | | |
350 | | o---+ changeset: 16:3677d192927d
350 | | o---+ changeset: 16:3677d192927d
351 | | | | | parent: 0:e6eb3150255d
351 | | | | | parent: 0:e6eb3150255d
352 | | |/ / parent: 1:6db2ef61d156
352 | | |/ / parent: 1:6db2ef61d156
353 | | | | user: test
353 | | | | user: test
354 | | | | date: Thu Jan 01 00:00:16 1970 +0000
354 | | | | date: Thu Jan 01 00:00:16 1970 +0000
355 | | | | summary: (16) merge two known; one immediate right, one near right
355 | | | | summary: (16) merge two known; one immediate right, one near right
356 | | | |
356 | | | |
357 o | | | changeset: 15:1dda3f72782d
357 o | | | changeset: 15:1dda3f72782d
358 |\ \ \ \ parent: 13:22d8966a97e3
358 |\ \ \ \ parent: 13:22d8966a97e3
359 | | | | | parent: 14:8eac370358ef
359 | | | | | parent: 14:8eac370358ef
360 | | | | | user: test
360 | | | | | user: test
361 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
361 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
362 | | | | | summary: (15) expand
362 | | | | | summary: (15) expand
363 | | | | |
363 | | | | |
364 | o-----+ changeset: 14:8eac370358ef
364 | o-----+ changeset: 14:8eac370358ef
365 | | | | | parent: 0:e6eb3150255d
365 | | | | | parent: 0:e6eb3150255d
366 | |/ / / parent: 12:86b91144a6e9
366 | |/ / / parent: 12:86b91144a6e9
367 | | | | user: test
367 | | | | user: test
368 | | | | date: Thu Jan 01 00:00:14 1970 +0000
368 | | | | date: Thu Jan 01 00:00:14 1970 +0000
369 | | | | summary: (14) merge two known; one immediate right, one far right
369 | | | | summary: (14) merge two known; one immediate right, one far right
370 | | | |
370 | | | |
371 o | | | changeset: 13:22d8966a97e3
371 o | | | changeset: 13:22d8966a97e3
372 |\ \ \ \ parent: 9:7010c0af0a35
372 |\ \ \ \ parent: 9:7010c0af0a35
373 | | | | | parent: 11:832d76e6bdf2
373 | | | | | parent: 11:832d76e6bdf2
374 | | | | | user: test
374 | | | | | user: test
375 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
375 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
376 | | | | | summary: (13) expand
376 | | | | | summary: (13) expand
377 | | | | |
377 | | | | |
378 +---o | | changeset: 12:86b91144a6e9
378 +---o | | changeset: 12:86b91144a6e9
379 | | |/ / parent: 1:6db2ef61d156
379 | | |/ / parent: 1:6db2ef61d156
380 | | | | parent: 9:7010c0af0a35
380 | | | | parent: 9:7010c0af0a35
381 | | | | user: test
381 | | | | user: test
382 | | | | date: Thu Jan 01 00:00:12 1970 +0000
382 | | | | date: Thu Jan 01 00:00:12 1970 +0000
383 | | | | summary: (12) merge two known; one immediate right, one far left
383 | | | | summary: (12) merge two known; one immediate right, one far left
384 | | | |
384 | | | |
385 | o | | changeset: 11:832d76e6bdf2
385 | o | | changeset: 11:832d76e6bdf2
386 | |\ \ \ parent: 6:b105a072e251
386 | |\ \ \ parent: 6:b105a072e251
387 | | | | | parent: 10:74c64d036d72
387 | | | | | parent: 10:74c64d036d72
388 | | | | | user: test
388 | | | | | user: test
389 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
389 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
390 | | | | | summary: (11) expand
390 | | | | | summary: (11) expand
391 | | | | |
391 | | | | |
392 | | o---+ changeset: 10:74c64d036d72
392 | | o---+ changeset: 10:74c64d036d72
393 | | | | | parent: 0:e6eb3150255d
393 | | | | | parent: 0:e6eb3150255d
394 | |/ / / parent: 6:b105a072e251
394 | |/ / / parent: 6:b105a072e251
395 | | | | user: test
395 | | | | user: test
396 | | | | date: Thu Jan 01 00:00:10 1970 +0000
396 | | | | date: Thu Jan 01 00:00:10 1970 +0000
397 | | | | summary: (10) merge two known; one immediate left, one near right
397 | | | | summary: (10) merge two known; one immediate left, one near right
398 | | | |
398 | | | |
399 o | | | changeset: 9:7010c0af0a35
399 o | | | changeset: 9:7010c0af0a35
400 |\ \ \ \ parent: 7:b632bb1b1224
400 |\ \ \ \ parent: 7:b632bb1b1224
401 | | | | | parent: 8:7a0b11f71937
401 | | | | | parent: 8:7a0b11f71937
402 | | | | | user: test
402 | | | | | user: test
403 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
403 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
404 | | | | | summary: (9) expand
404 | | | | | summary: (9) expand
405 | | | | |
405 | | | | |
406 | o-----+ changeset: 8:7a0b11f71937
406 | o-----+ changeset: 8:7a0b11f71937
407 | | | | | parent: 0:e6eb3150255d
407 | | | | | parent: 0:e6eb3150255d
408 |/ / / / parent: 7:b632bb1b1224
408 |/ / / / parent: 7:b632bb1b1224
409 | | | | user: test
409 | | | | user: test
410 | | | | date: Thu Jan 01 00:00:08 1970 +0000
410 | | | | date: Thu Jan 01 00:00:08 1970 +0000
411 | | | | summary: (8) merge two known; one immediate left, one far right
411 | | | | summary: (8) merge two known; one immediate left, one far right
412 | | | |
412 | | | |
413 o | | | changeset: 7:b632bb1b1224
413 o | | | changeset: 7:b632bb1b1224
414 |\ \ \ \ parent: 2:3d9a33b8d1e1
414 |\ \ \ \ parent: 2:3d9a33b8d1e1
415 | | | | | parent: 5:4409d547b708
415 | | | | | parent: 5:4409d547b708
416 | | | | | user: test
416 | | | | | user: test
417 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
417 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
418 | | | | | summary: (7) expand
418 | | | | | summary: (7) expand
419 | | | | |
419 | | | | |
420 +---o | | changeset: 6:b105a072e251
420 +---o | | changeset: 6:b105a072e251
421 | |/ / / parent: 2:3d9a33b8d1e1
421 | |/ / / parent: 2:3d9a33b8d1e1
422 | | | | parent: 5:4409d547b708
422 | | | | parent: 5:4409d547b708
423 | | | | user: test
423 | | | | user: test
424 | | | | date: Thu Jan 01 00:00:06 1970 +0000
424 | | | | date: Thu Jan 01 00:00:06 1970 +0000
425 | | | | summary: (6) merge two known; one immediate left, one far left
425 | | | | summary: (6) merge two known; one immediate left, one far left
426 | | | |
426 | | | |
427 | o | | changeset: 5:4409d547b708
427 | o | | changeset: 5:4409d547b708
428 | |\ \ \ parent: 3:27eef8ed80b4
428 | |\ \ \ parent: 3:27eef8ed80b4
429 | | | | | parent: 4:26a8bac39d9f
429 | | | | | parent: 4:26a8bac39d9f
430 | | | | | user: test
430 | | | | | user: test
431 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
431 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
432 | | | | | summary: (5) expand
432 | | | | | summary: (5) expand
433 | | | | |
433 | | | | |
434 | | o | | changeset: 4:26a8bac39d9f
434 | | o | | changeset: 4:26a8bac39d9f
435 | |/|/ / parent: 1:6db2ef61d156
435 | |/|/ / parent: 1:6db2ef61d156
436 | | | | parent: 3:27eef8ed80b4
436 | | | | parent: 3:27eef8ed80b4
437 | | | | user: test
437 | | | | user: test
438 | | | | date: Thu Jan 01 00:00:04 1970 +0000
438 | | | | date: Thu Jan 01 00:00:04 1970 +0000
439 | | | | summary: (4) merge two known; one immediate left, one immediate right
439 | | | | summary: (4) merge two known; one immediate left, one immediate right
440 | | | |
440 | | | |
441 | o | | changeset: 3:27eef8ed80b4
441 | o | | changeset: 3:27eef8ed80b4
442 |/ / / user: test
442 |/ / / user: test
443 | | | date: Thu Jan 01 00:00:03 1970 +0000
443 | | | date: Thu Jan 01 00:00:03 1970 +0000
444 | | | summary: (3) collapse
444 | | | summary: (3) collapse
445 | | |
445 | | |
446 o | | changeset: 2:3d9a33b8d1e1
446 o | | changeset: 2:3d9a33b8d1e1
447 |/ / user: test
447 |/ / user: test
448 | | date: Thu Jan 01 00:00:02 1970 +0000
448 | | date: Thu Jan 01 00:00:02 1970 +0000
449 | | summary: (2) collapse
449 | | summary: (2) collapse
450 | |
450 | |
451 o | changeset: 1:6db2ef61d156
451 o | changeset: 1:6db2ef61d156
452 |/ user: test
452 |/ user: test
453 | date: Thu Jan 01 00:00:01 1970 +0000
453 | date: Thu Jan 01 00:00:01 1970 +0000
454 | summary: (1) collapse
454 | summary: (1) collapse
455 |
455 |
456 o changeset: 0:e6eb3150255d
456 o changeset: 0:e6eb3150255d
457 user: test
457 user: test
458 date: Thu Jan 01 00:00:00 1970 +0000
458 date: Thu Jan 01 00:00:00 1970 +0000
459 summary: (0) root
459 summary: (0) root
460
460
461
461
462 File glog:
462 File glog:
463 $ hg log -G a
463 $ hg log -G a
464 @ changeset: 34:fea3ac5810e0
464 @ changeset: 34:fea3ac5810e0
465 | tag: tip
465 | tag: tip
466 | parent: 32:d06dffa21a31
466 | parent: 32:d06dffa21a31
467 | user: test
467 | user: test
468 | date: Thu Jan 01 00:00:34 1970 +0000
468 | date: Thu Jan 01 00:00:34 1970 +0000
469 | summary: (34) head
469 | summary: (34) head
470 |
470 |
471 | o changeset: 33:68608f5145f9
471 | o changeset: 33:68608f5145f9
472 | | parent: 18:1aa84d96232a
472 | | parent: 18:1aa84d96232a
473 | | user: test
473 | | user: test
474 | | date: Thu Jan 01 00:00:33 1970 +0000
474 | | date: Thu Jan 01 00:00:33 1970 +0000
475 | | summary: (33) head
475 | | summary: (33) head
476 | |
476 | |
477 o | changeset: 32:d06dffa21a31
477 o | changeset: 32:d06dffa21a31
478 |\ \ parent: 27:886ed638191b
478 |\ \ parent: 27:886ed638191b
479 | | | parent: 31:621d83e11f67
479 | | | parent: 31:621d83e11f67
480 | | | user: test
480 | | | user: test
481 | | | date: Thu Jan 01 00:00:32 1970 +0000
481 | | | date: Thu Jan 01 00:00:32 1970 +0000
482 | | | summary: (32) expand
482 | | | summary: (32) expand
483 | | |
483 | | |
484 | o | changeset: 31:621d83e11f67
484 | o | changeset: 31:621d83e11f67
485 | |\ \ parent: 21:d42a756af44d
485 | |\ \ parent: 21:d42a756af44d
486 | | | | parent: 30:6e11cd4b648f
486 | | | | parent: 30:6e11cd4b648f
487 | | | | user: test
487 | | | | user: test
488 | | | | date: Thu Jan 01 00:00:31 1970 +0000
488 | | | | date: Thu Jan 01 00:00:31 1970 +0000
489 | | | | summary: (31) expand
489 | | | | summary: (31) expand
490 | | | |
490 | | | |
491 | | o | changeset: 30:6e11cd4b648f
491 | | o | changeset: 30:6e11cd4b648f
492 | | |\ \ parent: 28:44ecd0b9ae99
492 | | |\ \ parent: 28:44ecd0b9ae99
493 | | | | | parent: 29:cd9bb2be7593
493 | | | | | parent: 29:cd9bb2be7593
494 | | | | | user: test
494 | | | | | user: test
495 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
495 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
496 | | | | | summary: (30) expand
496 | | | | | summary: (30) expand
497 | | | | |
497 | | | | |
498 | | | o | changeset: 29:cd9bb2be7593
498 | | | o | changeset: 29:cd9bb2be7593
499 | | | | | parent: 0:e6eb3150255d
499 | | | | | parent: 0:e6eb3150255d
500 | | | | | user: test
500 | | | | | user: test
501 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
501 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
502 | | | | | summary: (29) regular commit
502 | | | | | summary: (29) regular commit
503 | | | | |
503 | | | | |
504 | | o | | changeset: 28:44ecd0b9ae99
504 | | o | | changeset: 28:44ecd0b9ae99
505 | | |\ \ \ parent: 1:6db2ef61d156
505 | | |\ \ \ parent: 1:6db2ef61d156
506 | | | | | | parent: 26:7f25b6c2f0b9
506 | | | | | | parent: 26:7f25b6c2f0b9
507 | | | | | | user: test
507 | | | | | | user: test
508 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
508 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
509 | | | | | | summary: (28) merge zero known
509 | | | | | | summary: (28) merge zero known
510 | | | | | |
510 | | | | | |
511 o | | | | | changeset: 27:886ed638191b
511 o | | | | | changeset: 27:886ed638191b
512 |/ / / / / parent: 21:d42a756af44d
512 |/ / / / / parent: 21:d42a756af44d
513 | | | | | user: test
513 | | | | | user: test
514 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
514 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
515 | | | | | summary: (27) collapse
515 | | | | | summary: (27) collapse
516 | | | | |
516 | | | | |
517 | | o---+ changeset: 26:7f25b6c2f0b9
517 | | o---+ changeset: 26:7f25b6c2f0b9
518 | | | | | parent: 18:1aa84d96232a
518 | | | | | parent: 18:1aa84d96232a
519 | | | | | parent: 25:91da8ed57247
519 | | | | | parent: 25:91da8ed57247
520 | | | | | user: test
520 | | | | | user: test
521 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
521 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
522 | | | | | summary: (26) merge one known; far right
522 | | | | | summary: (26) merge one known; far right
523 | | | | |
523 | | | | |
524 +---o | | changeset: 25:91da8ed57247
524 +---o | | changeset: 25:91da8ed57247
525 | | | | | parent: 21:d42a756af44d
525 | | | | | parent: 21:d42a756af44d
526 | | | | | parent: 24:a9c19a3d96b7
526 | | | | | parent: 24:a9c19a3d96b7
527 | | | | | user: test
527 | | | | | user: test
528 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
528 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
529 | | | | | summary: (25) merge one known; far left
529 | | | | | summary: (25) merge one known; far left
530 | | | | |
530 | | | | |
531 | | o | | changeset: 24:a9c19a3d96b7
531 | | o | | changeset: 24:a9c19a3d96b7
532 | | |\| | parent: 0:e6eb3150255d
532 | | |\| | parent: 0:e6eb3150255d
533 | | | | | parent: 23:a01cddf0766d
533 | | | | | parent: 23:a01cddf0766d
534 | | | | | user: test
534 | | | | | user: test
535 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
535 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
536 | | | | | summary: (24) merge one known; immediate right
536 | | | | | summary: (24) merge one known; immediate right
537 | | | | |
537 | | | | |
538 | | o | | changeset: 23:a01cddf0766d
538 | | o | | changeset: 23:a01cddf0766d
539 | |/| | | parent: 1:6db2ef61d156
539 | |/| | | parent: 1:6db2ef61d156
540 | | | | | parent: 22:e0d9cccacb5d
540 | | | | | parent: 22:e0d9cccacb5d
541 | | | | | user: test
541 | | | | | user: test
542 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
542 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
543 | | | | | summary: (23) merge one known; immediate left
543 | | | | | summary: (23) merge one known; immediate left
544 | | | | |
544 | | | | |
545 +---o---+ changeset: 22:e0d9cccacb5d
545 +---o---+ changeset: 22:e0d9cccacb5d
546 | | | | parent: 18:1aa84d96232a
546 | | | | parent: 18:1aa84d96232a
547 | | / / parent: 21:d42a756af44d
547 | | / / parent: 21:d42a756af44d
548 | | | | user: test
548 | | | | user: test
549 | | | | date: Thu Jan 01 00:00:22 1970 +0000
549 | | | | date: Thu Jan 01 00:00:22 1970 +0000
550 | | | | summary: (22) merge two known; one far left, one far right
550 | | | | summary: (22) merge two known; one far left, one far right
551 | | | |
551 | | | |
552 o | | | changeset: 21:d42a756af44d
552 o | | | changeset: 21:d42a756af44d
553 |\ \ \ \ parent: 19:31ddc2c1573b
553 |\ \ \ \ parent: 19:31ddc2c1573b
554 | | | | | parent: 20:d30ed6450e32
554 | | | | | parent: 20:d30ed6450e32
555 | | | | | user: test
555 | | | | | user: test
556 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
556 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
557 | | | | | summary: (21) expand
557 | | | | | summary: (21) expand
558 | | | | |
558 | | | | |
559 | o---+-+ changeset: 20:d30ed6450e32
559 | o---+-+ changeset: 20:d30ed6450e32
560 | | | | parent: 0:e6eb3150255d
560 | | | | parent: 0:e6eb3150255d
561 | / / / parent: 18:1aa84d96232a
561 | / / / parent: 18:1aa84d96232a
562 | | | | user: test
562 | | | | user: test
563 | | | | date: Thu Jan 01 00:00:20 1970 +0000
563 | | | | date: Thu Jan 01 00:00:20 1970 +0000
564 | | | | summary: (20) merge two known; two far right
564 | | | | summary: (20) merge two known; two far right
565 | | | |
565 | | | |
566 o | | | changeset: 19:31ddc2c1573b
566 o | | | changeset: 19:31ddc2c1573b
567 |\ \ \ \ parent: 15:1dda3f72782d
567 |\ \ \ \ parent: 15:1dda3f72782d
568 | | | | | parent: 17:44765d7c06e0
568 | | | | | parent: 17:44765d7c06e0
569 | | | | | user: test
569 | | | | | user: test
570 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
570 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
571 | | | | | summary: (19) expand
571 | | | | | summary: (19) expand
572 | | | | |
572 | | | | |
573 +---+---o changeset: 18:1aa84d96232a
573 +---+---o changeset: 18:1aa84d96232a
574 | | | | parent: 1:6db2ef61d156
574 | | | | parent: 1:6db2ef61d156
575 | | | | parent: 15:1dda3f72782d
575 | | | | parent: 15:1dda3f72782d
576 | | | | user: test
576 | | | | user: test
577 | | | | date: Thu Jan 01 00:00:18 1970 +0000
577 | | | | date: Thu Jan 01 00:00:18 1970 +0000
578 | | | | summary: (18) merge two known; two far left
578 | | | | summary: (18) merge two known; two far left
579 | | | |
579 | | | |
580 | o | | changeset: 17:44765d7c06e0
580 | o | | changeset: 17:44765d7c06e0
581 | |\ \ \ parent: 12:86b91144a6e9
581 | |\ \ \ parent: 12:86b91144a6e9
582 | | | | | parent: 16:3677d192927d
582 | | | | | parent: 16:3677d192927d
583 | | | | | user: test
583 | | | | | user: test
584 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
584 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
585 | | | | | summary: (17) expand
585 | | | | | summary: (17) expand
586 | | | | |
586 | | | | |
587 | | o---+ changeset: 16:3677d192927d
587 | | o---+ changeset: 16:3677d192927d
588 | | | | | parent: 0:e6eb3150255d
588 | | | | | parent: 0:e6eb3150255d
589 | | |/ / parent: 1:6db2ef61d156
589 | | |/ / parent: 1:6db2ef61d156
590 | | | | user: test
590 | | | | user: test
591 | | | | date: Thu Jan 01 00:00:16 1970 +0000
591 | | | | date: Thu Jan 01 00:00:16 1970 +0000
592 | | | | summary: (16) merge two known; one immediate right, one near right
592 | | | | summary: (16) merge two known; one immediate right, one near right
593 | | | |
593 | | | |
594 o | | | changeset: 15:1dda3f72782d
594 o | | | changeset: 15:1dda3f72782d
595 |\ \ \ \ parent: 13:22d8966a97e3
595 |\ \ \ \ parent: 13:22d8966a97e3
596 | | | | | parent: 14:8eac370358ef
596 | | | | | parent: 14:8eac370358ef
597 | | | | | user: test
597 | | | | | user: test
598 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
598 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
599 | | | | | summary: (15) expand
599 | | | | | summary: (15) expand
600 | | | | |
600 | | | | |
601 | o-----+ changeset: 14:8eac370358ef
601 | o-----+ changeset: 14:8eac370358ef
602 | | | | | parent: 0:e6eb3150255d
602 | | | | | parent: 0:e6eb3150255d
603 | |/ / / parent: 12:86b91144a6e9
603 | |/ / / parent: 12:86b91144a6e9
604 | | | | user: test
604 | | | | user: test
605 | | | | date: Thu Jan 01 00:00:14 1970 +0000
605 | | | | date: Thu Jan 01 00:00:14 1970 +0000
606 | | | | summary: (14) merge two known; one immediate right, one far right
606 | | | | summary: (14) merge two known; one immediate right, one far right
607 | | | |
607 | | | |
608 o | | | changeset: 13:22d8966a97e3
608 o | | | changeset: 13:22d8966a97e3
609 |\ \ \ \ parent: 9:7010c0af0a35
609 |\ \ \ \ parent: 9:7010c0af0a35
610 | | | | | parent: 11:832d76e6bdf2
610 | | | | | parent: 11:832d76e6bdf2
611 | | | | | user: test
611 | | | | | user: test
612 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
612 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
613 | | | | | summary: (13) expand
613 | | | | | summary: (13) expand
614 | | | | |
614 | | | | |
615 +---o | | changeset: 12:86b91144a6e9
615 +---o | | changeset: 12:86b91144a6e9
616 | | |/ / parent: 1:6db2ef61d156
616 | | |/ / parent: 1:6db2ef61d156
617 | | | | parent: 9:7010c0af0a35
617 | | | | parent: 9:7010c0af0a35
618 | | | | user: test
618 | | | | user: test
619 | | | | date: Thu Jan 01 00:00:12 1970 +0000
619 | | | | date: Thu Jan 01 00:00:12 1970 +0000
620 | | | | summary: (12) merge two known; one immediate right, one far left
620 | | | | summary: (12) merge two known; one immediate right, one far left
621 | | | |
621 | | | |
622 | o | | changeset: 11:832d76e6bdf2
622 | o | | changeset: 11:832d76e6bdf2
623 | |\ \ \ parent: 6:b105a072e251
623 | |\ \ \ parent: 6:b105a072e251
624 | | | | | parent: 10:74c64d036d72
624 | | | | | parent: 10:74c64d036d72
625 | | | | | user: test
625 | | | | | user: test
626 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
626 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
627 | | | | | summary: (11) expand
627 | | | | | summary: (11) expand
628 | | | | |
628 | | | | |
629 | | o---+ changeset: 10:74c64d036d72
629 | | o---+ changeset: 10:74c64d036d72
630 | | | | | parent: 0:e6eb3150255d
630 | | | | | parent: 0:e6eb3150255d
631 | |/ / / parent: 6:b105a072e251
631 | |/ / / parent: 6:b105a072e251
632 | | | | user: test
632 | | | | user: test
633 | | | | date: Thu Jan 01 00:00:10 1970 +0000
633 | | | | date: Thu Jan 01 00:00:10 1970 +0000
634 | | | | summary: (10) merge two known; one immediate left, one near right
634 | | | | summary: (10) merge two known; one immediate left, one near right
635 | | | |
635 | | | |
636 o | | | changeset: 9:7010c0af0a35
636 o | | | changeset: 9:7010c0af0a35
637 |\ \ \ \ parent: 7:b632bb1b1224
637 |\ \ \ \ parent: 7:b632bb1b1224
638 | | | | | parent: 8:7a0b11f71937
638 | | | | | parent: 8:7a0b11f71937
639 | | | | | user: test
639 | | | | | user: test
640 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
640 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
641 | | | | | summary: (9) expand
641 | | | | | summary: (9) expand
642 | | | | |
642 | | | | |
643 | o-----+ changeset: 8:7a0b11f71937
643 | o-----+ changeset: 8:7a0b11f71937
644 | | | | | parent: 0:e6eb3150255d
644 | | | | | parent: 0:e6eb3150255d
645 |/ / / / parent: 7:b632bb1b1224
645 |/ / / / parent: 7:b632bb1b1224
646 | | | | user: test
646 | | | | user: test
647 | | | | date: Thu Jan 01 00:00:08 1970 +0000
647 | | | | date: Thu Jan 01 00:00:08 1970 +0000
648 | | | | summary: (8) merge two known; one immediate left, one far right
648 | | | | summary: (8) merge two known; one immediate left, one far right
649 | | | |
649 | | | |
650 o | | | changeset: 7:b632bb1b1224
650 o | | | changeset: 7:b632bb1b1224
651 |\ \ \ \ parent: 2:3d9a33b8d1e1
651 |\ \ \ \ parent: 2:3d9a33b8d1e1
652 | | | | | parent: 5:4409d547b708
652 | | | | | parent: 5:4409d547b708
653 | | | | | user: test
653 | | | | | user: test
654 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
654 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
655 | | | | | summary: (7) expand
655 | | | | | summary: (7) expand
656 | | | | |
656 | | | | |
657 +---o | | changeset: 6:b105a072e251
657 +---o | | changeset: 6:b105a072e251
658 | |/ / / parent: 2:3d9a33b8d1e1
658 | |/ / / parent: 2:3d9a33b8d1e1
659 | | | | parent: 5:4409d547b708
659 | | | | parent: 5:4409d547b708
660 | | | | user: test
660 | | | | user: test
661 | | | | date: Thu Jan 01 00:00:06 1970 +0000
661 | | | | date: Thu Jan 01 00:00:06 1970 +0000
662 | | | | summary: (6) merge two known; one immediate left, one far left
662 | | | | summary: (6) merge two known; one immediate left, one far left
663 | | | |
663 | | | |
664 | o | | changeset: 5:4409d547b708
664 | o | | changeset: 5:4409d547b708
665 | |\ \ \ parent: 3:27eef8ed80b4
665 | |\ \ \ parent: 3:27eef8ed80b4
666 | | | | | parent: 4:26a8bac39d9f
666 | | | | | parent: 4:26a8bac39d9f
667 | | | | | user: test
667 | | | | | user: test
668 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
668 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
669 | | | | | summary: (5) expand
669 | | | | | summary: (5) expand
670 | | | | |
670 | | | | |
671 | | o | | changeset: 4:26a8bac39d9f
671 | | o | | changeset: 4:26a8bac39d9f
672 | |/|/ / parent: 1:6db2ef61d156
672 | |/|/ / parent: 1:6db2ef61d156
673 | | | | parent: 3:27eef8ed80b4
673 | | | | parent: 3:27eef8ed80b4
674 | | | | user: test
674 | | | | user: test
675 | | | | date: Thu Jan 01 00:00:04 1970 +0000
675 | | | | date: Thu Jan 01 00:00:04 1970 +0000
676 | | | | summary: (4) merge two known; one immediate left, one immediate right
676 | | | | summary: (4) merge two known; one immediate left, one immediate right
677 | | | |
677 | | | |
678 | o | | changeset: 3:27eef8ed80b4
678 | o | | changeset: 3:27eef8ed80b4
679 |/ / / user: test
679 |/ / / user: test
680 | | | date: Thu Jan 01 00:00:03 1970 +0000
680 | | | date: Thu Jan 01 00:00:03 1970 +0000
681 | | | summary: (3) collapse
681 | | | summary: (3) collapse
682 | | |
682 | | |
683 o | | changeset: 2:3d9a33b8d1e1
683 o | | changeset: 2:3d9a33b8d1e1
684 |/ / user: test
684 |/ / user: test
685 | | date: Thu Jan 01 00:00:02 1970 +0000
685 | | date: Thu Jan 01 00:00:02 1970 +0000
686 | | summary: (2) collapse
686 | | summary: (2) collapse
687 | |
687 | |
688 o | changeset: 1:6db2ef61d156
688 o | changeset: 1:6db2ef61d156
689 |/ user: test
689 |/ user: test
690 | date: Thu Jan 01 00:00:01 1970 +0000
690 | date: Thu Jan 01 00:00:01 1970 +0000
691 | summary: (1) collapse
691 | summary: (1) collapse
692 |
692 |
693 o changeset: 0:e6eb3150255d
693 o changeset: 0:e6eb3150255d
694 user: test
694 user: test
695 date: Thu Jan 01 00:00:00 1970 +0000
695 date: Thu Jan 01 00:00:00 1970 +0000
696 summary: (0) root
696 summary: (0) root
697
697
698
698
699 File glog per revset:
699 File glog per revset:
700
700
701 $ hg log -G -r 'file("a")'
701 $ hg log -G -r 'file("a")'
702 @ changeset: 34:fea3ac5810e0
702 @ changeset: 34:fea3ac5810e0
703 | tag: tip
703 | tag: tip
704 | parent: 32:d06dffa21a31
704 | parent: 32:d06dffa21a31
705 | user: test
705 | user: test
706 | date: Thu Jan 01 00:00:34 1970 +0000
706 | date: Thu Jan 01 00:00:34 1970 +0000
707 | summary: (34) head
707 | summary: (34) head
708 |
708 |
709 | o changeset: 33:68608f5145f9
709 | o changeset: 33:68608f5145f9
710 | | parent: 18:1aa84d96232a
710 | | parent: 18:1aa84d96232a
711 | | user: test
711 | | user: test
712 | | date: Thu Jan 01 00:00:33 1970 +0000
712 | | date: Thu Jan 01 00:00:33 1970 +0000
713 | | summary: (33) head
713 | | summary: (33) head
714 | |
714 | |
715 o | changeset: 32:d06dffa21a31
715 o | changeset: 32:d06dffa21a31
716 |\ \ parent: 27:886ed638191b
716 |\ \ parent: 27:886ed638191b
717 | | | parent: 31:621d83e11f67
717 | | | parent: 31:621d83e11f67
718 | | | user: test
718 | | | user: test
719 | | | date: Thu Jan 01 00:00:32 1970 +0000
719 | | | date: Thu Jan 01 00:00:32 1970 +0000
720 | | | summary: (32) expand
720 | | | summary: (32) expand
721 | | |
721 | | |
722 | o | changeset: 31:621d83e11f67
722 | o | changeset: 31:621d83e11f67
723 | |\ \ parent: 21:d42a756af44d
723 | |\ \ parent: 21:d42a756af44d
724 | | | | parent: 30:6e11cd4b648f
724 | | | | parent: 30:6e11cd4b648f
725 | | | | user: test
725 | | | | user: test
726 | | | | date: Thu Jan 01 00:00:31 1970 +0000
726 | | | | date: Thu Jan 01 00:00:31 1970 +0000
727 | | | | summary: (31) expand
727 | | | | summary: (31) expand
728 | | | |
728 | | | |
729 | | o | changeset: 30:6e11cd4b648f
729 | | o | changeset: 30:6e11cd4b648f
730 | | |\ \ parent: 28:44ecd0b9ae99
730 | | |\ \ parent: 28:44ecd0b9ae99
731 | | | | | parent: 29:cd9bb2be7593
731 | | | | | parent: 29:cd9bb2be7593
732 | | | | | user: test
732 | | | | | user: test
733 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
733 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
734 | | | | | summary: (30) expand
734 | | | | | summary: (30) expand
735 | | | | |
735 | | | | |
736 | | | o | changeset: 29:cd9bb2be7593
736 | | | o | changeset: 29:cd9bb2be7593
737 | | | | | parent: 0:e6eb3150255d
737 | | | | | parent: 0:e6eb3150255d
738 | | | | | user: test
738 | | | | | user: test
739 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
739 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
740 | | | | | summary: (29) regular commit
740 | | | | | summary: (29) regular commit
741 | | | | |
741 | | | | |
742 | | o | | changeset: 28:44ecd0b9ae99
742 | | o | | changeset: 28:44ecd0b9ae99
743 | | |\ \ \ parent: 1:6db2ef61d156
743 | | |\ \ \ parent: 1:6db2ef61d156
744 | | | | | | parent: 26:7f25b6c2f0b9
744 | | | | | | parent: 26:7f25b6c2f0b9
745 | | | | | | user: test
745 | | | | | | user: test
746 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
746 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
747 | | | | | | summary: (28) merge zero known
747 | | | | | | summary: (28) merge zero known
748 | | | | | |
748 | | | | | |
749 o | | | | | changeset: 27:886ed638191b
749 o | | | | | changeset: 27:886ed638191b
750 |/ / / / / parent: 21:d42a756af44d
750 |/ / / / / parent: 21:d42a756af44d
751 | | | | | user: test
751 | | | | | user: test
752 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
752 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
753 | | | | | summary: (27) collapse
753 | | | | | summary: (27) collapse
754 | | | | |
754 | | | | |
755 | | o---+ changeset: 26:7f25b6c2f0b9
755 | | o---+ changeset: 26:7f25b6c2f0b9
756 | | | | | parent: 18:1aa84d96232a
756 | | | | | parent: 18:1aa84d96232a
757 | | | | | parent: 25:91da8ed57247
757 | | | | | parent: 25:91da8ed57247
758 | | | | | user: test
758 | | | | | user: test
759 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
759 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
760 | | | | | summary: (26) merge one known; far right
760 | | | | | summary: (26) merge one known; far right
761 | | | | |
761 | | | | |
762 +---o | | changeset: 25:91da8ed57247
762 +---o | | changeset: 25:91da8ed57247
763 | | | | | parent: 21:d42a756af44d
763 | | | | | parent: 21:d42a756af44d
764 | | | | | parent: 24:a9c19a3d96b7
764 | | | | | parent: 24:a9c19a3d96b7
765 | | | | | user: test
765 | | | | | user: test
766 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
766 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
767 | | | | | summary: (25) merge one known; far left
767 | | | | | summary: (25) merge one known; far left
768 | | | | |
768 | | | | |
769 | | o | | changeset: 24:a9c19a3d96b7
769 | | o | | changeset: 24:a9c19a3d96b7
770 | | |\| | parent: 0:e6eb3150255d
770 | | |\| | parent: 0:e6eb3150255d
771 | | | | | parent: 23:a01cddf0766d
771 | | | | | parent: 23:a01cddf0766d
772 | | | | | user: test
772 | | | | | user: test
773 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
773 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
774 | | | | | summary: (24) merge one known; immediate right
774 | | | | | summary: (24) merge one known; immediate right
775 | | | | |
775 | | | | |
776 | | o | | changeset: 23:a01cddf0766d
776 | | o | | changeset: 23:a01cddf0766d
777 | |/| | | parent: 1:6db2ef61d156
777 | |/| | | parent: 1:6db2ef61d156
778 | | | | | parent: 22:e0d9cccacb5d
778 | | | | | parent: 22:e0d9cccacb5d
779 | | | | | user: test
779 | | | | | user: test
780 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
780 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
781 | | | | | summary: (23) merge one known; immediate left
781 | | | | | summary: (23) merge one known; immediate left
782 | | | | |
782 | | | | |
783 +---o---+ changeset: 22:e0d9cccacb5d
783 +---o---+ changeset: 22:e0d9cccacb5d
784 | | | | parent: 18:1aa84d96232a
784 | | | | parent: 18:1aa84d96232a
785 | | / / parent: 21:d42a756af44d
785 | | / / parent: 21:d42a756af44d
786 | | | | user: test
786 | | | | user: test
787 | | | | date: Thu Jan 01 00:00:22 1970 +0000
787 | | | | date: Thu Jan 01 00:00:22 1970 +0000
788 | | | | summary: (22) merge two known; one far left, one far right
788 | | | | summary: (22) merge two known; one far left, one far right
789 | | | |
789 | | | |
790 o | | | changeset: 21:d42a756af44d
790 o | | | changeset: 21:d42a756af44d
791 |\ \ \ \ parent: 19:31ddc2c1573b
791 |\ \ \ \ parent: 19:31ddc2c1573b
792 | | | | | parent: 20:d30ed6450e32
792 | | | | | parent: 20:d30ed6450e32
793 | | | | | user: test
793 | | | | | user: test
794 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
794 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
795 | | | | | summary: (21) expand
795 | | | | | summary: (21) expand
796 | | | | |
796 | | | | |
797 | o---+-+ changeset: 20:d30ed6450e32
797 | o---+-+ changeset: 20:d30ed6450e32
798 | | | | parent: 0:e6eb3150255d
798 | | | | parent: 0:e6eb3150255d
799 | / / / parent: 18:1aa84d96232a
799 | / / / parent: 18:1aa84d96232a
800 | | | | user: test
800 | | | | user: test
801 | | | | date: Thu Jan 01 00:00:20 1970 +0000
801 | | | | date: Thu Jan 01 00:00:20 1970 +0000
802 | | | | summary: (20) merge two known; two far right
802 | | | | summary: (20) merge two known; two far right
803 | | | |
803 | | | |
804 o | | | changeset: 19:31ddc2c1573b
804 o | | | changeset: 19:31ddc2c1573b
805 |\ \ \ \ parent: 15:1dda3f72782d
805 |\ \ \ \ parent: 15:1dda3f72782d
806 | | | | | parent: 17:44765d7c06e0
806 | | | | | parent: 17:44765d7c06e0
807 | | | | | user: test
807 | | | | | user: test
808 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
808 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
809 | | | | | summary: (19) expand
809 | | | | | summary: (19) expand
810 | | | | |
810 | | | | |
811 +---+---o changeset: 18:1aa84d96232a
811 +---+---o changeset: 18:1aa84d96232a
812 | | | | parent: 1:6db2ef61d156
812 | | | | parent: 1:6db2ef61d156
813 | | | | parent: 15:1dda3f72782d
813 | | | | parent: 15:1dda3f72782d
814 | | | | user: test
814 | | | | user: test
815 | | | | date: Thu Jan 01 00:00:18 1970 +0000
815 | | | | date: Thu Jan 01 00:00:18 1970 +0000
816 | | | | summary: (18) merge two known; two far left
816 | | | | summary: (18) merge two known; two far left
817 | | | |
817 | | | |
818 | o | | changeset: 17:44765d7c06e0
818 | o | | changeset: 17:44765d7c06e0
819 | |\ \ \ parent: 12:86b91144a6e9
819 | |\ \ \ parent: 12:86b91144a6e9
820 | | | | | parent: 16:3677d192927d
820 | | | | | parent: 16:3677d192927d
821 | | | | | user: test
821 | | | | | user: test
822 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
822 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
823 | | | | | summary: (17) expand
823 | | | | | summary: (17) expand
824 | | | | |
824 | | | | |
825 | | o---+ changeset: 16:3677d192927d
825 | | o---+ changeset: 16:3677d192927d
826 | | | | | parent: 0:e6eb3150255d
826 | | | | | parent: 0:e6eb3150255d
827 | | |/ / parent: 1:6db2ef61d156
827 | | |/ / parent: 1:6db2ef61d156
828 | | | | user: test
828 | | | | user: test
829 | | | | date: Thu Jan 01 00:00:16 1970 +0000
829 | | | | date: Thu Jan 01 00:00:16 1970 +0000
830 | | | | summary: (16) merge two known; one immediate right, one near right
830 | | | | summary: (16) merge two known; one immediate right, one near right
831 | | | |
831 | | | |
832 o | | | changeset: 15:1dda3f72782d
832 o | | | changeset: 15:1dda3f72782d
833 |\ \ \ \ parent: 13:22d8966a97e3
833 |\ \ \ \ parent: 13:22d8966a97e3
834 | | | | | parent: 14:8eac370358ef
834 | | | | | parent: 14:8eac370358ef
835 | | | | | user: test
835 | | | | | user: test
836 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
836 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
837 | | | | | summary: (15) expand
837 | | | | | summary: (15) expand
838 | | | | |
838 | | | | |
839 | o-----+ changeset: 14:8eac370358ef
839 | o-----+ changeset: 14:8eac370358ef
840 | | | | | parent: 0:e6eb3150255d
840 | | | | | parent: 0:e6eb3150255d
841 | |/ / / parent: 12:86b91144a6e9
841 | |/ / / parent: 12:86b91144a6e9
842 | | | | user: test
842 | | | | user: test
843 | | | | date: Thu Jan 01 00:00:14 1970 +0000
843 | | | | date: Thu Jan 01 00:00:14 1970 +0000
844 | | | | summary: (14) merge two known; one immediate right, one far right
844 | | | | summary: (14) merge two known; one immediate right, one far right
845 | | | |
845 | | | |
846 o | | | changeset: 13:22d8966a97e3
846 o | | | changeset: 13:22d8966a97e3
847 |\ \ \ \ parent: 9:7010c0af0a35
847 |\ \ \ \ parent: 9:7010c0af0a35
848 | | | | | parent: 11:832d76e6bdf2
848 | | | | | parent: 11:832d76e6bdf2
849 | | | | | user: test
849 | | | | | user: test
850 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
850 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
851 | | | | | summary: (13) expand
851 | | | | | summary: (13) expand
852 | | | | |
852 | | | | |
853 +---o | | changeset: 12:86b91144a6e9
853 +---o | | changeset: 12:86b91144a6e9
854 | | |/ / parent: 1:6db2ef61d156
854 | | |/ / parent: 1:6db2ef61d156
855 | | | | parent: 9:7010c0af0a35
855 | | | | parent: 9:7010c0af0a35
856 | | | | user: test
856 | | | | user: test
857 | | | | date: Thu Jan 01 00:00:12 1970 +0000
857 | | | | date: Thu Jan 01 00:00:12 1970 +0000
858 | | | | summary: (12) merge two known; one immediate right, one far left
858 | | | | summary: (12) merge two known; one immediate right, one far left
859 | | | |
859 | | | |
860 | o | | changeset: 11:832d76e6bdf2
860 | o | | changeset: 11:832d76e6bdf2
861 | |\ \ \ parent: 6:b105a072e251
861 | |\ \ \ parent: 6:b105a072e251
862 | | | | | parent: 10:74c64d036d72
862 | | | | | parent: 10:74c64d036d72
863 | | | | | user: test
863 | | | | | user: test
864 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
864 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
865 | | | | | summary: (11) expand
865 | | | | | summary: (11) expand
866 | | | | |
866 | | | | |
867 | | o---+ changeset: 10:74c64d036d72
867 | | o---+ changeset: 10:74c64d036d72
868 | | | | | parent: 0:e6eb3150255d
868 | | | | | parent: 0:e6eb3150255d
869 | |/ / / parent: 6:b105a072e251
869 | |/ / / parent: 6:b105a072e251
870 | | | | user: test
870 | | | | user: test
871 | | | | date: Thu Jan 01 00:00:10 1970 +0000
871 | | | | date: Thu Jan 01 00:00:10 1970 +0000
872 | | | | summary: (10) merge two known; one immediate left, one near right
872 | | | | summary: (10) merge two known; one immediate left, one near right
873 | | | |
873 | | | |
874 o | | | changeset: 9:7010c0af0a35
874 o | | | changeset: 9:7010c0af0a35
875 |\ \ \ \ parent: 7:b632bb1b1224
875 |\ \ \ \ parent: 7:b632bb1b1224
876 | | | | | parent: 8:7a0b11f71937
876 | | | | | parent: 8:7a0b11f71937
877 | | | | | user: test
877 | | | | | user: test
878 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
878 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
879 | | | | | summary: (9) expand
879 | | | | | summary: (9) expand
880 | | | | |
880 | | | | |
881 | o-----+ changeset: 8:7a0b11f71937
881 | o-----+ changeset: 8:7a0b11f71937
882 | | | | | parent: 0:e6eb3150255d
882 | | | | | parent: 0:e6eb3150255d
883 |/ / / / parent: 7:b632bb1b1224
883 |/ / / / parent: 7:b632bb1b1224
884 | | | | user: test
884 | | | | user: test
885 | | | | date: Thu Jan 01 00:00:08 1970 +0000
885 | | | | date: Thu Jan 01 00:00:08 1970 +0000
886 | | | | summary: (8) merge two known; one immediate left, one far right
886 | | | | summary: (8) merge two known; one immediate left, one far right
887 | | | |
887 | | | |
888 o | | | changeset: 7:b632bb1b1224
888 o | | | changeset: 7:b632bb1b1224
889 |\ \ \ \ parent: 2:3d9a33b8d1e1
889 |\ \ \ \ parent: 2:3d9a33b8d1e1
890 | | | | | parent: 5:4409d547b708
890 | | | | | parent: 5:4409d547b708
891 | | | | | user: test
891 | | | | | user: test
892 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
892 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
893 | | | | | summary: (7) expand
893 | | | | | summary: (7) expand
894 | | | | |
894 | | | | |
895 +---o | | changeset: 6:b105a072e251
895 +---o | | changeset: 6:b105a072e251
896 | |/ / / parent: 2:3d9a33b8d1e1
896 | |/ / / parent: 2:3d9a33b8d1e1
897 | | | | parent: 5:4409d547b708
897 | | | | parent: 5:4409d547b708
898 | | | | user: test
898 | | | | user: test
899 | | | | date: Thu Jan 01 00:00:06 1970 +0000
899 | | | | date: Thu Jan 01 00:00:06 1970 +0000
900 | | | | summary: (6) merge two known; one immediate left, one far left
900 | | | | summary: (6) merge two known; one immediate left, one far left
901 | | | |
901 | | | |
902 | o | | changeset: 5:4409d547b708
902 | o | | changeset: 5:4409d547b708
903 | |\ \ \ parent: 3:27eef8ed80b4
903 | |\ \ \ parent: 3:27eef8ed80b4
904 | | | | | parent: 4:26a8bac39d9f
904 | | | | | parent: 4:26a8bac39d9f
905 | | | | | user: test
905 | | | | | user: test
906 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
906 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
907 | | | | | summary: (5) expand
907 | | | | | summary: (5) expand
908 | | | | |
908 | | | | |
909 | | o | | changeset: 4:26a8bac39d9f
909 | | o | | changeset: 4:26a8bac39d9f
910 | |/|/ / parent: 1:6db2ef61d156
910 | |/|/ / parent: 1:6db2ef61d156
911 | | | | parent: 3:27eef8ed80b4
911 | | | | parent: 3:27eef8ed80b4
912 | | | | user: test
912 | | | | user: test
913 | | | | date: Thu Jan 01 00:00:04 1970 +0000
913 | | | | date: Thu Jan 01 00:00:04 1970 +0000
914 | | | | summary: (4) merge two known; one immediate left, one immediate right
914 | | | | summary: (4) merge two known; one immediate left, one immediate right
915 | | | |
915 | | | |
916 | o | | changeset: 3:27eef8ed80b4
916 | o | | changeset: 3:27eef8ed80b4
917 |/ / / user: test
917 |/ / / user: test
918 | | | date: Thu Jan 01 00:00:03 1970 +0000
918 | | | date: Thu Jan 01 00:00:03 1970 +0000
919 | | | summary: (3) collapse
919 | | | summary: (3) collapse
920 | | |
920 | | |
921 o | | changeset: 2:3d9a33b8d1e1
921 o | | changeset: 2:3d9a33b8d1e1
922 |/ / user: test
922 |/ / user: test
923 | | date: Thu Jan 01 00:00:02 1970 +0000
923 | | date: Thu Jan 01 00:00:02 1970 +0000
924 | | summary: (2) collapse
924 | | summary: (2) collapse
925 | |
925 | |
926 o | changeset: 1:6db2ef61d156
926 o | changeset: 1:6db2ef61d156
927 |/ user: test
927 |/ user: test
928 | date: Thu Jan 01 00:00:01 1970 +0000
928 | date: Thu Jan 01 00:00:01 1970 +0000
929 | summary: (1) collapse
929 | summary: (1) collapse
930 |
930 |
931 o changeset: 0:e6eb3150255d
931 o changeset: 0:e6eb3150255d
932 user: test
932 user: test
933 date: Thu Jan 01 00:00:00 1970 +0000
933 date: Thu Jan 01 00:00:00 1970 +0000
934 summary: (0) root
934 summary: (0) root
935
935
936
936
937
937
938 File glog per revset (only merges):
938 File glog per revset (only merges):
939
939
940 $ hg log -G -r 'file("a")' -m
940 $ hg log -G -r 'file("a")' -m
941 o changeset: 32:d06dffa21a31
941 o changeset: 32:d06dffa21a31
942 |\ parent: 27:886ed638191b
942 |\ parent: 27:886ed638191b
943 | : parent: 31:621d83e11f67
943 | : parent: 31:621d83e11f67
944 | : user: test
944 | : user: test
945 | : date: Thu Jan 01 00:00:32 1970 +0000
945 | : date: Thu Jan 01 00:00:32 1970 +0000
946 | : summary: (32) expand
946 | : summary: (32) expand
947 | :
947 | :
948 o : changeset: 31:621d83e11f67
948 o : changeset: 31:621d83e11f67
949 |\: parent: 21:d42a756af44d
949 |\: parent: 21:d42a756af44d
950 | : parent: 30:6e11cd4b648f
950 | : parent: 30:6e11cd4b648f
951 | : user: test
951 | : user: test
952 | : date: Thu Jan 01 00:00:31 1970 +0000
952 | : date: Thu Jan 01 00:00:31 1970 +0000
953 | : summary: (31) expand
953 | : summary: (31) expand
954 | :
954 | :
955 o : changeset: 30:6e11cd4b648f
955 o : changeset: 30:6e11cd4b648f
956 |\ \ parent: 28:44ecd0b9ae99
956 |\ \ parent: 28:44ecd0b9ae99
957 | ~ : parent: 29:cd9bb2be7593
957 | ~ : parent: 29:cd9bb2be7593
958 | : user: test
958 | : user: test
959 | : date: Thu Jan 01 00:00:30 1970 +0000
959 | : date: Thu Jan 01 00:00:30 1970 +0000
960 | : summary: (30) expand
960 | : summary: (30) expand
961 | /
961 | /
962 o : changeset: 28:44ecd0b9ae99
962 o : changeset: 28:44ecd0b9ae99
963 |\ \ parent: 1:6db2ef61d156
963 |\ \ parent: 1:6db2ef61d156
964 | ~ : parent: 26:7f25b6c2f0b9
964 | ~ : parent: 26:7f25b6c2f0b9
965 | : user: test
965 | : user: test
966 | : date: Thu Jan 01 00:00:28 1970 +0000
966 | : date: Thu Jan 01 00:00:28 1970 +0000
967 | : summary: (28) merge zero known
967 | : summary: (28) merge zero known
968 | /
968 | /
969 o : changeset: 26:7f25b6c2f0b9
969 o : changeset: 26:7f25b6c2f0b9
970 |\ \ parent: 18:1aa84d96232a
970 |\ \ parent: 18:1aa84d96232a
971 | | : parent: 25:91da8ed57247
971 | | : parent: 25:91da8ed57247
972 | | : user: test
972 | | : user: test
973 | | : date: Thu Jan 01 00:00:26 1970 +0000
973 | | : date: Thu Jan 01 00:00:26 1970 +0000
974 | | : summary: (26) merge one known; far right
974 | | : summary: (26) merge one known; far right
975 | | :
975 | | :
976 | o : changeset: 25:91da8ed57247
976 | o : changeset: 25:91da8ed57247
977 | |\: parent: 21:d42a756af44d
977 | |\: parent: 21:d42a756af44d
978 | | : parent: 24:a9c19a3d96b7
978 | | : parent: 24:a9c19a3d96b7
979 | | : user: test
979 | | : user: test
980 | | : date: Thu Jan 01 00:00:25 1970 +0000
980 | | : date: Thu Jan 01 00:00:25 1970 +0000
981 | | : summary: (25) merge one known; far left
981 | | : summary: (25) merge one known; far left
982 | | :
982 | | :
983 | o : changeset: 24:a9c19a3d96b7
983 | o : changeset: 24:a9c19a3d96b7
984 | |\ \ parent: 0:e6eb3150255d
984 | |\ \ parent: 0:e6eb3150255d
985 | | ~ : parent: 23:a01cddf0766d
985 | | ~ : parent: 23:a01cddf0766d
986 | | : user: test
986 | | : user: test
987 | | : date: Thu Jan 01 00:00:24 1970 +0000
987 | | : date: Thu Jan 01 00:00:24 1970 +0000
988 | | : summary: (24) merge one known; immediate right
988 | | : summary: (24) merge one known; immediate right
989 | | /
989 | | /
990 | o : changeset: 23:a01cddf0766d
990 | o : changeset: 23:a01cddf0766d
991 | |\ \ parent: 1:6db2ef61d156
991 | |\ \ parent: 1:6db2ef61d156
992 | | ~ : parent: 22:e0d9cccacb5d
992 | | ~ : parent: 22:e0d9cccacb5d
993 | | : user: test
993 | | : user: test
994 | | : date: Thu Jan 01 00:00:23 1970 +0000
994 | | : date: Thu Jan 01 00:00:23 1970 +0000
995 | | : summary: (23) merge one known; immediate left
995 | | : summary: (23) merge one known; immediate left
996 | | /
996 | | /
997 | o : changeset: 22:e0d9cccacb5d
997 | o : changeset: 22:e0d9cccacb5d
998 |/:/ parent: 18:1aa84d96232a
998 |/:/ parent: 18:1aa84d96232a
999 | : parent: 21:d42a756af44d
999 | : parent: 21:d42a756af44d
1000 | : user: test
1000 | : user: test
1001 | : date: Thu Jan 01 00:00:22 1970 +0000
1001 | : date: Thu Jan 01 00:00:22 1970 +0000
1002 | : summary: (22) merge two known; one far left, one far right
1002 | : summary: (22) merge two known; one far left, one far right
1003 | :
1003 | :
1004 | o changeset: 21:d42a756af44d
1004 | o changeset: 21:d42a756af44d
1005 | |\ parent: 19:31ddc2c1573b
1005 | |\ parent: 19:31ddc2c1573b
1006 | | | parent: 20:d30ed6450e32
1006 | | | parent: 20:d30ed6450e32
1007 | | | user: test
1007 | | | user: test
1008 | | | date: Thu Jan 01 00:00:21 1970 +0000
1008 | | | date: Thu Jan 01 00:00:21 1970 +0000
1009 | | | summary: (21) expand
1009 | | | summary: (21) expand
1010 | | |
1010 | | |
1011 +---o changeset: 20:d30ed6450e32
1011 +---o changeset: 20:d30ed6450e32
1012 | | | parent: 0:e6eb3150255d
1012 | | | parent: 0:e6eb3150255d
1013 | | ~ parent: 18:1aa84d96232a
1013 | | ~ parent: 18:1aa84d96232a
1014 | | user: test
1014 | | user: test
1015 | | date: Thu Jan 01 00:00:20 1970 +0000
1015 | | date: Thu Jan 01 00:00:20 1970 +0000
1016 | | summary: (20) merge two known; two far right
1016 | | summary: (20) merge two known; two far right
1017 | |
1017 | |
1018 | o changeset: 19:31ddc2c1573b
1018 | o changeset: 19:31ddc2c1573b
1019 | |\ parent: 15:1dda3f72782d
1019 | |\ parent: 15:1dda3f72782d
1020 | | | parent: 17:44765d7c06e0
1020 | | | parent: 17:44765d7c06e0
1021 | | | user: test
1021 | | | user: test
1022 | | | date: Thu Jan 01 00:00:19 1970 +0000
1022 | | | date: Thu Jan 01 00:00:19 1970 +0000
1023 | | | summary: (19) expand
1023 | | | summary: (19) expand
1024 | | |
1024 | | |
1025 o | | changeset: 18:1aa84d96232a
1025 o | | changeset: 18:1aa84d96232a
1026 |\| | parent: 1:6db2ef61d156
1026 |\| | parent: 1:6db2ef61d156
1027 ~ | | parent: 15:1dda3f72782d
1027 ~ | | parent: 15:1dda3f72782d
1028 | | user: test
1028 | | user: test
1029 | | date: Thu Jan 01 00:00:18 1970 +0000
1029 | | date: Thu Jan 01 00:00:18 1970 +0000
1030 | | summary: (18) merge two known; two far left
1030 | | summary: (18) merge two known; two far left
1031 / /
1031 / /
1032 | o changeset: 17:44765d7c06e0
1032 | o changeset: 17:44765d7c06e0
1033 | |\ parent: 12:86b91144a6e9
1033 | |\ parent: 12:86b91144a6e9
1034 | | | parent: 16:3677d192927d
1034 | | | parent: 16:3677d192927d
1035 | | | user: test
1035 | | | user: test
1036 | | | date: Thu Jan 01 00:00:17 1970 +0000
1036 | | | date: Thu Jan 01 00:00:17 1970 +0000
1037 | | | summary: (17) expand
1037 | | | summary: (17) expand
1038 | | |
1038 | | |
1039 | | o changeset: 16:3677d192927d
1039 | | o changeset: 16:3677d192927d
1040 | | |\ parent: 0:e6eb3150255d
1040 | | |\ parent: 0:e6eb3150255d
1041 | | ~ ~ parent: 1:6db2ef61d156
1041 | | ~ ~ parent: 1:6db2ef61d156
1042 | | user: test
1042 | | user: test
1043 | | date: Thu Jan 01 00:00:16 1970 +0000
1043 | | date: Thu Jan 01 00:00:16 1970 +0000
1044 | | summary: (16) merge two known; one immediate right, one near right
1044 | | summary: (16) merge two known; one immediate right, one near right
1045 | |
1045 | |
1046 o | changeset: 15:1dda3f72782d
1046 o | changeset: 15:1dda3f72782d
1047 |\ \ parent: 13:22d8966a97e3
1047 |\ \ parent: 13:22d8966a97e3
1048 | | | parent: 14:8eac370358ef
1048 | | | parent: 14:8eac370358ef
1049 | | | user: test
1049 | | | user: test
1050 | | | date: Thu Jan 01 00:00:15 1970 +0000
1050 | | | date: Thu Jan 01 00:00:15 1970 +0000
1051 | | | summary: (15) expand
1051 | | | summary: (15) expand
1052 | | |
1052 | | |
1053 | o | changeset: 14:8eac370358ef
1053 | o | changeset: 14:8eac370358ef
1054 | |\| parent: 0:e6eb3150255d
1054 | |\| parent: 0:e6eb3150255d
1055 | ~ | parent: 12:86b91144a6e9
1055 | ~ | parent: 12:86b91144a6e9
1056 | | user: test
1056 | | user: test
1057 | | date: Thu Jan 01 00:00:14 1970 +0000
1057 | | date: Thu Jan 01 00:00:14 1970 +0000
1058 | | summary: (14) merge two known; one immediate right, one far right
1058 | | summary: (14) merge two known; one immediate right, one far right
1059 | /
1059 | /
1060 o | changeset: 13:22d8966a97e3
1060 o | changeset: 13:22d8966a97e3
1061 |\ \ parent: 9:7010c0af0a35
1061 |\ \ parent: 9:7010c0af0a35
1062 | | | parent: 11:832d76e6bdf2
1062 | | | parent: 11:832d76e6bdf2
1063 | | | user: test
1063 | | | user: test
1064 | | | date: Thu Jan 01 00:00:13 1970 +0000
1064 | | | date: Thu Jan 01 00:00:13 1970 +0000
1065 | | | summary: (13) expand
1065 | | | summary: (13) expand
1066 | | |
1066 | | |
1067 +---o changeset: 12:86b91144a6e9
1067 +---o changeset: 12:86b91144a6e9
1068 | | | parent: 1:6db2ef61d156
1068 | | | parent: 1:6db2ef61d156
1069 | | ~ parent: 9:7010c0af0a35
1069 | | ~ parent: 9:7010c0af0a35
1070 | | user: test
1070 | | user: test
1071 | | date: Thu Jan 01 00:00:12 1970 +0000
1071 | | date: Thu Jan 01 00:00:12 1970 +0000
1072 | | summary: (12) merge two known; one immediate right, one far left
1072 | | summary: (12) merge two known; one immediate right, one far left
1073 | |
1073 | |
1074 | o changeset: 11:832d76e6bdf2
1074 | o changeset: 11:832d76e6bdf2
1075 | |\ parent: 6:b105a072e251
1075 | |\ parent: 6:b105a072e251
1076 | | | parent: 10:74c64d036d72
1076 | | | parent: 10:74c64d036d72
1077 | | | user: test
1077 | | | user: test
1078 | | | date: Thu Jan 01 00:00:11 1970 +0000
1078 | | | date: Thu Jan 01 00:00:11 1970 +0000
1079 | | | summary: (11) expand
1079 | | | summary: (11) expand
1080 | | |
1080 | | |
1081 | | o changeset: 10:74c64d036d72
1081 | | o changeset: 10:74c64d036d72
1082 | |/| parent: 0:e6eb3150255d
1082 | |/| parent: 0:e6eb3150255d
1083 | | ~ parent: 6:b105a072e251
1083 | | ~ parent: 6:b105a072e251
1084 | | user: test
1084 | | user: test
1085 | | date: Thu Jan 01 00:00:10 1970 +0000
1085 | | date: Thu Jan 01 00:00:10 1970 +0000
1086 | | summary: (10) merge two known; one immediate left, one near right
1086 | | summary: (10) merge two known; one immediate left, one near right
1087 | |
1087 | |
1088 o | changeset: 9:7010c0af0a35
1088 o | changeset: 9:7010c0af0a35
1089 |\ \ parent: 7:b632bb1b1224
1089 |\ \ parent: 7:b632bb1b1224
1090 | | | parent: 8:7a0b11f71937
1090 | | | parent: 8:7a0b11f71937
1091 | | | user: test
1091 | | | user: test
1092 | | | date: Thu Jan 01 00:00:09 1970 +0000
1092 | | | date: Thu Jan 01 00:00:09 1970 +0000
1093 | | | summary: (9) expand
1093 | | | summary: (9) expand
1094 | | |
1094 | | |
1095 | o | changeset: 8:7a0b11f71937
1095 | o | changeset: 8:7a0b11f71937
1096 |/| | parent: 0:e6eb3150255d
1096 |/| | parent: 0:e6eb3150255d
1097 | ~ | parent: 7:b632bb1b1224
1097 | ~ | parent: 7:b632bb1b1224
1098 | | user: test
1098 | | user: test
1099 | | date: Thu Jan 01 00:00:08 1970 +0000
1099 | | date: Thu Jan 01 00:00:08 1970 +0000
1100 | | summary: (8) merge two known; one immediate left, one far right
1100 | | summary: (8) merge two known; one immediate left, one far right
1101 | /
1101 | /
1102 o | changeset: 7:b632bb1b1224
1102 o | changeset: 7:b632bb1b1224
1103 |\ \ parent: 2:3d9a33b8d1e1
1103 |\ \ parent: 2:3d9a33b8d1e1
1104 | ~ | parent: 5:4409d547b708
1104 | ~ | parent: 5:4409d547b708
1105 | | user: test
1105 | | user: test
1106 | | date: Thu Jan 01 00:00:07 1970 +0000
1106 | | date: Thu Jan 01 00:00:07 1970 +0000
1107 | | summary: (7) expand
1107 | | summary: (7) expand
1108 | /
1108 | /
1109 | o changeset: 6:b105a072e251
1109 | o changeset: 6:b105a072e251
1110 |/| parent: 2:3d9a33b8d1e1
1110 |/| parent: 2:3d9a33b8d1e1
1111 | ~ parent: 5:4409d547b708
1111 | ~ parent: 5:4409d547b708
1112 | user: test
1112 | user: test
1113 | date: Thu Jan 01 00:00:06 1970 +0000
1113 | date: Thu Jan 01 00:00:06 1970 +0000
1114 | summary: (6) merge two known; one immediate left, one far left
1114 | summary: (6) merge two known; one immediate left, one far left
1115 |
1115 |
1116 o changeset: 5:4409d547b708
1116 o changeset: 5:4409d547b708
1117 |\ parent: 3:27eef8ed80b4
1117 |\ parent: 3:27eef8ed80b4
1118 | ~ parent: 4:26a8bac39d9f
1118 | ~ parent: 4:26a8bac39d9f
1119 | user: test
1119 | user: test
1120 | date: Thu Jan 01 00:00:05 1970 +0000
1120 | date: Thu Jan 01 00:00:05 1970 +0000
1121 | summary: (5) expand
1121 | summary: (5) expand
1122 |
1122 |
1123 o changeset: 4:26a8bac39d9f
1123 o changeset: 4:26a8bac39d9f
1124 |\ parent: 1:6db2ef61d156
1124 |\ parent: 1:6db2ef61d156
1125 ~ ~ parent: 3:27eef8ed80b4
1125 ~ ~ parent: 3:27eef8ed80b4
1126 user: test
1126 user: test
1127 date: Thu Jan 01 00:00:04 1970 +0000
1127 date: Thu Jan 01 00:00:04 1970 +0000
1128 summary: (4) merge two known; one immediate left, one immediate right
1128 summary: (4) merge two known; one immediate left, one immediate right
1129
1129
1130
1130
1131
1131
1132 Empty revision range - display nothing:
1132 Empty revision range - display nothing:
1133 $ hg log -G -r 1..0
1133 $ hg log -G -r 1..0
1134
1134
1135 $ cd ..
1135 $ cd ..
1136
1136
1137 #if no-outer-repo
1137 #if no-outer-repo
1138
1138
1139 From outer space:
1139 From outer space:
1140 $ hg log -G -l1 repo
1140 $ hg log -G -l1 repo
1141 @ changeset: 34:fea3ac5810e0
1141 @ changeset: 34:fea3ac5810e0
1142 | tag: tip
1142 | tag: tip
1143 ~ parent: 32:d06dffa21a31
1143 ~ parent: 32:d06dffa21a31
1144 user: test
1144 user: test
1145 date: Thu Jan 01 00:00:34 1970 +0000
1145 date: Thu Jan 01 00:00:34 1970 +0000
1146 summary: (34) head
1146 summary: (34) head
1147
1147
1148 $ hg log -G -l1 repo/a
1148 $ hg log -G -l1 repo/a
1149 @ changeset: 34:fea3ac5810e0
1149 @ changeset: 34:fea3ac5810e0
1150 | tag: tip
1150 | tag: tip
1151 ~ parent: 32:d06dffa21a31
1151 ~ parent: 32:d06dffa21a31
1152 user: test
1152 user: test
1153 date: Thu Jan 01 00:00:34 1970 +0000
1153 date: Thu Jan 01 00:00:34 1970 +0000
1154 summary: (34) head
1154 summary: (34) head
1155
1155
1156 $ hg log -G -l1 repo/missing
1156 $ hg log -G -l1 repo/missing
1157
1157
1158 #endif
1158 #endif
1159
1159
1160 File log with revs != cset revs:
1160 File log with revs != cset revs:
1161 $ hg init flog
1161 $ hg init flog
1162 $ cd flog
1162 $ cd flog
1163 $ echo one >one
1163 $ echo one >one
1164 $ hg add one
1164 $ hg add one
1165 $ hg commit -mone
1165 $ hg commit -mone
1166 $ echo two >two
1166 $ echo two >two
1167 $ hg add two
1167 $ hg add two
1168 $ hg commit -mtwo
1168 $ hg commit -mtwo
1169 $ echo more >two
1169 $ echo more >two
1170 $ hg commit -mmore
1170 $ hg commit -mmore
1171 $ hg log -G two
1171 $ hg log -G two
1172 @ changeset: 2:12c28321755b
1172 @ changeset: 2:12c28321755b
1173 | tag: tip
1173 | tag: tip
1174 | user: test
1174 | user: test
1175 | date: Thu Jan 01 00:00:00 1970 +0000
1175 | date: Thu Jan 01 00:00:00 1970 +0000
1176 | summary: more
1176 | summary: more
1177 |
1177 |
1178 o changeset: 1:5ac72c0599bf
1178 o changeset: 1:5ac72c0599bf
1179 | user: test
1179 | user: test
1180 ~ date: Thu Jan 01 00:00:00 1970 +0000
1180 ~ date: Thu Jan 01 00:00:00 1970 +0000
1181 summary: two
1181 summary: two
1182
1182
1183
1183
1184 Issue1896: File log with explicit style
1184 Issue1896: File log with explicit style
1185 $ hg log -G --style=default one
1185 $ hg log -G --style=default one
1186 o changeset: 0:3d578b4a1f53
1186 o changeset: 0:3d578b4a1f53
1187 user: test
1187 user: test
1188 date: Thu Jan 01 00:00:00 1970 +0000
1188 date: Thu Jan 01 00:00:00 1970 +0000
1189 summary: one
1189 summary: one
1190
1190
1191 Issue2395: glog --style header and footer
1191 Issue2395: glog --style header and footer
1192 $ hg log -G --style=xml one
1192 $ hg log -G --style=xml one
1193 <?xml version="1.0"?>
1193 <?xml version="1.0"?>
1194 <log>
1194 <log>
1195 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1195 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1196 <author email="test">test</author>
1196 <author email="test">test</author>
1197 <date>1970-01-01T00:00:00+00:00</date>
1197 <date>1970-01-01T00:00:00+00:00</date>
1198 <msg xml:space="preserve">one</msg>
1198 <msg xml:space="preserve">one</msg>
1199 </logentry>
1199 </logentry>
1200 </log>
1200 </log>
1201
1201
1202 $ cd ..
1202 $ cd ..
1203
1203
1204 Incoming and outgoing:
1204 Incoming and outgoing:
1205
1205
1206 $ hg clone -U -r31 repo repo2
1206 $ hg clone -U -r31 repo repo2
1207 adding changesets
1207 adding changesets
1208 adding manifests
1208 adding manifests
1209 adding file changes
1209 adding file changes
1210 added 31 changesets with 31 changes to 1 files
1210 added 31 changesets with 31 changes to 1 files
1211 $ cd repo2
1211 $ cd repo2
1212
1212
1213 $ hg incoming --graph ../repo
1213 $ hg incoming --graph ../repo
1214 comparing with ../repo
1214 comparing with ../repo
1215 searching for changes
1215 searching for changes
1216 o changeset: 34:fea3ac5810e0
1216 o changeset: 34:fea3ac5810e0
1217 | tag: tip
1217 | tag: tip
1218 | parent: 32:d06dffa21a31
1218 | parent: 32:d06dffa21a31
1219 | user: test
1219 | user: test
1220 | date: Thu Jan 01 00:00:34 1970 +0000
1220 | date: Thu Jan 01 00:00:34 1970 +0000
1221 | summary: (34) head
1221 | summary: (34) head
1222 |
1222 |
1223 | o changeset: 33:68608f5145f9
1223 | o changeset: 33:68608f5145f9
1224 | parent: 18:1aa84d96232a
1224 | parent: 18:1aa84d96232a
1225 | user: test
1225 | user: test
1226 | date: Thu Jan 01 00:00:33 1970 +0000
1226 | date: Thu Jan 01 00:00:33 1970 +0000
1227 | summary: (33) head
1227 | summary: (33) head
1228 |
1228 |
1229 o changeset: 32:d06dffa21a31
1229 o changeset: 32:d06dffa21a31
1230 | parent: 27:886ed638191b
1230 | parent: 27:886ed638191b
1231 | parent: 31:621d83e11f67
1231 | parent: 31:621d83e11f67
1232 | user: test
1232 | user: test
1233 | date: Thu Jan 01 00:00:32 1970 +0000
1233 | date: Thu Jan 01 00:00:32 1970 +0000
1234 | summary: (32) expand
1234 | summary: (32) expand
1235 |
1235 |
1236 o changeset: 27:886ed638191b
1236 o changeset: 27:886ed638191b
1237 parent: 21:d42a756af44d
1237 parent: 21:d42a756af44d
1238 user: test
1238 user: test
1239 date: Thu Jan 01 00:00:27 1970 +0000
1239 date: Thu Jan 01 00:00:27 1970 +0000
1240 summary: (27) collapse
1240 summary: (27) collapse
1241
1241
1242 $ cd ..
1242 $ cd ..
1243
1243
1244 $ hg -R repo outgoing --graph repo2
1244 $ hg -R repo outgoing --graph repo2
1245 comparing with repo2
1245 comparing with repo2
1246 searching for changes
1246 searching for changes
1247 @ changeset: 34:fea3ac5810e0
1247 @ changeset: 34:fea3ac5810e0
1248 | tag: tip
1248 | tag: tip
1249 | parent: 32:d06dffa21a31
1249 | parent: 32:d06dffa21a31
1250 | user: test
1250 | user: test
1251 | date: Thu Jan 01 00:00:34 1970 +0000
1251 | date: Thu Jan 01 00:00:34 1970 +0000
1252 | summary: (34) head
1252 | summary: (34) head
1253 |
1253 |
1254 | o changeset: 33:68608f5145f9
1254 | o changeset: 33:68608f5145f9
1255 | parent: 18:1aa84d96232a
1255 | parent: 18:1aa84d96232a
1256 | user: test
1256 | user: test
1257 | date: Thu Jan 01 00:00:33 1970 +0000
1257 | date: Thu Jan 01 00:00:33 1970 +0000
1258 | summary: (33) head
1258 | summary: (33) head
1259 |
1259 |
1260 o changeset: 32:d06dffa21a31
1260 o changeset: 32:d06dffa21a31
1261 | parent: 27:886ed638191b
1261 | parent: 27:886ed638191b
1262 | parent: 31:621d83e11f67
1262 | parent: 31:621d83e11f67
1263 | user: test
1263 | user: test
1264 | date: Thu Jan 01 00:00:32 1970 +0000
1264 | date: Thu Jan 01 00:00:32 1970 +0000
1265 | summary: (32) expand
1265 | summary: (32) expand
1266 |
1266 |
1267 o changeset: 27:886ed638191b
1267 o changeset: 27:886ed638191b
1268 parent: 21:d42a756af44d
1268 parent: 21:d42a756af44d
1269 user: test
1269 user: test
1270 date: Thu Jan 01 00:00:27 1970 +0000
1270 date: Thu Jan 01 00:00:27 1970 +0000
1271 summary: (27) collapse
1271 summary: (27) collapse
1272
1272
1273
1273
1274 File + limit with revs != cset revs:
1274 File + limit with revs != cset revs:
1275 $ cd repo
1275 $ cd repo
1276 $ touch b
1276 $ touch b
1277 $ hg ci -Aqm0
1277 $ hg ci -Aqm0
1278 $ hg log -G -l2 a
1278 $ hg log -G -l2 a
1279 o changeset: 34:fea3ac5810e0
1279 o changeset: 34:fea3ac5810e0
1280 | parent: 32:d06dffa21a31
1280 | parent: 32:d06dffa21a31
1281 ~ user: test
1281 ~ user: test
1282 date: Thu Jan 01 00:00:34 1970 +0000
1282 date: Thu Jan 01 00:00:34 1970 +0000
1283 summary: (34) head
1283 summary: (34) head
1284
1284
1285 o changeset: 33:68608f5145f9
1285 o changeset: 33:68608f5145f9
1286 | parent: 18:1aa84d96232a
1286 | parent: 18:1aa84d96232a
1287 ~ user: test
1287 ~ user: test
1288 date: Thu Jan 01 00:00:33 1970 +0000
1288 date: Thu Jan 01 00:00:33 1970 +0000
1289 summary: (33) head
1289 summary: (33) head
1290
1290
1291
1291
1292 File + limit + -ra:b, (b - a) < limit:
1292 File + limit + -ra:b, (b - a) < limit:
1293 $ hg log -G -l3000 -r32:tip a
1293 $ hg log -G -l3000 -r32:tip a
1294 o changeset: 34:fea3ac5810e0
1294 o changeset: 34:fea3ac5810e0
1295 | parent: 32:d06dffa21a31
1295 | parent: 32:d06dffa21a31
1296 | user: test
1296 | user: test
1297 | date: Thu Jan 01 00:00:34 1970 +0000
1297 | date: Thu Jan 01 00:00:34 1970 +0000
1298 | summary: (34) head
1298 | summary: (34) head
1299 |
1299 |
1300 | o changeset: 33:68608f5145f9
1300 | o changeset: 33:68608f5145f9
1301 | | parent: 18:1aa84d96232a
1301 | | parent: 18:1aa84d96232a
1302 | ~ user: test
1302 | ~ user: test
1303 | date: Thu Jan 01 00:00:33 1970 +0000
1303 | date: Thu Jan 01 00:00:33 1970 +0000
1304 | summary: (33) head
1304 | summary: (33) head
1305 |
1305 |
1306 o changeset: 32:d06dffa21a31
1306 o changeset: 32:d06dffa21a31
1307 |\ parent: 27:886ed638191b
1307 |\ parent: 27:886ed638191b
1308 ~ ~ parent: 31:621d83e11f67
1308 ~ ~ parent: 31:621d83e11f67
1309 user: test
1309 user: test
1310 date: Thu Jan 01 00:00:32 1970 +0000
1310 date: Thu Jan 01 00:00:32 1970 +0000
1311 summary: (32) expand
1311 summary: (32) expand
1312
1312
1313
1313
1314 Point out a common and an uncommon unshown parent
1314 Point out a common and an uncommon unshown parent
1315
1315
1316 $ hg log -G -r 'rev(8) or rev(9)'
1316 $ hg log -G -r 'rev(8) or rev(9)'
1317 o changeset: 9:7010c0af0a35
1317 o changeset: 9:7010c0af0a35
1318 |\ parent: 7:b632bb1b1224
1318 |\ parent: 7:b632bb1b1224
1319 | ~ parent: 8:7a0b11f71937
1319 | ~ parent: 8:7a0b11f71937
1320 | user: test
1320 | user: test
1321 | date: Thu Jan 01 00:00:09 1970 +0000
1321 | date: Thu Jan 01 00:00:09 1970 +0000
1322 | summary: (9) expand
1322 | summary: (9) expand
1323 |
1323 |
1324 o changeset: 8:7a0b11f71937
1324 o changeset: 8:7a0b11f71937
1325 |\ parent: 0:e6eb3150255d
1325 |\ parent: 0:e6eb3150255d
1326 ~ ~ parent: 7:b632bb1b1224
1326 ~ ~ parent: 7:b632bb1b1224
1327 user: test
1327 user: test
1328 date: Thu Jan 01 00:00:08 1970 +0000
1328 date: Thu Jan 01 00:00:08 1970 +0000
1329 summary: (8) merge two known; one immediate left, one far right
1329 summary: (8) merge two known; one immediate left, one far right
1330
1330
1331
1331
1332 File + limit + -ra:b, b < tip:
1332 File + limit + -ra:b, b < tip:
1333
1333
1334 $ hg log -G -l1 -r32:34 a
1334 $ hg log -G -l1 -r32:34 a
1335 o changeset: 34:fea3ac5810e0
1335 o changeset: 34:fea3ac5810e0
1336 | parent: 32:d06dffa21a31
1336 | parent: 32:d06dffa21a31
1337 ~ user: test
1337 ~ user: test
1338 date: Thu Jan 01 00:00:34 1970 +0000
1338 date: Thu Jan 01 00:00:34 1970 +0000
1339 summary: (34) head
1339 summary: (34) head
1340
1340
1341
1341
1342 file(File) + limit + -ra:b, b < tip:
1342 file(File) + limit + -ra:b, b < tip:
1343
1343
1344 $ hg log -G -l1 -r32:34 -r 'file("a")'
1344 $ hg log -G -l1 -r32:34 -r 'file("a")'
1345 o changeset: 34:fea3ac5810e0
1345 o changeset: 34:fea3ac5810e0
1346 | parent: 32:d06dffa21a31
1346 | parent: 32:d06dffa21a31
1347 ~ user: test
1347 ~ user: test
1348 date: Thu Jan 01 00:00:34 1970 +0000
1348 date: Thu Jan 01 00:00:34 1970 +0000
1349 summary: (34) head
1349 summary: (34) head
1350
1350
1351
1351
1352 limit(file(File) and a::b), b < tip:
1352 limit(file(File) and a::b), b < tip:
1353
1353
1354 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1354 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1355 o changeset: 32:d06dffa21a31
1355 o changeset: 32:d06dffa21a31
1356 |\ parent: 27:886ed638191b
1356 |\ parent: 27:886ed638191b
1357 ~ ~ parent: 31:621d83e11f67
1357 ~ ~ parent: 31:621d83e11f67
1358 user: test
1358 user: test
1359 date: Thu Jan 01 00:00:32 1970 +0000
1359 date: Thu Jan 01 00:00:32 1970 +0000
1360 summary: (32) expand
1360 summary: (32) expand
1361
1361
1362
1362
1363 File + limit + -ra:b, b < tip:
1363 File + limit + -ra:b, b < tip:
1364
1364
1365 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1365 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1366
1366
1367 File + limit + -ra:b, b < tip, (b - a) < limit:
1367 File + limit + -ra:b, b < tip, (b - a) < limit:
1368
1368
1369 $ hg log -G -l10 -r33:34 a
1369 $ hg log -G -l10 -r33:34 a
1370 o changeset: 34:fea3ac5810e0
1370 o changeset: 34:fea3ac5810e0
1371 | parent: 32:d06dffa21a31
1371 | parent: 32:d06dffa21a31
1372 ~ user: test
1372 ~ user: test
1373 date: Thu Jan 01 00:00:34 1970 +0000
1373 date: Thu Jan 01 00:00:34 1970 +0000
1374 summary: (34) head
1374 summary: (34) head
1375
1375
1376 o changeset: 33:68608f5145f9
1376 o changeset: 33:68608f5145f9
1377 | parent: 18:1aa84d96232a
1377 | parent: 18:1aa84d96232a
1378 ~ user: test
1378 ~ user: test
1379 date: Thu Jan 01 00:00:33 1970 +0000
1379 date: Thu Jan 01 00:00:33 1970 +0000
1380 summary: (33) head
1380 summary: (33) head
1381
1381
1382
1382
1383 Do not crash or produce strange graphs if history is buggy
1383 Do not crash or produce strange graphs if history is buggy
1384
1384
1385 $ hg branch branch
1385 $ hg branch branch
1386 marked working directory as branch branch
1386 marked working directory as branch branch
1387 (branches are permanent and global, did you want a bookmark?)
1387 (branches are permanent and global, did you want a bookmark?)
1388 $ commit 36 "buggy merge: identical parents" 35 35
1388 $ commit 36 "buggy merge: identical parents" 35 35
1389 $ hg log -G -l5
1389 $ hg log -G -l5
1390 @ changeset: 36:08a19a744424
1390 @ changeset: 36:08a19a744424
1391 | branch: branch
1391 | branch: branch
1392 | tag: tip
1392 | tag: tip
1393 | parent: 35:9159c3644c5e
1393 | parent: 35:9159c3644c5e
1394 | parent: 35:9159c3644c5e
1394 | parent: 35:9159c3644c5e
1395 | user: test
1395 | user: test
1396 | date: Thu Jan 01 00:00:36 1970 +0000
1396 | date: Thu Jan 01 00:00:36 1970 +0000
1397 | summary: (36) buggy merge: identical parents
1397 | summary: (36) buggy merge: identical parents
1398 |
1398 |
1399 o changeset: 35:9159c3644c5e
1399 o changeset: 35:9159c3644c5e
1400 | user: test
1400 | user: test
1401 | date: Thu Jan 01 00:00:00 1970 +0000
1401 | date: Thu Jan 01 00:00:00 1970 +0000
1402 | summary: 0
1402 | summary: 0
1403 |
1403 |
1404 o changeset: 34:fea3ac5810e0
1404 o changeset: 34:fea3ac5810e0
1405 | parent: 32:d06dffa21a31
1405 | parent: 32:d06dffa21a31
1406 | user: test
1406 | user: test
1407 | date: Thu Jan 01 00:00:34 1970 +0000
1407 | date: Thu Jan 01 00:00:34 1970 +0000
1408 | summary: (34) head
1408 | summary: (34) head
1409 |
1409 |
1410 | o changeset: 33:68608f5145f9
1410 | o changeset: 33:68608f5145f9
1411 | | parent: 18:1aa84d96232a
1411 | | parent: 18:1aa84d96232a
1412 | ~ user: test
1412 | ~ user: test
1413 | date: Thu Jan 01 00:00:33 1970 +0000
1413 | date: Thu Jan 01 00:00:33 1970 +0000
1414 | summary: (33) head
1414 | summary: (33) head
1415 |
1415 |
1416 o changeset: 32:d06dffa21a31
1416 o changeset: 32:d06dffa21a31
1417 |\ parent: 27:886ed638191b
1417 |\ parent: 27:886ed638191b
1418 ~ ~ parent: 31:621d83e11f67
1418 ~ ~ parent: 31:621d83e11f67
1419 user: test
1419 user: test
1420 date: Thu Jan 01 00:00:32 1970 +0000
1420 date: Thu Jan 01 00:00:32 1970 +0000
1421 summary: (32) expand
1421 summary: (32) expand
1422
1422
1423
1423
1424 Test log -G options
1424 Test log -G options
1425
1425
1426 $ testlog() {
1426 $ testlog() {
1427 > hg log -G --print-revset "$@"
1427 > hg log -G --print-revset "$@"
1428 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1428 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1429 > | sed 's/.*nodetag/nodetag/' > log.nodes
1429 > | sed 's/.*nodetag/nodetag/' > log.nodes
1430 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1430 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1431 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1431 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1432 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1432 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1433 > | grep '^[-+@ ]' || :
1433 > | grep '^[-+@ ]' || :
1434 > }
1434 > }
1435
1435
1436 glog always reorders nodes which explains the difference with log
1436 glog always reorders nodes which explains the difference with log
1437
1437
1438 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1438 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1439 ['27', '25', '21', '34', '32', '31']
1439 ['27', '25', '21', '34', '32', '31']
1440 []
1440 []
1441 --- log.nodes * (glob)
1441 --- log.nodes * (glob)
1442 +++ glog.nodes * (glob)
1442 +++ glog.nodes * (glob)
1443 @@ -1,6 +1,6 @@
1443 @@ -1,6 +1,6 @@
1444 -nodetag 27
1444 -nodetag 27
1445 -nodetag 25
1445 -nodetag 25
1446 -nodetag 21
1446 -nodetag 21
1447 nodetag 34
1447 nodetag 34
1448 nodetag 32
1448 nodetag 32
1449 nodetag 31
1449 nodetag 31
1450 +nodetag 27
1450 +nodetag 27
1451 +nodetag 25
1451 +nodetag 25
1452 +nodetag 21
1452 +nodetag 21
1453 $ testlog -u test -u not-a-user
1453 $ testlog -u test -u not-a-user
1454 []
1454 []
1455 (group
1455 (group
1456 (group
1456 (group
1457 (or
1457 (or
1458 (func
1458 (func
1459 ('symbol', 'user')
1459 ('symbol', 'user')
1460 ('string', 'test'))
1460 ('string', 'test'))
1461 (func
1461 (func
1462 ('symbol', 'user')
1462 ('symbol', 'user')
1463 ('string', 'not-a-user')))))
1463 ('string', 'not-a-user')))))
1464 $ testlog -b not-a-branch
1464 $ testlog -b not-a-branch
1465 abort: unknown revision 'not-a-branch'!
1465 abort: unknown revision '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 $ testlog -b 35 -b 36 --only-branch branch
1468 $ testlog -b 35 -b 36 --only-branch branch
1469 []
1469 []
1470 (group
1470 (group
1471 (group
1471 (group
1472 (or
1472 (or
1473 (func
1473 (func
1474 ('symbol', 'branch')
1474 ('symbol', 'branch')
1475 ('string', 'default'))
1475 ('string', 'default'))
1476 (func
1476 (func
1477 ('symbol', 'branch')
1477 ('symbol', 'branch')
1478 ('string', 'branch'))
1478 ('string', 'branch'))
1479 (func
1479 (func
1480 ('symbol', 'branch')
1480 ('symbol', 'branch')
1481 ('string', 'branch')))))
1481 ('string', 'branch')))))
1482 $ testlog -k expand -k merge
1482 $ testlog -k expand -k merge
1483 []
1483 []
1484 (group
1484 (group
1485 (group
1485 (group
1486 (or
1486 (or
1487 (func
1487 (func
1488 ('symbol', 'keyword')
1488 ('symbol', 'keyword')
1489 ('string', 'expand'))
1489 ('string', 'expand'))
1490 (func
1490 (func
1491 ('symbol', 'keyword')
1491 ('symbol', 'keyword')
1492 ('string', 'merge')))))
1492 ('string', 'merge')))))
1493 $ testlog --only-merges
1493 $ testlog --only-merges
1494 []
1494 []
1495 (group
1495 (group
1496 (func
1496 (func
1497 ('symbol', 'merge')
1497 ('symbol', 'merge')
1498 None))
1498 None))
1499 $ testlog --no-merges
1499 $ testlog --no-merges
1500 []
1500 []
1501 (group
1501 (group
1502 (not
1502 (not
1503 (func
1503 (func
1504 ('symbol', 'merge')
1504 ('symbol', 'merge')
1505 None)))
1505 None)))
1506 $ testlog --date '2 0 to 4 0'
1506 $ testlog --date '2 0 to 4 0'
1507 []
1507 []
1508 (group
1508 (group
1509 (func
1509 (func
1510 ('symbol', 'date')
1510 ('symbol', 'date')
1511 ('string', '2 0 to 4 0')))
1511 ('string', '2 0 to 4 0')))
1512 $ hg log -G -d 'brace ) in a date'
1512 $ hg log -G -d 'brace ) in a date'
1513 abort: invalid date: 'brace ) in a date'
1513 abort: invalid date: 'brace ) in a date'
1514 [255]
1514 [255]
1515 $ testlog --prune 31 --prune 32
1515 $ testlog --prune 31 --prune 32
1516 []
1516 []
1517 (group
1517 (group
1518 (group
1518 (group
1519 (and
1519 (and
1520 (not
1520 (not
1521 (group
1521 (group
1522 (or
1522 (or
1523 ('string', '31')
1523 ('string', '31')
1524 (func
1524 (func
1525 ('symbol', 'ancestors')
1525 ('symbol', 'ancestors')
1526 ('string', '31')))))
1526 ('string', '31')))))
1527 (not
1527 (not
1528 (group
1528 (group
1529 (or
1529 (or
1530 ('string', '32')
1530 ('string', '32')
1531 (func
1531 (func
1532 ('symbol', 'ancestors')
1532 ('symbol', 'ancestors')
1533 ('string', '32'))))))))
1533 ('string', '32'))))))))
1534
1534
1535 Dedicated repo for --follow and paths filtering. The g is crafted to
1535 Dedicated repo for --follow and paths filtering. The g is crafted to
1536 have 2 filelog topological heads in a linear changeset graph.
1536 have 2 filelog topological heads in a linear changeset graph.
1537
1537
1538 $ cd ..
1538 $ cd ..
1539 $ hg init follow
1539 $ hg init follow
1540 $ cd follow
1540 $ cd follow
1541 $ testlog --follow
1541 $ testlog --follow
1542 []
1542 []
1543 []
1543 []
1544 $ testlog -rnull
1544 $ testlog -rnull
1545 ['null']
1545 ['null']
1546 []
1546 []
1547 $ echo a > a
1547 $ echo a > a
1548 $ echo aa > aa
1548 $ echo aa > aa
1549 $ echo f > f
1549 $ echo f > f
1550 $ hg ci -Am "add a" a aa f
1550 $ hg ci -Am "add a" a aa f
1551 $ hg cp a b
1551 $ hg cp a b
1552 $ hg cp f g
1552 $ hg cp f g
1553 $ hg ci -m "copy a b"
1553 $ hg ci -m "copy a b"
1554 $ mkdir dir
1554 $ mkdir dir
1555 $ hg mv b dir
1555 $ hg mv b dir
1556 $ echo g >> g
1556 $ echo g >> g
1557 $ echo f >> f
1557 $ echo f >> f
1558 $ hg ci -m "mv b dir/b"
1558 $ hg ci -m "mv b dir/b"
1559 $ hg mv a b
1559 $ hg mv a b
1560 $ hg cp -f f g
1560 $ hg cp -f f g
1561 $ echo a > d
1561 $ echo a > d
1562 $ hg add d
1562 $ hg add d
1563 $ hg ci -m "mv a b; add d"
1563 $ hg ci -m "mv a b; add d"
1564 $ hg mv dir/b e
1564 $ hg mv dir/b e
1565 $ hg ci -m "mv dir/b e"
1565 $ hg ci -m "mv dir/b e"
1566 $ hg log -G --template '({rev}) {desc|firstline}\n'
1566 $ hg log -G --template '({rev}) {desc|firstline}\n'
1567 @ (4) mv dir/b e
1567 @ (4) mv dir/b e
1568 |
1568 |
1569 o (3) mv a b; add d
1569 o (3) mv a b; add d
1570 |
1570 |
1571 o (2) mv b dir/b
1571 o (2) mv b dir/b
1572 |
1572 |
1573 o (1) copy a b
1573 o (1) copy a b
1574 |
1574 |
1575 o (0) add a
1575 o (0) add a
1576
1576
1577
1577
1578 $ testlog a
1578 $ testlog a
1579 []
1579 []
1580 (group
1580 (group
1581 (group
1581 (group
1582 (func
1582 (func
1583 ('symbol', 'filelog')
1583 ('symbol', 'filelog')
1584 ('string', 'a'))))
1584 ('string', 'a'))))
1585 $ testlog a b
1585 $ testlog a b
1586 []
1586 []
1587 (group
1587 (group
1588 (group
1588 (group
1589 (or
1589 (or
1590 (func
1590 (func
1591 ('symbol', 'filelog')
1591 ('symbol', 'filelog')
1592 ('string', 'a'))
1592 ('string', 'a'))
1593 (func
1593 (func
1594 ('symbol', 'filelog')
1594 ('symbol', 'filelog')
1595 ('string', 'b')))))
1595 ('string', 'b')))))
1596
1596
1597 Test falling back to slow path for non-existing files
1597 Test falling back to slow path for non-existing files
1598
1598
1599 $ testlog a c
1599 $ testlog a c
1600 []
1600 []
1601 (group
1601 (group
1602 (func
1602 (func
1603 ('symbol', '_matchfiles')
1603 ('symbol', '_matchfiles')
1604 (list
1604 (list
1605 ('string', 'r:')
1605 ('string', 'r:')
1606 ('string', 'd:relpath')
1606 ('string', 'd:relpath')
1607 ('string', 'p:a')
1607 ('string', 'p:a')
1608 ('string', 'p:c'))))
1608 ('string', 'p:c'))))
1609
1609
1610 Test multiple --include/--exclude/paths
1610 Test multiple --include/--exclude/paths
1611
1611
1612 $ testlog --include a --include e --exclude b --exclude e a e
1612 $ testlog --include a --include e --exclude b --exclude e a e
1613 []
1613 []
1614 (group
1614 (group
1615 (func
1615 (func
1616 ('symbol', '_matchfiles')
1616 ('symbol', '_matchfiles')
1617 (list
1617 (list
1618 ('string', 'r:')
1618 ('string', 'r:')
1619 ('string', 'd:relpath')
1619 ('string', 'd:relpath')
1620 ('string', 'p:a')
1620 ('string', 'p:a')
1621 ('string', 'p:e')
1621 ('string', 'p:e')
1622 ('string', 'i:a')
1622 ('string', 'i:a')
1623 ('string', 'i:e')
1623 ('string', 'i:e')
1624 ('string', 'x:b')
1624 ('string', 'x:b')
1625 ('string', 'x:e'))))
1625 ('string', 'x:e'))))
1626
1626
1627 Test glob expansion of pats
1627 Test glob expansion of pats
1628
1628
1629 $ expandglobs=`$PYTHON -c "import mercurial.util; \
1629 $ expandglobs=`$PYTHON -c "import mercurial.util; \
1630 > print mercurial.util.expandglobs and 'true' or 'false'"`
1630 > print mercurial.util.expandglobs and 'true' or 'false'"`
1631 $ if [ $expandglobs = "true" ]; then
1631 $ if [ $expandglobs = "true" ]; then
1632 > testlog 'a*';
1632 > testlog 'a*';
1633 > else
1633 > else
1634 > testlog a*;
1634 > testlog a*;
1635 > fi;
1635 > fi;
1636 []
1636 []
1637 (group
1637 (group
1638 (group
1638 (group
1639 (func
1639 (func
1640 ('symbol', 'filelog')
1640 ('symbol', 'filelog')
1641 ('string', 'aa'))))
1641 ('string', 'aa'))))
1642
1642
1643 Test --follow on a non-existent directory
1643 Test --follow on a non-existent directory
1644
1644
1645 $ testlog -f dir
1645 $ testlog -f dir
1646 abort: cannot follow file not in parent revision: "dir"
1646 abort: cannot follow file not in parent revision: "dir"
1647 abort: cannot follow file not in parent revision: "dir"
1647 abort: cannot follow file not in parent revision: "dir"
1648 abort: cannot follow file not in parent revision: "dir"
1648 abort: cannot follow file not in parent revision: "dir"
1649
1649
1650 Test --follow on a directory
1650 Test --follow on a directory
1651
1651
1652 $ hg up -q '.^'
1652 $ hg up -q '.^'
1653 $ testlog -f dir
1653 $ testlog -f dir
1654 []
1654 []
1655 (group
1655 (group
1656 (and
1656 (and
1657 (func
1657 (func
1658 ('symbol', 'ancestors')
1658 ('symbol', 'ancestors')
1659 ('symbol', '.'))
1659 ('symbol', '.'))
1660 (func
1660 (func
1661 ('symbol', '_matchfiles')
1661 ('symbol', '_matchfiles')
1662 (list
1662 (list
1663 ('string', 'r:')
1663 ('string', 'r:')
1664 ('string', 'd:relpath')
1664 ('string', 'd:relpath')
1665 ('string', 'p:dir')))))
1665 ('string', 'p:dir')))))
1666 $ hg up -q tip
1666 $ hg up -q tip
1667
1667
1668 Test --follow on file not in parent revision
1668 Test --follow on file not in parent revision
1669
1669
1670 $ testlog -f a
1670 $ testlog -f a
1671 abort: cannot follow file not in parent revision: "a"
1671 abort: cannot follow file not in parent revision: "a"
1672 abort: cannot follow file not in parent revision: "a"
1672 abort: cannot follow file not in parent revision: "a"
1673 abort: cannot follow file not in parent revision: "a"
1673 abort: cannot follow file not in parent revision: "a"
1674
1674
1675 Test --follow and patterns
1675 Test --follow and patterns
1676
1676
1677 $ testlog -f 'glob:*'
1677 $ testlog -f 'glob:*'
1678 []
1678 []
1679 (group
1679 (group
1680 (and
1680 (and
1681 (func
1681 (func
1682 ('symbol', 'ancestors')
1682 ('symbol', 'ancestors')
1683 ('symbol', '.'))
1683 ('symbol', '.'))
1684 (func
1684 (func
1685 ('symbol', '_matchfiles')
1685 ('symbol', '_matchfiles')
1686 (list
1686 (list
1687 ('string', 'r:')
1687 ('string', 'r:')
1688 ('string', 'd:relpath')
1688 ('string', 'd:relpath')
1689 ('string', 'p:glob:*')))))
1689 ('string', 'p:glob:*')))))
1690
1690
1691 Test --follow on a single rename
1691 Test --follow on a single rename
1692
1692
1693 $ hg up -q 2
1693 $ hg up -q 2
1694 $ testlog -f a
1694 $ testlog -f a
1695 []
1695 []
1696 (group
1696 (group
1697 (group
1697 (group
1698 (func
1698 (func
1699 ('symbol', 'follow')
1699 ('symbol', 'follow')
1700 ('string', 'a'))))
1700 ('string', 'a'))))
1701
1701
1702 Test --follow and multiple renames
1702 Test --follow and multiple renames
1703
1703
1704 $ hg up -q tip
1704 $ hg up -q tip
1705 $ testlog -f e
1705 $ testlog -f e
1706 []
1706 []
1707 (group
1707 (group
1708 (group
1708 (group
1709 (func
1709 (func
1710 ('symbol', 'follow')
1710 ('symbol', 'follow')
1711 ('string', 'e'))))
1711 ('string', 'e'))))
1712
1712
1713 Test --follow and multiple filelog heads
1713 Test --follow and multiple filelog heads
1714
1714
1715 $ hg up -q 2
1715 $ hg up -q 2
1716 $ testlog -f g
1716 $ testlog -f g
1717 []
1717 []
1718 (group
1718 (group
1719 (group
1719 (group
1720 (func
1720 (func
1721 ('symbol', 'follow')
1721 ('symbol', 'follow')
1722 ('string', 'g'))))
1722 ('string', 'g'))))
1723 $ cat log.nodes
1723 $ cat log.nodes
1724 nodetag 2
1724 nodetag 2
1725 nodetag 1
1725 nodetag 1
1726 nodetag 0
1726 nodetag 0
1727 $ hg up -q tip
1727 $ hg up -q tip
1728 $ testlog -f g
1728 $ testlog -f g
1729 []
1729 []
1730 (group
1730 (group
1731 (group
1731 (group
1732 (func
1732 (func
1733 ('symbol', 'follow')
1733 ('symbol', 'follow')
1734 ('string', 'g'))))
1734 ('string', 'g'))))
1735 $ cat log.nodes
1735 $ cat log.nodes
1736 nodetag 3
1736 nodetag 3
1737 nodetag 2
1737 nodetag 2
1738 nodetag 0
1738 nodetag 0
1739
1739
1740 Test --follow and multiple files
1740 Test --follow and multiple files
1741
1741
1742 $ testlog -f g e
1742 $ testlog -f g e
1743 []
1743 []
1744 (group
1744 (group
1745 (group
1745 (group
1746 (or
1746 (or
1747 (func
1747 (func
1748 ('symbol', 'follow')
1748 ('symbol', 'follow')
1749 ('string', 'g'))
1749 ('string', 'g'))
1750 (func
1750 (func
1751 ('symbol', 'follow')
1751 ('symbol', 'follow')
1752 ('string', 'e')))))
1752 ('string', 'e')))))
1753 $ cat log.nodes
1753 $ cat log.nodes
1754 nodetag 4
1754 nodetag 4
1755 nodetag 3
1755 nodetag 3
1756 nodetag 2
1756 nodetag 2
1757 nodetag 1
1757 nodetag 1
1758 nodetag 0
1758 nodetag 0
1759
1759
1760 Test --follow null parent
1760 Test --follow null parent
1761
1761
1762 $ hg up -q null
1762 $ hg up -q null
1763 $ testlog -f
1763 $ testlog -f
1764 []
1764 []
1765 []
1765 []
1766
1766
1767 Test --follow-first
1767 Test --follow-first
1768
1768
1769 $ hg up -q 3
1769 $ hg up -q 3
1770 $ echo ee > e
1770 $ echo ee > e
1771 $ hg ci -Am "add another e" e
1771 $ hg ci -Am "add another e" e
1772 created new head
1772 created new head
1773 $ hg merge --tool internal:other 4
1773 $ hg merge --tool internal:other 4
1774 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1774 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1775 (branch merge, don't forget to commit)
1775 (branch merge, don't forget to commit)
1776 $ echo merge > e
1776 $ echo merge > e
1777 $ hg ci -m "merge 5 and 4"
1777 $ hg ci -m "merge 5 and 4"
1778 $ testlog --follow-first
1778 $ testlog --follow-first
1779 []
1779 []
1780 (group
1780 (group
1781 (func
1781 (func
1782 ('symbol', '_firstancestors')
1782 ('symbol', '_firstancestors')
1783 (func
1783 (func
1784 ('symbol', 'rev')
1784 ('symbol', 'rev')
1785 ('symbol', '6'))))
1785 ('symbol', '6'))))
1786
1786
1787 Cannot compare with log --follow-first FILE as it never worked
1787 Cannot compare with log --follow-first FILE as it never worked
1788
1788
1789 $ hg log -G --print-revset --follow-first e
1789 $ hg log -G --print-revset --follow-first e
1790 []
1790 []
1791 (group
1791 (group
1792 (group
1792 (group
1793 (func
1793 (func
1794 ('symbol', '_followfirst')
1794 ('symbol', '_followfirst')
1795 ('string', 'e'))))
1795 ('string', 'e'))))
1796 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1796 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1797 @ 6 merge 5 and 4
1797 @ 6 merge 5 and 4
1798 |\
1798 |\
1799 | ~
1799 | ~
1800 o 5 add another e
1800 o 5 add another e
1801 |
1801 |
1802 ~
1802 ~
1803
1803
1804 Test --copies
1804 Test --copies
1805
1805
1806 $ hg log -G --copies --template "{rev} {desc|firstline} \
1806 $ hg log -G --copies --template "{rev} {desc|firstline} \
1807 > copies: {file_copies_switch}\n"
1807 > copies: {file_copies_switch}\n"
1808 @ 6 merge 5 and 4 copies:
1808 @ 6 merge 5 and 4 copies:
1809 |\
1809 |\
1810 | o 5 add another e copies:
1810 | o 5 add another e copies:
1811 | |
1811 | |
1812 o | 4 mv dir/b e copies: e (dir/b)
1812 o | 4 mv dir/b e copies: e (dir/b)
1813 |/
1813 |/
1814 o 3 mv a b; add d copies: b (a)g (f)
1814 o 3 mv a b; add d copies: b (a)g (f)
1815 |
1815 |
1816 o 2 mv b dir/b copies: dir/b (b)
1816 o 2 mv b dir/b copies: dir/b (b)
1817 |
1817 |
1818 o 1 copy a b copies: b (a)g (f)
1818 o 1 copy a b copies: b (a)g (f)
1819 |
1819 |
1820 o 0 add a copies:
1820 o 0 add a copies:
1821
1821
1822 Test "set:..." and parent revision
1822 Test "set:..." and parent revision
1823
1823
1824 $ hg up -q 4
1824 $ hg up -q 4
1825 $ testlog "set:copied()"
1825 $ testlog "set:copied()"
1826 []
1826 []
1827 (group
1827 (group
1828 (func
1828 (func
1829 ('symbol', '_matchfiles')
1829 ('symbol', '_matchfiles')
1830 (list
1830 (list
1831 ('string', 'r:')
1831 ('string', 'r:')
1832 ('string', 'd:relpath')
1832 ('string', 'd:relpath')
1833 ('string', 'p:set:copied()'))))
1833 ('string', 'p:set:copied()'))))
1834 $ testlog --include "set:copied()"
1834 $ testlog --include "set:copied()"
1835 []
1835 []
1836 (group
1836 (group
1837 (func
1837 (func
1838 ('symbol', '_matchfiles')
1838 ('symbol', '_matchfiles')
1839 (list
1839 (list
1840 ('string', 'r:')
1840 ('string', 'r:')
1841 ('string', 'd:relpath')
1841 ('string', 'd:relpath')
1842 ('string', 'i:set:copied()'))))
1842 ('string', 'i:set:copied()'))))
1843 $ testlog -r "sort(file('set:copied()'), -rev)"
1843 $ testlog -r "sort(file('set:copied()'), -rev)"
1844 ["sort(file('set:copied()'), -rev)"]
1844 ["sort(file('set:copied()'), -rev)"]
1845 []
1845 []
1846
1846
1847 Test --removed
1847 Test --removed
1848
1848
1849 $ testlog --removed
1849 $ testlog --removed
1850 []
1850 []
1851 []
1851 []
1852 $ testlog --removed a
1852 $ testlog --removed a
1853 []
1853 []
1854 (group
1854 (group
1855 (func
1855 (func
1856 ('symbol', '_matchfiles')
1856 ('symbol', '_matchfiles')
1857 (list
1857 (list
1858 ('string', 'r:')
1858 ('string', 'r:')
1859 ('string', 'd:relpath')
1859 ('string', 'd:relpath')
1860 ('string', 'p:a'))))
1860 ('string', 'p:a'))))
1861 $ testlog --removed --follow a
1861 $ testlog --removed --follow a
1862 []
1862 []
1863 (group
1863 (group
1864 (and
1864 (and
1865 (func
1865 (func
1866 ('symbol', 'ancestors')
1866 ('symbol', 'ancestors')
1867 ('symbol', '.'))
1867 ('symbol', '.'))
1868 (func
1868 (func
1869 ('symbol', '_matchfiles')
1869 ('symbol', '_matchfiles')
1870 (list
1870 (list
1871 ('string', 'r:')
1871 ('string', 'r:')
1872 ('string', 'd:relpath')
1872 ('string', 'd:relpath')
1873 ('string', 'p:a')))))
1873 ('string', 'p:a')))))
1874
1874
1875 Test --patch and --stat with --follow and --follow-first
1875 Test --patch and --stat with --follow and --follow-first
1876
1876
1877 $ hg up -q 3
1877 $ hg up -q 3
1878 $ hg log -G --git --patch b
1878 $ hg log -G --git --patch b
1879 o changeset: 1:216d4c92cf98
1879 o changeset: 1:216d4c92cf98
1880 | user: test
1880 | user: test
1881 ~ date: Thu Jan 01 00:00:00 1970 +0000
1881 ~ date: Thu Jan 01 00:00:00 1970 +0000
1882 summary: copy a b
1882 summary: copy a b
1883
1883
1884 diff --git a/a b/b
1884 diff --git a/a b/b
1885 copy from a
1885 copy from a
1886 copy to b
1886 copy to b
1887
1887
1888
1888
1889 $ hg log -G --git --stat b
1889 $ hg log -G --git --stat b
1890 o changeset: 1:216d4c92cf98
1890 o changeset: 1:216d4c92cf98
1891 | user: test
1891 | user: test
1892 ~ date: Thu Jan 01 00:00:00 1970 +0000
1892 ~ date: Thu Jan 01 00:00:00 1970 +0000
1893 summary: copy a b
1893 summary: copy a b
1894
1894
1895 b | 0
1895 b | 0
1896 1 files changed, 0 insertions(+), 0 deletions(-)
1896 1 files changed, 0 insertions(+), 0 deletions(-)
1897
1897
1898
1898
1899 $ hg log -G --git --patch --follow b
1899 $ hg log -G --git --patch --follow b
1900 o changeset: 1:216d4c92cf98
1900 o changeset: 1:216d4c92cf98
1901 | user: test
1901 | user: test
1902 | date: Thu Jan 01 00:00:00 1970 +0000
1902 | date: Thu Jan 01 00:00:00 1970 +0000
1903 | summary: copy a b
1903 | summary: copy a b
1904 |
1904 |
1905 | diff --git a/a b/b
1905 | diff --git a/a b/b
1906 | copy from a
1906 | copy from a
1907 | copy to b
1907 | copy to b
1908 |
1908 |
1909 o changeset: 0:f8035bb17114
1909 o changeset: 0:f8035bb17114
1910 user: test
1910 user: test
1911 date: Thu Jan 01 00:00:00 1970 +0000
1911 date: Thu Jan 01 00:00:00 1970 +0000
1912 summary: add a
1912 summary: add a
1913
1913
1914 diff --git a/a b/a
1914 diff --git a/a b/a
1915 new file mode 100644
1915 new file mode 100644
1916 --- /dev/null
1916 --- /dev/null
1917 +++ b/a
1917 +++ b/a
1918 @@ -0,0 +1,1 @@
1918 @@ -0,0 +1,1 @@
1919 +a
1919 +a
1920
1920
1921
1921
1922 $ hg log -G --git --stat --follow b
1922 $ hg log -G --git --stat --follow b
1923 o changeset: 1:216d4c92cf98
1923 o changeset: 1:216d4c92cf98
1924 | user: test
1924 | user: test
1925 | date: Thu Jan 01 00:00:00 1970 +0000
1925 | date: Thu Jan 01 00:00:00 1970 +0000
1926 | summary: copy a b
1926 | summary: copy a b
1927 |
1927 |
1928 | b | 0
1928 | b | 0
1929 | 1 files changed, 0 insertions(+), 0 deletions(-)
1929 | 1 files changed, 0 insertions(+), 0 deletions(-)
1930 |
1930 |
1931 o changeset: 0:f8035bb17114
1931 o changeset: 0:f8035bb17114
1932 user: test
1932 user: test
1933 date: Thu Jan 01 00:00:00 1970 +0000
1933 date: Thu Jan 01 00:00:00 1970 +0000
1934 summary: add a
1934 summary: add a
1935
1935
1936 a | 1 +
1936 a | 1 +
1937 1 files changed, 1 insertions(+), 0 deletions(-)
1937 1 files changed, 1 insertions(+), 0 deletions(-)
1938
1938
1939
1939
1940 $ hg up -q 6
1940 $ hg up -q 6
1941 $ hg log -G --git --patch --follow-first e
1941 $ hg log -G --git --patch --follow-first e
1942 @ changeset: 6:fc281d8ff18d
1942 @ changeset: 6:fc281d8ff18d
1943 |\ tag: tip
1943 |\ tag: tip
1944 | ~ parent: 5:99b31f1c2782
1944 | ~ parent: 5:99b31f1c2782
1945 | parent: 4:17d952250a9d
1945 | parent: 4:17d952250a9d
1946 | user: test
1946 | user: test
1947 | date: Thu Jan 01 00:00:00 1970 +0000
1947 | date: Thu Jan 01 00:00:00 1970 +0000
1948 | summary: merge 5 and 4
1948 | summary: merge 5 and 4
1949 |
1949 |
1950 | diff --git a/e b/e
1950 | diff --git a/e b/e
1951 | --- a/e
1951 | --- a/e
1952 | +++ b/e
1952 | +++ b/e
1953 | @@ -1,1 +1,1 @@
1953 | @@ -1,1 +1,1 @@
1954 | -ee
1954 | -ee
1955 | +merge
1955 | +merge
1956 |
1956 |
1957 o changeset: 5:99b31f1c2782
1957 o changeset: 5:99b31f1c2782
1958 | parent: 3:5918b8d165d1
1958 | parent: 3:5918b8d165d1
1959 ~ user: test
1959 ~ user: test
1960 date: Thu Jan 01 00:00:00 1970 +0000
1960 date: Thu Jan 01 00:00:00 1970 +0000
1961 summary: add another e
1961 summary: add another e
1962
1962
1963 diff --git a/e b/e
1963 diff --git a/e b/e
1964 new file mode 100644
1964 new file mode 100644
1965 --- /dev/null
1965 --- /dev/null
1966 +++ b/e
1966 +++ b/e
1967 @@ -0,0 +1,1 @@
1967 @@ -0,0 +1,1 @@
1968 +ee
1968 +ee
1969
1969
1970
1970
1971 Test old-style --rev
1971 Test old-style --rev
1972
1972
1973 $ hg tag 'foo-bar'
1973 $ hg tag 'foo-bar'
1974 $ testlog -r 'foo-bar'
1974 $ testlog -r 'foo-bar'
1975 ['foo-bar']
1975 ['foo-bar']
1976 []
1976 []
1977
1977
1978 Test --follow and forward --rev
1978 Test --follow and forward --rev
1979
1979
1980 $ hg up -q 6
1980 $ hg up -q 6
1981 $ echo g > g
1981 $ echo g > g
1982 $ hg ci -Am 'add g' g
1982 $ hg ci -Am 'add g' g
1983 created new head
1983 created new head
1984 $ hg up -q 2
1984 $ hg up -q 2
1985 $ hg log -G --template "{rev} {desc|firstline}\n"
1985 $ hg log -G --template "{rev} {desc|firstline}\n"
1986 o 8 add g
1986 o 8 add g
1987 |
1987 |
1988 | o 7 Added tag foo-bar for changeset fc281d8ff18d
1988 | o 7 Added tag foo-bar for changeset fc281d8ff18d
1989 |/
1989 |/
1990 o 6 merge 5 and 4
1990 o 6 merge 5 and 4
1991 |\
1991 |\
1992 | o 5 add another e
1992 | o 5 add another e
1993 | |
1993 | |
1994 o | 4 mv dir/b e
1994 o | 4 mv dir/b e
1995 |/
1995 |/
1996 o 3 mv a b; add d
1996 o 3 mv a b; add d
1997 |
1997 |
1998 @ 2 mv b dir/b
1998 @ 2 mv b dir/b
1999 |
1999 |
2000 o 1 copy a b
2000 o 1 copy a b
2001 |
2001 |
2002 o 0 add a
2002 o 0 add a
2003
2003
2004 $ hg archive -r 7 archive
2004 $ hg archive -r 7 archive
2005 $ grep changessincelatesttag archive/.hg_archival.txt
2005 $ grep changessincelatesttag archive/.hg_archival.txt
2006 changessincelatesttag: 1
2006 changessincelatesttag: 1
2007 $ rm -r archive
2007 $ rm -r archive
2008
2008
2009 changessincelatesttag with no prior tag
2009 changessincelatesttag with no prior tag
2010 $ hg archive -r 4 archive
2010 $ hg archive -r 4 archive
2011 $ grep changessincelatesttag archive/.hg_archival.txt
2011 $ grep changessincelatesttag archive/.hg_archival.txt
2012 changessincelatesttag: 5
2012 changessincelatesttag: 5
2013
2013
2014 $ hg export 'all()'
2014 $ hg export 'all()'
2015 # HG changeset patch
2015 # HG changeset patch
2016 # User test
2016 # User test
2017 # Date 0 0
2017 # Date 0 0
2018 # Thu Jan 01 00:00:00 1970 +0000
2018 # Thu Jan 01 00:00:00 1970 +0000
2019 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2019 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2020 # Parent 0000000000000000000000000000000000000000
2020 # Parent 0000000000000000000000000000000000000000
2021 add a
2021 add a
2022
2022
2023 diff -r 000000000000 -r f8035bb17114 a
2023 diff -r 000000000000 -r f8035bb17114 a
2024 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2024 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2025 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2025 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2026 @@ -0,0 +1,1 @@
2026 @@ -0,0 +1,1 @@
2027 +a
2027 +a
2028 diff -r 000000000000 -r f8035bb17114 aa
2028 diff -r 000000000000 -r f8035bb17114 aa
2029 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2029 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2030 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2030 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2031 @@ -0,0 +1,1 @@
2031 @@ -0,0 +1,1 @@
2032 +aa
2032 +aa
2033 diff -r 000000000000 -r f8035bb17114 f
2033 diff -r 000000000000 -r f8035bb17114 f
2034 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2034 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2035 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2035 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2036 @@ -0,0 +1,1 @@
2036 @@ -0,0 +1,1 @@
2037 +f
2037 +f
2038 # HG changeset patch
2038 # HG changeset patch
2039 # User test
2039 # User test
2040 # Date 0 0
2040 # Date 0 0
2041 # Thu Jan 01 00:00:00 1970 +0000
2041 # Thu Jan 01 00:00:00 1970 +0000
2042 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2042 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2043 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2043 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2044 copy a b
2044 copy a b
2045
2045
2046 diff -r f8035bb17114 -r 216d4c92cf98 b
2046 diff -r f8035bb17114 -r 216d4c92cf98 b
2047 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2047 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2048 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2048 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2049 @@ -0,0 +1,1 @@
2049 @@ -0,0 +1,1 @@
2050 +a
2050 +a
2051 diff -r f8035bb17114 -r 216d4c92cf98 g
2051 diff -r f8035bb17114 -r 216d4c92cf98 g
2052 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2052 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2053 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2053 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2054 @@ -0,0 +1,1 @@
2054 @@ -0,0 +1,1 @@
2055 +f
2055 +f
2056 # HG changeset patch
2056 # HG changeset patch
2057 # User test
2057 # User test
2058 # Date 0 0
2058 # Date 0 0
2059 # Thu Jan 01 00:00:00 1970 +0000
2059 # Thu Jan 01 00:00:00 1970 +0000
2060 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2060 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2061 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2061 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2062 mv b dir/b
2062 mv b dir/b
2063
2063
2064 diff -r 216d4c92cf98 -r bb573313a9e8 b
2064 diff -r 216d4c92cf98 -r bb573313a9e8 b
2065 --- a/b Thu Jan 01 00:00:00 1970 +0000
2065 --- a/b Thu Jan 01 00:00:00 1970 +0000
2066 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2066 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2067 @@ -1,1 +0,0 @@
2067 @@ -1,1 +0,0 @@
2068 -a
2068 -a
2069 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2069 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2070 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2070 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2071 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2071 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2072 @@ -0,0 +1,1 @@
2072 @@ -0,0 +1,1 @@
2073 +a
2073 +a
2074 diff -r 216d4c92cf98 -r bb573313a9e8 f
2074 diff -r 216d4c92cf98 -r bb573313a9e8 f
2075 --- a/f Thu Jan 01 00:00:00 1970 +0000
2075 --- a/f Thu Jan 01 00:00:00 1970 +0000
2076 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2076 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2077 @@ -1,1 +1,2 @@
2077 @@ -1,1 +1,2 @@
2078 f
2078 f
2079 +f
2079 +f
2080 diff -r 216d4c92cf98 -r bb573313a9e8 g
2080 diff -r 216d4c92cf98 -r bb573313a9e8 g
2081 --- a/g Thu Jan 01 00:00:00 1970 +0000
2081 --- a/g Thu Jan 01 00:00:00 1970 +0000
2082 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2082 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2083 @@ -1,1 +1,2 @@
2083 @@ -1,1 +1,2 @@
2084 f
2084 f
2085 +g
2085 +g
2086 # HG changeset patch
2086 # HG changeset patch
2087 # User test
2087 # User test
2088 # Date 0 0
2088 # Date 0 0
2089 # Thu Jan 01 00:00:00 1970 +0000
2089 # Thu Jan 01 00:00:00 1970 +0000
2090 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2090 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2091 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2091 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2092 mv a b; add d
2092 mv a b; add d
2093
2093
2094 diff -r bb573313a9e8 -r 5918b8d165d1 a
2094 diff -r bb573313a9e8 -r 5918b8d165d1 a
2095 --- a/a Thu Jan 01 00:00:00 1970 +0000
2095 --- a/a Thu Jan 01 00:00:00 1970 +0000
2096 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2096 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2097 @@ -1,1 +0,0 @@
2097 @@ -1,1 +0,0 @@
2098 -a
2098 -a
2099 diff -r bb573313a9e8 -r 5918b8d165d1 b
2099 diff -r bb573313a9e8 -r 5918b8d165d1 b
2100 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2100 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2101 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2101 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2102 @@ -0,0 +1,1 @@
2102 @@ -0,0 +1,1 @@
2103 +a
2103 +a
2104 diff -r bb573313a9e8 -r 5918b8d165d1 d
2104 diff -r bb573313a9e8 -r 5918b8d165d1 d
2105 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2105 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2106 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2106 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2107 @@ -0,0 +1,1 @@
2107 @@ -0,0 +1,1 @@
2108 +a
2108 +a
2109 diff -r bb573313a9e8 -r 5918b8d165d1 g
2109 diff -r bb573313a9e8 -r 5918b8d165d1 g
2110 --- a/g Thu Jan 01 00:00:00 1970 +0000
2110 --- a/g Thu Jan 01 00:00:00 1970 +0000
2111 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2111 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2112 @@ -1,2 +1,2 @@
2112 @@ -1,2 +1,2 @@
2113 f
2113 f
2114 -g
2114 -g
2115 +f
2115 +f
2116 # HG changeset patch
2116 # HG changeset patch
2117 # User test
2117 # User test
2118 # Date 0 0
2118 # Date 0 0
2119 # Thu Jan 01 00:00:00 1970 +0000
2119 # Thu Jan 01 00:00:00 1970 +0000
2120 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2120 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2121 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2121 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2122 mv dir/b e
2122 mv dir/b e
2123
2123
2124 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2124 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2125 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2125 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2126 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2126 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2127 @@ -1,1 +0,0 @@
2127 @@ -1,1 +0,0 @@
2128 -a
2128 -a
2129 diff -r 5918b8d165d1 -r 17d952250a9d e
2129 diff -r 5918b8d165d1 -r 17d952250a9d e
2130 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2130 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2131 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2131 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2132 @@ -0,0 +1,1 @@
2132 @@ -0,0 +1,1 @@
2133 +a
2133 +a
2134 # HG changeset patch
2134 # HG changeset patch
2135 # User test
2135 # User test
2136 # Date 0 0
2136 # Date 0 0
2137 # Thu Jan 01 00:00:00 1970 +0000
2137 # Thu Jan 01 00:00:00 1970 +0000
2138 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2138 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2139 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2139 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2140 add another e
2140 add another e
2141
2141
2142 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2142 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2143 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2143 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2144 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2144 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2145 @@ -0,0 +1,1 @@
2145 @@ -0,0 +1,1 @@
2146 +ee
2146 +ee
2147 # HG changeset patch
2147 # HG changeset patch
2148 # User test
2148 # User test
2149 # Date 0 0
2149 # Date 0 0
2150 # Thu Jan 01 00:00:00 1970 +0000
2150 # Thu Jan 01 00:00:00 1970 +0000
2151 # Node ID fc281d8ff18d999ad6497b3d27390bcd695dcc73
2151 # Node ID fc281d8ff18d999ad6497b3d27390bcd695dcc73
2152 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2152 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2153 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2153 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2154 merge 5 and 4
2154 merge 5 and 4
2155
2155
2156 diff -r 99b31f1c2782 -r fc281d8ff18d dir/b
2156 diff -r 99b31f1c2782 -r fc281d8ff18d dir/b
2157 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2157 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2158 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2158 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2159 @@ -1,1 +0,0 @@
2159 @@ -1,1 +0,0 @@
2160 -a
2160 -a
2161 diff -r 99b31f1c2782 -r fc281d8ff18d e
2161 diff -r 99b31f1c2782 -r fc281d8ff18d e
2162 --- a/e Thu Jan 01 00:00:00 1970 +0000
2162 --- a/e Thu Jan 01 00:00:00 1970 +0000
2163 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2163 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2164 @@ -1,1 +1,1 @@
2164 @@ -1,1 +1,1 @@
2165 -ee
2165 -ee
2166 +merge
2166 +merge
2167 # HG changeset patch
2167 # HG changeset patch
2168 # User test
2168 # User test
2169 # Date 0 0
2169 # Date 0 0
2170 # Thu Jan 01 00:00:00 1970 +0000
2170 # Thu Jan 01 00:00:00 1970 +0000
2171 # Node ID 02dbb8e276b8ab7abfd07cab50c901647e75c2dd
2171 # Node ID 02dbb8e276b8ab7abfd07cab50c901647e75c2dd
2172 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2172 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2173 Added tag foo-bar for changeset fc281d8ff18d
2173 Added tag foo-bar for changeset fc281d8ff18d
2174
2174
2175 diff -r fc281d8ff18d -r 02dbb8e276b8 .hgtags
2175 diff -r fc281d8ff18d -r 02dbb8e276b8 .hgtags
2176 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2176 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2177 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2177 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2178 @@ -0,0 +1,1 @@
2178 @@ -0,0 +1,1 @@
2179 +fc281d8ff18d999ad6497b3d27390bcd695dcc73 foo-bar
2179 +fc281d8ff18d999ad6497b3d27390bcd695dcc73 foo-bar
2180 # HG changeset patch
2180 # HG changeset patch
2181 # User test
2181 # User test
2182 # Date 0 0
2182 # Date 0 0
2183 # Thu Jan 01 00:00:00 1970 +0000
2183 # Thu Jan 01 00:00:00 1970 +0000
2184 # Node ID 24c2e826ddebf80f9dcd60b856bdb8e6715c5449
2184 # Node ID 24c2e826ddebf80f9dcd60b856bdb8e6715c5449
2185 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2185 # Parent fc281d8ff18d999ad6497b3d27390bcd695dcc73
2186 add g
2186 add g
2187
2187
2188 diff -r fc281d8ff18d -r 24c2e826ddeb g
2188 diff -r fc281d8ff18d -r 24c2e826ddeb g
2189 --- a/g Thu Jan 01 00:00:00 1970 +0000
2189 --- a/g Thu Jan 01 00:00:00 1970 +0000
2190 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2190 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2191 @@ -1,2 +1,1 @@
2191 @@ -1,2 +1,1 @@
2192 -f
2192 -f
2193 -f
2193 -f
2194 +g
2194 +g
2195 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2195 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2196 ['6', '8', '5', '7', '4']
2196 ['6', '8', '5', '7', '4']
2197 (group
2197 (group
2198 (func
2198 (func
2199 ('symbol', 'descendants')
2199 ('symbol', 'descendants')
2200 (func
2200 (func
2201 ('symbol', 'rev')
2201 ('symbol', 'rev')
2202 ('symbol', '6'))))
2202 ('symbol', '6'))))
2203
2203
2204 Test --follow-first and forward --rev
2204 Test --follow-first and forward --rev
2205
2205
2206 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2206 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2207 ['6', '8', '5', '7', '4']
2207 ['6', '8', '5', '7', '4']
2208 (group
2208 (group
2209 (func
2209 (func
2210 ('symbol', '_firstdescendants')
2210 ('symbol', '_firstdescendants')
2211 (func
2211 (func
2212 ('symbol', 'rev')
2212 ('symbol', 'rev')
2213 ('symbol', '6'))))
2213 ('symbol', '6'))))
2214 --- log.nodes * (glob)
2214 --- log.nodes * (glob)
2215 +++ glog.nodes * (glob)
2215 +++ glog.nodes * (glob)
2216 @@ -1,3 +1,3 @@
2216 @@ -1,3 +1,3 @@
2217 -nodetag 6
2217 -nodetag 6
2218 nodetag 8
2218 nodetag 8
2219 nodetag 7
2219 nodetag 7
2220 +nodetag 6
2220 +nodetag 6
2221
2221
2222 Test --follow and backward --rev
2222 Test --follow and backward --rev
2223
2223
2224 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2224 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2225 ['6', '5', '7', '8', '4']
2225 ['6', '5', '7', '8', '4']
2226 (group
2226 (group
2227 (func
2227 (func
2228 ('symbol', 'ancestors')
2228 ('symbol', 'ancestors')
2229 (func
2229 (func
2230 ('symbol', 'rev')
2230 ('symbol', 'rev')
2231 ('symbol', '6'))))
2231 ('symbol', '6'))))
2232
2232
2233 Test --follow-first and backward --rev
2233 Test --follow-first and backward --rev
2234
2234
2235 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2235 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2236 ['6', '5', '7', '8', '4']
2236 ['6', '5', '7', '8', '4']
2237 (group
2237 (group
2238 (func
2238 (func
2239 ('symbol', '_firstancestors')
2239 ('symbol', '_firstancestors')
2240 (func
2240 (func
2241 ('symbol', 'rev')
2241 ('symbol', 'rev')
2242 ('symbol', '6'))))
2242 ('symbol', '6'))))
2243
2243
2244 Test --follow with --rev of graphlog extension
2244 Test --follow with --rev of graphlog extension
2245
2245
2246 $ hg --config extensions.graphlog= glog -qfr1
2246 $ hg --config extensions.graphlog= glog -qfr1
2247 o 1:216d4c92cf98
2247 o 1:216d4c92cf98
2248 |
2248 |
2249 o 0:f8035bb17114
2249 o 0:f8035bb17114
2250
2250
2251
2251
2252 Test subdir
2252 Test subdir
2253
2253
2254 $ hg up -q 3
2254 $ hg up -q 3
2255 $ cd dir
2255 $ cd dir
2256 $ testlog .
2256 $ testlog .
2257 []
2257 []
2258 (group
2258 (group
2259 (func
2259 (func
2260 ('symbol', '_matchfiles')
2260 ('symbol', '_matchfiles')
2261 (list
2261 (list
2262 ('string', 'r:')
2262 ('string', 'r:')
2263 ('string', 'd:relpath')
2263 ('string', 'd:relpath')
2264 ('string', 'p:.'))))
2264 ('string', 'p:.'))))
2265 $ testlog ../b
2265 $ testlog ../b
2266 []
2266 []
2267 (group
2267 (group
2268 (group
2268 (group
2269 (func
2269 (func
2270 ('symbol', 'filelog')
2270 ('symbol', 'filelog')
2271 ('string', '../b'))))
2271 ('string', '../b'))))
2272 $ testlog -f ../b
2272 $ testlog -f ../b
2273 []
2273 []
2274 (group
2274 (group
2275 (group
2275 (group
2276 (func
2276 (func
2277 ('symbol', 'follow')
2277 ('symbol', 'follow')
2278 ('string', 'b'))))
2278 ('string', 'b'))))
2279 $ cd ..
2279 $ cd ..
2280
2280
2281 Test --hidden
2281 Test --hidden
2282 (enable obsolete)
2282 (enable obsolete)
2283
2283
2284 $ cat >> $HGRCPATH << EOF
2284 $ cat >> $HGRCPATH << EOF
2285 > [experimental]
2285 > [experimental]
2286 > evolution=createmarkers
2286 > evolution=createmarkers
2287 > EOF
2287 > EOF
2288
2288
2289 $ hg debugobsolete `hg id --debug -i -r 8`
2289 $ hg debugobsolete `hg id --debug -i -r 8`
2290 $ testlog
2290 $ testlog
2291 []
2291 []
2292 []
2292 []
2293 $ testlog --hidden
2293 $ testlog --hidden
2294 []
2294 []
2295 []
2295 []
2296 $ hg log -G --template '{rev} {desc}\n'
2296 $ hg log -G --template '{rev} {desc}\n'
2297 o 7 Added tag foo-bar for changeset fc281d8ff18d
2297 o 7 Added tag foo-bar for changeset fc281d8ff18d
2298 |
2298 |
2299 o 6 merge 5 and 4
2299 o 6 merge 5 and 4
2300 |\
2300 |\
2301 | o 5 add another e
2301 | o 5 add another e
2302 | |
2302 | |
2303 o | 4 mv dir/b e
2303 o | 4 mv dir/b e
2304 |/
2304 |/
2305 @ 3 mv a b; add d
2305 @ 3 mv a b; add d
2306 |
2306 |
2307 o 2 mv b dir/b
2307 o 2 mv b dir/b
2308 |
2308 |
2309 o 1 copy a b
2309 o 1 copy a b
2310 |
2310 |
2311 o 0 add a
2311 o 0 add a
2312
2312
2313
2313
2314 A template without trailing newline should do something sane
2314 A template without trailing newline should do something sane
2315
2315
2316 $ hg log -G -r ::2 --template '{rev} {desc}'
2316 $ hg log -G -r ::2 --template '{rev} {desc}'
2317 o 2 mv b dir/b
2317 o 2 mv b dir/b
2318 |
2318 |
2319 o 1 copy a b
2319 o 1 copy a b
2320 |
2320 |
2321 o 0 add a
2321 o 0 add a
2322
2322
2323
2323
2324 Extra newlines must be preserved
2324 Extra newlines must be preserved
2325
2325
2326 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2326 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2327 o
2327 o
2328 | 2 mv b dir/b
2328 | 2 mv b dir/b
2329 |
2329 |
2330 o
2330 o
2331 | 1 copy a b
2331 | 1 copy a b
2332 |
2332 |
2333 o
2333 o
2334 0 add a
2334 0 add a
2335
2335
2336
2336
2337 The almost-empty template should do something sane too ...
2337 The almost-empty template should do something sane too ...
2338
2338
2339 $ hg log -G -r ::2 --template '\n'
2339 $ hg log -G -r ::2 --template '\n'
2340 o
2340 o
2341 |
2341 |
2342 o
2342 o
2343 |
2343 |
2344 o
2344 o
2345
2345
2346
2346
2347 issue3772
2347 issue3772
2348
2348
2349 $ hg log -G -r :null
2349 $ hg log -G -r :null
2350 o changeset: 0:f8035bb17114
2350 o changeset: 0:f8035bb17114
2351 | user: test
2351 | user: test
2352 | date: Thu Jan 01 00:00:00 1970 +0000
2352 | date: Thu Jan 01 00:00:00 1970 +0000
2353 | summary: add a
2353 | summary: add a
2354 |
2354 |
2355 o changeset: -1:000000000000
2355 o changeset: -1:000000000000
2356 user:
2356 user:
2357 date: Thu Jan 01 00:00:00 1970 +0000
2357 date: Thu Jan 01 00:00:00 1970 +0000
2358
2358
2359 $ hg log -G -r null:null
2359 $ hg log -G -r null:null
2360 o changeset: -1:000000000000
2360 o changeset: -1:000000000000
2361 user:
2361 user:
2362 date: Thu Jan 01 00:00:00 1970 +0000
2362 date: Thu Jan 01 00:00:00 1970 +0000
2363
2363
2364
2364
2365 should not draw line down to null due to the magic of fullreposet
2365 should not draw line down to null due to the magic of fullreposet
2366
2366
2367 $ hg log -G -r 'all()' | tail -6
2367 $ hg log -G -r 'all()' | tail -6
2368 |
2368 |
2369 o changeset: 0:f8035bb17114
2369 o changeset: 0:f8035bb17114
2370 user: test
2370 user: test
2371 date: Thu Jan 01 00:00:00 1970 +0000
2371 date: Thu Jan 01 00:00:00 1970 +0000
2372 summary: add a
2372 summary: add a
2373
2373
2374
2374
2375 $ hg log -G -r 'branch(default)' | tail -6
2375 $ hg log -G -r 'branch(default)' | tail -6
2376 |
2376 |
2377 o changeset: 0:f8035bb17114
2377 o changeset: 0:f8035bb17114
2378 user: test
2378 user: test
2379 date: Thu Jan 01 00:00:00 1970 +0000
2379 date: Thu Jan 01 00:00:00 1970 +0000
2380 summary: add a
2380 summary: add a
2381
2381
2382
2382
2383 working-directory revision
2383 working-directory revision
2384
2384
2385 $ hg log -G -qr '. + wdir()'
2385 $ hg log -G -qr '. + wdir()'
2386 o 2147483647:ffffffffffff
2386 o 2147483647:ffffffffffff
2387 |
2387 |
2388 @ 3:5918b8d165d1
2388 @ 3:5918b8d165d1
2389 |
2389 |
2390 ~
2390 ~
2391
2391
2392 node template with changeset_printer:
2392 node template with changeset_printer:
2393
2393
2394 $ hg log -Gqr 5:7 --config ui.graphnodetemplate='{rev}'
2394 $ hg log -Gqr 5:7 --config ui.graphnodetemplate='{rev}'
2395 7 7:02dbb8e276b8
2395 7 7:02dbb8e276b8
2396 |
2396 |
2397 6 6:fc281d8ff18d
2397 6 6:fc281d8ff18d
2398 |\
2398 |\
2399 | ~
2399 | ~
2400 5 5:99b31f1c2782
2400 5 5:99b31f1c2782
2401 |
2401 |
2402 ~
2402 ~
2403
2403
2404 node template with changeset_templater (shared cache variable):
2404 node template with changeset_templater (shared cache variable):
2405
2405
2406 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2406 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2407 > --config ui.graphnodetemplate='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2407 > --config ui.graphnodetemplate='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2408 o 7 foo-bar+1
2408 o 7 foo-bar+1
2409 |
2409 |
2410 # 6 foo-bar+0
2410 # 6 foo-bar+0
2411 |\
2411 |\
2412 | ~
2412 | ~
2413 o 5 null+5
2413 o 5 null+5
2414 |
2414 |
2415 ~
2415 ~
2416
2416
2417 label() should just work in node template:
2417 label() should just work in node template:
2418
2418
2419 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2419 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2420 > --config ui.graphnodetemplate='{label("branch.{branch}", rev)}'
2420 > --config ui.graphnodetemplate='{label("branch.{branch}", rev)}'
2421 [branch.default|7] [log.node|7:02dbb8e276b8]
2421 [branch.default|7] [log.node|7:02dbb8e276b8]
2422 |
2422 |
2423 ~
2423 ~
2424
2424
2425 $ cd ..
2425 $ cd ..
2426
2426
2427 change graph edge styling
2427 change graph edge styling
2428
2428
2429 $ cd repo
2429 $ cd repo
2430 $ cat << EOF >> $HGRCPATH
2430 $ cat << EOF >> $HGRCPATH
2431 > [experimental]
2431 > [experimental]
2432 > graphstyle.parent = |
2432 > graphstyle.parent = |
2433 > graphstyle.grandparent = :
2433 > graphstyle.grandparent = :
2434 > graphstyle.missing =
2434 > graphstyle.missing =
2435 > EOF
2435 > EOF
2436 $ hg log -G -r 'file("a")' -m
2436 $ hg log -G -r 'file("a")' -m
2437 @ changeset: 36:08a19a744424
2437 @ changeset: 36:08a19a744424
2438 : branch: branch
2438 : branch: branch
2439 : tag: tip
2439 : tag: tip
2440 : parent: 35:9159c3644c5e
2440 : parent: 35:9159c3644c5e
2441 : parent: 35:9159c3644c5e
2441 : parent: 35:9159c3644c5e
2442 : user: test
2442 : user: test
2443 : date: Thu Jan 01 00:00:36 1970 +0000
2443 : date: Thu Jan 01 00:00:36 1970 +0000
2444 : summary: (36) buggy merge: identical parents
2444 : summary: (36) buggy merge: identical parents
2445 :
2445 :
2446 o changeset: 32:d06dffa21a31
2446 o changeset: 32:d06dffa21a31
2447 |\ parent: 27:886ed638191b
2447 |\ parent: 27:886ed638191b
2448 | : parent: 31:621d83e11f67
2448 | : parent: 31:621d83e11f67
2449 | : user: test
2449 | : user: test
2450 | : date: Thu Jan 01 00:00:32 1970 +0000
2450 | : date: Thu Jan 01 00:00:32 1970 +0000
2451 | : summary: (32) expand
2451 | : summary: (32) expand
2452 | :
2452 | :
2453 o : changeset: 31:621d83e11f67
2453 o : changeset: 31:621d83e11f67
2454 |\: parent: 21:d42a756af44d
2454 |\: parent: 21:d42a756af44d
2455 | : parent: 30:6e11cd4b648f
2455 | : parent: 30:6e11cd4b648f
2456 | : user: test
2456 | : user: test
2457 | : date: Thu Jan 01 00:00:31 1970 +0000
2457 | : date: Thu Jan 01 00:00:31 1970 +0000
2458 | : summary: (31) expand
2458 | : summary: (31) expand
2459 | :
2459 | :
2460 o : changeset: 30:6e11cd4b648f
2460 o : changeset: 30:6e11cd4b648f
2461 |\ \ parent: 28:44ecd0b9ae99
2461 |\ \ parent: 28:44ecd0b9ae99
2462 | ~ : parent: 29:cd9bb2be7593
2462 | ~ : parent: 29:cd9bb2be7593
2463 | : user: test
2463 | : user: test
2464 | : date: Thu Jan 01 00:00:30 1970 +0000
2464 | : date: Thu Jan 01 00:00:30 1970 +0000
2465 | : summary: (30) expand
2465 | : summary: (30) expand
2466 | /
2466 | /
2467 o : changeset: 28:44ecd0b9ae99
2467 o : changeset: 28:44ecd0b9ae99
2468 |\ \ parent: 1:6db2ef61d156
2468 |\ \ parent: 1:6db2ef61d156
2469 | ~ : parent: 26:7f25b6c2f0b9
2469 | ~ : parent: 26:7f25b6c2f0b9
2470 | : user: test
2470 | : user: test
2471 | : date: Thu Jan 01 00:00:28 1970 +0000
2471 | : date: Thu Jan 01 00:00:28 1970 +0000
2472 | : summary: (28) merge zero known
2472 | : summary: (28) merge zero known
2473 | /
2473 | /
2474 o : changeset: 26:7f25b6c2f0b9
2474 o : changeset: 26:7f25b6c2f0b9
2475 |\ \ parent: 18:1aa84d96232a
2475 |\ \ parent: 18:1aa84d96232a
2476 | | : parent: 25:91da8ed57247
2476 | | : parent: 25:91da8ed57247
2477 | | : user: test
2477 | | : user: test
2478 | | : date: Thu Jan 01 00:00:26 1970 +0000
2478 | | : date: Thu Jan 01 00:00:26 1970 +0000
2479 | | : summary: (26) merge one known; far right
2479 | | : summary: (26) merge one known; far right
2480 | | :
2480 | | :
2481 | o : changeset: 25:91da8ed57247
2481 | o : changeset: 25:91da8ed57247
2482 | |\: parent: 21:d42a756af44d
2482 | |\: parent: 21:d42a756af44d
2483 | | : parent: 24:a9c19a3d96b7
2483 | | : parent: 24:a9c19a3d96b7
2484 | | : user: test
2484 | | : user: test
2485 | | : date: Thu Jan 01 00:00:25 1970 +0000
2485 | | : date: Thu Jan 01 00:00:25 1970 +0000
2486 | | : summary: (25) merge one known; far left
2486 | | : summary: (25) merge one known; far left
2487 | | :
2487 | | :
2488 | o : changeset: 24:a9c19a3d96b7
2488 | o : changeset: 24:a9c19a3d96b7
2489 | |\ \ parent: 0:e6eb3150255d
2489 | |\ \ parent: 0:e6eb3150255d
2490 | | ~ : parent: 23:a01cddf0766d
2490 | | ~ : parent: 23:a01cddf0766d
2491 | | : user: test
2491 | | : user: test
2492 | | : date: Thu Jan 01 00:00:24 1970 +0000
2492 | | : date: Thu Jan 01 00:00:24 1970 +0000
2493 | | : summary: (24) merge one known; immediate right
2493 | | : summary: (24) merge one known; immediate right
2494 | | /
2494 | | /
2495 | o : changeset: 23:a01cddf0766d
2495 | o : changeset: 23:a01cddf0766d
2496 | |\ \ parent: 1:6db2ef61d156
2496 | |\ \ parent: 1:6db2ef61d156
2497 | | ~ : parent: 22:e0d9cccacb5d
2497 | | ~ : parent: 22:e0d9cccacb5d
2498 | | : user: test
2498 | | : user: test
2499 | | : date: Thu Jan 01 00:00:23 1970 +0000
2499 | | : date: Thu Jan 01 00:00:23 1970 +0000
2500 | | : summary: (23) merge one known; immediate left
2500 | | : summary: (23) merge one known; immediate left
2501 | | /
2501 | | /
2502 | o : changeset: 22:e0d9cccacb5d
2502 | o : changeset: 22:e0d9cccacb5d
2503 |/:/ parent: 18:1aa84d96232a
2503 |/:/ parent: 18:1aa84d96232a
2504 | : parent: 21:d42a756af44d
2504 | : parent: 21:d42a756af44d
2505 | : user: test
2505 | : user: test
2506 | : date: Thu Jan 01 00:00:22 1970 +0000
2506 | : date: Thu Jan 01 00:00:22 1970 +0000
2507 | : summary: (22) merge two known; one far left, one far right
2507 | : summary: (22) merge two known; one far left, one far right
2508 | :
2508 | :
2509 | o changeset: 21:d42a756af44d
2509 | o changeset: 21:d42a756af44d
2510 | |\ parent: 19:31ddc2c1573b
2510 | |\ parent: 19:31ddc2c1573b
2511 | | | parent: 20:d30ed6450e32
2511 | | | parent: 20:d30ed6450e32
2512 | | | user: test
2512 | | | user: test
2513 | | | date: Thu Jan 01 00:00:21 1970 +0000
2513 | | | date: Thu Jan 01 00:00:21 1970 +0000
2514 | | | summary: (21) expand
2514 | | | summary: (21) expand
2515 | | |
2515 | | |
2516 +---o changeset: 20:d30ed6450e32
2516 +---o changeset: 20:d30ed6450e32
2517 | | | parent: 0:e6eb3150255d
2517 | | | parent: 0:e6eb3150255d
2518 | | ~ parent: 18:1aa84d96232a
2518 | | ~ parent: 18:1aa84d96232a
2519 | | user: test
2519 | | user: test
2520 | | date: Thu Jan 01 00:00:20 1970 +0000
2520 | | date: Thu Jan 01 00:00:20 1970 +0000
2521 | | summary: (20) merge two known; two far right
2521 | | summary: (20) merge two known; two far right
2522 | |
2522 | |
2523 | o changeset: 19:31ddc2c1573b
2523 | o changeset: 19:31ddc2c1573b
2524 | |\ parent: 15:1dda3f72782d
2524 | |\ parent: 15:1dda3f72782d
2525 | | | parent: 17:44765d7c06e0
2525 | | | parent: 17:44765d7c06e0
2526 | | | user: test
2526 | | | user: test
2527 | | | date: Thu Jan 01 00:00:19 1970 +0000
2527 | | | date: Thu Jan 01 00:00:19 1970 +0000
2528 | | | summary: (19) expand
2528 | | | summary: (19) expand
2529 | | |
2529 | | |
2530 o | | changeset: 18:1aa84d96232a
2530 o | | changeset: 18:1aa84d96232a
2531 |\| | parent: 1:6db2ef61d156
2531 |\| | parent: 1:6db2ef61d156
2532 ~ | | parent: 15:1dda3f72782d
2532 ~ | | parent: 15:1dda3f72782d
2533 | | user: test
2533 | | user: test
2534 | | date: Thu Jan 01 00:00:18 1970 +0000
2534 | | date: Thu Jan 01 00:00:18 1970 +0000
2535 | | summary: (18) merge two known; two far left
2535 | | summary: (18) merge two known; two far left
2536 / /
2536 / /
2537 | o changeset: 17:44765d7c06e0
2537 | o changeset: 17:44765d7c06e0
2538 | |\ parent: 12:86b91144a6e9
2538 | |\ parent: 12:86b91144a6e9
2539 | | | parent: 16:3677d192927d
2539 | | | parent: 16:3677d192927d
2540 | | | user: test
2540 | | | user: test
2541 | | | date: Thu Jan 01 00:00:17 1970 +0000
2541 | | | date: Thu Jan 01 00:00:17 1970 +0000
2542 | | | summary: (17) expand
2542 | | | summary: (17) expand
2543 | | |
2543 | | |
2544 | | o changeset: 16:3677d192927d
2544 | | o changeset: 16:3677d192927d
2545 | | |\ parent: 0:e6eb3150255d
2545 | | |\ parent: 0:e6eb3150255d
2546 | | ~ ~ parent: 1:6db2ef61d156
2546 | | ~ ~ parent: 1:6db2ef61d156
2547 | | user: test
2547 | | user: test
2548 | | date: Thu Jan 01 00:00:16 1970 +0000
2548 | | date: Thu Jan 01 00:00:16 1970 +0000
2549 | | summary: (16) merge two known; one immediate right, one near right
2549 | | summary: (16) merge two known; one immediate right, one near right
2550 | |
2550 | |
2551 o | changeset: 15:1dda3f72782d
2551 o | changeset: 15:1dda3f72782d
2552 |\ \ parent: 13:22d8966a97e3
2552 |\ \ parent: 13:22d8966a97e3
2553 | | | parent: 14:8eac370358ef
2553 | | | parent: 14:8eac370358ef
2554 | | | user: test
2554 | | | user: test
2555 | | | date: Thu Jan 01 00:00:15 1970 +0000
2555 | | | date: Thu Jan 01 00:00:15 1970 +0000
2556 | | | summary: (15) expand
2556 | | | summary: (15) expand
2557 | | |
2557 | | |
2558 | o | changeset: 14:8eac370358ef
2558 | o | changeset: 14:8eac370358ef
2559 | |\| parent: 0:e6eb3150255d
2559 | |\| parent: 0:e6eb3150255d
2560 | ~ | parent: 12:86b91144a6e9
2560 | ~ | parent: 12:86b91144a6e9
2561 | | user: test
2561 | | user: test
2562 | | date: Thu Jan 01 00:00:14 1970 +0000
2562 | | date: Thu Jan 01 00:00:14 1970 +0000
2563 | | summary: (14) merge two known; one immediate right, one far right
2563 | | summary: (14) merge two known; one immediate right, one far right
2564 | /
2564 | /
2565 o | changeset: 13:22d8966a97e3
2565 o | changeset: 13:22d8966a97e3
2566 |\ \ parent: 9:7010c0af0a35
2566 |\ \ parent: 9:7010c0af0a35
2567 | | | parent: 11:832d76e6bdf2
2567 | | | parent: 11:832d76e6bdf2
2568 | | | user: test
2568 | | | user: test
2569 | | | date: Thu Jan 01 00:00:13 1970 +0000
2569 | | | date: Thu Jan 01 00:00:13 1970 +0000
2570 | | | summary: (13) expand
2570 | | | summary: (13) expand
2571 | | |
2571 | | |
2572 +---o changeset: 12:86b91144a6e9
2572 +---o changeset: 12:86b91144a6e9
2573 | | | parent: 1:6db2ef61d156
2573 | | | parent: 1:6db2ef61d156
2574 | | ~ parent: 9:7010c0af0a35
2574 | | ~ parent: 9:7010c0af0a35
2575 | | user: test
2575 | | user: test
2576 | | date: Thu Jan 01 00:00:12 1970 +0000
2576 | | date: Thu Jan 01 00:00:12 1970 +0000
2577 | | summary: (12) merge two known; one immediate right, one far left
2577 | | summary: (12) merge two known; one immediate right, one far left
2578 | |
2578 | |
2579 | o changeset: 11:832d76e6bdf2
2579 | o changeset: 11:832d76e6bdf2
2580 | |\ parent: 6:b105a072e251
2580 | |\ parent: 6:b105a072e251
2581 | | | parent: 10:74c64d036d72
2581 | | | parent: 10:74c64d036d72
2582 | | | user: test
2582 | | | user: test
2583 | | | date: Thu Jan 01 00:00:11 1970 +0000
2583 | | | date: Thu Jan 01 00:00:11 1970 +0000
2584 | | | summary: (11) expand
2584 | | | summary: (11) expand
2585 | | |
2585 | | |
2586 | | o changeset: 10:74c64d036d72
2586 | | o changeset: 10:74c64d036d72
2587 | |/| parent: 0:e6eb3150255d
2587 | |/| parent: 0:e6eb3150255d
2588 | | ~ parent: 6:b105a072e251
2588 | | ~ parent: 6:b105a072e251
2589 | | user: test
2589 | | user: test
2590 | | date: Thu Jan 01 00:00:10 1970 +0000
2590 | | date: Thu Jan 01 00:00:10 1970 +0000
2591 | | summary: (10) merge two known; one immediate left, one near right
2591 | | summary: (10) merge two known; one immediate left, one near right
2592 | |
2592 | |
2593 o | changeset: 9:7010c0af0a35
2593 o | changeset: 9:7010c0af0a35
2594 |\ \ parent: 7:b632bb1b1224
2594 |\ \ parent: 7:b632bb1b1224
2595 | | | parent: 8:7a0b11f71937
2595 | | | parent: 8:7a0b11f71937
2596 | | | user: test
2596 | | | user: test
2597 | | | date: Thu Jan 01 00:00:09 1970 +0000
2597 | | | date: Thu Jan 01 00:00:09 1970 +0000
2598 | | | summary: (9) expand
2598 | | | summary: (9) expand
2599 | | |
2599 | | |
2600 | o | changeset: 8:7a0b11f71937
2600 | o | changeset: 8:7a0b11f71937
2601 |/| | parent: 0:e6eb3150255d
2601 |/| | parent: 0:e6eb3150255d
2602 | ~ | parent: 7:b632bb1b1224
2602 | ~ | parent: 7:b632bb1b1224
2603 | | user: test
2603 | | user: test
2604 | | date: Thu Jan 01 00:00:08 1970 +0000
2604 | | date: Thu Jan 01 00:00:08 1970 +0000
2605 | | summary: (8) merge two known; one immediate left, one far right
2605 | | summary: (8) merge two known; one immediate left, one far right
2606 | /
2606 | /
2607 o | changeset: 7:b632bb1b1224
2607 o | changeset: 7:b632bb1b1224
2608 |\ \ parent: 2:3d9a33b8d1e1
2608 |\ \ parent: 2:3d9a33b8d1e1
2609 | ~ | parent: 5:4409d547b708
2609 | ~ | parent: 5:4409d547b708
2610 | | user: test
2610 | | user: test
2611 | | date: Thu Jan 01 00:00:07 1970 +0000
2611 | | date: Thu Jan 01 00:00:07 1970 +0000
2612 | | summary: (7) expand
2612 | | summary: (7) expand
2613 | /
2613 | /
2614 | o changeset: 6:b105a072e251
2614 | o changeset: 6:b105a072e251
2615 |/| parent: 2:3d9a33b8d1e1
2615 |/| parent: 2:3d9a33b8d1e1
2616 | ~ parent: 5:4409d547b708
2616 | ~ parent: 5:4409d547b708
2617 | user: test
2617 | user: test
2618 | date: Thu Jan 01 00:00:06 1970 +0000
2618 | date: Thu Jan 01 00:00:06 1970 +0000
2619 | summary: (6) merge two known; one immediate left, one far left
2619 | summary: (6) merge two known; one immediate left, one far left
2620 |
2620 |
2621 o changeset: 5:4409d547b708
2621 o changeset: 5:4409d547b708
2622 |\ parent: 3:27eef8ed80b4
2622 |\ parent: 3:27eef8ed80b4
2623 | ~ parent: 4:26a8bac39d9f
2623 | ~ parent: 4:26a8bac39d9f
2624 | user: test
2624 | user: test
2625 | date: Thu Jan 01 00:00:05 1970 +0000
2625 | date: Thu Jan 01 00:00:05 1970 +0000
2626 | summary: (5) expand
2626 | summary: (5) expand
2627 |
2627 |
2628 o changeset: 4:26a8bac39d9f
2628 o changeset: 4:26a8bac39d9f
2629 |\ parent: 1:6db2ef61d156
2629 |\ parent: 1:6db2ef61d156
2630 ~ ~ parent: 3:27eef8ed80b4
2630 ~ ~ parent: 3:27eef8ed80b4
2631 user: test
2631 user: test
2632 date: Thu Jan 01 00:00:04 1970 +0000
2632 date: Thu Jan 01 00:00:04 1970 +0000
2633 summary: (4) merge two known; one immediate left, one immediate right
2633 summary: (4) merge two known; one immediate left, one immediate right
2634
2634
2635
2635
2636 Setting HGPLAIN ignores graphmod styling:
2636 Setting HGPLAIN ignores graphmod styling:
2637
2637
2638 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2638 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2639 @ changeset: 36:08a19a744424
2639 @ changeset: 36:08a19a744424
2640 | branch: branch
2640 | branch: branch
2641 | tag: tip
2641 | tag: tip
2642 | parent: 35:9159c3644c5e
2642 | parent: 35:9159c3644c5e
2643 | parent: 35:9159c3644c5e
2643 | parent: 35:9159c3644c5e
2644 | user: test
2644 | user: test
2645 | date: Thu Jan 01 00:00:36 1970 +0000
2645 | date: Thu Jan 01 00:00:36 1970 +0000
2646 | summary: (36) buggy merge: identical parents
2646 | summary: (36) buggy merge: identical parents
2647 |
2647 |
2648 o changeset: 32:d06dffa21a31
2648 o changeset: 32:d06dffa21a31
2649 |\ parent: 27:886ed638191b
2649 |\ parent: 27:886ed638191b
2650 | | parent: 31:621d83e11f67
2650 | | parent: 31:621d83e11f67
2651 | | user: test
2651 | | user: test
2652 | | date: Thu Jan 01 00:00:32 1970 +0000
2652 | | date: Thu Jan 01 00:00:32 1970 +0000
2653 | | summary: (32) expand
2653 | | summary: (32) expand
2654 | |
2654 | |
2655 o | changeset: 31:621d83e11f67
2655 o | changeset: 31:621d83e11f67
2656 |\| parent: 21:d42a756af44d
2656 |\| parent: 21:d42a756af44d
2657 | | parent: 30:6e11cd4b648f
2657 | | parent: 30:6e11cd4b648f
2658 | | user: test
2658 | | user: test
2659 | | date: Thu Jan 01 00:00:31 1970 +0000
2659 | | date: Thu Jan 01 00:00:31 1970 +0000
2660 | | summary: (31) expand
2660 | | summary: (31) expand
2661 | |
2661 | |
2662 o | changeset: 30:6e11cd4b648f
2662 o | changeset: 30:6e11cd4b648f
2663 |\ \ parent: 28:44ecd0b9ae99
2663 |\ \ parent: 28:44ecd0b9ae99
2664 | | | parent: 29:cd9bb2be7593
2664 | | | parent: 29:cd9bb2be7593
2665 | | | user: test
2665 | | | user: test
2666 | | | date: Thu Jan 01 00:00:30 1970 +0000
2666 | | | date: Thu Jan 01 00:00:30 1970 +0000
2667 | | | summary: (30) expand
2667 | | | summary: (30) expand
2668 | | |
2668 | | |
2669 o | | changeset: 28:44ecd0b9ae99
2669 o | | changeset: 28:44ecd0b9ae99
2670 |\ \ \ parent: 1:6db2ef61d156
2670 |\ \ \ parent: 1:6db2ef61d156
2671 | | | | parent: 26:7f25b6c2f0b9
2671 | | | | parent: 26:7f25b6c2f0b9
2672 | | | | user: test
2672 | | | | user: test
2673 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2673 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2674 | | | | summary: (28) merge zero known
2674 | | | | summary: (28) merge zero known
2675 | | | |
2675 | | | |
2676 o | | | changeset: 26:7f25b6c2f0b9
2676 o | | | changeset: 26:7f25b6c2f0b9
2677 |\ \ \ \ parent: 18:1aa84d96232a
2677 |\ \ \ \ parent: 18:1aa84d96232a
2678 | | | | | parent: 25:91da8ed57247
2678 | | | | | parent: 25:91da8ed57247
2679 | | | | | user: test
2679 | | | | | user: test
2680 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2680 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2681 | | | | | summary: (26) merge one known; far right
2681 | | | | | summary: (26) merge one known; far right
2682 | | | | |
2682 | | | | |
2683 | o-----+ changeset: 25:91da8ed57247
2683 | o-----+ changeset: 25:91da8ed57247
2684 | | | | | parent: 21:d42a756af44d
2684 | | | | | parent: 21:d42a756af44d
2685 | | | | | parent: 24:a9c19a3d96b7
2685 | | | | | parent: 24:a9c19a3d96b7
2686 | | | | | user: test
2686 | | | | | user: test
2687 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2687 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2688 | | | | | summary: (25) merge one known; far left
2688 | | | | | summary: (25) merge one known; far left
2689 | | | | |
2689 | | | | |
2690 | o | | | changeset: 24:a9c19a3d96b7
2690 | o | | | changeset: 24:a9c19a3d96b7
2691 | |\ \ \ \ parent: 0:e6eb3150255d
2691 | |\ \ \ \ parent: 0:e6eb3150255d
2692 | | | | | | parent: 23:a01cddf0766d
2692 | | | | | | parent: 23:a01cddf0766d
2693 | | | | | | user: test
2693 | | | | | | user: test
2694 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2694 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2695 | | | | | | summary: (24) merge one known; immediate right
2695 | | | | | | summary: (24) merge one known; immediate right
2696 | | | | | |
2696 | | | | | |
2697 | o---+ | | changeset: 23:a01cddf0766d
2697 | o---+ | | changeset: 23:a01cddf0766d
2698 | | | | | | parent: 1:6db2ef61d156
2698 | | | | | | parent: 1:6db2ef61d156
2699 | | | | | | parent: 22:e0d9cccacb5d
2699 | | | | | | parent: 22:e0d9cccacb5d
2700 | | | | | | user: test
2700 | | | | | | user: test
2701 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2701 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2702 | | | | | | summary: (23) merge one known; immediate left
2702 | | | | | | summary: (23) merge one known; immediate left
2703 | | | | | |
2703 | | | | | |
2704 | o-------+ changeset: 22:e0d9cccacb5d
2704 | o-------+ changeset: 22:e0d9cccacb5d
2705 | | | | | | parent: 18:1aa84d96232a
2705 | | | | | | parent: 18:1aa84d96232a
2706 |/ / / / / parent: 21:d42a756af44d
2706 |/ / / / / parent: 21:d42a756af44d
2707 | | | | | user: test
2707 | | | | | user: test
2708 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2708 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2709 | | | | | summary: (22) merge two known; one far left, one far right
2709 | | | | | summary: (22) merge two known; one far left, one far right
2710 | | | | |
2710 | | | | |
2711 | | | | o changeset: 21:d42a756af44d
2711 | | | | o changeset: 21:d42a756af44d
2712 | | | | |\ parent: 19:31ddc2c1573b
2712 | | | | |\ parent: 19:31ddc2c1573b
2713 | | | | | | parent: 20:d30ed6450e32
2713 | | | | | | parent: 20:d30ed6450e32
2714 | | | | | | user: test
2714 | | | | | | user: test
2715 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2715 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2716 | | | | | | summary: (21) expand
2716 | | | | | | summary: (21) expand
2717 | | | | | |
2717 | | | | | |
2718 +-+-------o changeset: 20:d30ed6450e32
2718 +-+-------o changeset: 20:d30ed6450e32
2719 | | | | | parent: 0:e6eb3150255d
2719 | | | | | parent: 0:e6eb3150255d
2720 | | | | | parent: 18:1aa84d96232a
2720 | | | | | parent: 18:1aa84d96232a
2721 | | | | | user: test
2721 | | | | | user: test
2722 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2722 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2723 | | | | | summary: (20) merge two known; two far right
2723 | | | | | summary: (20) merge two known; two far right
2724 | | | | |
2724 | | | | |
2725 | | | | o changeset: 19:31ddc2c1573b
2725 | | | | o changeset: 19:31ddc2c1573b
2726 | | | | |\ parent: 15:1dda3f72782d
2726 | | | | |\ parent: 15:1dda3f72782d
2727 | | | | | | parent: 17:44765d7c06e0
2727 | | | | | | parent: 17:44765d7c06e0
2728 | | | | | | user: test
2728 | | | | | | user: test
2729 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2729 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2730 | | | | | | summary: (19) expand
2730 | | | | | | summary: (19) expand
2731 | | | | | |
2731 | | | | | |
2732 o---+---+ | changeset: 18:1aa84d96232a
2732 o---+---+ | changeset: 18:1aa84d96232a
2733 | | | | | parent: 1:6db2ef61d156
2733 | | | | | parent: 1:6db2ef61d156
2734 / / / / / parent: 15:1dda3f72782d
2734 / / / / / parent: 15:1dda3f72782d
2735 | | | | | user: test
2735 | | | | | user: test
2736 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2736 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2737 | | | | | summary: (18) merge two known; two far left
2737 | | | | | summary: (18) merge two known; two far left
2738 | | | | |
2738 | | | | |
2739 | | | | o changeset: 17:44765d7c06e0
2739 | | | | o changeset: 17:44765d7c06e0
2740 | | | | |\ parent: 12:86b91144a6e9
2740 | | | | |\ parent: 12:86b91144a6e9
2741 | | | | | | parent: 16:3677d192927d
2741 | | | | | | parent: 16:3677d192927d
2742 | | | | | | user: test
2742 | | | | | | user: test
2743 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2743 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2744 | | | | | | summary: (17) expand
2744 | | | | | | summary: (17) expand
2745 | | | | | |
2745 | | | | | |
2746 +-+-------o changeset: 16:3677d192927d
2746 +-+-------o changeset: 16:3677d192927d
2747 | | | | | parent: 0:e6eb3150255d
2747 | | | | | parent: 0:e6eb3150255d
2748 | | | | | parent: 1:6db2ef61d156
2748 | | | | | parent: 1:6db2ef61d156
2749 | | | | | user: test
2749 | | | | | user: test
2750 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2750 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2751 | | | | | summary: (16) merge two known; one immediate right, one near right
2751 | | | | | summary: (16) merge two known; one immediate right, one near right
2752 | | | | |
2752 | | | | |
2753 | | | o | changeset: 15:1dda3f72782d
2753 | | | o | changeset: 15:1dda3f72782d
2754 | | | |\ \ parent: 13:22d8966a97e3
2754 | | | |\ \ parent: 13:22d8966a97e3
2755 | | | | | | parent: 14:8eac370358ef
2755 | | | | | | parent: 14:8eac370358ef
2756 | | | | | | user: test
2756 | | | | | | user: test
2757 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2757 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2758 | | | | | | summary: (15) expand
2758 | | | | | | summary: (15) expand
2759 | | | | | |
2759 | | | | | |
2760 +-------o | changeset: 14:8eac370358ef
2760 +-------o | changeset: 14:8eac370358ef
2761 | | | | |/ parent: 0:e6eb3150255d
2761 | | | | |/ parent: 0:e6eb3150255d
2762 | | | | | parent: 12:86b91144a6e9
2762 | | | | | parent: 12:86b91144a6e9
2763 | | | | | user: test
2763 | | | | | user: test
2764 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2764 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2765 | | | | | summary: (14) merge two known; one immediate right, one far right
2765 | | | | | summary: (14) merge two known; one immediate right, one far right
2766 | | | | |
2766 | | | | |
2767 | | | o | changeset: 13:22d8966a97e3
2767 | | | o | changeset: 13:22d8966a97e3
2768 | | | |\ \ parent: 9:7010c0af0a35
2768 | | | |\ \ parent: 9:7010c0af0a35
2769 | | | | | | parent: 11:832d76e6bdf2
2769 | | | | | | parent: 11:832d76e6bdf2
2770 | | | | | | user: test
2770 | | | | | | user: test
2771 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2771 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2772 | | | | | | summary: (13) expand
2772 | | | | | | summary: (13) expand
2773 | | | | | |
2773 | | | | | |
2774 | +---+---o changeset: 12:86b91144a6e9
2774 | +---+---o changeset: 12:86b91144a6e9
2775 | | | | | parent: 1:6db2ef61d156
2775 | | | | | parent: 1:6db2ef61d156
2776 | | | | | parent: 9:7010c0af0a35
2776 | | | | | parent: 9:7010c0af0a35
2777 | | | | | user: test
2777 | | | | | user: test
2778 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2778 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2779 | | | | | summary: (12) merge two known; one immediate right, one far left
2779 | | | | | summary: (12) merge two known; one immediate right, one far left
2780 | | | | |
2780 | | | | |
2781 | | | | o changeset: 11:832d76e6bdf2
2781 | | | | o changeset: 11:832d76e6bdf2
2782 | | | | |\ parent: 6:b105a072e251
2782 | | | | |\ parent: 6:b105a072e251
2783 | | | | | | parent: 10:74c64d036d72
2783 | | | | | | parent: 10:74c64d036d72
2784 | | | | | | user: test
2784 | | | | | | user: test
2785 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2785 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2786 | | | | | | summary: (11) expand
2786 | | | | | | summary: (11) expand
2787 | | | | | |
2787 | | | | | |
2788 +---------o changeset: 10:74c64d036d72
2788 +---------o changeset: 10:74c64d036d72
2789 | | | | |/ parent: 0:e6eb3150255d
2789 | | | | |/ parent: 0:e6eb3150255d
2790 | | | | | parent: 6:b105a072e251
2790 | | | | | parent: 6:b105a072e251
2791 | | | | | user: test
2791 | | | | | user: test
2792 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2792 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2793 | | | | | summary: (10) merge two known; one immediate left, one near right
2793 | | | | | summary: (10) merge two known; one immediate left, one near right
2794 | | | | |
2794 | | | | |
2795 | | | o | changeset: 9:7010c0af0a35
2795 | | | o | changeset: 9:7010c0af0a35
2796 | | | |\ \ parent: 7:b632bb1b1224
2796 | | | |\ \ parent: 7:b632bb1b1224
2797 | | | | | | parent: 8:7a0b11f71937
2797 | | | | | | parent: 8:7a0b11f71937
2798 | | | | | | user: test
2798 | | | | | | user: test
2799 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2799 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2800 | | | | | | summary: (9) expand
2800 | | | | | | summary: (9) expand
2801 | | | | | |
2801 | | | | | |
2802 +-------o | changeset: 8:7a0b11f71937
2802 +-------o | changeset: 8:7a0b11f71937
2803 | | | |/ / parent: 0:e6eb3150255d
2803 | | | |/ / parent: 0:e6eb3150255d
2804 | | | | | parent: 7:b632bb1b1224
2804 | | | | | parent: 7:b632bb1b1224
2805 | | | | | user: test
2805 | | | | | user: test
2806 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2806 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2807 | | | | | summary: (8) merge two known; one immediate left, one far right
2807 | | | | | summary: (8) merge two known; one immediate left, one far right
2808 | | | | |
2808 | | | | |
2809 | | | o | changeset: 7:b632bb1b1224
2809 | | | o | changeset: 7:b632bb1b1224
2810 | | | |\ \ parent: 2:3d9a33b8d1e1
2810 | | | |\ \ parent: 2:3d9a33b8d1e1
2811 | | | | | | parent: 5:4409d547b708
2811 | | | | | | parent: 5:4409d547b708
2812 | | | | | | user: test
2812 | | | | | | user: test
2813 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2813 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2814 | | | | | | summary: (7) expand
2814 | | | | | | summary: (7) expand
2815 | | | | | |
2815 | | | | | |
2816 | | | +---o changeset: 6:b105a072e251
2816 | | | +---o changeset: 6:b105a072e251
2817 | | | | |/ parent: 2:3d9a33b8d1e1
2817 | | | | |/ parent: 2:3d9a33b8d1e1
2818 | | | | | parent: 5:4409d547b708
2818 | | | | | parent: 5:4409d547b708
2819 | | | | | user: test
2819 | | | | | user: test
2820 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2820 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2821 | | | | | summary: (6) merge two known; one immediate left, one far left
2821 | | | | | summary: (6) merge two known; one immediate left, one far left
2822 | | | | |
2822 | | | | |
2823 | | | o | changeset: 5:4409d547b708
2823 | | | o | changeset: 5:4409d547b708
2824 | | | |\ \ parent: 3:27eef8ed80b4
2824 | | | |\ \ parent: 3:27eef8ed80b4
2825 | | | | | | parent: 4:26a8bac39d9f
2825 | | | | | | parent: 4:26a8bac39d9f
2826 | | | | | | user: test
2826 | | | | | | user: test
2827 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2827 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2828 | | | | | | summary: (5) expand
2828 | | | | | | summary: (5) expand
2829 | | | | | |
2829 | | | | | |
2830 | +---o | | changeset: 4:26a8bac39d9f
2830 | +---o | | changeset: 4:26a8bac39d9f
2831 | | | |/ / parent: 1:6db2ef61d156
2831 | | | |/ / parent: 1:6db2ef61d156
2832 | | | | | parent: 3:27eef8ed80b4
2832 | | | | | parent: 3:27eef8ed80b4
2833 | | | | | user: test
2833 | | | | | user: test
2834 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2834 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2835 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2835 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2836 | | | | |
2836 | | | | |
2837
2837
2838 .. unless HGPLAINEXCEPT=graph is set:
2838 .. unless HGPLAINEXCEPT=graph is set:
2839
2839
2840 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2840 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2841 @ changeset: 36:08a19a744424
2841 @ changeset: 36:08a19a744424
2842 : branch: branch
2842 : branch: branch
2843 : tag: tip
2843 : tag: tip
2844 : parent: 35:9159c3644c5e
2844 : parent: 35:9159c3644c5e
2845 : parent: 35:9159c3644c5e
2845 : parent: 35:9159c3644c5e
2846 : user: test
2846 : user: test
2847 : date: Thu Jan 01 00:00:36 1970 +0000
2847 : date: Thu Jan 01 00:00:36 1970 +0000
2848 : summary: (36) buggy merge: identical parents
2848 : summary: (36) buggy merge: identical parents
2849 :
2849 :
2850 o changeset: 32:d06dffa21a31
2850 o changeset: 32:d06dffa21a31
2851 |\ parent: 27:886ed638191b
2851 |\ parent: 27:886ed638191b
2852 | : parent: 31:621d83e11f67
2852 | : parent: 31:621d83e11f67
2853 | : user: test
2853 | : user: test
2854 | : date: Thu Jan 01 00:00:32 1970 +0000
2854 | : date: Thu Jan 01 00:00:32 1970 +0000
2855 | : summary: (32) expand
2855 | : summary: (32) expand
2856 | :
2856 | :
2857 o : changeset: 31:621d83e11f67
2857 o : changeset: 31:621d83e11f67
2858 |\: parent: 21:d42a756af44d
2858 |\: parent: 21:d42a756af44d
2859 | : parent: 30:6e11cd4b648f
2859 | : parent: 30:6e11cd4b648f
2860 | : user: test
2860 | : user: test
2861 | : date: Thu Jan 01 00:00:31 1970 +0000
2861 | : date: Thu Jan 01 00:00:31 1970 +0000
2862 | : summary: (31) expand
2862 | : summary: (31) expand
2863 | :
2863 | :
2864 o : changeset: 30:6e11cd4b648f
2864 o : changeset: 30:6e11cd4b648f
2865 |\ \ parent: 28:44ecd0b9ae99
2865 |\ \ parent: 28:44ecd0b9ae99
2866 | ~ : parent: 29:cd9bb2be7593
2866 | ~ : parent: 29:cd9bb2be7593
2867 | : user: test
2867 | : user: test
2868 | : date: Thu Jan 01 00:00:30 1970 +0000
2868 | : date: Thu Jan 01 00:00:30 1970 +0000
2869 | : summary: (30) expand
2869 | : summary: (30) expand
2870 | /
2870 | /
2871 o : changeset: 28:44ecd0b9ae99
2871 o : changeset: 28:44ecd0b9ae99
2872 |\ \ parent: 1:6db2ef61d156
2872 |\ \ parent: 1:6db2ef61d156
2873 | ~ : parent: 26:7f25b6c2f0b9
2873 | ~ : parent: 26:7f25b6c2f0b9
2874 | : user: test
2874 | : user: test
2875 | : date: Thu Jan 01 00:00:28 1970 +0000
2875 | : date: Thu Jan 01 00:00:28 1970 +0000
2876 | : summary: (28) merge zero known
2876 | : summary: (28) merge zero known
2877 | /
2877 | /
2878 o : changeset: 26:7f25b6c2f0b9
2878 o : changeset: 26:7f25b6c2f0b9
2879 |\ \ parent: 18:1aa84d96232a
2879 |\ \ parent: 18:1aa84d96232a
2880 | | : parent: 25:91da8ed57247
2880 | | : parent: 25:91da8ed57247
2881 | | : user: test
2881 | | : user: test
2882 | | : date: Thu Jan 01 00:00:26 1970 +0000
2882 | | : date: Thu Jan 01 00:00:26 1970 +0000
2883 | | : summary: (26) merge one known; far right
2883 | | : summary: (26) merge one known; far right
2884 | | :
2884 | | :
2885 | o : changeset: 25:91da8ed57247
2885 | o : changeset: 25:91da8ed57247
2886 | |\: parent: 21:d42a756af44d
2886 | |\: parent: 21:d42a756af44d
2887 | | : parent: 24:a9c19a3d96b7
2887 | | : parent: 24:a9c19a3d96b7
2888 | | : user: test
2888 | | : user: test
2889 | | : date: Thu Jan 01 00:00:25 1970 +0000
2889 | | : date: Thu Jan 01 00:00:25 1970 +0000
2890 | | : summary: (25) merge one known; far left
2890 | | : summary: (25) merge one known; far left
2891 | | :
2891 | | :
2892 | o : changeset: 24:a9c19a3d96b7
2892 | o : changeset: 24:a9c19a3d96b7
2893 | |\ \ parent: 0:e6eb3150255d
2893 | |\ \ parent: 0:e6eb3150255d
2894 | | ~ : parent: 23:a01cddf0766d
2894 | | ~ : parent: 23:a01cddf0766d
2895 | | : user: test
2895 | | : user: test
2896 | | : date: Thu Jan 01 00:00:24 1970 +0000
2896 | | : date: Thu Jan 01 00:00:24 1970 +0000
2897 | | : summary: (24) merge one known; immediate right
2897 | | : summary: (24) merge one known; immediate right
2898 | | /
2898 | | /
2899 | o : changeset: 23:a01cddf0766d
2899 | o : changeset: 23:a01cddf0766d
2900 | |\ \ parent: 1:6db2ef61d156
2900 | |\ \ parent: 1:6db2ef61d156
2901 | | ~ : parent: 22:e0d9cccacb5d
2901 | | ~ : parent: 22:e0d9cccacb5d
2902 | | : user: test
2902 | | : user: test
2903 | | : date: Thu Jan 01 00:00:23 1970 +0000
2903 | | : date: Thu Jan 01 00:00:23 1970 +0000
2904 | | : summary: (23) merge one known; immediate left
2904 | | : summary: (23) merge one known; immediate left
2905 | | /
2905 | | /
2906 | o : changeset: 22:e0d9cccacb5d
2906 | o : changeset: 22:e0d9cccacb5d
2907 |/:/ parent: 18:1aa84d96232a
2907 |/:/ parent: 18:1aa84d96232a
2908 | : parent: 21:d42a756af44d
2908 | : parent: 21:d42a756af44d
2909 | : user: test
2909 | : user: test
2910 | : date: Thu Jan 01 00:00:22 1970 +0000
2910 | : date: Thu Jan 01 00:00:22 1970 +0000
2911 | : summary: (22) merge two known; one far left, one far right
2911 | : summary: (22) merge two known; one far left, one far right
2912 | :
2912 | :
2913 | o changeset: 21:d42a756af44d
2913 | o changeset: 21:d42a756af44d
2914 | |\ parent: 19:31ddc2c1573b
2914 | |\ parent: 19:31ddc2c1573b
2915 | | | parent: 20:d30ed6450e32
2915 | | | parent: 20:d30ed6450e32
2916 | | | user: test
2916 | | | user: test
2917 | | | date: Thu Jan 01 00:00:21 1970 +0000
2917 | | | date: Thu Jan 01 00:00:21 1970 +0000
2918 | | | summary: (21) expand
2918 | | | summary: (21) expand
2919 | | |
2919 | | |
2920 +---o changeset: 20:d30ed6450e32
2920 +---o changeset: 20:d30ed6450e32
2921 | | | parent: 0:e6eb3150255d
2921 | | | parent: 0:e6eb3150255d
2922 | | ~ parent: 18:1aa84d96232a
2922 | | ~ parent: 18:1aa84d96232a
2923 | | user: test
2923 | | user: test
2924 | | date: Thu Jan 01 00:00:20 1970 +0000
2924 | | date: Thu Jan 01 00:00:20 1970 +0000
2925 | | summary: (20) merge two known; two far right
2925 | | summary: (20) merge two known; two far right
2926 | |
2926 | |
2927 | o changeset: 19:31ddc2c1573b
2927 | o changeset: 19:31ddc2c1573b
2928 | |\ parent: 15:1dda3f72782d
2928 | |\ parent: 15:1dda3f72782d
2929 | | | parent: 17:44765d7c06e0
2929 | | | parent: 17:44765d7c06e0
2930 | | | user: test
2930 | | | user: test
2931 | | | date: Thu Jan 01 00:00:19 1970 +0000
2931 | | | date: Thu Jan 01 00:00:19 1970 +0000
2932 | | | summary: (19) expand
2932 | | | summary: (19) expand
2933 | | |
2933 | | |
2934 o | | changeset: 18:1aa84d96232a
2934 o | | changeset: 18:1aa84d96232a
2935 |\| | parent: 1:6db2ef61d156
2935 |\| | parent: 1:6db2ef61d156
2936 ~ | | parent: 15:1dda3f72782d
2936 ~ | | parent: 15:1dda3f72782d
2937 | | user: test
2937 | | user: test
2938 | | date: Thu Jan 01 00:00:18 1970 +0000
2938 | | date: Thu Jan 01 00:00:18 1970 +0000
2939 | | summary: (18) merge two known; two far left
2939 | | summary: (18) merge two known; two far left
2940 / /
2940 / /
2941 | o changeset: 17:44765d7c06e0
2941 | o changeset: 17:44765d7c06e0
2942 | |\ parent: 12:86b91144a6e9
2942 | |\ parent: 12:86b91144a6e9
2943 | | | parent: 16:3677d192927d
2943 | | | parent: 16:3677d192927d
2944 | | | user: test
2944 | | | user: test
2945 | | | date: Thu Jan 01 00:00:17 1970 +0000
2945 | | | date: Thu Jan 01 00:00:17 1970 +0000
2946 | | | summary: (17) expand
2946 | | | summary: (17) expand
2947 | | |
2947 | | |
2948 | | o changeset: 16:3677d192927d
2948 | | o changeset: 16:3677d192927d
2949 | | |\ parent: 0:e6eb3150255d
2949 | | |\ parent: 0:e6eb3150255d
2950 | | ~ ~ parent: 1:6db2ef61d156
2950 | | ~ ~ parent: 1:6db2ef61d156
2951 | | user: test
2951 | | user: test
2952 | | date: Thu Jan 01 00:00:16 1970 +0000
2952 | | date: Thu Jan 01 00:00:16 1970 +0000
2953 | | summary: (16) merge two known; one immediate right, one near right
2953 | | summary: (16) merge two known; one immediate right, one near right
2954 | |
2954 | |
2955 o | changeset: 15:1dda3f72782d
2955 o | changeset: 15:1dda3f72782d
2956 |\ \ parent: 13:22d8966a97e3
2956 |\ \ parent: 13:22d8966a97e3
2957 | | | parent: 14:8eac370358ef
2957 | | | parent: 14:8eac370358ef
2958 | | | user: test
2958 | | | user: test
2959 | | | date: Thu Jan 01 00:00:15 1970 +0000
2959 | | | date: Thu Jan 01 00:00:15 1970 +0000
2960 | | | summary: (15) expand
2960 | | | summary: (15) expand
2961 | | |
2961 | | |
2962 | o | changeset: 14:8eac370358ef
2962 | o | changeset: 14:8eac370358ef
2963 | |\| parent: 0:e6eb3150255d
2963 | |\| parent: 0:e6eb3150255d
2964 | ~ | parent: 12:86b91144a6e9
2964 | ~ | parent: 12:86b91144a6e9
2965 | | user: test
2965 | | user: test
2966 | | date: Thu Jan 01 00:00:14 1970 +0000
2966 | | date: Thu Jan 01 00:00:14 1970 +0000
2967 | | summary: (14) merge two known; one immediate right, one far right
2967 | | summary: (14) merge two known; one immediate right, one far right
2968 | /
2968 | /
2969 o | changeset: 13:22d8966a97e3
2969 o | changeset: 13:22d8966a97e3
2970 |\ \ parent: 9:7010c0af0a35
2970 |\ \ parent: 9:7010c0af0a35
2971 | | | parent: 11:832d76e6bdf2
2971 | | | parent: 11:832d76e6bdf2
2972 | | | user: test
2972 | | | user: test
2973 | | | date: Thu Jan 01 00:00:13 1970 +0000
2973 | | | date: Thu Jan 01 00:00:13 1970 +0000
2974 | | | summary: (13) expand
2974 | | | summary: (13) expand
2975 | | |
2975 | | |
2976 +---o changeset: 12:86b91144a6e9
2976 +---o changeset: 12:86b91144a6e9
2977 | | | parent: 1:6db2ef61d156
2977 | | | parent: 1:6db2ef61d156
2978 | | ~ parent: 9:7010c0af0a35
2978 | | ~ parent: 9:7010c0af0a35
2979 | | user: test
2979 | | user: test
2980 | | date: Thu Jan 01 00:00:12 1970 +0000
2980 | | date: Thu Jan 01 00:00:12 1970 +0000
2981 | | summary: (12) merge two known; one immediate right, one far left
2981 | | summary: (12) merge two known; one immediate right, one far left
2982 | |
2982 | |
2983 | o changeset: 11:832d76e6bdf2
2983 | o changeset: 11:832d76e6bdf2
2984 | |\ parent: 6:b105a072e251
2984 | |\ parent: 6:b105a072e251
2985 | | | parent: 10:74c64d036d72
2985 | | | parent: 10:74c64d036d72
2986 | | | user: test
2986 | | | user: test
2987 | | | date: Thu Jan 01 00:00:11 1970 +0000
2987 | | | date: Thu Jan 01 00:00:11 1970 +0000
2988 | | | summary: (11) expand
2988 | | | summary: (11) expand
2989 | | |
2989 | | |
2990 | | o changeset: 10:74c64d036d72
2990 | | o changeset: 10:74c64d036d72
2991 | |/| parent: 0:e6eb3150255d
2991 | |/| parent: 0:e6eb3150255d
2992 | | ~ parent: 6:b105a072e251
2992 | | ~ parent: 6:b105a072e251
2993 | | user: test
2993 | | user: test
2994 | | date: Thu Jan 01 00:00:10 1970 +0000
2994 | | date: Thu Jan 01 00:00:10 1970 +0000
2995 | | summary: (10) merge two known; one immediate left, one near right
2995 | | summary: (10) merge two known; one immediate left, one near right
2996 | |
2996 | |
2997 o | changeset: 9:7010c0af0a35
2997 o | changeset: 9:7010c0af0a35
2998 |\ \ parent: 7:b632bb1b1224
2998 |\ \ parent: 7:b632bb1b1224
2999 | | | parent: 8:7a0b11f71937
2999 | | | parent: 8:7a0b11f71937
3000 | | | user: test
3000 | | | user: test
3001 | | | date: Thu Jan 01 00:00:09 1970 +0000
3001 | | | date: Thu Jan 01 00:00:09 1970 +0000
3002 | | | summary: (9) expand
3002 | | | summary: (9) expand
3003 | | |
3003 | | |
3004 | o | changeset: 8:7a0b11f71937
3004 | o | changeset: 8:7a0b11f71937
3005 |/| | parent: 0:e6eb3150255d
3005 |/| | parent: 0:e6eb3150255d
3006 | ~ | parent: 7:b632bb1b1224
3006 | ~ | parent: 7:b632bb1b1224
3007 | | user: test
3007 | | user: test
3008 | | date: Thu Jan 01 00:00:08 1970 +0000
3008 | | date: Thu Jan 01 00:00:08 1970 +0000
3009 | | summary: (8) merge two known; one immediate left, one far right
3009 | | summary: (8) merge two known; one immediate left, one far right
3010 | /
3010 | /
3011 o | changeset: 7:b632bb1b1224
3011 o | changeset: 7:b632bb1b1224
3012 |\ \ parent: 2:3d9a33b8d1e1
3012 |\ \ parent: 2:3d9a33b8d1e1
3013 | ~ | parent: 5:4409d547b708
3013 | ~ | parent: 5:4409d547b708
3014 | | user: test
3014 | | user: test
3015 | | date: Thu Jan 01 00:00:07 1970 +0000
3015 | | date: Thu Jan 01 00:00:07 1970 +0000
3016 | | summary: (7) expand
3016 | | summary: (7) expand
3017 | /
3017 | /
3018 | o changeset: 6:b105a072e251
3018 | o changeset: 6:b105a072e251
3019 |/| parent: 2:3d9a33b8d1e1
3019 |/| parent: 2:3d9a33b8d1e1
3020 | ~ parent: 5:4409d547b708
3020 | ~ parent: 5:4409d547b708
3021 | user: test
3021 | user: test
3022 | date: Thu Jan 01 00:00:06 1970 +0000
3022 | date: Thu Jan 01 00:00:06 1970 +0000
3023 | summary: (6) merge two known; one immediate left, one far left
3023 | summary: (6) merge two known; one immediate left, one far left
3024 |
3024 |
3025 o changeset: 5:4409d547b708
3025 o changeset: 5:4409d547b708
3026 |\ parent: 3:27eef8ed80b4
3026 |\ parent: 3:27eef8ed80b4
3027 | ~ parent: 4:26a8bac39d9f
3027 | ~ parent: 4:26a8bac39d9f
3028 | user: test
3028 | user: test
3029 | date: Thu Jan 01 00:00:05 1970 +0000
3029 | date: Thu Jan 01 00:00:05 1970 +0000
3030 | summary: (5) expand
3030 | summary: (5) expand
3031 |
3031 |
3032 o changeset: 4:26a8bac39d9f
3032 o changeset: 4:26a8bac39d9f
3033 |\ parent: 1:6db2ef61d156
3033 |\ parent: 1:6db2ef61d156
3034 ~ ~ parent: 3:27eef8ed80b4
3034 ~ ~ parent: 3:27eef8ed80b4
3035 user: test
3035 user: test
3036 date: Thu Jan 01 00:00:04 1970 +0000
3036 date: Thu Jan 01 00:00:04 1970 +0000
3037 summary: (4) merge two known; one immediate left, one immediate right
3037 summary: (4) merge two known; one immediate left, one immediate right
3038
3038
3039 Draw only part of a grandparent line differently with "<N><char>"; only the
3040 last N lines (for positive N) or everything but the first N lines (for
3041 negative N) along the current node use the style, the rest of the edge uses
3042 the parent edge styling.
3039
3043
3044 Last 3 lines:
3045
3046 $ cat << EOF >> $HGRCPATH
3047 > [experimental]
3048 > graphstyle.parent = !
3049 > graphstyle.grandparent = 3.
3050 > graphstyle.missing =
3051 > EOF
3052 $ hg log -G -r '36:18 & file("a")' -m
3053 @ changeset: 36:08a19a744424
3054 ! branch: branch
3055 ! tag: tip
3056 ! parent: 35:9159c3644c5e
3057 ! parent: 35:9159c3644c5e
3058 ! user: test
3059 . date: Thu Jan 01 00:00:36 1970 +0000
3060 . summary: (36) buggy merge: identical parents
3061 .
3062 o changeset: 32:d06dffa21a31
3063 !\ parent: 27:886ed638191b
3064 ! ! parent: 31:621d83e11f67
3065 ! ! user: test
3066 ! . date: Thu Jan 01 00:00:32 1970 +0000
3067 ! . summary: (32) expand
3068 ! .
3069 o ! changeset: 31:621d83e11f67
3070 !\! parent: 21:d42a756af44d
3071 ! ! parent: 30:6e11cd4b648f
3072 ! ! user: test
3073 ! . date: Thu Jan 01 00:00:31 1970 +0000
3074 ! . summary: (31) expand
3075 ! .
3076 o ! changeset: 30:6e11cd4b648f
3077 !\ \ parent: 28:44ecd0b9ae99
3078 ! ~ ! parent: 29:cd9bb2be7593
3079 ! ! user: test
3080 ! . date: Thu Jan 01 00:00:30 1970 +0000
3081 ! . summary: (30) expand
3082 ! /
3083 o ! changeset: 28:44ecd0b9ae99
3084 !\ \ parent: 1:6db2ef61d156
3085 ! ~ ! parent: 26:7f25b6c2f0b9
3086 ! ! user: test
3087 ! . date: Thu Jan 01 00:00:28 1970 +0000
3088 ! . summary: (28) merge zero known
3089 ! /
3090 o ! changeset: 26:7f25b6c2f0b9
3091 !\ \ parent: 18:1aa84d96232a
3092 ! ! ! parent: 25:91da8ed57247
3093 ! ! ! user: test
3094 ! ! . date: Thu Jan 01 00:00:26 1970 +0000
3095 ! ! . summary: (26) merge one known; far right
3096 ! ! .
3097 ! o ! changeset: 25:91da8ed57247
3098 ! !\! parent: 21:d42a756af44d
3099 ! ! ! parent: 24:a9c19a3d96b7
3100 ! ! ! user: test
3101 ! ! . date: Thu Jan 01 00:00:25 1970 +0000
3102 ! ! . summary: (25) merge one known; far left
3103 ! ! .
3104 ! o ! changeset: 24:a9c19a3d96b7
3105 ! !\ \ parent: 0:e6eb3150255d
3106 ! ! ~ ! parent: 23:a01cddf0766d
3107 ! ! ! user: test
3108 ! ! . date: Thu Jan 01 00:00:24 1970 +0000
3109 ! ! . summary: (24) merge one known; immediate right
3110 ! ! /
3111 ! o ! changeset: 23:a01cddf0766d
3112 ! !\ \ parent: 1:6db2ef61d156
3113 ! ! ~ ! parent: 22:e0d9cccacb5d
3114 ! ! ! user: test
3115 ! ! . date: Thu Jan 01 00:00:23 1970 +0000
3116 ! ! . summary: (23) merge one known; immediate left
3117 ! ! /
3118 ! o ! changeset: 22:e0d9cccacb5d
3119 !/!/ parent: 18:1aa84d96232a
3120 ! ! parent: 21:d42a756af44d
3121 ! ! user: test
3122 ! . date: Thu Jan 01 00:00:22 1970 +0000
3123 ! . summary: (22) merge two known; one far left, one far right
3124 ! .
3125 ! o changeset: 21:d42a756af44d
3126 ! !\ parent: 19:31ddc2c1573b
3127 ! ! ! parent: 20:d30ed6450e32
3128 ! ! ! user: test
3129 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3130 ! ! ! summary: (21) expand
3131 ! ! !
3132 +---o changeset: 20:d30ed6450e32
3133 ! ! | parent: 0:e6eb3150255d
3134 ! ! ~ parent: 18:1aa84d96232a
3135 ! ! user: test
3136 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3137 ! ! summary: (20) merge two known; two far right
3138 ! !
3139 ! o changeset: 19:31ddc2c1573b
3140 ! |\ parent: 15:1dda3f72782d
3141 ! ~ ~ parent: 17:44765d7c06e0
3142 ! user: test
3143 ! date: Thu Jan 01 00:00:19 1970 +0000
3144 ! summary: (19) expand
3145 !
3146 o changeset: 18:1aa84d96232a
3147 |\ parent: 1:6db2ef61d156
3148 ~ ~ parent: 15:1dda3f72782d
3149 user: test
3150 date: Thu Jan 01 00:00:18 1970 +0000
3151 summary: (18) merge two known; two far left
3152
3153 All but the first 3 lines:
3154
3155 $ cat << EOF >> $HGRCPATH
3156 > [experimental]
3157 > graphstyle.parent = !
3158 > graphstyle.grandparent = -3.
3159 > graphstyle.missing =
3160 > EOF
3161 $ hg log -G -r '36:18 & file("a")' -m
3162 @ changeset: 36:08a19a744424
3163 ! branch: branch
3164 ! tag: tip
3165 . parent: 35:9159c3644c5e
3166 . parent: 35:9159c3644c5e
3167 . user: test
3168 . date: Thu Jan 01 00:00:36 1970 +0000
3169 . summary: (36) buggy merge: identical parents
3170 .
3171 o changeset: 32:d06dffa21a31
3172 !\ parent: 27:886ed638191b
3173 ! ! parent: 31:621d83e11f67
3174 ! . user: test
3175 ! . date: Thu Jan 01 00:00:32 1970 +0000
3176 ! . summary: (32) expand
3177 ! .
3178 o ! changeset: 31:621d83e11f67
3179 !\! parent: 21:d42a756af44d
3180 ! ! parent: 30:6e11cd4b648f
3181 ! . user: test
3182 ! . date: Thu Jan 01 00:00:31 1970 +0000
3183 ! . summary: (31) expand
3184 ! .
3185 o ! changeset: 30:6e11cd4b648f
3186 !\ \ parent: 28:44ecd0b9ae99
3187 ! ~ ! parent: 29:cd9bb2be7593
3188 ! . user: test
3189 ! . date: Thu Jan 01 00:00:30 1970 +0000
3190 ! . summary: (30) expand
3191 ! /
3192 o ! changeset: 28:44ecd0b9ae99
3193 !\ \ parent: 1:6db2ef61d156
3194 ! ~ ! parent: 26:7f25b6c2f0b9
3195 ! . user: test
3196 ! . date: Thu Jan 01 00:00:28 1970 +0000
3197 ! . summary: (28) merge zero known
3198 ! /
3199 o ! changeset: 26:7f25b6c2f0b9
3200 !\ \ parent: 18:1aa84d96232a
3201 ! ! ! parent: 25:91da8ed57247
3202 ! ! . user: test
3203 ! ! . date: Thu Jan 01 00:00:26 1970 +0000
3204 ! ! . summary: (26) merge one known; far right
3205 ! ! .
3206 ! o ! changeset: 25:91da8ed57247
3207 ! !\! parent: 21:d42a756af44d
3208 ! ! ! parent: 24:a9c19a3d96b7
3209 ! ! . user: test
3210 ! ! . date: Thu Jan 01 00:00:25 1970 +0000
3211 ! ! . summary: (25) merge one known; far left
3212 ! ! .
3213 ! o ! changeset: 24:a9c19a3d96b7
3214 ! !\ \ parent: 0:e6eb3150255d
3215 ! ! ~ ! parent: 23:a01cddf0766d
3216 ! ! . user: test
3217 ! ! . date: Thu Jan 01 00:00:24 1970 +0000
3218 ! ! . summary: (24) merge one known; immediate right
3219 ! ! /
3220 ! o ! changeset: 23:a01cddf0766d
3221 ! !\ \ parent: 1:6db2ef61d156
3222 ! ! ~ ! parent: 22:e0d9cccacb5d
3223 ! ! . user: test
3224 ! ! . date: Thu Jan 01 00:00:23 1970 +0000
3225 ! ! . summary: (23) merge one known; immediate left
3226 ! ! /
3227 ! o ! changeset: 22:e0d9cccacb5d
3228 !/!/ parent: 18:1aa84d96232a
3229 ! ! parent: 21:d42a756af44d
3230 ! . user: test
3231 ! . date: Thu Jan 01 00:00:22 1970 +0000
3232 ! . summary: (22) merge two known; one far left, one far right
3233 ! .
3234 ! o changeset: 21:d42a756af44d
3235 ! !\ parent: 19:31ddc2c1573b
3236 ! ! ! parent: 20:d30ed6450e32
3237 ! ! ! user: test
3238 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3239 ! ! ! summary: (21) expand
3240 ! ! !
3241 +---o changeset: 20:d30ed6450e32
3242 ! ! | parent: 0:e6eb3150255d
3243 ! ! ~ parent: 18:1aa84d96232a
3244 ! ! user: test
3245 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3246 ! ! summary: (20) merge two known; two far right
3247 ! !
3248 ! o changeset: 19:31ddc2c1573b
3249 ! |\ parent: 15:1dda3f72782d
3250 ! ~ ~ parent: 17:44765d7c06e0
3251 ! user: test
3252 ! date: Thu Jan 01 00:00:19 1970 +0000
3253 ! summary: (19) expand
3254 !
3255 o changeset: 18:1aa84d96232a
3256 |\ parent: 1:6db2ef61d156
3257 ~ ~ parent: 15:1dda3f72782d
3258 user: test
3259 date: Thu Jan 01 00:00:18 1970 +0000
3260 summary: (18) merge two known; two far left
3261
3040 $ cd ..
3262 $ cd ..
3041
3263
3042 Change graph shorten, test better with graphstyle.missing not none
3264 Change graph shorten, test better with graphstyle.missing not none
3043
3265
3044 $ cd repo
3266 $ cd repo
3045 $ cat << EOF >> $HGRCPATH
3267 $ cat << EOF >> $HGRCPATH
3046 > [experimental]
3268 > [experimental]
3047 > graphstyle.parent = |
3269 > graphstyle.parent = |
3048 > graphstyle.grandparent = :
3270 > graphstyle.grandparent = :
3049 > graphstyle.missing = '
3271 > graphstyle.missing = '
3050 > graphshorten = true
3272 > graphshorten = true
3051 > EOF
3273 > EOF
3052 $ hg log -G -r 'file("a")' -m -T '{rev} {desc}'
3274 $ hg log -G -r 'file("a")' -m -T '{rev} {desc}'
3053 @ 36 (36) buggy merge: identical parents
3275 @ 36 (36) buggy merge: identical parents
3054 o 32 (32) expand
3276 o 32 (32) expand
3055 |\
3277 |\
3056 o : 31 (31) expand
3278 o : 31 (31) expand
3057 |\:
3279 |\:
3058 o : 30 (30) expand
3280 o : 30 (30) expand
3059 |\ \
3281 |\ \
3060 o \ \ 28 (28) merge zero known
3282 o \ \ 28 (28) merge zero known
3061 |\ \ \
3283 |\ \ \
3062 o \ \ \ 26 (26) merge one known; far right
3284 o \ \ \ 26 (26) merge one known; far right
3063 |\ \ \ \
3285 |\ \ \ \
3064 | o-----+ 25 (25) merge one known; far left
3286 | o-----+ 25 (25) merge one known; far left
3065 | o ' ' : 24 (24) merge one known; immediate right
3287 | o ' ' : 24 (24) merge one known; immediate right
3066 | |\ \ \ \
3288 | |\ \ \ \
3067 | o---+ ' : 23 (23) merge one known; immediate left
3289 | o---+ ' : 23 (23) merge one known; immediate left
3068 | o-------+ 22 (22) merge two known; one far left, one far right
3290 | o-------+ 22 (22) merge two known; one far left, one far right
3069 |/ / / / /
3291 |/ / / / /
3070 | ' ' ' o 21 (21) expand
3292 | ' ' ' o 21 (21) expand
3071 | ' ' ' |\
3293 | ' ' ' |\
3072 +-+-------o 20 (20) merge two known; two far right
3294 +-+-------o 20 (20) merge two known; two far right
3073 | ' ' ' o 19 (19) expand
3295 | ' ' ' o 19 (19) expand
3074 | ' ' ' |\
3296 | ' ' ' |\
3075 o---+---+ | 18 (18) merge two known; two far left
3297 o---+---+ | 18 (18) merge two known; two far left
3076 / / / / /
3298 / / / / /
3077 ' ' ' | o 17 (17) expand
3299 ' ' ' | o 17 (17) expand
3078 ' ' ' | |\
3300 ' ' ' | |\
3079 +-+-------o 16 (16) merge two known; one immediate right, one near right
3301 +-+-------o 16 (16) merge two known; one immediate right, one near right
3080 ' ' ' o | 15 (15) expand
3302 ' ' ' o | 15 (15) expand
3081 ' ' ' |\ \
3303 ' ' ' |\ \
3082 +-------o | 14 (14) merge two known; one immediate right, one far right
3304 +-------o | 14 (14) merge two known; one immediate right, one far right
3083 ' ' ' | |/
3305 ' ' ' | |/
3084 ' ' ' o | 13 (13) expand
3306 ' ' ' o | 13 (13) expand
3085 ' ' ' |\ \
3307 ' ' ' |\ \
3086 ' +---+---o 12 (12) merge two known; one immediate right, one far left
3308 ' +---+---o 12 (12) merge two known; one immediate right, one far left
3087 ' ' ' | o 11 (11) expand
3309 ' ' ' | o 11 (11) expand
3088 ' ' ' | |\
3310 ' ' ' | |\
3089 +---------o 10 (10) merge two known; one immediate left, one near right
3311 +---------o 10 (10) merge two known; one immediate left, one near right
3090 ' ' ' | |/
3312 ' ' ' | |/
3091 ' ' ' o | 9 (9) expand
3313 ' ' ' o | 9 (9) expand
3092 ' ' ' |\ \
3314 ' ' ' |\ \
3093 +-------o | 8 (8) merge two known; one immediate left, one far right
3315 +-------o | 8 (8) merge two known; one immediate left, one far right
3094 ' ' ' |/ /
3316 ' ' ' |/ /
3095 ' ' ' o | 7 (7) expand
3317 ' ' ' o | 7 (7) expand
3096 ' ' ' |\ \
3318 ' ' ' |\ \
3097 ' ' ' +---o 6 (6) merge two known; one immediate left, one far left
3319 ' ' ' +---o 6 (6) merge two known; one immediate left, one far left
3098 ' ' ' | '/
3320 ' ' ' | '/
3099 ' ' ' o ' 5 (5) expand
3321 ' ' ' o ' 5 (5) expand
3100 ' ' ' |\ \
3322 ' ' ' |\ \
3101 ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right
3323 ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right
3102 ' ' ' '/ /
3324 ' ' ' '/ /
3103
3325
3104 behavior with newlines
3326 behavior with newlines
3105
3327
3106 $ hg log -G -r ::2 -T '{rev} {desc}'
3328 $ hg log -G -r ::2 -T '{rev} {desc}'
3107 o 2 (2) collapse
3329 o 2 (2) collapse
3108 o 1 (1) collapse
3330 o 1 (1) collapse
3109 o 0 (0) root
3331 o 0 (0) root
3110
3332
3111 $ hg log -G -r ::2 -T '{rev} {desc}\n'
3333 $ hg log -G -r ::2 -T '{rev} {desc}\n'
3112 o 2 (2) collapse
3334 o 2 (2) collapse
3113 o 1 (1) collapse
3335 o 1 (1) collapse
3114 o 0 (0) root
3336 o 0 (0) root
3115
3337
3116 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
3338 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
3117 o 2 (2) collapse
3339 o 2 (2) collapse
3118 |
3340 |
3119 o 1 (1) collapse
3341 o 1 (1) collapse
3120 |
3342 |
3121 o 0 (0) root
3343 o 0 (0) root
3122
3344
3123
3345
3124 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3346 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3125 o
3347 o
3126 | 2 (2) collapse
3348 | 2 (2) collapse
3127 o
3349 o
3128 | 1 (1) collapse
3350 | 1 (1) collapse
3129 o
3351 o
3130 0 (0) root
3352 0 (0) root
3131
3353
3132 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3354 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3133 o 2 (2) collapse
3355 o 2 (2) collapse
3134 |
3356 |
3135 |
3357 |
3136 o 1 (1) collapse
3358 o 1 (1) collapse
3137 |
3359 |
3138 |
3360 |
3139 o 0 (0) root
3361 o 0 (0) root
3140
3362
3141
3363
3142 $ cd ..
3364 $ cd ..
3143
3365
3144 When inserting extra line nodes to handle more than 2 parents, ensure that
3366 When inserting extra line nodes to handle more than 2 parents, ensure that
3145 the right node styles are used (issue5174):
3367 the right node styles are used (issue5174):
3146
3368
3147 $ hg init repo-issue5174
3369 $ hg init repo-issue5174
3148 $ cd repo-issue5174
3370 $ cd repo-issue5174
3149 $ echo a > f0
3371 $ echo a > f0
3150 $ hg ci -Aqm 0
3372 $ hg ci -Aqm 0
3151 $ echo a > f1
3373 $ echo a > f1
3152 $ hg ci -Aqm 1
3374 $ hg ci -Aqm 1
3153 $ echo a > f2
3375 $ echo a > f2
3154 $ hg ci -Aqm 2
3376 $ hg ci -Aqm 2
3155 $ hg co ".^"
3377 $ hg co ".^"
3156 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3378 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3157 $ echo a > f3
3379 $ echo a > f3
3158 $ hg ci -Aqm 3
3380 $ hg ci -Aqm 3
3159 $ hg co ".^^"
3381 $ hg co ".^^"
3160 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3382 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3161 $ echo a > f4
3383 $ echo a > f4
3162 $ hg ci -Aqm 4
3384 $ hg ci -Aqm 4
3163 $ hg merge -r 2
3385 $ hg merge -r 2
3164 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3386 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3165 (branch merge, don't forget to commit)
3387 (branch merge, don't forget to commit)
3166 $ hg ci -qm 5
3388 $ hg ci -qm 5
3167 $ hg merge -r 3
3389 $ hg merge -r 3
3168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3390 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3169 (branch merge, don't forget to commit)
3391 (branch merge, don't forget to commit)
3170 $ hg ci -qm 6
3392 $ hg ci -qm 6
3171 $ hg log -G -r '0 | 1 | 2 | 6'
3393 $ hg log -G -r '0 | 1 | 2 | 6'
3172 @ changeset: 6:851fe89689ad
3394 @ changeset: 6:851fe89689ad
3173 :\ tag: tip
3395 :\ tag: tip
3174 : : parent: 5:4f1e3cf15f5d
3396 : : parent: 5:4f1e3cf15f5d
3175 : : parent: 3:b74ba7084d2d
3397 : : parent: 3:b74ba7084d2d
3176 : : user: test
3398 : : user: test
3177 : : date: Thu Jan 01 00:00:00 1970 +0000
3399 : : date: Thu Jan 01 00:00:00 1970 +0000
3178 : : summary: 6
3400 : : summary: 6
3179 : :
3401 : :
3180 : \
3402 : \
3181 : :\
3403 : :\
3182 : o : changeset: 2:3e6599df4cce
3404 : o : changeset: 2:3e6599df4cce
3183 : :/ user: test
3405 : :/ user: test
3184 : : date: Thu Jan 01 00:00:00 1970 +0000
3406 : : date: Thu Jan 01 00:00:00 1970 +0000
3185 : : summary: 2
3407 : : summary: 2
3186 : :
3408 : :
3187 : o changeset: 1:bd9a55143933
3409 : o changeset: 1:bd9a55143933
3188 :/ user: test
3410 :/ user: test
3189 : date: Thu Jan 01 00:00:00 1970 +0000
3411 : date: Thu Jan 01 00:00:00 1970 +0000
3190 : summary: 1
3412 : summary: 1
3191 :
3413 :
3192 o changeset: 0:870a5edc339c
3414 o changeset: 0:870a5edc339c
3193 user: test
3415 user: test
3194 date: Thu Jan 01 00:00:00 1970 +0000
3416 date: Thu Jan 01 00:00:00 1970 +0000
3195 summary: 0
3417 summary: 0
3196
3418
3197
3419
General Comments 0
You need to be logged in to leave comments. Login now