##// END OF EJS Templates
log: do not accept string-matcher pattern as -u/-b/-B parameter...
Yuya Nishihara -
r46657:1bf2b44c default
parent child Browse files
Show More
@@ -1,1219 +1,1219 b''
1 # logcmdutil.py - utility for log-like commands
1 # logcmdutil.py - utility for log-like commands
2 #
2 #
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import itertools
10 import itertools
11 import os
11 import os
12 import posixpath
12 import posixpath
13
13
14 from .i18n import _
14 from .i18n import _
15 from .node import (
15 from .node import (
16 nullid,
16 nullid,
17 wdirid,
17 wdirid,
18 wdirrev,
18 wdirrev,
19 )
19 )
20
20
21 from .thirdparty import attr
21 from .thirdparty import attr
22
22
23 from . import (
23 from . import (
24 dagop,
24 dagop,
25 error,
25 error,
26 formatter,
26 formatter,
27 graphmod,
27 graphmod,
28 match as matchmod,
28 match as matchmod,
29 mdiff,
29 mdiff,
30 patch,
30 patch,
31 pathutil,
31 pathutil,
32 pycompat,
32 pycompat,
33 revset,
33 revset,
34 revsetlang,
34 revsetlang,
35 scmutil,
35 scmutil,
36 smartset,
36 smartset,
37 templatekw,
37 templatekw,
38 templater,
38 templater,
39 util,
39 util,
40 )
40 )
41 from .utils import (
41 from .utils import (
42 dateutil,
42 dateutil,
43 stringutil,
43 stringutil,
44 )
44 )
45
45
46
46
47 if pycompat.TYPE_CHECKING:
47 if pycompat.TYPE_CHECKING:
48 from typing import (
48 from typing import (
49 Any,
49 Any,
50 Callable,
50 Callable,
51 Dict,
51 Dict,
52 List,
52 List,
53 Optional,
53 Optional,
54 Tuple,
54 Tuple,
55 )
55 )
56
56
57 for t in (Any, Callable, Dict, List, Optional, Tuple):
57 for t in (Any, Callable, Dict, List, Optional, Tuple):
58 assert t
58 assert t
59
59
60
60
61 def getlimit(opts):
61 def getlimit(opts):
62 """get the log limit according to option -l/--limit"""
62 """get the log limit according to option -l/--limit"""
63 limit = opts.get(b'limit')
63 limit = opts.get(b'limit')
64 if limit:
64 if limit:
65 try:
65 try:
66 limit = int(limit)
66 limit = int(limit)
67 except ValueError:
67 except ValueError:
68 raise error.Abort(_(b'limit must be a positive integer'))
68 raise error.Abort(_(b'limit must be a positive integer'))
69 if limit <= 0:
69 if limit <= 0:
70 raise error.Abort(_(b'limit must be positive'))
70 raise error.Abort(_(b'limit must be positive'))
71 else:
71 else:
72 limit = None
72 limit = None
73 return limit
73 return limit
74
74
75
75
76 def diffordiffstat(
76 def diffordiffstat(
77 ui,
77 ui,
78 repo,
78 repo,
79 diffopts,
79 diffopts,
80 ctx1,
80 ctx1,
81 ctx2,
81 ctx2,
82 match,
82 match,
83 changes=None,
83 changes=None,
84 stat=False,
84 stat=False,
85 fp=None,
85 fp=None,
86 graphwidth=0,
86 graphwidth=0,
87 prefix=b'',
87 prefix=b'',
88 root=b'',
88 root=b'',
89 listsubrepos=False,
89 listsubrepos=False,
90 hunksfilterfn=None,
90 hunksfilterfn=None,
91 ):
91 ):
92 '''show diff or diffstat.'''
92 '''show diff or diffstat.'''
93 if root:
93 if root:
94 relroot = pathutil.canonpath(repo.root, repo.getcwd(), root)
94 relroot = pathutil.canonpath(repo.root, repo.getcwd(), root)
95 else:
95 else:
96 relroot = b''
96 relroot = b''
97 copysourcematch = None
97 copysourcematch = None
98
98
99 def compose(f, g):
99 def compose(f, g):
100 return lambda x: f(g(x))
100 return lambda x: f(g(x))
101
101
102 def pathfn(f):
102 def pathfn(f):
103 return posixpath.join(prefix, f)
103 return posixpath.join(prefix, f)
104
104
105 if relroot != b'':
105 if relroot != b'':
106 # XXX relative roots currently don't work if the root is within a
106 # XXX relative roots currently don't work if the root is within a
107 # subrepo
107 # subrepo
108 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
108 uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True)
109 uirelroot = uipathfn(pathfn(relroot))
109 uirelroot = uipathfn(pathfn(relroot))
110 relroot += b'/'
110 relroot += b'/'
111 for matchroot in match.files():
111 for matchroot in match.files():
112 if not matchroot.startswith(relroot):
112 if not matchroot.startswith(relroot):
113 ui.warn(
113 ui.warn(
114 _(b'warning: %s not inside relative root %s\n')
114 _(b'warning: %s not inside relative root %s\n')
115 % (uipathfn(pathfn(matchroot)), uirelroot)
115 % (uipathfn(pathfn(matchroot)), uirelroot)
116 )
116 )
117
117
118 relrootmatch = scmutil.match(ctx2, pats=[relroot], default=b'path')
118 relrootmatch = scmutil.match(ctx2, pats=[relroot], default=b'path')
119 match = matchmod.intersectmatchers(match, relrootmatch)
119 match = matchmod.intersectmatchers(match, relrootmatch)
120 copysourcematch = relrootmatch
120 copysourcematch = relrootmatch
121
121
122 checkroot = repo.ui.configbool(
122 checkroot = repo.ui.configbool(
123 b'devel', b'all-warnings'
123 b'devel', b'all-warnings'
124 ) or repo.ui.configbool(b'devel', b'check-relroot')
124 ) or repo.ui.configbool(b'devel', b'check-relroot')
125
125
126 def relrootpathfn(f):
126 def relrootpathfn(f):
127 if checkroot and not f.startswith(relroot):
127 if checkroot and not f.startswith(relroot):
128 raise AssertionError(
128 raise AssertionError(
129 b"file %s doesn't start with relroot %s" % (f, relroot)
129 b"file %s doesn't start with relroot %s" % (f, relroot)
130 )
130 )
131 return f[len(relroot) :]
131 return f[len(relroot) :]
132
132
133 pathfn = compose(relrootpathfn, pathfn)
133 pathfn = compose(relrootpathfn, pathfn)
134
134
135 if stat:
135 if stat:
136 diffopts = diffopts.copy(context=0, noprefix=False)
136 diffopts = diffopts.copy(context=0, noprefix=False)
137 width = 80
137 width = 80
138 if not ui.plain():
138 if not ui.plain():
139 width = ui.termwidth() - graphwidth
139 width = ui.termwidth() - graphwidth
140 # If an explicit --root was given, don't respect ui.relative-paths
140 # If an explicit --root was given, don't respect ui.relative-paths
141 if not relroot:
141 if not relroot:
142 pathfn = compose(scmutil.getuipathfn(repo), pathfn)
142 pathfn = compose(scmutil.getuipathfn(repo), pathfn)
143
143
144 chunks = ctx2.diff(
144 chunks = ctx2.diff(
145 ctx1,
145 ctx1,
146 match,
146 match,
147 changes,
147 changes,
148 opts=diffopts,
148 opts=diffopts,
149 pathfn=pathfn,
149 pathfn=pathfn,
150 copysourcematch=copysourcematch,
150 copysourcematch=copysourcematch,
151 hunksfilterfn=hunksfilterfn,
151 hunksfilterfn=hunksfilterfn,
152 )
152 )
153
153
154 if fp is not None or ui.canwritewithoutlabels():
154 if fp is not None or ui.canwritewithoutlabels():
155 out = fp or ui
155 out = fp or ui
156 if stat:
156 if stat:
157 chunks = [patch.diffstat(util.iterlines(chunks), width=width)]
157 chunks = [patch.diffstat(util.iterlines(chunks), width=width)]
158 for chunk in util.filechunkiter(util.chunkbuffer(chunks)):
158 for chunk in util.filechunkiter(util.chunkbuffer(chunks)):
159 out.write(chunk)
159 out.write(chunk)
160 else:
160 else:
161 if stat:
161 if stat:
162 chunks = patch.diffstatui(util.iterlines(chunks), width=width)
162 chunks = patch.diffstatui(util.iterlines(chunks), width=width)
163 else:
163 else:
164 chunks = patch.difflabel(
164 chunks = patch.difflabel(
165 lambda chunks, **kwargs: chunks, chunks, opts=diffopts
165 lambda chunks, **kwargs: chunks, chunks, opts=diffopts
166 )
166 )
167 if ui.canbatchlabeledwrites():
167 if ui.canbatchlabeledwrites():
168
168
169 def gen():
169 def gen():
170 for chunk, label in chunks:
170 for chunk, label in chunks:
171 yield ui.label(chunk, label=label)
171 yield ui.label(chunk, label=label)
172
172
173 for chunk in util.filechunkiter(util.chunkbuffer(gen())):
173 for chunk in util.filechunkiter(util.chunkbuffer(gen())):
174 ui.write(chunk)
174 ui.write(chunk)
175 else:
175 else:
176 for chunk, label in chunks:
176 for chunk, label in chunks:
177 ui.write(chunk, label=label)
177 ui.write(chunk, label=label)
178
178
179 node2 = ctx2.node()
179 node2 = ctx2.node()
180 for subpath, sub in scmutil.itersubrepos(ctx1, ctx2):
180 for subpath, sub in scmutil.itersubrepos(ctx1, ctx2):
181 tempnode2 = node2
181 tempnode2 = node2
182 try:
182 try:
183 if node2 is not None:
183 if node2 is not None:
184 tempnode2 = ctx2.substate[subpath][1]
184 tempnode2 = ctx2.substate[subpath][1]
185 except KeyError:
185 except KeyError:
186 # A subrepo that existed in node1 was deleted between node1 and
186 # A subrepo that existed in node1 was deleted between node1 and
187 # node2 (inclusive). Thus, ctx2's substate won't contain that
187 # node2 (inclusive). Thus, ctx2's substate won't contain that
188 # subpath. The best we can do is to ignore it.
188 # subpath. The best we can do is to ignore it.
189 tempnode2 = None
189 tempnode2 = None
190 submatch = matchmod.subdirmatcher(subpath, match)
190 submatch = matchmod.subdirmatcher(subpath, match)
191 subprefix = repo.wvfs.reljoin(prefix, subpath)
191 subprefix = repo.wvfs.reljoin(prefix, subpath)
192 if listsubrepos or match.exact(subpath) or any(submatch.files()):
192 if listsubrepos or match.exact(subpath) or any(submatch.files()):
193 sub.diff(
193 sub.diff(
194 ui,
194 ui,
195 diffopts,
195 diffopts,
196 tempnode2,
196 tempnode2,
197 submatch,
197 submatch,
198 changes=changes,
198 changes=changes,
199 stat=stat,
199 stat=stat,
200 fp=fp,
200 fp=fp,
201 prefix=subprefix,
201 prefix=subprefix,
202 )
202 )
203
203
204
204
205 class changesetdiffer(object):
205 class changesetdiffer(object):
206 """Generate diff of changeset with pre-configured filtering functions"""
206 """Generate diff of changeset with pre-configured filtering functions"""
207
207
208 def _makefilematcher(self, ctx):
208 def _makefilematcher(self, ctx):
209 return scmutil.matchall(ctx.repo())
209 return scmutil.matchall(ctx.repo())
210
210
211 def _makehunksfilter(self, ctx):
211 def _makehunksfilter(self, ctx):
212 return None
212 return None
213
213
214 def showdiff(self, ui, ctx, diffopts, graphwidth=0, stat=False):
214 def showdiff(self, ui, ctx, diffopts, graphwidth=0, stat=False):
215 diffordiffstat(
215 diffordiffstat(
216 ui,
216 ui,
217 ctx.repo(),
217 ctx.repo(),
218 diffopts,
218 diffopts,
219 ctx.p1(),
219 ctx.p1(),
220 ctx,
220 ctx,
221 match=self._makefilematcher(ctx),
221 match=self._makefilematcher(ctx),
222 stat=stat,
222 stat=stat,
223 graphwidth=graphwidth,
223 graphwidth=graphwidth,
224 hunksfilterfn=self._makehunksfilter(ctx),
224 hunksfilterfn=self._makehunksfilter(ctx),
225 )
225 )
226
226
227
227
228 def changesetlabels(ctx):
228 def changesetlabels(ctx):
229 labels = [b'log.changeset', b'changeset.%s' % ctx.phasestr()]
229 labels = [b'log.changeset', b'changeset.%s' % ctx.phasestr()]
230 if ctx.obsolete():
230 if ctx.obsolete():
231 labels.append(b'changeset.obsolete')
231 labels.append(b'changeset.obsolete')
232 if ctx.isunstable():
232 if ctx.isunstable():
233 labels.append(b'changeset.unstable')
233 labels.append(b'changeset.unstable')
234 for instability in ctx.instabilities():
234 for instability in ctx.instabilities():
235 labels.append(b'instability.%s' % instability)
235 labels.append(b'instability.%s' % instability)
236 return b' '.join(labels)
236 return b' '.join(labels)
237
237
238
238
239 class changesetprinter(object):
239 class changesetprinter(object):
240 '''show changeset information when templating not requested.'''
240 '''show changeset information when templating not requested.'''
241
241
242 def __init__(self, ui, repo, differ=None, diffopts=None, buffered=False):
242 def __init__(self, ui, repo, differ=None, diffopts=None, buffered=False):
243 self.ui = ui
243 self.ui = ui
244 self.repo = repo
244 self.repo = repo
245 self.buffered = buffered
245 self.buffered = buffered
246 self._differ = differ or changesetdiffer()
246 self._differ = differ or changesetdiffer()
247 self._diffopts = patch.diffallopts(ui, diffopts)
247 self._diffopts = patch.diffallopts(ui, diffopts)
248 self._includestat = diffopts and diffopts.get(b'stat')
248 self._includestat = diffopts and diffopts.get(b'stat')
249 self._includediff = diffopts and diffopts.get(b'patch')
249 self._includediff = diffopts and diffopts.get(b'patch')
250 self.header = {}
250 self.header = {}
251 self.hunk = {}
251 self.hunk = {}
252 self.lastheader = None
252 self.lastheader = None
253 self.footer = None
253 self.footer = None
254 self._columns = templatekw.getlogcolumns()
254 self._columns = templatekw.getlogcolumns()
255
255
256 def flush(self, ctx):
256 def flush(self, ctx):
257 rev = ctx.rev()
257 rev = ctx.rev()
258 if rev in self.header:
258 if rev in self.header:
259 h = self.header[rev]
259 h = self.header[rev]
260 if h != self.lastheader:
260 if h != self.lastheader:
261 self.lastheader = h
261 self.lastheader = h
262 self.ui.write(h)
262 self.ui.write(h)
263 del self.header[rev]
263 del self.header[rev]
264 if rev in self.hunk:
264 if rev in self.hunk:
265 self.ui.write(self.hunk[rev])
265 self.ui.write(self.hunk[rev])
266 del self.hunk[rev]
266 del self.hunk[rev]
267
267
268 def close(self):
268 def close(self):
269 if self.footer:
269 if self.footer:
270 self.ui.write(self.footer)
270 self.ui.write(self.footer)
271
271
272 def show(self, ctx, copies=None, **props):
272 def show(self, ctx, copies=None, **props):
273 props = pycompat.byteskwargs(props)
273 props = pycompat.byteskwargs(props)
274 if self.buffered:
274 if self.buffered:
275 self.ui.pushbuffer(labeled=True)
275 self.ui.pushbuffer(labeled=True)
276 self._show(ctx, copies, props)
276 self._show(ctx, copies, props)
277 self.hunk[ctx.rev()] = self.ui.popbuffer()
277 self.hunk[ctx.rev()] = self.ui.popbuffer()
278 else:
278 else:
279 self._show(ctx, copies, props)
279 self._show(ctx, copies, props)
280
280
281 def _show(self, ctx, copies, props):
281 def _show(self, ctx, copies, props):
282 '''show a single changeset or file revision'''
282 '''show a single changeset or file revision'''
283 changenode = ctx.node()
283 changenode = ctx.node()
284 graphwidth = props.get(b'graphwidth', 0)
284 graphwidth = props.get(b'graphwidth', 0)
285
285
286 if self.ui.quiet:
286 if self.ui.quiet:
287 self.ui.write(
287 self.ui.write(
288 b"%s\n" % scmutil.formatchangeid(ctx), label=b'log.node'
288 b"%s\n" % scmutil.formatchangeid(ctx), label=b'log.node'
289 )
289 )
290 return
290 return
291
291
292 columns = self._columns
292 columns = self._columns
293 self.ui.write(
293 self.ui.write(
294 columns[b'changeset'] % scmutil.formatchangeid(ctx),
294 columns[b'changeset'] % scmutil.formatchangeid(ctx),
295 label=changesetlabels(ctx),
295 label=changesetlabels(ctx),
296 )
296 )
297
297
298 # branches are shown first before any other names due to backwards
298 # branches are shown first before any other names due to backwards
299 # compatibility
299 # compatibility
300 branch = ctx.branch()
300 branch = ctx.branch()
301 # don't show the default branch name
301 # don't show the default branch name
302 if branch != b'default':
302 if branch != b'default':
303 self.ui.write(columns[b'branch'] % branch, label=b'log.branch')
303 self.ui.write(columns[b'branch'] % branch, label=b'log.branch')
304
304
305 for nsname, ns in pycompat.iteritems(self.repo.names):
305 for nsname, ns in pycompat.iteritems(self.repo.names):
306 # branches has special logic already handled above, so here we just
306 # branches has special logic already handled above, so here we just
307 # skip it
307 # skip it
308 if nsname == b'branches':
308 if nsname == b'branches':
309 continue
309 continue
310 # we will use the templatename as the color name since those two
310 # we will use the templatename as the color name since those two
311 # should be the same
311 # should be the same
312 for name in ns.names(self.repo, changenode):
312 for name in ns.names(self.repo, changenode):
313 self.ui.write(ns.logfmt % name, label=b'log.%s' % ns.colorname)
313 self.ui.write(ns.logfmt % name, label=b'log.%s' % ns.colorname)
314 if self.ui.debugflag:
314 if self.ui.debugflag:
315 self.ui.write(
315 self.ui.write(
316 columns[b'phase'] % ctx.phasestr(), label=b'log.phase'
316 columns[b'phase'] % ctx.phasestr(), label=b'log.phase'
317 )
317 )
318 for pctx in scmutil.meaningfulparents(self.repo, ctx):
318 for pctx in scmutil.meaningfulparents(self.repo, ctx):
319 label = b'log.parent changeset.%s' % pctx.phasestr()
319 label = b'log.parent changeset.%s' % pctx.phasestr()
320 self.ui.write(
320 self.ui.write(
321 columns[b'parent'] % scmutil.formatchangeid(pctx), label=label
321 columns[b'parent'] % scmutil.formatchangeid(pctx), label=label
322 )
322 )
323
323
324 if self.ui.debugflag:
324 if self.ui.debugflag:
325 mnode = ctx.manifestnode()
325 mnode = ctx.manifestnode()
326 if mnode is None:
326 if mnode is None:
327 mnode = wdirid
327 mnode = wdirid
328 mrev = wdirrev
328 mrev = wdirrev
329 else:
329 else:
330 mrev = self.repo.manifestlog.rev(mnode)
330 mrev = self.repo.manifestlog.rev(mnode)
331 self.ui.write(
331 self.ui.write(
332 columns[b'manifest']
332 columns[b'manifest']
333 % scmutil.formatrevnode(self.ui, mrev, mnode),
333 % scmutil.formatrevnode(self.ui, mrev, mnode),
334 label=b'ui.debug log.manifest',
334 label=b'ui.debug log.manifest',
335 )
335 )
336 self.ui.write(columns[b'user'] % ctx.user(), label=b'log.user')
336 self.ui.write(columns[b'user'] % ctx.user(), label=b'log.user')
337 self.ui.write(
337 self.ui.write(
338 columns[b'date'] % dateutil.datestr(ctx.date()), label=b'log.date'
338 columns[b'date'] % dateutil.datestr(ctx.date()), label=b'log.date'
339 )
339 )
340
340
341 if ctx.isunstable():
341 if ctx.isunstable():
342 instabilities = ctx.instabilities()
342 instabilities = ctx.instabilities()
343 self.ui.write(
343 self.ui.write(
344 columns[b'instability'] % b', '.join(instabilities),
344 columns[b'instability'] % b', '.join(instabilities),
345 label=b'log.instability',
345 label=b'log.instability',
346 )
346 )
347
347
348 elif ctx.obsolete():
348 elif ctx.obsolete():
349 self._showobsfate(ctx)
349 self._showobsfate(ctx)
350
350
351 self._exthook(ctx)
351 self._exthook(ctx)
352
352
353 if self.ui.debugflag:
353 if self.ui.debugflag:
354 files = ctx.p1().status(ctx)
354 files = ctx.p1().status(ctx)
355 for key, value in zip(
355 for key, value in zip(
356 [b'files', b'files+', b'files-'],
356 [b'files', b'files+', b'files-'],
357 [files.modified, files.added, files.removed],
357 [files.modified, files.added, files.removed],
358 ):
358 ):
359 if value:
359 if value:
360 self.ui.write(
360 self.ui.write(
361 columns[key] % b" ".join(value),
361 columns[key] % b" ".join(value),
362 label=b'ui.debug log.files',
362 label=b'ui.debug log.files',
363 )
363 )
364 elif ctx.files() and self.ui.verbose:
364 elif ctx.files() and self.ui.verbose:
365 self.ui.write(
365 self.ui.write(
366 columns[b'files'] % b" ".join(ctx.files()),
366 columns[b'files'] % b" ".join(ctx.files()),
367 label=b'ui.note log.files',
367 label=b'ui.note log.files',
368 )
368 )
369 if copies and self.ui.verbose:
369 if copies and self.ui.verbose:
370 copies = [b'%s (%s)' % c for c in copies]
370 copies = [b'%s (%s)' % c for c in copies]
371 self.ui.write(
371 self.ui.write(
372 columns[b'copies'] % b' '.join(copies),
372 columns[b'copies'] % b' '.join(copies),
373 label=b'ui.note log.copies',
373 label=b'ui.note log.copies',
374 )
374 )
375
375
376 extra = ctx.extra()
376 extra = ctx.extra()
377 if extra and self.ui.debugflag:
377 if extra and self.ui.debugflag:
378 for key, value in sorted(extra.items()):
378 for key, value in sorted(extra.items()):
379 self.ui.write(
379 self.ui.write(
380 columns[b'extra'] % (key, stringutil.escapestr(value)),
380 columns[b'extra'] % (key, stringutil.escapestr(value)),
381 label=b'ui.debug log.extra',
381 label=b'ui.debug log.extra',
382 )
382 )
383
383
384 description = ctx.description().strip()
384 description = ctx.description().strip()
385 if description:
385 if description:
386 if self.ui.verbose:
386 if self.ui.verbose:
387 self.ui.write(
387 self.ui.write(
388 _(b"description:\n"), label=b'ui.note log.description'
388 _(b"description:\n"), label=b'ui.note log.description'
389 )
389 )
390 self.ui.write(description, label=b'ui.note log.description')
390 self.ui.write(description, label=b'ui.note log.description')
391 self.ui.write(b"\n\n")
391 self.ui.write(b"\n\n")
392 else:
392 else:
393 self.ui.write(
393 self.ui.write(
394 columns[b'summary'] % description.splitlines()[0],
394 columns[b'summary'] % description.splitlines()[0],
395 label=b'log.summary',
395 label=b'log.summary',
396 )
396 )
397 self.ui.write(b"\n")
397 self.ui.write(b"\n")
398
398
399 self._showpatch(ctx, graphwidth)
399 self._showpatch(ctx, graphwidth)
400
400
401 def _showobsfate(self, ctx):
401 def _showobsfate(self, ctx):
402 # TODO: do not depend on templater
402 # TODO: do not depend on templater
403 tres = formatter.templateresources(self.repo.ui, self.repo)
403 tres = formatter.templateresources(self.repo.ui, self.repo)
404 t = formatter.maketemplater(
404 t = formatter.maketemplater(
405 self.repo.ui,
405 self.repo.ui,
406 b'{join(obsfate, "\n")}',
406 b'{join(obsfate, "\n")}',
407 defaults=templatekw.keywords,
407 defaults=templatekw.keywords,
408 resources=tres,
408 resources=tres,
409 )
409 )
410 obsfate = t.renderdefault({b'ctx': ctx}).splitlines()
410 obsfate = t.renderdefault({b'ctx': ctx}).splitlines()
411
411
412 if obsfate:
412 if obsfate:
413 for obsfateline in obsfate:
413 for obsfateline in obsfate:
414 self.ui.write(
414 self.ui.write(
415 self._columns[b'obsolete'] % obsfateline,
415 self._columns[b'obsolete'] % obsfateline,
416 label=b'log.obsfate',
416 label=b'log.obsfate',
417 )
417 )
418
418
419 def _exthook(self, ctx):
419 def _exthook(self, ctx):
420 """empty method used by extension as a hook point"""
420 """empty method used by extension as a hook point"""
421
421
422 def _showpatch(self, ctx, graphwidth=0):
422 def _showpatch(self, ctx, graphwidth=0):
423 if self._includestat:
423 if self._includestat:
424 self._differ.showdiff(
424 self._differ.showdiff(
425 self.ui, ctx, self._diffopts, graphwidth, stat=True
425 self.ui, ctx, self._diffopts, graphwidth, stat=True
426 )
426 )
427 if self._includestat and self._includediff:
427 if self._includestat and self._includediff:
428 self.ui.write(b"\n")
428 self.ui.write(b"\n")
429 if self._includediff:
429 if self._includediff:
430 self._differ.showdiff(
430 self._differ.showdiff(
431 self.ui, ctx, self._diffopts, graphwidth, stat=False
431 self.ui, ctx, self._diffopts, graphwidth, stat=False
432 )
432 )
433 if self._includestat or self._includediff:
433 if self._includestat or self._includediff:
434 self.ui.write(b"\n")
434 self.ui.write(b"\n")
435
435
436
436
437 class changesetformatter(changesetprinter):
437 class changesetformatter(changesetprinter):
438 """Format changeset information by generic formatter"""
438 """Format changeset information by generic formatter"""
439
439
440 def __init__(
440 def __init__(
441 self, ui, repo, fm, differ=None, diffopts=None, buffered=False
441 self, ui, repo, fm, differ=None, diffopts=None, buffered=False
442 ):
442 ):
443 changesetprinter.__init__(self, ui, repo, differ, diffopts, buffered)
443 changesetprinter.__init__(self, ui, repo, differ, diffopts, buffered)
444 self._diffopts = patch.difffeatureopts(ui, diffopts, git=True)
444 self._diffopts = patch.difffeatureopts(ui, diffopts, git=True)
445 self._fm = fm
445 self._fm = fm
446
446
447 def close(self):
447 def close(self):
448 self._fm.end()
448 self._fm.end()
449
449
450 def _show(self, ctx, copies, props):
450 def _show(self, ctx, copies, props):
451 '''show a single changeset or file revision'''
451 '''show a single changeset or file revision'''
452 fm = self._fm
452 fm = self._fm
453 fm.startitem()
453 fm.startitem()
454 fm.context(ctx=ctx)
454 fm.context(ctx=ctx)
455 fm.data(rev=scmutil.intrev(ctx), node=fm.hexfunc(scmutil.binnode(ctx)))
455 fm.data(rev=scmutil.intrev(ctx), node=fm.hexfunc(scmutil.binnode(ctx)))
456
456
457 datahint = fm.datahint()
457 datahint = fm.datahint()
458 if self.ui.quiet and not datahint:
458 if self.ui.quiet and not datahint:
459 return
459 return
460
460
461 fm.data(
461 fm.data(
462 branch=ctx.branch(),
462 branch=ctx.branch(),
463 phase=ctx.phasestr(),
463 phase=ctx.phasestr(),
464 user=ctx.user(),
464 user=ctx.user(),
465 date=fm.formatdate(ctx.date()),
465 date=fm.formatdate(ctx.date()),
466 desc=ctx.description(),
466 desc=ctx.description(),
467 bookmarks=fm.formatlist(ctx.bookmarks(), name=b'bookmark'),
467 bookmarks=fm.formatlist(ctx.bookmarks(), name=b'bookmark'),
468 tags=fm.formatlist(ctx.tags(), name=b'tag'),
468 tags=fm.formatlist(ctx.tags(), name=b'tag'),
469 parents=fm.formatlist(
469 parents=fm.formatlist(
470 [fm.hexfunc(c.node()) for c in ctx.parents()], name=b'node'
470 [fm.hexfunc(c.node()) for c in ctx.parents()], name=b'node'
471 ),
471 ),
472 )
472 )
473
473
474 if self.ui.debugflag or b'manifest' in datahint:
474 if self.ui.debugflag or b'manifest' in datahint:
475 fm.data(manifest=fm.hexfunc(ctx.manifestnode() or wdirid))
475 fm.data(manifest=fm.hexfunc(ctx.manifestnode() or wdirid))
476 if self.ui.debugflag or b'extra' in datahint:
476 if self.ui.debugflag or b'extra' in datahint:
477 fm.data(extra=fm.formatdict(ctx.extra()))
477 fm.data(extra=fm.formatdict(ctx.extra()))
478
478
479 if (
479 if (
480 self.ui.debugflag
480 self.ui.debugflag
481 or b'modified' in datahint
481 or b'modified' in datahint
482 or b'added' in datahint
482 or b'added' in datahint
483 or b'removed' in datahint
483 or b'removed' in datahint
484 ):
484 ):
485 files = ctx.p1().status(ctx)
485 files = ctx.p1().status(ctx)
486 fm.data(
486 fm.data(
487 modified=fm.formatlist(files.modified, name=b'file'),
487 modified=fm.formatlist(files.modified, name=b'file'),
488 added=fm.formatlist(files.added, name=b'file'),
488 added=fm.formatlist(files.added, name=b'file'),
489 removed=fm.formatlist(files.removed, name=b'file'),
489 removed=fm.formatlist(files.removed, name=b'file'),
490 )
490 )
491
491
492 verbose = not self.ui.debugflag and self.ui.verbose
492 verbose = not self.ui.debugflag and self.ui.verbose
493 if verbose or b'files' in datahint:
493 if verbose or b'files' in datahint:
494 fm.data(files=fm.formatlist(ctx.files(), name=b'file'))
494 fm.data(files=fm.formatlist(ctx.files(), name=b'file'))
495 if verbose and copies or b'copies' in datahint:
495 if verbose and copies or b'copies' in datahint:
496 fm.data(
496 fm.data(
497 copies=fm.formatdict(copies or {}, key=b'name', value=b'source')
497 copies=fm.formatdict(copies or {}, key=b'name', value=b'source')
498 )
498 )
499
499
500 if self._includestat or b'diffstat' in datahint:
500 if self._includestat or b'diffstat' in datahint:
501 self.ui.pushbuffer()
501 self.ui.pushbuffer()
502 self._differ.showdiff(self.ui, ctx, self._diffopts, stat=True)
502 self._differ.showdiff(self.ui, ctx, self._diffopts, stat=True)
503 fm.data(diffstat=self.ui.popbuffer())
503 fm.data(diffstat=self.ui.popbuffer())
504 if self._includediff or b'diff' in datahint:
504 if self._includediff or b'diff' in datahint:
505 self.ui.pushbuffer()
505 self.ui.pushbuffer()
506 self._differ.showdiff(self.ui, ctx, self._diffopts, stat=False)
506 self._differ.showdiff(self.ui, ctx, self._diffopts, stat=False)
507 fm.data(diff=self.ui.popbuffer())
507 fm.data(diff=self.ui.popbuffer())
508
508
509
509
510 class changesettemplater(changesetprinter):
510 class changesettemplater(changesetprinter):
511 """format changeset information.
511 """format changeset information.
512
512
513 Note: there are a variety of convenience functions to build a
513 Note: there are a variety of convenience functions to build a
514 changesettemplater for common cases. See functions such as:
514 changesettemplater for common cases. See functions such as:
515 maketemplater, changesetdisplayer, buildcommittemplate, or other
515 maketemplater, changesetdisplayer, buildcommittemplate, or other
516 functions that use changesest_templater.
516 functions that use changesest_templater.
517 """
517 """
518
518
519 # Arguments before "buffered" used to be positional. Consider not
519 # Arguments before "buffered" used to be positional. Consider not
520 # adding/removing arguments before "buffered" to not break callers.
520 # adding/removing arguments before "buffered" to not break callers.
521 def __init__(
521 def __init__(
522 self, ui, repo, tmplspec, differ=None, diffopts=None, buffered=False
522 self, ui, repo, tmplspec, differ=None, diffopts=None, buffered=False
523 ):
523 ):
524 changesetprinter.__init__(self, ui, repo, differ, diffopts, buffered)
524 changesetprinter.__init__(self, ui, repo, differ, diffopts, buffered)
525 # tres is shared with _graphnodeformatter()
525 # tres is shared with _graphnodeformatter()
526 self._tresources = tres = formatter.templateresources(ui, repo)
526 self._tresources = tres = formatter.templateresources(ui, repo)
527 self.t = formatter.loadtemplater(
527 self.t = formatter.loadtemplater(
528 ui,
528 ui,
529 tmplspec,
529 tmplspec,
530 defaults=templatekw.keywords,
530 defaults=templatekw.keywords,
531 resources=tres,
531 resources=tres,
532 cache=templatekw.defaulttempl,
532 cache=templatekw.defaulttempl,
533 )
533 )
534 self._counter = itertools.count()
534 self._counter = itertools.count()
535
535
536 self._tref = tmplspec.ref
536 self._tref = tmplspec.ref
537 self._parts = {
537 self._parts = {
538 b'header': b'',
538 b'header': b'',
539 b'footer': b'',
539 b'footer': b'',
540 tmplspec.ref: tmplspec.ref,
540 tmplspec.ref: tmplspec.ref,
541 b'docheader': b'',
541 b'docheader': b'',
542 b'docfooter': b'',
542 b'docfooter': b'',
543 b'separator': b'',
543 b'separator': b'',
544 }
544 }
545 if tmplspec.mapfile:
545 if tmplspec.mapfile:
546 # find correct templates for current mode, for backward
546 # find correct templates for current mode, for backward
547 # compatibility with 'log -v/-q/--debug' using a mapfile
547 # compatibility with 'log -v/-q/--debug' using a mapfile
548 tmplmodes = [
548 tmplmodes = [
549 (True, b''),
549 (True, b''),
550 (self.ui.verbose, b'_verbose'),
550 (self.ui.verbose, b'_verbose'),
551 (self.ui.quiet, b'_quiet'),
551 (self.ui.quiet, b'_quiet'),
552 (self.ui.debugflag, b'_debug'),
552 (self.ui.debugflag, b'_debug'),
553 ]
553 ]
554 for mode, postfix in tmplmodes:
554 for mode, postfix in tmplmodes:
555 for t in self._parts:
555 for t in self._parts:
556 cur = t + postfix
556 cur = t + postfix
557 if mode and cur in self.t:
557 if mode and cur in self.t:
558 self._parts[t] = cur
558 self._parts[t] = cur
559 else:
559 else:
560 partnames = [p for p in self._parts.keys() if p != tmplspec.ref]
560 partnames = [p for p in self._parts.keys() if p != tmplspec.ref]
561 m = formatter.templatepartsmap(tmplspec, self.t, partnames)
561 m = formatter.templatepartsmap(tmplspec, self.t, partnames)
562 self._parts.update(m)
562 self._parts.update(m)
563
563
564 if self._parts[b'docheader']:
564 if self._parts[b'docheader']:
565 self.ui.write(self.t.render(self._parts[b'docheader'], {}))
565 self.ui.write(self.t.render(self._parts[b'docheader'], {}))
566
566
567 def close(self):
567 def close(self):
568 if self._parts[b'docfooter']:
568 if self._parts[b'docfooter']:
569 if not self.footer:
569 if not self.footer:
570 self.footer = b""
570 self.footer = b""
571 self.footer += self.t.render(self._parts[b'docfooter'], {})
571 self.footer += self.t.render(self._parts[b'docfooter'], {})
572 return super(changesettemplater, self).close()
572 return super(changesettemplater, self).close()
573
573
574 def _show(self, ctx, copies, props):
574 def _show(self, ctx, copies, props):
575 '''show a single changeset or file revision'''
575 '''show a single changeset or file revision'''
576 props = props.copy()
576 props = props.copy()
577 props[b'ctx'] = ctx
577 props[b'ctx'] = ctx
578 props[b'index'] = index = next(self._counter)
578 props[b'index'] = index = next(self._counter)
579 props[b'revcache'] = {b'copies': copies}
579 props[b'revcache'] = {b'copies': copies}
580 graphwidth = props.get(b'graphwidth', 0)
580 graphwidth = props.get(b'graphwidth', 0)
581
581
582 # write separator, which wouldn't work well with the header part below
582 # write separator, which wouldn't work well with the header part below
583 # since there's inherently a conflict between header (across items) and
583 # since there's inherently a conflict between header (across items) and
584 # separator (per item)
584 # separator (per item)
585 if self._parts[b'separator'] and index > 0:
585 if self._parts[b'separator'] and index > 0:
586 self.ui.write(self.t.render(self._parts[b'separator'], {}))
586 self.ui.write(self.t.render(self._parts[b'separator'], {}))
587
587
588 # write header
588 # write header
589 if self._parts[b'header']:
589 if self._parts[b'header']:
590 h = self.t.render(self._parts[b'header'], props)
590 h = self.t.render(self._parts[b'header'], props)
591 if self.buffered:
591 if self.buffered:
592 self.header[ctx.rev()] = h
592 self.header[ctx.rev()] = h
593 else:
593 else:
594 if self.lastheader != h:
594 if self.lastheader != h:
595 self.lastheader = h
595 self.lastheader = h
596 self.ui.write(h)
596 self.ui.write(h)
597
597
598 # write changeset metadata, then patch if requested
598 # write changeset metadata, then patch if requested
599 key = self._parts[self._tref]
599 key = self._parts[self._tref]
600 self.ui.write(self.t.render(key, props))
600 self.ui.write(self.t.render(key, props))
601 self._exthook(ctx)
601 self._exthook(ctx)
602 self._showpatch(ctx, graphwidth)
602 self._showpatch(ctx, graphwidth)
603
603
604 if self._parts[b'footer']:
604 if self._parts[b'footer']:
605 if not self.footer:
605 if not self.footer:
606 self.footer = self.t.render(self._parts[b'footer'], props)
606 self.footer = self.t.render(self._parts[b'footer'], props)
607
607
608
608
609 def templatespec(tmpl, mapfile):
609 def templatespec(tmpl, mapfile):
610 assert not (tmpl and mapfile)
610 assert not (tmpl and mapfile)
611 if mapfile:
611 if mapfile:
612 return formatter.mapfile_templatespec(b'changeset', mapfile)
612 return formatter.mapfile_templatespec(b'changeset', mapfile)
613 else:
613 else:
614 return formatter.literal_templatespec(tmpl)
614 return formatter.literal_templatespec(tmpl)
615
615
616
616
617 def _lookuptemplate(ui, tmpl, style):
617 def _lookuptemplate(ui, tmpl, style):
618 """Find the template matching the given template spec or style
618 """Find the template matching the given template spec or style
619
619
620 See formatter.lookuptemplate() for details.
620 See formatter.lookuptemplate() for details.
621 """
621 """
622
622
623 # ui settings
623 # ui settings
624 if not tmpl and not style: # template are stronger than style
624 if not tmpl and not style: # template are stronger than style
625 tmpl = ui.config(b'command-templates', b'log')
625 tmpl = ui.config(b'command-templates', b'log')
626 if tmpl:
626 if tmpl:
627 return formatter.literal_templatespec(templater.unquotestring(tmpl))
627 return formatter.literal_templatespec(templater.unquotestring(tmpl))
628 else:
628 else:
629 style = util.expandpath(ui.config(b'ui', b'style'))
629 style = util.expandpath(ui.config(b'ui', b'style'))
630
630
631 if not tmpl and style:
631 if not tmpl and style:
632 mapfile = style
632 mapfile = style
633 fp = None
633 fp = None
634 if not os.path.split(mapfile)[0]:
634 if not os.path.split(mapfile)[0]:
635 (mapname, fp) = templater.try_open_template(
635 (mapname, fp) = templater.try_open_template(
636 b'map-cmdline.' + mapfile
636 b'map-cmdline.' + mapfile
637 ) or templater.try_open_template(mapfile)
637 ) or templater.try_open_template(mapfile)
638 if mapname:
638 if mapname:
639 mapfile = mapname
639 mapfile = mapname
640 return formatter.mapfile_templatespec(b'changeset', mapfile, fp)
640 return formatter.mapfile_templatespec(b'changeset', mapfile, fp)
641
641
642 return formatter.lookuptemplate(ui, b'changeset', tmpl)
642 return formatter.lookuptemplate(ui, b'changeset', tmpl)
643
643
644
644
645 def maketemplater(ui, repo, tmpl, buffered=False):
645 def maketemplater(ui, repo, tmpl, buffered=False):
646 """Create a changesettemplater from a literal template 'tmpl'
646 """Create a changesettemplater from a literal template 'tmpl'
647 byte-string."""
647 byte-string."""
648 spec = formatter.literal_templatespec(tmpl)
648 spec = formatter.literal_templatespec(tmpl)
649 return changesettemplater(ui, repo, spec, buffered=buffered)
649 return changesettemplater(ui, repo, spec, buffered=buffered)
650
650
651
651
652 def changesetdisplayer(ui, repo, opts, differ=None, buffered=False):
652 def changesetdisplayer(ui, repo, opts, differ=None, buffered=False):
653 """show one changeset using template or regular display.
653 """show one changeset using template or regular display.
654
654
655 Display format will be the first non-empty hit of:
655 Display format will be the first non-empty hit of:
656 1. option 'template'
656 1. option 'template'
657 2. option 'style'
657 2. option 'style'
658 3. [command-templates] setting 'log'
658 3. [command-templates] setting 'log'
659 4. [ui] setting 'style'
659 4. [ui] setting 'style'
660 If all of these values are either the unset or the empty string,
660 If all of these values are either the unset or the empty string,
661 regular display via changesetprinter() is done.
661 regular display via changesetprinter() is done.
662 """
662 """
663 postargs = (differ, opts, buffered)
663 postargs = (differ, opts, buffered)
664 spec = _lookuptemplate(ui, opts.get(b'template'), opts.get(b'style'))
664 spec = _lookuptemplate(ui, opts.get(b'template'), opts.get(b'style'))
665
665
666 # machine-readable formats have slightly different keyword set than
666 # machine-readable formats have slightly different keyword set than
667 # plain templates, which are handled by changesetformatter.
667 # plain templates, which are handled by changesetformatter.
668 # note that {b'pickle', b'debug'} can also be added to the list if needed.
668 # note that {b'pickle', b'debug'} can also be added to the list if needed.
669 if spec.ref in {b'cbor', b'json'}:
669 if spec.ref in {b'cbor', b'json'}:
670 fm = ui.formatter(b'log', opts)
670 fm = ui.formatter(b'log', opts)
671 return changesetformatter(ui, repo, fm, *postargs)
671 return changesetformatter(ui, repo, fm, *postargs)
672
672
673 if not spec.ref and not spec.tmpl and not spec.mapfile:
673 if not spec.ref and not spec.tmpl and not spec.mapfile:
674 return changesetprinter(ui, repo, *postargs)
674 return changesetprinter(ui, repo, *postargs)
675
675
676 return changesettemplater(ui, repo, spec, *postargs)
676 return changesettemplater(ui, repo, spec, *postargs)
677
677
678
678
679 @attr.s
679 @attr.s
680 class walkopts(object):
680 class walkopts(object):
681 """Options to configure a set of revisions and file matcher factory
681 """Options to configure a set of revisions and file matcher factory
682 to scan revision/file history
682 to scan revision/file history
683 """
683 """
684
684
685 # raw command-line parameters, which a matcher will be built from
685 # raw command-line parameters, which a matcher will be built from
686 pats = attr.ib() # type: List[bytes]
686 pats = attr.ib() # type: List[bytes]
687 opts = attr.ib() # type: Dict[bytes, Any]
687 opts = attr.ib() # type: Dict[bytes, Any]
688
688
689 # a list of revset expressions to be traversed; if follow, it specifies
689 # a list of revset expressions to be traversed; if follow, it specifies
690 # the start revisions
690 # the start revisions
691 revspec = attr.ib() # type: List[bytes]
691 revspec = attr.ib() # type: List[bytes]
692
692
693 # miscellaneous queries to filter revisions (see "hg help log" for details)
693 # miscellaneous queries to filter revisions (see "hg help log" for details)
694 bookmarks = attr.ib(default=attr.Factory(list)) # type: List[bytes]
694 bookmarks = attr.ib(default=attr.Factory(list)) # type: List[bytes]
695 branches = attr.ib(default=attr.Factory(list)) # type: List[bytes]
695 branches = attr.ib(default=attr.Factory(list)) # type: List[bytes]
696 date = attr.ib(default=None) # type: Optional[bytes]
696 date = attr.ib(default=None) # type: Optional[bytes]
697 keywords = attr.ib(default=attr.Factory(list)) # type: List[bytes]
697 keywords = attr.ib(default=attr.Factory(list)) # type: List[bytes]
698 no_merges = attr.ib(default=False) # type: bool
698 no_merges = attr.ib(default=False) # type: bool
699 only_merges = attr.ib(default=False) # type: bool
699 only_merges = attr.ib(default=False) # type: bool
700 prune_ancestors = attr.ib(default=attr.Factory(list)) # type: List[bytes]
700 prune_ancestors = attr.ib(default=attr.Factory(list)) # type: List[bytes]
701 users = attr.ib(default=attr.Factory(list)) # type: List[bytes]
701 users = attr.ib(default=attr.Factory(list)) # type: List[bytes]
702
702
703 # miscellaneous matcher arguments
703 # miscellaneous matcher arguments
704 include_pats = attr.ib(default=attr.Factory(list)) # type: List[bytes]
704 include_pats = attr.ib(default=attr.Factory(list)) # type: List[bytes]
705 exclude_pats = attr.ib(default=attr.Factory(list)) # type: List[bytes]
705 exclude_pats = attr.ib(default=attr.Factory(list)) # type: List[bytes]
706
706
707 # 0: no follow, 1: follow first, 2: follow both parents
707 # 0: no follow, 1: follow first, 2: follow both parents
708 follow = attr.ib(default=0) # type: int
708 follow = attr.ib(default=0) # type: int
709
709
710 # do not attempt filelog-based traversal, which may be fast but cannot
710 # do not attempt filelog-based traversal, which may be fast but cannot
711 # include revisions where files were removed
711 # include revisions where files were removed
712 force_changelog_traversal = attr.ib(default=False) # type: bool
712 force_changelog_traversal = attr.ib(default=False) # type: bool
713
713
714 # filter revisions by file patterns, which should be disabled only if
714 # filter revisions by file patterns, which should be disabled only if
715 # you want to include revisions where files were unmodified
715 # you want to include revisions where files were unmodified
716 filter_revisions_by_pats = attr.ib(default=True) # type: bool
716 filter_revisions_by_pats = attr.ib(default=True) # type: bool
717
717
718 # sort revisions prior to traversal: 'desc', 'topo', or None
718 # sort revisions prior to traversal: 'desc', 'topo', or None
719 sort_revisions = attr.ib(default=None) # type: Optional[bytes]
719 sort_revisions = attr.ib(default=None) # type: Optional[bytes]
720
720
721 # limit number of changes displayed; None means unlimited
721 # limit number of changes displayed; None means unlimited
722 limit = attr.ib(default=None) # type: Optional[int]
722 limit = attr.ib(default=None) # type: Optional[int]
723
723
724
724
725 def parseopts(ui, pats, opts):
725 def parseopts(ui, pats, opts):
726 # type: (Any, List[bytes], Dict[bytes, Any]) -> walkopts
726 # type: (Any, List[bytes], Dict[bytes, Any]) -> walkopts
727 """Parse log command options into walkopts
727 """Parse log command options into walkopts
728
728
729 The returned walkopts will be passed in to getrevs() or makewalker().
729 The returned walkopts will be passed in to getrevs() or makewalker().
730 """
730 """
731 if opts.get(b'follow_first'):
731 if opts.get(b'follow_first'):
732 follow = 1
732 follow = 1
733 elif opts.get(b'follow'):
733 elif opts.get(b'follow'):
734 follow = 2
734 follow = 2
735 else:
735 else:
736 follow = 0
736 follow = 0
737
737
738 if opts.get(b'graph'):
738 if opts.get(b'graph'):
739 if ui.configbool(b'experimental', b'log.topo'):
739 if ui.configbool(b'experimental', b'log.topo'):
740 sort_revisions = b'topo'
740 sort_revisions = b'topo'
741 else:
741 else:
742 sort_revisions = b'desc'
742 sort_revisions = b'desc'
743 else:
743 else:
744 sort_revisions = None
744 sort_revisions = None
745
745
746 return walkopts(
746 return walkopts(
747 pats=pats,
747 pats=pats,
748 opts=opts,
748 opts=opts,
749 revspec=opts.get(b'rev', []),
749 revspec=opts.get(b'rev', []),
750 bookmarks=opts.get(b'bookmark', []),
750 bookmarks=opts.get(b'bookmark', []),
751 # branch and only_branch are really aliases and must be handled at
751 # branch and only_branch are really aliases and must be handled at
752 # the same time
752 # the same time
753 branches=opts.get(b'branch', []) + opts.get(b'only_branch', []),
753 branches=opts.get(b'branch', []) + opts.get(b'only_branch', []),
754 date=opts.get(b'date'),
754 date=opts.get(b'date'),
755 keywords=opts.get(b'keyword', []),
755 keywords=opts.get(b'keyword', []),
756 no_merges=bool(opts.get(b'no_merges')),
756 no_merges=bool(opts.get(b'no_merges')),
757 only_merges=bool(opts.get(b'only_merges')),
757 only_merges=bool(opts.get(b'only_merges')),
758 prune_ancestors=opts.get(b'prune', []),
758 prune_ancestors=opts.get(b'prune', []),
759 users=opts.get(b'user', []),
759 users=opts.get(b'user', []),
760 include_pats=opts.get(b'include', []),
760 include_pats=opts.get(b'include', []),
761 exclude_pats=opts.get(b'exclude', []),
761 exclude_pats=opts.get(b'exclude', []),
762 follow=follow,
762 follow=follow,
763 force_changelog_traversal=bool(opts.get(b'removed')),
763 force_changelog_traversal=bool(opts.get(b'removed')),
764 sort_revisions=sort_revisions,
764 sort_revisions=sort_revisions,
765 limit=getlimit(opts),
765 limit=getlimit(opts),
766 )
766 )
767
767
768
768
769 def _makematcher(repo, revs, wopts):
769 def _makematcher(repo, revs, wopts):
770 """Build matcher and expanded patterns from log options
770 """Build matcher and expanded patterns from log options
771
771
772 If --follow, revs are the revisions to follow from.
772 If --follow, revs are the revisions to follow from.
773
773
774 Returns (match, pats, slowpath) where
774 Returns (match, pats, slowpath) where
775 - match: a matcher built from the given pats and -I/-X opts
775 - match: a matcher built from the given pats and -I/-X opts
776 - pats: patterns used (globs are expanded on Windows)
776 - pats: patterns used (globs are expanded on Windows)
777 - slowpath: True if patterns aren't as simple as scanning filelogs
777 - slowpath: True if patterns aren't as simple as scanning filelogs
778 """
778 """
779 # pats/include/exclude are passed to match.match() directly in
779 # pats/include/exclude are passed to match.match() directly in
780 # _matchfiles() revset, but a log-like command should build its matcher
780 # _matchfiles() revset, but a log-like command should build its matcher
781 # with scmutil.match(). The difference is input pats are globbed on
781 # with scmutil.match(). The difference is input pats are globbed on
782 # platforms without shell expansion (windows).
782 # platforms without shell expansion (windows).
783 wctx = repo[None]
783 wctx = repo[None]
784 match, pats = scmutil.matchandpats(wctx, wopts.pats, wopts.opts)
784 match, pats = scmutil.matchandpats(wctx, wopts.pats, wopts.opts)
785 slowpath = match.anypats() or (
785 slowpath = match.anypats() or (
786 not match.always() and wopts.force_changelog_traversal
786 not match.always() and wopts.force_changelog_traversal
787 )
787 )
788 if not slowpath:
788 if not slowpath:
789 if wopts.follow and wopts.revspec:
789 if wopts.follow and wopts.revspec:
790 # There may be the case that a path doesn't exist in some (but
790 # There may be the case that a path doesn't exist in some (but
791 # not all) of the specified start revisions, but let's consider
791 # not all) of the specified start revisions, but let's consider
792 # the path is valid. Missing files will be warned by the matcher.
792 # the path is valid. Missing files will be warned by the matcher.
793 startctxs = [repo[r] for r in revs]
793 startctxs = [repo[r] for r in revs]
794 for f in match.files():
794 for f in match.files():
795 found = False
795 found = False
796 for c in startctxs:
796 for c in startctxs:
797 if f in c:
797 if f in c:
798 found = True
798 found = True
799 elif c.hasdir(f):
799 elif c.hasdir(f):
800 # If a directory exists in any of the start revisions,
800 # If a directory exists in any of the start revisions,
801 # take the slow path.
801 # take the slow path.
802 found = slowpath = True
802 found = slowpath = True
803 if not found:
803 if not found:
804 raise error.Abort(
804 raise error.Abort(
805 _(
805 _(
806 b'cannot follow file not in any of the specified '
806 b'cannot follow file not in any of the specified '
807 b'revisions: "%s"'
807 b'revisions: "%s"'
808 )
808 )
809 % f
809 % f
810 )
810 )
811 elif wopts.follow:
811 elif wopts.follow:
812 for f in match.files():
812 for f in match.files():
813 if f not in wctx:
813 if f not in wctx:
814 # If the file exists, it may be a directory, so let it
814 # If the file exists, it may be a directory, so let it
815 # take the slow path.
815 # take the slow path.
816 if os.path.exists(repo.wjoin(f)):
816 if os.path.exists(repo.wjoin(f)):
817 slowpath = True
817 slowpath = True
818 continue
818 continue
819 else:
819 else:
820 raise error.Abort(
820 raise error.Abort(
821 _(
821 _(
822 b'cannot follow file not in parent '
822 b'cannot follow file not in parent '
823 b'revision: "%s"'
823 b'revision: "%s"'
824 )
824 )
825 % f
825 % f
826 )
826 )
827 filelog = repo.file(f)
827 filelog = repo.file(f)
828 if not filelog:
828 if not filelog:
829 # A file exists in wdir but not in history, which means
829 # A file exists in wdir but not in history, which means
830 # the file isn't committed yet.
830 # the file isn't committed yet.
831 raise error.Abort(
831 raise error.Abort(
832 _(b'cannot follow nonexistent file: "%s"') % f
832 _(b'cannot follow nonexistent file: "%s"') % f
833 )
833 )
834 else:
834 else:
835 for f in match.files():
835 for f in match.files():
836 filelog = repo.file(f)
836 filelog = repo.file(f)
837 if not filelog:
837 if not filelog:
838 # A zero count may be a directory or deleted file, so
838 # A zero count may be a directory or deleted file, so
839 # try to find matching entries on the slow path.
839 # try to find matching entries on the slow path.
840 slowpath = True
840 slowpath = True
841
841
842 # We decided to fall back to the slowpath because at least one
842 # We decided to fall back to the slowpath because at least one
843 # of the paths was not a file. Check to see if at least one of them
843 # of the paths was not a file. Check to see if at least one of them
844 # existed in history - in that case, we'll continue down the
844 # existed in history - in that case, we'll continue down the
845 # slowpath; otherwise, we can turn off the slowpath
845 # slowpath; otherwise, we can turn off the slowpath
846 if slowpath:
846 if slowpath:
847 for path in match.files():
847 for path in match.files():
848 if path == b'.' or path in repo.store:
848 if path == b'.' or path in repo.store:
849 break
849 break
850 else:
850 else:
851 slowpath = False
851 slowpath = False
852
852
853 return match, pats, slowpath
853 return match, pats, slowpath
854
854
855
855
856 def _fileancestors(repo, revs, match, followfirst):
856 def _fileancestors(repo, revs, match, followfirst):
857 fctxs = []
857 fctxs = []
858 for r in revs:
858 for r in revs:
859 ctx = repo[r]
859 ctx = repo[r]
860 fctxs.extend(ctx[f].introfilectx() for f in ctx.walk(match))
860 fctxs.extend(ctx[f].introfilectx() for f in ctx.walk(match))
861
861
862 # When displaying a revision with --patch --follow FILE, we have
862 # When displaying a revision with --patch --follow FILE, we have
863 # to know which file of the revision must be diffed. With
863 # to know which file of the revision must be diffed. With
864 # --follow, we want the names of the ancestors of FILE in the
864 # --follow, we want the names of the ancestors of FILE in the
865 # revision, stored in "fcache". "fcache" is populated as a side effect
865 # revision, stored in "fcache". "fcache" is populated as a side effect
866 # of the graph traversal.
866 # of the graph traversal.
867 fcache = {}
867 fcache = {}
868
868
869 def filematcher(ctx):
869 def filematcher(ctx):
870 return scmutil.matchfiles(repo, fcache.get(scmutil.intrev(ctx), []))
870 return scmutil.matchfiles(repo, fcache.get(scmutil.intrev(ctx), []))
871
871
872 def revgen():
872 def revgen():
873 for rev, cs in dagop.filectxancestors(fctxs, followfirst=followfirst):
873 for rev, cs in dagop.filectxancestors(fctxs, followfirst=followfirst):
874 fcache[rev] = [c.path() for c in cs]
874 fcache[rev] = [c.path() for c in cs]
875 yield rev
875 yield rev
876
876
877 return smartset.generatorset(revgen(), iterasc=False), filematcher
877 return smartset.generatorset(revgen(), iterasc=False), filematcher
878
878
879
879
880 def _makenofollowfilematcher(repo, pats, opts):
880 def _makenofollowfilematcher(repo, pats, opts):
881 '''hook for extensions to override the filematcher for non-follow cases'''
881 '''hook for extensions to override the filematcher for non-follow cases'''
882 return None
882 return None
883
883
884
884
885 _opt2logrevset = {
885 _opt2logrevset = {
886 b'no_merges': (b'not merge()', None),
886 b'no_merges': (b'not merge()', None),
887 b'only_merges': (b'merge()', None),
887 b'only_merges': (b'merge()', None),
888 b'_matchfiles': (None, b'_matchfiles(%ps)'),
888 b'_matchfiles': (None, b'_matchfiles(%ps)'),
889 b'date': (b'date(%s)', None),
889 b'date': (b'date(%s)', None),
890 b'branch': (b'branch(%s)', b'%lr'),
890 b'branch': (b'branch(%s)', b'%lr'),
891 b'_patslog': (b'filelog(%s)', b'%lr'),
891 b'_patslog': (b'filelog(%s)', b'%lr'),
892 b'keyword': (b'keyword(%s)', b'%lr'),
892 b'keyword': (b'keyword(%s)', b'%lr'),
893 b'prune': (b'ancestors(%s)', b'not %lr'),
893 b'prune': (b'ancestors(%s)', b'not %lr'),
894 b'user': (b'user(%s)', b'%lr'),
894 b'user': (b'user(%s)', b'%lr'),
895 }
895 }
896
896
897
897
898 def _makerevset(repo, wopts, slowpath):
898 def _makerevset(repo, wopts, slowpath):
899 """Return a revset string built from log options and file patterns"""
899 """Return a revset string built from log options and file patterns"""
900 opts = {
900 opts = {
901 b'branch': [repo.lookupbranch(b) for b in wopts.branches],
901 b'branch': [b'literal:' + repo.lookupbranch(b) for b in wopts.branches],
902 b'date': wopts.date,
902 b'date': wopts.date,
903 b'keyword': wopts.keywords,
903 b'keyword': wopts.keywords,
904 b'no_merges': wopts.no_merges,
904 b'no_merges': wopts.no_merges,
905 b'only_merges': wopts.only_merges,
905 b'only_merges': wopts.only_merges,
906 b'prune': wopts.prune_ancestors,
906 b'prune': wopts.prune_ancestors,
907 b'user': wopts.users,
907 b'user': [b'literal:' + v for v in wopts.users],
908 }
908 }
909
909
910 if wopts.filter_revisions_by_pats and slowpath:
910 if wopts.filter_revisions_by_pats and slowpath:
911 # pats/include/exclude cannot be represented as separate
911 # pats/include/exclude cannot be represented as separate
912 # revset expressions as their filtering logic applies at file
912 # revset expressions as their filtering logic applies at file
913 # level. For instance "-I a -X b" matches a revision touching
913 # level. For instance "-I a -X b" matches a revision touching
914 # "a" and "b" while "file(a) and not file(b)" does
914 # "a" and "b" while "file(a) and not file(b)" does
915 # not. Besides, filesets are evaluated against the working
915 # not. Besides, filesets are evaluated against the working
916 # directory.
916 # directory.
917 matchargs = [b'r:', b'd:relpath']
917 matchargs = [b'r:', b'd:relpath']
918 for p in wopts.pats:
918 for p in wopts.pats:
919 matchargs.append(b'p:' + p)
919 matchargs.append(b'p:' + p)
920 for p in wopts.include_pats:
920 for p in wopts.include_pats:
921 matchargs.append(b'i:' + p)
921 matchargs.append(b'i:' + p)
922 for p in wopts.exclude_pats:
922 for p in wopts.exclude_pats:
923 matchargs.append(b'x:' + p)
923 matchargs.append(b'x:' + p)
924 opts[b'_matchfiles'] = matchargs
924 opts[b'_matchfiles'] = matchargs
925 elif wopts.filter_revisions_by_pats and not wopts.follow:
925 elif wopts.filter_revisions_by_pats and not wopts.follow:
926 opts[b'_patslog'] = list(wopts.pats)
926 opts[b'_patslog'] = list(wopts.pats)
927
927
928 expr = []
928 expr = []
929 for op, val in sorted(pycompat.iteritems(opts)):
929 for op, val in sorted(pycompat.iteritems(opts)):
930 if not val:
930 if not val:
931 continue
931 continue
932 revop, listop = _opt2logrevset[op]
932 revop, listop = _opt2logrevset[op]
933 if revop and b'%' not in revop:
933 if revop and b'%' not in revop:
934 expr.append(revop)
934 expr.append(revop)
935 elif not listop:
935 elif not listop:
936 expr.append(revsetlang.formatspec(revop, val))
936 expr.append(revsetlang.formatspec(revop, val))
937 else:
937 else:
938 if revop:
938 if revop:
939 val = [revsetlang.formatspec(revop, v) for v in val]
939 val = [revsetlang.formatspec(revop, v) for v in val]
940 expr.append(revsetlang.formatspec(listop, val))
940 expr.append(revsetlang.formatspec(listop, val))
941
941
942 if wopts.bookmarks:
942 if wopts.bookmarks:
943 expr.append(
943 expr.append(
944 revsetlang.formatspec(
944 revsetlang.formatspec(
945 b'%lr',
945 b'%lr',
946 [scmutil.format_bookmark_revspec(v) for v in wopts.bookmarks],
946 [scmutil.format_bookmark_revspec(v) for v in wopts.bookmarks],
947 )
947 )
948 )
948 )
949
949
950 if expr:
950 if expr:
951 expr = b'(' + b' and '.join(expr) + b')'
951 expr = b'(' + b' and '.join(expr) + b')'
952 else:
952 else:
953 expr = None
953 expr = None
954 return expr
954 return expr
955
955
956
956
957 def _initialrevs(repo, wopts):
957 def _initialrevs(repo, wopts):
958 """Return the initial set of revisions to be filtered or followed"""
958 """Return the initial set of revisions to be filtered or followed"""
959 if wopts.revspec:
959 if wopts.revspec:
960 revs = scmutil.revrange(repo, wopts.revspec)
960 revs = scmutil.revrange(repo, wopts.revspec)
961 elif wopts.follow and repo.dirstate.p1() == nullid:
961 elif wopts.follow and repo.dirstate.p1() == nullid:
962 revs = smartset.baseset()
962 revs = smartset.baseset()
963 elif wopts.follow:
963 elif wopts.follow:
964 revs = repo.revs(b'.')
964 revs = repo.revs(b'.')
965 else:
965 else:
966 revs = smartset.spanset(repo)
966 revs = smartset.spanset(repo)
967 revs.reverse()
967 revs.reverse()
968 return revs
968 return revs
969
969
970
970
971 def makewalker(repo, wopts):
971 def makewalker(repo, wopts):
972 # type: (Any, walkopts) -> Tuple[smartset.abstractsmartset, Optional[Callable[[Any], matchmod.basematcher]]]
972 # type: (Any, walkopts) -> Tuple[smartset.abstractsmartset, Optional[Callable[[Any], matchmod.basematcher]]]
973 """Build (revs, makefilematcher) to scan revision/file history
973 """Build (revs, makefilematcher) to scan revision/file history
974
974
975 - revs is the smartset to be traversed.
975 - revs is the smartset to be traversed.
976 - makefilematcher is a function to map ctx to a matcher for that revision
976 - makefilematcher is a function to map ctx to a matcher for that revision
977 """
977 """
978 revs = _initialrevs(repo, wopts)
978 revs = _initialrevs(repo, wopts)
979 if not revs:
979 if not revs:
980 return smartset.baseset(), None
980 return smartset.baseset(), None
981 # TODO: might want to merge slowpath with wopts.force_changelog_traversal
981 # TODO: might want to merge slowpath with wopts.force_changelog_traversal
982 match, pats, slowpath = _makematcher(repo, revs, wopts)
982 match, pats, slowpath = _makematcher(repo, revs, wopts)
983 wopts = attr.evolve(wopts, pats=pats)
983 wopts = attr.evolve(wopts, pats=pats)
984
984
985 filematcher = None
985 filematcher = None
986 if wopts.follow:
986 if wopts.follow:
987 if slowpath or match.always():
987 if slowpath or match.always():
988 revs = dagop.revancestors(repo, revs, followfirst=wopts.follow == 1)
988 revs = dagop.revancestors(repo, revs, followfirst=wopts.follow == 1)
989 else:
989 else:
990 assert not wopts.force_changelog_traversal
990 assert not wopts.force_changelog_traversal
991 revs, filematcher = _fileancestors(
991 revs, filematcher = _fileancestors(
992 repo, revs, match, followfirst=wopts.follow == 1
992 repo, revs, match, followfirst=wopts.follow == 1
993 )
993 )
994 revs.reverse()
994 revs.reverse()
995 if filematcher is None:
995 if filematcher is None:
996 filematcher = _makenofollowfilematcher(repo, wopts.pats, wopts.opts)
996 filematcher = _makenofollowfilematcher(repo, wopts.pats, wopts.opts)
997 if filematcher is None:
997 if filematcher is None:
998
998
999 def filematcher(ctx):
999 def filematcher(ctx):
1000 return match
1000 return match
1001
1001
1002 expr = _makerevset(repo, wopts, slowpath)
1002 expr = _makerevset(repo, wopts, slowpath)
1003 if wopts.sort_revisions:
1003 if wopts.sort_revisions:
1004 assert wopts.sort_revisions in {b'topo', b'desc'}
1004 assert wopts.sort_revisions in {b'topo', b'desc'}
1005 if wopts.sort_revisions == b'topo':
1005 if wopts.sort_revisions == b'topo':
1006 if not revs.istopo():
1006 if not revs.istopo():
1007 revs = dagop.toposort(revs, repo.changelog.parentrevs)
1007 revs = dagop.toposort(revs, repo.changelog.parentrevs)
1008 # TODO: try to iterate the set lazily
1008 # TODO: try to iterate the set lazily
1009 revs = revset.baseset(list(revs), istopo=True)
1009 revs = revset.baseset(list(revs), istopo=True)
1010 elif not (revs.isdescending() or revs.istopo()):
1010 elif not (revs.isdescending() or revs.istopo()):
1011 # User-specified revs might be unsorted
1011 # User-specified revs might be unsorted
1012 revs.sort(reverse=True)
1012 revs.sort(reverse=True)
1013 if expr:
1013 if expr:
1014 matcher = revset.match(None, expr)
1014 matcher = revset.match(None, expr)
1015 revs = matcher(repo, revs)
1015 revs = matcher(repo, revs)
1016 if wopts.limit is not None:
1016 if wopts.limit is not None:
1017 revs = revs.slice(0, wopts.limit)
1017 revs = revs.slice(0, wopts.limit)
1018
1018
1019 return revs, filematcher
1019 return revs, filematcher
1020
1020
1021
1021
1022 def getrevs(repo, wopts):
1022 def getrevs(repo, wopts):
1023 # type: (Any, walkopts) -> Tuple[smartset.abstractsmartset, Optional[changesetdiffer]]
1023 # type: (Any, walkopts) -> Tuple[smartset.abstractsmartset, Optional[changesetdiffer]]
1024 """Return (revs, differ) where revs is a smartset
1024 """Return (revs, differ) where revs is a smartset
1025
1025
1026 differ is a changesetdiffer with pre-configured file matcher.
1026 differ is a changesetdiffer with pre-configured file matcher.
1027 """
1027 """
1028 revs, filematcher = makewalker(repo, wopts)
1028 revs, filematcher = makewalker(repo, wopts)
1029 if not revs:
1029 if not revs:
1030 return revs, None
1030 return revs, None
1031 differ = changesetdiffer()
1031 differ = changesetdiffer()
1032 differ._makefilematcher = filematcher
1032 differ._makefilematcher = filematcher
1033 return revs, differ
1033 return revs, differ
1034
1034
1035
1035
1036 def _parselinerangeopt(repo, opts):
1036 def _parselinerangeopt(repo, opts):
1037 """Parse --line-range log option and return a list of tuples (filename,
1037 """Parse --line-range log option and return a list of tuples (filename,
1038 (fromline, toline)).
1038 (fromline, toline)).
1039 """
1039 """
1040 linerangebyfname = []
1040 linerangebyfname = []
1041 for pat in opts.get(b'line_range', []):
1041 for pat in opts.get(b'line_range', []):
1042 try:
1042 try:
1043 pat, linerange = pat.rsplit(b',', 1)
1043 pat, linerange = pat.rsplit(b',', 1)
1044 except ValueError:
1044 except ValueError:
1045 raise error.Abort(_(b'malformatted line-range pattern %s') % pat)
1045 raise error.Abort(_(b'malformatted line-range pattern %s') % pat)
1046 try:
1046 try:
1047 fromline, toline = map(int, linerange.split(b':'))
1047 fromline, toline = map(int, linerange.split(b':'))
1048 except ValueError:
1048 except ValueError:
1049 raise error.Abort(_(b"invalid line range for %s") % pat)
1049 raise error.Abort(_(b"invalid line range for %s") % pat)
1050 msg = _(b"line range pattern '%s' must match exactly one file") % pat
1050 msg = _(b"line range pattern '%s' must match exactly one file") % pat
1051 fname = scmutil.parsefollowlinespattern(repo, None, pat, msg)
1051 fname = scmutil.parsefollowlinespattern(repo, None, pat, msg)
1052 linerangebyfname.append(
1052 linerangebyfname.append(
1053 (fname, util.processlinerange(fromline, toline))
1053 (fname, util.processlinerange(fromline, toline))
1054 )
1054 )
1055 return linerangebyfname
1055 return linerangebyfname
1056
1056
1057
1057
1058 def getlinerangerevs(repo, userrevs, opts):
1058 def getlinerangerevs(repo, userrevs, opts):
1059 """Return (revs, differ).
1059 """Return (revs, differ).
1060
1060
1061 "revs" are revisions obtained by processing "line-range" log options and
1061 "revs" are revisions obtained by processing "line-range" log options and
1062 walking block ancestors of each specified file/line-range.
1062 walking block ancestors of each specified file/line-range.
1063
1063
1064 "differ" is a changesetdiffer with pre-configured file matcher and hunks
1064 "differ" is a changesetdiffer with pre-configured file matcher and hunks
1065 filter.
1065 filter.
1066 """
1066 """
1067 wctx = repo[None]
1067 wctx = repo[None]
1068
1068
1069 # Two-levels map of "rev -> file ctx -> [line range]".
1069 # Two-levels map of "rev -> file ctx -> [line range]".
1070 linerangesbyrev = {}
1070 linerangesbyrev = {}
1071 for fname, (fromline, toline) in _parselinerangeopt(repo, opts):
1071 for fname, (fromline, toline) in _parselinerangeopt(repo, opts):
1072 if fname not in wctx:
1072 if fname not in wctx:
1073 raise error.Abort(
1073 raise error.Abort(
1074 _(b'cannot follow file not in parent revision: "%s"') % fname
1074 _(b'cannot follow file not in parent revision: "%s"') % fname
1075 )
1075 )
1076 fctx = wctx.filectx(fname)
1076 fctx = wctx.filectx(fname)
1077 for fctx, linerange in dagop.blockancestors(fctx, fromline, toline):
1077 for fctx, linerange in dagop.blockancestors(fctx, fromline, toline):
1078 rev = fctx.introrev()
1078 rev = fctx.introrev()
1079 if rev is None:
1079 if rev is None:
1080 rev = wdirrev
1080 rev = wdirrev
1081 if rev not in userrevs:
1081 if rev not in userrevs:
1082 continue
1082 continue
1083 linerangesbyrev.setdefault(rev, {}).setdefault(
1083 linerangesbyrev.setdefault(rev, {}).setdefault(
1084 fctx.path(), []
1084 fctx.path(), []
1085 ).append(linerange)
1085 ).append(linerange)
1086
1086
1087 def nofilterhunksfn(fctx, hunks):
1087 def nofilterhunksfn(fctx, hunks):
1088 return hunks
1088 return hunks
1089
1089
1090 def hunksfilter(ctx):
1090 def hunksfilter(ctx):
1091 fctxlineranges = linerangesbyrev.get(scmutil.intrev(ctx))
1091 fctxlineranges = linerangesbyrev.get(scmutil.intrev(ctx))
1092 if fctxlineranges is None:
1092 if fctxlineranges is None:
1093 return nofilterhunksfn
1093 return nofilterhunksfn
1094
1094
1095 def filterfn(fctx, hunks):
1095 def filterfn(fctx, hunks):
1096 lineranges = fctxlineranges.get(fctx.path())
1096 lineranges = fctxlineranges.get(fctx.path())
1097 if lineranges is not None:
1097 if lineranges is not None:
1098 for hr, lines in hunks:
1098 for hr, lines in hunks:
1099 if hr is None: # binary
1099 if hr is None: # binary
1100 yield hr, lines
1100 yield hr, lines
1101 continue
1101 continue
1102 if any(mdiff.hunkinrange(hr[2:], lr) for lr in lineranges):
1102 if any(mdiff.hunkinrange(hr[2:], lr) for lr in lineranges):
1103 yield hr, lines
1103 yield hr, lines
1104 else:
1104 else:
1105 for hunk in hunks:
1105 for hunk in hunks:
1106 yield hunk
1106 yield hunk
1107
1107
1108 return filterfn
1108 return filterfn
1109
1109
1110 def filematcher(ctx):
1110 def filematcher(ctx):
1111 files = list(linerangesbyrev.get(scmutil.intrev(ctx), []))
1111 files = list(linerangesbyrev.get(scmutil.intrev(ctx), []))
1112 return scmutil.matchfiles(repo, files)
1112 return scmutil.matchfiles(repo, files)
1113
1113
1114 revs = sorted(linerangesbyrev, reverse=True)
1114 revs = sorted(linerangesbyrev, reverse=True)
1115
1115
1116 differ = changesetdiffer()
1116 differ = changesetdiffer()
1117 differ._makefilematcher = filematcher
1117 differ._makefilematcher = filematcher
1118 differ._makehunksfilter = hunksfilter
1118 differ._makehunksfilter = hunksfilter
1119 return smartset.baseset(revs), differ
1119 return smartset.baseset(revs), differ
1120
1120
1121
1121
1122 def _graphnodeformatter(ui, displayer):
1122 def _graphnodeformatter(ui, displayer):
1123 spec = ui.config(b'command-templates', b'graphnode')
1123 spec = ui.config(b'command-templates', b'graphnode')
1124 if not spec:
1124 if not spec:
1125 return templatekw.getgraphnode # fast path for "{graphnode}"
1125 return templatekw.getgraphnode # fast path for "{graphnode}"
1126
1126
1127 spec = templater.unquotestring(spec)
1127 spec = templater.unquotestring(spec)
1128 if isinstance(displayer, changesettemplater):
1128 if isinstance(displayer, changesettemplater):
1129 # reuse cache of slow templates
1129 # reuse cache of slow templates
1130 tres = displayer._tresources
1130 tres = displayer._tresources
1131 else:
1131 else:
1132 tres = formatter.templateresources(ui)
1132 tres = formatter.templateresources(ui)
1133 templ = formatter.maketemplater(
1133 templ = formatter.maketemplater(
1134 ui, spec, defaults=templatekw.keywords, resources=tres
1134 ui, spec, defaults=templatekw.keywords, resources=tres
1135 )
1135 )
1136
1136
1137 def formatnode(repo, ctx, cache):
1137 def formatnode(repo, ctx, cache):
1138 props = {b'ctx': ctx, b'repo': repo}
1138 props = {b'ctx': ctx, b'repo': repo}
1139 return templ.renderdefault(props)
1139 return templ.renderdefault(props)
1140
1140
1141 return formatnode
1141 return formatnode
1142
1142
1143
1143
1144 def displaygraph(ui, repo, dag, displayer, edgefn, getcopies=None, props=None):
1144 def displaygraph(ui, repo, dag, displayer, edgefn, getcopies=None, props=None):
1145 props = props or {}
1145 props = props or {}
1146 formatnode = _graphnodeformatter(ui, displayer)
1146 formatnode = _graphnodeformatter(ui, displayer)
1147 state = graphmod.asciistate()
1147 state = graphmod.asciistate()
1148 styles = state.styles
1148 styles = state.styles
1149
1149
1150 # only set graph styling if HGPLAIN is not set.
1150 # only set graph styling if HGPLAIN is not set.
1151 if ui.plain(b'graph'):
1151 if ui.plain(b'graph'):
1152 # set all edge styles to |, the default pre-3.8 behaviour
1152 # set all edge styles to |, the default pre-3.8 behaviour
1153 styles.update(dict.fromkeys(styles, b'|'))
1153 styles.update(dict.fromkeys(styles, b'|'))
1154 else:
1154 else:
1155 edgetypes = {
1155 edgetypes = {
1156 b'parent': graphmod.PARENT,
1156 b'parent': graphmod.PARENT,
1157 b'grandparent': graphmod.GRANDPARENT,
1157 b'grandparent': graphmod.GRANDPARENT,
1158 b'missing': graphmod.MISSINGPARENT,
1158 b'missing': graphmod.MISSINGPARENT,
1159 }
1159 }
1160 for name, key in edgetypes.items():
1160 for name, key in edgetypes.items():
1161 # experimental config: experimental.graphstyle.*
1161 # experimental config: experimental.graphstyle.*
1162 styles[key] = ui.config(
1162 styles[key] = ui.config(
1163 b'experimental', b'graphstyle.%s' % name, styles[key]
1163 b'experimental', b'graphstyle.%s' % name, styles[key]
1164 )
1164 )
1165 if not styles[key]:
1165 if not styles[key]:
1166 styles[key] = None
1166 styles[key] = None
1167
1167
1168 # experimental config: experimental.graphshorten
1168 # experimental config: experimental.graphshorten
1169 state.graphshorten = ui.configbool(b'experimental', b'graphshorten')
1169 state.graphshorten = ui.configbool(b'experimental', b'graphshorten')
1170
1170
1171 formatnode_cache = {}
1171 formatnode_cache = {}
1172 for rev, type, ctx, parents in dag:
1172 for rev, type, ctx, parents in dag:
1173 char = formatnode(repo, ctx, formatnode_cache)
1173 char = formatnode(repo, ctx, formatnode_cache)
1174 copies = getcopies(ctx) if getcopies else None
1174 copies = getcopies(ctx) if getcopies else None
1175 edges = edgefn(type, char, state, rev, parents)
1175 edges = edgefn(type, char, state, rev, parents)
1176 firstedge = next(edges)
1176 firstedge = next(edges)
1177 width = firstedge[2]
1177 width = firstedge[2]
1178 displayer.show(
1178 displayer.show(
1179 ctx, copies=copies, graphwidth=width, **pycompat.strkwargs(props)
1179 ctx, copies=copies, graphwidth=width, **pycompat.strkwargs(props)
1180 )
1180 )
1181 lines = displayer.hunk.pop(rev).split(b'\n')
1181 lines = displayer.hunk.pop(rev).split(b'\n')
1182 if not lines[-1]:
1182 if not lines[-1]:
1183 del lines[-1]
1183 del lines[-1]
1184 displayer.flush(ctx)
1184 displayer.flush(ctx)
1185 for type, char, width, coldata in itertools.chain([firstedge], edges):
1185 for type, char, width, coldata in itertools.chain([firstedge], edges):
1186 graphmod.ascii(ui, state, type, char, lines, coldata)
1186 graphmod.ascii(ui, state, type, char, lines, coldata)
1187 lines = []
1187 lines = []
1188 displayer.close()
1188 displayer.close()
1189
1189
1190
1190
1191 def displaygraphrevs(ui, repo, revs, displayer, getrenamed):
1191 def displaygraphrevs(ui, repo, revs, displayer, getrenamed):
1192 revdag = graphmod.dagwalker(repo, revs)
1192 revdag = graphmod.dagwalker(repo, revs)
1193 displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, getrenamed)
1193 displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, getrenamed)
1194
1194
1195
1195
1196 def displayrevs(ui, repo, revs, displayer, getcopies):
1196 def displayrevs(ui, repo, revs, displayer, getcopies):
1197 for rev in revs:
1197 for rev in revs:
1198 ctx = repo[rev]
1198 ctx = repo[rev]
1199 copies = getcopies(ctx) if getcopies else None
1199 copies = getcopies(ctx) if getcopies else None
1200 displayer.show(ctx, copies=copies)
1200 displayer.show(ctx, copies=copies)
1201 displayer.flush(ctx)
1201 displayer.flush(ctx)
1202 displayer.close()
1202 displayer.close()
1203
1203
1204
1204
1205 def checkunsupportedgraphflags(pats, opts):
1205 def checkunsupportedgraphflags(pats, opts):
1206 for op in [b"newest_first"]:
1206 for op in [b"newest_first"]:
1207 if op in opts and opts[op]:
1207 if op in opts and opts[op]:
1208 raise error.Abort(
1208 raise error.Abort(
1209 _(b"-G/--graph option is incompatible with --%s")
1209 _(b"-G/--graph option is incompatible with --%s")
1210 % op.replace(b"_", b"-")
1210 % op.replace(b"_", b"-")
1211 )
1211 )
1212
1212
1213
1213
1214 def graphrevs(repo, nodes, opts):
1214 def graphrevs(repo, nodes, opts):
1215 limit = getlimit(opts)
1215 limit = getlimit(opts)
1216 nodes.reverse()
1216 nodes.reverse()
1217 if limit is not None:
1217 if limit is not None:
1218 nodes = nodes[:limit]
1218 nodes = nodes[:limit]
1219 return graphmod.nodes(repo, nodes)
1219 return graphmod.nodes(repo, nodes)
@@ -1,2320 +1,2321 b''
1 # scmutil.py - Mercurial core utility functions
1 # scmutil.py - Mercurial core utility functions
2 #
2 #
3 # Copyright Matt Mackall <mpm@selenic.com>
3 # Copyright Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import errno
10 import errno
11 import glob
11 import glob
12 import os
12 import os
13 import posixpath
13 import posixpath
14 import re
14 import re
15 import subprocess
15 import subprocess
16 import weakref
16 import weakref
17
17
18 from .i18n import _
18 from .i18n import _
19 from .node import (
19 from .node import (
20 bin,
20 bin,
21 hex,
21 hex,
22 nullid,
22 nullid,
23 nullrev,
23 nullrev,
24 short,
24 short,
25 wdirid,
25 wdirid,
26 wdirrev,
26 wdirrev,
27 )
27 )
28 from .pycompat import getattr
28 from .pycompat import getattr
29 from .thirdparty import attr
29 from .thirdparty import attr
30 from . import (
30 from . import (
31 copies as copiesmod,
31 copies as copiesmod,
32 encoding,
32 encoding,
33 error,
33 error,
34 match as matchmod,
34 match as matchmod,
35 obsolete,
35 obsolete,
36 obsutil,
36 obsutil,
37 pathutil,
37 pathutil,
38 phases,
38 phases,
39 policy,
39 policy,
40 pycompat,
40 pycompat,
41 requirements as requirementsmod,
41 requirements as requirementsmod,
42 revsetlang,
42 revsetlang,
43 similar,
43 similar,
44 smartset,
44 smartset,
45 url,
45 url,
46 util,
46 util,
47 vfs,
47 vfs,
48 )
48 )
49
49
50 from .utils import (
50 from .utils import (
51 hashutil,
51 hashutil,
52 procutil,
52 procutil,
53 stringutil,
53 stringutil,
54 )
54 )
55
55
56 if pycompat.iswindows:
56 if pycompat.iswindows:
57 from . import scmwindows as scmplatform
57 from . import scmwindows as scmplatform
58 else:
58 else:
59 from . import scmposix as scmplatform
59 from . import scmposix as scmplatform
60
60
61 parsers = policy.importmod('parsers')
61 parsers = policy.importmod('parsers')
62 rustrevlog = policy.importrust('revlog')
62 rustrevlog = policy.importrust('revlog')
63
63
64 termsize = scmplatform.termsize
64 termsize = scmplatform.termsize
65
65
66
66
67 @attr.s(slots=True, repr=False)
67 @attr.s(slots=True, repr=False)
68 class status(object):
68 class status(object):
69 """Struct with a list of files per status.
69 """Struct with a list of files per status.
70
70
71 The 'deleted', 'unknown' and 'ignored' properties are only
71 The 'deleted', 'unknown' and 'ignored' properties are only
72 relevant to the working copy.
72 relevant to the working copy.
73 """
73 """
74
74
75 modified = attr.ib(default=attr.Factory(list))
75 modified = attr.ib(default=attr.Factory(list))
76 added = attr.ib(default=attr.Factory(list))
76 added = attr.ib(default=attr.Factory(list))
77 removed = attr.ib(default=attr.Factory(list))
77 removed = attr.ib(default=attr.Factory(list))
78 deleted = attr.ib(default=attr.Factory(list))
78 deleted = attr.ib(default=attr.Factory(list))
79 unknown = attr.ib(default=attr.Factory(list))
79 unknown = attr.ib(default=attr.Factory(list))
80 ignored = attr.ib(default=attr.Factory(list))
80 ignored = attr.ib(default=attr.Factory(list))
81 clean = attr.ib(default=attr.Factory(list))
81 clean = attr.ib(default=attr.Factory(list))
82
82
83 def __iter__(self):
83 def __iter__(self):
84 yield self.modified
84 yield self.modified
85 yield self.added
85 yield self.added
86 yield self.removed
86 yield self.removed
87 yield self.deleted
87 yield self.deleted
88 yield self.unknown
88 yield self.unknown
89 yield self.ignored
89 yield self.ignored
90 yield self.clean
90 yield self.clean
91
91
92 def __repr__(self):
92 def __repr__(self):
93 return (
93 return (
94 r'<status modified=%s, added=%s, removed=%s, deleted=%s, '
94 r'<status modified=%s, added=%s, removed=%s, deleted=%s, '
95 r'unknown=%s, ignored=%s, clean=%s>'
95 r'unknown=%s, ignored=%s, clean=%s>'
96 ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self)
96 ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self)
97
97
98
98
99 def itersubrepos(ctx1, ctx2):
99 def itersubrepos(ctx1, ctx2):
100 """find subrepos in ctx1 or ctx2"""
100 """find subrepos in ctx1 or ctx2"""
101 # Create a (subpath, ctx) mapping where we prefer subpaths from
101 # Create a (subpath, ctx) mapping where we prefer subpaths from
102 # ctx1. The subpaths from ctx2 are important when the .hgsub file
102 # ctx1. The subpaths from ctx2 are important when the .hgsub file
103 # has been modified (in ctx2) but not yet committed (in ctx1).
103 # has been modified (in ctx2) but not yet committed (in ctx1).
104 subpaths = dict.fromkeys(ctx2.substate, ctx2)
104 subpaths = dict.fromkeys(ctx2.substate, ctx2)
105 subpaths.update(dict.fromkeys(ctx1.substate, ctx1))
105 subpaths.update(dict.fromkeys(ctx1.substate, ctx1))
106
106
107 missing = set()
107 missing = set()
108
108
109 for subpath in ctx2.substate:
109 for subpath in ctx2.substate:
110 if subpath not in ctx1.substate:
110 if subpath not in ctx1.substate:
111 del subpaths[subpath]
111 del subpaths[subpath]
112 missing.add(subpath)
112 missing.add(subpath)
113
113
114 for subpath, ctx in sorted(pycompat.iteritems(subpaths)):
114 for subpath, ctx in sorted(pycompat.iteritems(subpaths)):
115 yield subpath, ctx.sub(subpath)
115 yield subpath, ctx.sub(subpath)
116
116
117 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way,
117 # Yield an empty subrepo based on ctx1 for anything only in ctx2. That way,
118 # status and diff will have an accurate result when it does
118 # status and diff will have an accurate result when it does
119 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared
119 # 'sub.{status|diff}(rev2)'. Otherwise, the ctx2 subrepo is compared
120 # against itself.
120 # against itself.
121 for subpath in missing:
121 for subpath in missing:
122 yield subpath, ctx2.nullsub(subpath, ctx1)
122 yield subpath, ctx2.nullsub(subpath, ctx1)
123
123
124
124
125 def nochangesfound(ui, repo, excluded=None):
125 def nochangesfound(ui, repo, excluded=None):
126 """Report no changes for push/pull, excluded is None or a list of
126 """Report no changes for push/pull, excluded is None or a list of
127 nodes excluded from the push/pull.
127 nodes excluded from the push/pull.
128 """
128 """
129 secretlist = []
129 secretlist = []
130 if excluded:
130 if excluded:
131 for n in excluded:
131 for n in excluded:
132 ctx = repo[n]
132 ctx = repo[n]
133 if ctx.phase() >= phases.secret and not ctx.extinct():
133 if ctx.phase() >= phases.secret and not ctx.extinct():
134 secretlist.append(n)
134 secretlist.append(n)
135
135
136 if secretlist:
136 if secretlist:
137 ui.status(
137 ui.status(
138 _(b"no changes found (ignored %d secret changesets)\n")
138 _(b"no changes found (ignored %d secret changesets)\n")
139 % len(secretlist)
139 % len(secretlist)
140 )
140 )
141 else:
141 else:
142 ui.status(_(b"no changes found\n"))
142 ui.status(_(b"no changes found\n"))
143
143
144
144
145 def callcatch(ui, func):
145 def callcatch(ui, func):
146 """call func() with global exception handling
146 """call func() with global exception handling
147
147
148 return func() if no exception happens. otherwise do some error handling
148 return func() if no exception happens. otherwise do some error handling
149 and return an exit code accordingly. does not handle all exceptions.
149 and return an exit code accordingly. does not handle all exceptions.
150 """
150 """
151 coarse_exit_code = -1
151 coarse_exit_code = -1
152 detailed_exit_code = -1
152 detailed_exit_code = -1
153 try:
153 try:
154 try:
154 try:
155 return func()
155 return func()
156 except: # re-raises
156 except: # re-raises
157 ui.traceback()
157 ui.traceback()
158 raise
158 raise
159 # Global exception handling, alphabetically
159 # Global exception handling, alphabetically
160 # Mercurial-specific first, followed by built-in and library exceptions
160 # Mercurial-specific first, followed by built-in and library exceptions
161 except error.LockHeld as inst:
161 except error.LockHeld as inst:
162 detailed_exit_code = 20
162 detailed_exit_code = 20
163 if inst.errno == errno.ETIMEDOUT:
163 if inst.errno == errno.ETIMEDOUT:
164 reason = _(b'timed out waiting for lock held by %r') % (
164 reason = _(b'timed out waiting for lock held by %r') % (
165 pycompat.bytestr(inst.locker)
165 pycompat.bytestr(inst.locker)
166 )
166 )
167 else:
167 else:
168 reason = _(b'lock held by %r') % inst.locker
168 reason = _(b'lock held by %r') % inst.locker
169 ui.error(
169 ui.error(
170 _(b"abort: %s: %s\n")
170 _(b"abort: %s: %s\n")
171 % (inst.desc or stringutil.forcebytestr(inst.filename), reason)
171 % (inst.desc or stringutil.forcebytestr(inst.filename), reason)
172 )
172 )
173 if not inst.locker:
173 if not inst.locker:
174 ui.error(_(b"(lock might be very busy)\n"))
174 ui.error(_(b"(lock might be very busy)\n"))
175 except error.LockUnavailable as inst:
175 except error.LockUnavailable as inst:
176 detailed_exit_code = 20
176 detailed_exit_code = 20
177 ui.error(
177 ui.error(
178 _(b"abort: could not lock %s: %s\n")
178 _(b"abort: could not lock %s: %s\n")
179 % (
179 % (
180 inst.desc or stringutil.forcebytestr(inst.filename),
180 inst.desc or stringutil.forcebytestr(inst.filename),
181 encoding.strtolocal(inst.strerror),
181 encoding.strtolocal(inst.strerror),
182 )
182 )
183 )
183 )
184 except error.OutOfBandError as inst:
184 except error.OutOfBandError as inst:
185 detailed_exit_code = 100
185 detailed_exit_code = 100
186 if inst.args:
186 if inst.args:
187 msg = _(b"abort: remote error:\n")
187 msg = _(b"abort: remote error:\n")
188 else:
188 else:
189 msg = _(b"abort: remote error\n")
189 msg = _(b"abort: remote error\n")
190 ui.error(msg)
190 ui.error(msg)
191 if inst.args:
191 if inst.args:
192 ui.error(b''.join(inst.args))
192 ui.error(b''.join(inst.args))
193 if inst.hint:
193 if inst.hint:
194 ui.error(b'(%s)\n' % inst.hint)
194 ui.error(b'(%s)\n' % inst.hint)
195 except error.RepoError as inst:
195 except error.RepoError as inst:
196 ui.error(_(b"abort: %s\n") % inst)
196 ui.error(_(b"abort: %s\n") % inst)
197 if inst.hint:
197 if inst.hint:
198 ui.error(_(b"(%s)\n") % inst.hint)
198 ui.error(_(b"(%s)\n") % inst.hint)
199 except error.ResponseError as inst:
199 except error.ResponseError as inst:
200 ui.error(_(b"abort: %s") % inst.args[0])
200 ui.error(_(b"abort: %s") % inst.args[0])
201 msg = inst.args[1]
201 msg = inst.args[1]
202 if isinstance(msg, type(u'')):
202 if isinstance(msg, type(u'')):
203 msg = pycompat.sysbytes(msg)
203 msg = pycompat.sysbytes(msg)
204 if not isinstance(msg, bytes):
204 if not isinstance(msg, bytes):
205 ui.error(b" %r\n" % (msg,))
205 ui.error(b" %r\n" % (msg,))
206 elif not msg:
206 elif not msg:
207 ui.error(_(b" empty string\n"))
207 ui.error(_(b" empty string\n"))
208 else:
208 else:
209 ui.error(b"\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg)))
209 ui.error(b"\n%r\n" % pycompat.bytestr(stringutil.ellipsis(msg)))
210 except error.CensoredNodeError as inst:
210 except error.CensoredNodeError as inst:
211 ui.error(_(b"abort: file censored %s\n") % inst)
211 ui.error(_(b"abort: file censored %s\n") % inst)
212 except error.StorageError as inst:
212 except error.StorageError as inst:
213 ui.error(_(b"abort: %s\n") % inst)
213 ui.error(_(b"abort: %s\n") % inst)
214 if inst.hint:
214 if inst.hint:
215 ui.error(_(b"(%s)\n") % inst.hint)
215 ui.error(_(b"(%s)\n") % inst.hint)
216 except error.InterventionRequired as inst:
216 except error.InterventionRequired as inst:
217 ui.error(b"%s\n" % inst)
217 ui.error(b"%s\n" % inst)
218 if inst.hint:
218 if inst.hint:
219 ui.error(_(b"(%s)\n") % inst.hint)
219 ui.error(_(b"(%s)\n") % inst.hint)
220 detailed_exit_code = 240
220 detailed_exit_code = 240
221 coarse_exit_code = 1
221 coarse_exit_code = 1
222 except error.WdirUnsupported:
222 except error.WdirUnsupported:
223 ui.error(_(b"abort: working directory revision cannot be specified\n"))
223 ui.error(_(b"abort: working directory revision cannot be specified\n"))
224 except error.Abort as inst:
224 except error.Abort as inst:
225 if isinstance(inst, (error.InputError, error.ParseError)):
225 if isinstance(inst, (error.InputError, error.ParseError)):
226 detailed_exit_code = 10
226 detailed_exit_code = 10
227 elif isinstance(inst, error.StateError):
227 elif isinstance(inst, error.StateError):
228 detailed_exit_code = 20
228 detailed_exit_code = 20
229 elif isinstance(inst, error.ConfigError):
229 elif isinstance(inst, error.ConfigError):
230 detailed_exit_code = 30
230 detailed_exit_code = 30
231 elif isinstance(inst, error.SecurityError):
231 elif isinstance(inst, error.SecurityError):
232 detailed_exit_code = 150
232 detailed_exit_code = 150
233 elif isinstance(inst, error.CanceledError):
233 elif isinstance(inst, error.CanceledError):
234 detailed_exit_code = 250
234 detailed_exit_code = 250
235 ui.error(inst.format())
235 ui.error(inst.format())
236 except error.WorkerError as inst:
236 except error.WorkerError as inst:
237 # Don't print a message -- the worker already should have
237 # Don't print a message -- the worker already should have
238 return inst.status_code
238 return inst.status_code
239 except ImportError as inst:
239 except ImportError as inst:
240 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst))
240 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst))
241 m = stringutil.forcebytestr(inst).split()[-1]
241 m = stringutil.forcebytestr(inst).split()[-1]
242 if m in b"mpatch bdiff".split():
242 if m in b"mpatch bdiff".split():
243 ui.error(_(b"(did you forget to compile extensions?)\n"))
243 ui.error(_(b"(did you forget to compile extensions?)\n"))
244 elif m in b"zlib".split():
244 elif m in b"zlib".split():
245 ui.error(_(b"(is your Python install correct?)\n"))
245 ui.error(_(b"(is your Python install correct?)\n"))
246 except util.urlerr.httperror as inst:
246 except util.urlerr.httperror as inst:
247 detailed_exit_code = 100
247 detailed_exit_code = 100
248 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst))
248 ui.error(_(b"abort: %s\n") % stringutil.forcebytestr(inst))
249 except util.urlerr.urlerror as inst:
249 except util.urlerr.urlerror as inst:
250 detailed_exit_code = 100
250 detailed_exit_code = 100
251 try: # usually it is in the form (errno, strerror)
251 try: # usually it is in the form (errno, strerror)
252 reason = inst.reason.args[1]
252 reason = inst.reason.args[1]
253 except (AttributeError, IndexError):
253 except (AttributeError, IndexError):
254 # it might be anything, for example a string
254 # it might be anything, for example a string
255 reason = inst.reason
255 reason = inst.reason
256 if isinstance(reason, pycompat.unicode):
256 if isinstance(reason, pycompat.unicode):
257 # SSLError of Python 2.7.9 contains a unicode
257 # SSLError of Python 2.7.9 contains a unicode
258 reason = encoding.unitolocal(reason)
258 reason = encoding.unitolocal(reason)
259 ui.error(_(b"abort: error: %s\n") % stringutil.forcebytestr(reason))
259 ui.error(_(b"abort: error: %s\n") % stringutil.forcebytestr(reason))
260 except (IOError, OSError) as inst:
260 except (IOError, OSError) as inst:
261 if (
261 if (
262 util.safehasattr(inst, b"args")
262 util.safehasattr(inst, b"args")
263 and inst.args
263 and inst.args
264 and inst.args[0] == errno.EPIPE
264 and inst.args[0] == errno.EPIPE
265 ):
265 ):
266 pass
266 pass
267 elif getattr(inst, "strerror", None): # common IOError or OSError
267 elif getattr(inst, "strerror", None): # common IOError or OSError
268 if getattr(inst, "filename", None) is not None:
268 if getattr(inst, "filename", None) is not None:
269 ui.error(
269 ui.error(
270 _(b"abort: %s: '%s'\n")
270 _(b"abort: %s: '%s'\n")
271 % (
271 % (
272 encoding.strtolocal(inst.strerror),
272 encoding.strtolocal(inst.strerror),
273 stringutil.forcebytestr(inst.filename),
273 stringutil.forcebytestr(inst.filename),
274 )
274 )
275 )
275 )
276 else:
276 else:
277 ui.error(_(b"abort: %s\n") % encoding.strtolocal(inst.strerror))
277 ui.error(_(b"abort: %s\n") % encoding.strtolocal(inst.strerror))
278 else: # suspicious IOError
278 else: # suspicious IOError
279 raise
279 raise
280 except MemoryError:
280 except MemoryError:
281 ui.error(_(b"abort: out of memory\n"))
281 ui.error(_(b"abort: out of memory\n"))
282 except SystemExit as inst:
282 except SystemExit as inst:
283 # Commands shouldn't sys.exit directly, but give a return code.
283 # Commands shouldn't sys.exit directly, but give a return code.
284 # Just in case catch this and and pass exit code to caller.
284 # Just in case catch this and and pass exit code to caller.
285 detailed_exit_code = 254
285 detailed_exit_code = 254
286 coarse_exit_code = inst.code
286 coarse_exit_code = inst.code
287
287
288 if ui.configbool(b'ui', b'detailed-exit-code'):
288 if ui.configbool(b'ui', b'detailed-exit-code'):
289 return detailed_exit_code
289 return detailed_exit_code
290 else:
290 else:
291 return coarse_exit_code
291 return coarse_exit_code
292
292
293
293
294 def checknewlabel(repo, lbl, kind):
294 def checknewlabel(repo, lbl, kind):
295 # Do not use the "kind" parameter in ui output.
295 # Do not use the "kind" parameter in ui output.
296 # It makes strings difficult to translate.
296 # It makes strings difficult to translate.
297 if lbl in [b'tip', b'.', b'null']:
297 if lbl in [b'tip', b'.', b'null']:
298 raise error.InputError(_(b"the name '%s' is reserved") % lbl)
298 raise error.InputError(_(b"the name '%s' is reserved") % lbl)
299 for c in (b':', b'\0', b'\n', b'\r'):
299 for c in (b':', b'\0', b'\n', b'\r'):
300 if c in lbl:
300 if c in lbl:
301 raise error.InputError(
301 raise error.InputError(
302 _(b"%r cannot be used in a name") % pycompat.bytestr(c)
302 _(b"%r cannot be used in a name") % pycompat.bytestr(c)
303 )
303 )
304 try:
304 try:
305 int(lbl)
305 int(lbl)
306 raise error.InputError(_(b"cannot use an integer as a name"))
306 raise error.InputError(_(b"cannot use an integer as a name"))
307 except ValueError:
307 except ValueError:
308 pass
308 pass
309 if lbl.strip() != lbl:
309 if lbl.strip() != lbl:
310 raise error.InputError(
310 raise error.InputError(
311 _(b"leading or trailing whitespace in name %r") % lbl
311 _(b"leading or trailing whitespace in name %r") % lbl
312 )
312 )
313
313
314
314
315 def checkfilename(f):
315 def checkfilename(f):
316 '''Check that the filename f is an acceptable filename for a tracked file'''
316 '''Check that the filename f is an acceptable filename for a tracked file'''
317 if b'\r' in f or b'\n' in f:
317 if b'\r' in f or b'\n' in f:
318 raise error.InputError(
318 raise error.InputError(
319 _(b"'\\n' and '\\r' disallowed in filenames: %r")
319 _(b"'\\n' and '\\r' disallowed in filenames: %r")
320 % pycompat.bytestr(f)
320 % pycompat.bytestr(f)
321 )
321 )
322
322
323
323
324 def checkportable(ui, f):
324 def checkportable(ui, f):
325 '''Check if filename f is portable and warn or abort depending on config'''
325 '''Check if filename f is portable and warn or abort depending on config'''
326 checkfilename(f)
326 checkfilename(f)
327 abort, warn = checkportabilityalert(ui)
327 abort, warn = checkportabilityalert(ui)
328 if abort or warn:
328 if abort or warn:
329 msg = util.checkwinfilename(f)
329 msg = util.checkwinfilename(f)
330 if msg:
330 if msg:
331 msg = b"%s: %s" % (msg, procutil.shellquote(f))
331 msg = b"%s: %s" % (msg, procutil.shellquote(f))
332 if abort:
332 if abort:
333 raise error.InputError(msg)
333 raise error.InputError(msg)
334 ui.warn(_(b"warning: %s\n") % msg)
334 ui.warn(_(b"warning: %s\n") % msg)
335
335
336
336
337 def checkportabilityalert(ui):
337 def checkportabilityalert(ui):
338 """check if the user's config requests nothing, a warning, or abort for
338 """check if the user's config requests nothing, a warning, or abort for
339 non-portable filenames"""
339 non-portable filenames"""
340 val = ui.config(b'ui', b'portablefilenames')
340 val = ui.config(b'ui', b'portablefilenames')
341 lval = val.lower()
341 lval = val.lower()
342 bval = stringutil.parsebool(val)
342 bval = stringutil.parsebool(val)
343 abort = pycompat.iswindows or lval == b'abort'
343 abort = pycompat.iswindows or lval == b'abort'
344 warn = bval or lval == b'warn'
344 warn = bval or lval == b'warn'
345 if bval is None and not (warn or abort or lval == b'ignore'):
345 if bval is None and not (warn or abort or lval == b'ignore'):
346 raise error.ConfigError(
346 raise error.ConfigError(
347 _(b"ui.portablefilenames value is invalid ('%s')") % val
347 _(b"ui.portablefilenames value is invalid ('%s')") % val
348 )
348 )
349 return abort, warn
349 return abort, warn
350
350
351
351
352 class casecollisionauditor(object):
352 class casecollisionauditor(object):
353 def __init__(self, ui, abort, dirstate):
353 def __init__(self, ui, abort, dirstate):
354 self._ui = ui
354 self._ui = ui
355 self._abort = abort
355 self._abort = abort
356 allfiles = b'\0'.join(dirstate)
356 allfiles = b'\0'.join(dirstate)
357 self._loweredfiles = set(encoding.lower(allfiles).split(b'\0'))
357 self._loweredfiles = set(encoding.lower(allfiles).split(b'\0'))
358 self._dirstate = dirstate
358 self._dirstate = dirstate
359 # The purpose of _newfiles is so that we don't complain about
359 # The purpose of _newfiles is so that we don't complain about
360 # case collisions if someone were to call this object with the
360 # case collisions if someone were to call this object with the
361 # same filename twice.
361 # same filename twice.
362 self._newfiles = set()
362 self._newfiles = set()
363
363
364 def __call__(self, f):
364 def __call__(self, f):
365 if f in self._newfiles:
365 if f in self._newfiles:
366 return
366 return
367 fl = encoding.lower(f)
367 fl = encoding.lower(f)
368 if fl in self._loweredfiles and f not in self._dirstate:
368 if fl in self._loweredfiles and f not in self._dirstate:
369 msg = _(b'possible case-folding collision for %s') % f
369 msg = _(b'possible case-folding collision for %s') % f
370 if self._abort:
370 if self._abort:
371 raise error.Abort(msg)
371 raise error.Abort(msg)
372 self._ui.warn(_(b"warning: %s\n") % msg)
372 self._ui.warn(_(b"warning: %s\n") % msg)
373 self._loweredfiles.add(fl)
373 self._loweredfiles.add(fl)
374 self._newfiles.add(f)
374 self._newfiles.add(f)
375
375
376
376
377 def filteredhash(repo, maxrev):
377 def filteredhash(repo, maxrev):
378 """build hash of filtered revisions in the current repoview.
378 """build hash of filtered revisions in the current repoview.
379
379
380 Multiple caches perform up-to-date validation by checking that the
380 Multiple caches perform up-to-date validation by checking that the
381 tiprev and tipnode stored in the cache file match the current repository.
381 tiprev and tipnode stored in the cache file match the current repository.
382 However, this is not sufficient for validating repoviews because the set
382 However, this is not sufficient for validating repoviews because the set
383 of revisions in the view may change without the repository tiprev and
383 of revisions in the view may change without the repository tiprev and
384 tipnode changing.
384 tipnode changing.
385
385
386 This function hashes all the revs filtered from the view and returns
386 This function hashes all the revs filtered from the view and returns
387 that SHA-1 digest.
387 that SHA-1 digest.
388 """
388 """
389 cl = repo.changelog
389 cl = repo.changelog
390 if not cl.filteredrevs:
390 if not cl.filteredrevs:
391 return None
391 return None
392 key = cl._filteredrevs_hashcache.get(maxrev)
392 key = cl._filteredrevs_hashcache.get(maxrev)
393 if not key:
393 if not key:
394 revs = sorted(r for r in cl.filteredrevs if r <= maxrev)
394 revs = sorted(r for r in cl.filteredrevs if r <= maxrev)
395 if revs:
395 if revs:
396 s = hashutil.sha1()
396 s = hashutil.sha1()
397 for rev in revs:
397 for rev in revs:
398 s.update(b'%d;' % rev)
398 s.update(b'%d;' % rev)
399 key = s.digest()
399 key = s.digest()
400 cl._filteredrevs_hashcache[maxrev] = key
400 cl._filteredrevs_hashcache[maxrev] = key
401 return key
401 return key
402
402
403
403
404 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
404 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
405 """yield every hg repository under path, always recursively.
405 """yield every hg repository under path, always recursively.
406 The recurse flag will only control recursion into repo working dirs"""
406 The recurse flag will only control recursion into repo working dirs"""
407
407
408 def errhandler(err):
408 def errhandler(err):
409 if err.filename == path:
409 if err.filename == path:
410 raise err
410 raise err
411
411
412 samestat = getattr(os.path, 'samestat', None)
412 samestat = getattr(os.path, 'samestat', None)
413 if followsym and samestat is not None:
413 if followsym and samestat is not None:
414
414
415 def adddir(dirlst, dirname):
415 def adddir(dirlst, dirname):
416 dirstat = os.stat(dirname)
416 dirstat = os.stat(dirname)
417 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst)
417 match = any(samestat(dirstat, lstdirstat) for lstdirstat in dirlst)
418 if not match:
418 if not match:
419 dirlst.append(dirstat)
419 dirlst.append(dirstat)
420 return not match
420 return not match
421
421
422 else:
422 else:
423 followsym = False
423 followsym = False
424
424
425 if (seen_dirs is None) and followsym:
425 if (seen_dirs is None) and followsym:
426 seen_dirs = []
426 seen_dirs = []
427 adddir(seen_dirs, path)
427 adddir(seen_dirs, path)
428 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler):
428 for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler):
429 dirs.sort()
429 dirs.sort()
430 if b'.hg' in dirs:
430 if b'.hg' in dirs:
431 yield root # found a repository
431 yield root # found a repository
432 qroot = os.path.join(root, b'.hg', b'patches')
432 qroot = os.path.join(root, b'.hg', b'patches')
433 if os.path.isdir(os.path.join(qroot, b'.hg')):
433 if os.path.isdir(os.path.join(qroot, b'.hg')):
434 yield qroot # we have a patch queue repo here
434 yield qroot # we have a patch queue repo here
435 if recurse:
435 if recurse:
436 # avoid recursing inside the .hg directory
436 # avoid recursing inside the .hg directory
437 dirs.remove(b'.hg')
437 dirs.remove(b'.hg')
438 else:
438 else:
439 dirs[:] = [] # don't descend further
439 dirs[:] = [] # don't descend further
440 elif followsym:
440 elif followsym:
441 newdirs = []
441 newdirs = []
442 for d in dirs:
442 for d in dirs:
443 fname = os.path.join(root, d)
443 fname = os.path.join(root, d)
444 if adddir(seen_dirs, fname):
444 if adddir(seen_dirs, fname):
445 if os.path.islink(fname):
445 if os.path.islink(fname):
446 for hgname in walkrepos(fname, True, seen_dirs):
446 for hgname in walkrepos(fname, True, seen_dirs):
447 yield hgname
447 yield hgname
448 else:
448 else:
449 newdirs.append(d)
449 newdirs.append(d)
450 dirs[:] = newdirs
450 dirs[:] = newdirs
451
451
452
452
453 def binnode(ctx):
453 def binnode(ctx):
454 """Return binary node id for a given basectx"""
454 """Return binary node id for a given basectx"""
455 node = ctx.node()
455 node = ctx.node()
456 if node is None:
456 if node is None:
457 return wdirid
457 return wdirid
458 return node
458 return node
459
459
460
460
461 def intrev(ctx):
461 def intrev(ctx):
462 """Return integer for a given basectx that can be used in comparison or
462 """Return integer for a given basectx that can be used in comparison or
463 arithmetic operation"""
463 arithmetic operation"""
464 rev = ctx.rev()
464 rev = ctx.rev()
465 if rev is None:
465 if rev is None:
466 return wdirrev
466 return wdirrev
467 return rev
467 return rev
468
468
469
469
470 def formatchangeid(ctx):
470 def formatchangeid(ctx):
471 """Format changectx as '{rev}:{node|formatnode}', which is the default
471 """Format changectx as '{rev}:{node|formatnode}', which is the default
472 template provided by logcmdutil.changesettemplater"""
472 template provided by logcmdutil.changesettemplater"""
473 repo = ctx.repo()
473 repo = ctx.repo()
474 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx))
474 return formatrevnode(repo.ui, intrev(ctx), binnode(ctx))
475
475
476
476
477 def formatrevnode(ui, rev, node):
477 def formatrevnode(ui, rev, node):
478 """Format given revision and node depending on the current verbosity"""
478 """Format given revision and node depending on the current verbosity"""
479 if ui.debugflag:
479 if ui.debugflag:
480 hexfunc = hex
480 hexfunc = hex
481 else:
481 else:
482 hexfunc = short
482 hexfunc = short
483 return b'%d:%s' % (rev, hexfunc(node))
483 return b'%d:%s' % (rev, hexfunc(node))
484
484
485
485
486 def resolvehexnodeidprefix(repo, prefix):
486 def resolvehexnodeidprefix(repo, prefix):
487 if prefix.startswith(b'x'):
487 if prefix.startswith(b'x'):
488 prefix = prefix[1:]
488 prefix = prefix[1:]
489 try:
489 try:
490 # Uses unfiltered repo because it's faster when prefix is ambiguous/
490 # Uses unfiltered repo because it's faster when prefix is ambiguous/
491 # This matches the shortesthexnodeidprefix() function below.
491 # This matches the shortesthexnodeidprefix() function below.
492 node = repo.unfiltered().changelog._partialmatch(prefix)
492 node = repo.unfiltered().changelog._partialmatch(prefix)
493 except error.AmbiguousPrefixLookupError:
493 except error.AmbiguousPrefixLookupError:
494 revset = repo.ui.config(
494 revset = repo.ui.config(
495 b'experimental', b'revisions.disambiguatewithin'
495 b'experimental', b'revisions.disambiguatewithin'
496 )
496 )
497 if revset:
497 if revset:
498 # Clear config to avoid infinite recursion
498 # Clear config to avoid infinite recursion
499 configoverrides = {
499 configoverrides = {
500 (b'experimental', b'revisions.disambiguatewithin'): None
500 (b'experimental', b'revisions.disambiguatewithin'): None
501 }
501 }
502 with repo.ui.configoverride(configoverrides):
502 with repo.ui.configoverride(configoverrides):
503 revs = repo.anyrevs([revset], user=True)
503 revs = repo.anyrevs([revset], user=True)
504 matches = []
504 matches = []
505 for rev in revs:
505 for rev in revs:
506 node = repo.changelog.node(rev)
506 node = repo.changelog.node(rev)
507 if hex(node).startswith(prefix):
507 if hex(node).startswith(prefix):
508 matches.append(node)
508 matches.append(node)
509 if len(matches) == 1:
509 if len(matches) == 1:
510 return matches[0]
510 return matches[0]
511 raise
511 raise
512 if node is None:
512 if node is None:
513 return
513 return
514 repo.changelog.rev(node) # make sure node isn't filtered
514 repo.changelog.rev(node) # make sure node isn't filtered
515 return node
515 return node
516
516
517
517
518 def mayberevnum(repo, prefix):
518 def mayberevnum(repo, prefix):
519 """Checks if the given prefix may be mistaken for a revision number"""
519 """Checks if the given prefix may be mistaken for a revision number"""
520 try:
520 try:
521 i = int(prefix)
521 i = int(prefix)
522 # if we are a pure int, then starting with zero will not be
522 # if we are a pure int, then starting with zero will not be
523 # confused as a rev; or, obviously, if the int is larger
523 # confused as a rev; or, obviously, if the int is larger
524 # than the value of the tip rev. We still need to disambiguate if
524 # than the value of the tip rev. We still need to disambiguate if
525 # prefix == '0', since that *is* a valid revnum.
525 # prefix == '0', since that *is* a valid revnum.
526 if (prefix != b'0' and prefix[0:1] == b'0') or i >= len(repo):
526 if (prefix != b'0' and prefix[0:1] == b'0') or i >= len(repo):
527 return False
527 return False
528 return True
528 return True
529 except ValueError:
529 except ValueError:
530 return False
530 return False
531
531
532
532
533 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None):
533 def shortesthexnodeidprefix(repo, node, minlength=1, cache=None):
534 """Find the shortest unambiguous prefix that matches hexnode.
534 """Find the shortest unambiguous prefix that matches hexnode.
535
535
536 If "cache" is not None, it must be a dictionary that can be used for
536 If "cache" is not None, it must be a dictionary that can be used for
537 caching between calls to this method.
537 caching between calls to this method.
538 """
538 """
539 # _partialmatch() of filtered changelog could take O(len(repo)) time,
539 # _partialmatch() of filtered changelog could take O(len(repo)) time,
540 # which would be unacceptably slow. so we look for hash collision in
540 # which would be unacceptably slow. so we look for hash collision in
541 # unfiltered space, which means some hashes may be slightly longer.
541 # unfiltered space, which means some hashes may be slightly longer.
542
542
543 minlength = max(minlength, 1)
543 minlength = max(minlength, 1)
544
544
545 def disambiguate(prefix):
545 def disambiguate(prefix):
546 """Disambiguate against revnums."""
546 """Disambiguate against revnums."""
547 if repo.ui.configbool(b'experimental', b'revisions.prefixhexnode'):
547 if repo.ui.configbool(b'experimental', b'revisions.prefixhexnode'):
548 if mayberevnum(repo, prefix):
548 if mayberevnum(repo, prefix):
549 return b'x' + prefix
549 return b'x' + prefix
550 else:
550 else:
551 return prefix
551 return prefix
552
552
553 hexnode = hex(node)
553 hexnode = hex(node)
554 for length in range(len(prefix), len(hexnode) + 1):
554 for length in range(len(prefix), len(hexnode) + 1):
555 prefix = hexnode[:length]
555 prefix = hexnode[:length]
556 if not mayberevnum(repo, prefix):
556 if not mayberevnum(repo, prefix):
557 return prefix
557 return prefix
558
558
559 cl = repo.unfiltered().changelog
559 cl = repo.unfiltered().changelog
560 revset = repo.ui.config(b'experimental', b'revisions.disambiguatewithin')
560 revset = repo.ui.config(b'experimental', b'revisions.disambiguatewithin')
561 if revset:
561 if revset:
562 revs = None
562 revs = None
563 if cache is not None:
563 if cache is not None:
564 revs = cache.get(b'disambiguationrevset')
564 revs = cache.get(b'disambiguationrevset')
565 if revs is None:
565 if revs is None:
566 revs = repo.anyrevs([revset], user=True)
566 revs = repo.anyrevs([revset], user=True)
567 if cache is not None:
567 if cache is not None:
568 cache[b'disambiguationrevset'] = revs
568 cache[b'disambiguationrevset'] = revs
569 if cl.rev(node) in revs:
569 if cl.rev(node) in revs:
570 hexnode = hex(node)
570 hexnode = hex(node)
571 nodetree = None
571 nodetree = None
572 if cache is not None:
572 if cache is not None:
573 nodetree = cache.get(b'disambiguationnodetree')
573 nodetree = cache.get(b'disambiguationnodetree')
574 if not nodetree:
574 if not nodetree:
575 if util.safehasattr(parsers, 'nodetree'):
575 if util.safehasattr(parsers, 'nodetree'):
576 # The CExt is the only implementation to provide a nodetree
576 # The CExt is the only implementation to provide a nodetree
577 # class so far.
577 # class so far.
578 index = cl.index
578 index = cl.index
579 if util.safehasattr(index, 'get_cindex'):
579 if util.safehasattr(index, 'get_cindex'):
580 # the rust wrapped need to give access to its internal index
580 # the rust wrapped need to give access to its internal index
581 index = index.get_cindex()
581 index = index.get_cindex()
582 nodetree = parsers.nodetree(index, len(revs))
582 nodetree = parsers.nodetree(index, len(revs))
583 for r in revs:
583 for r in revs:
584 nodetree.insert(r)
584 nodetree.insert(r)
585 if cache is not None:
585 if cache is not None:
586 cache[b'disambiguationnodetree'] = nodetree
586 cache[b'disambiguationnodetree'] = nodetree
587 if nodetree is not None:
587 if nodetree is not None:
588 length = max(nodetree.shortest(node), minlength)
588 length = max(nodetree.shortest(node), minlength)
589 prefix = hexnode[:length]
589 prefix = hexnode[:length]
590 return disambiguate(prefix)
590 return disambiguate(prefix)
591 for length in range(minlength, len(hexnode) + 1):
591 for length in range(minlength, len(hexnode) + 1):
592 matches = []
592 matches = []
593 prefix = hexnode[:length]
593 prefix = hexnode[:length]
594 for rev in revs:
594 for rev in revs:
595 otherhexnode = repo[rev].hex()
595 otherhexnode = repo[rev].hex()
596 if prefix == otherhexnode[:length]:
596 if prefix == otherhexnode[:length]:
597 matches.append(otherhexnode)
597 matches.append(otherhexnode)
598 if len(matches) == 1:
598 if len(matches) == 1:
599 return disambiguate(prefix)
599 return disambiguate(prefix)
600
600
601 try:
601 try:
602 return disambiguate(cl.shortest(node, minlength))
602 return disambiguate(cl.shortest(node, minlength))
603 except error.LookupError:
603 except error.LookupError:
604 raise error.RepoLookupError()
604 raise error.RepoLookupError()
605
605
606
606
607 def isrevsymbol(repo, symbol):
607 def isrevsymbol(repo, symbol):
608 """Checks if a symbol exists in the repo.
608 """Checks if a symbol exists in the repo.
609
609
610 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the
610 See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the
611 symbol is an ambiguous nodeid prefix.
611 symbol is an ambiguous nodeid prefix.
612 """
612 """
613 try:
613 try:
614 revsymbol(repo, symbol)
614 revsymbol(repo, symbol)
615 return True
615 return True
616 except error.RepoLookupError:
616 except error.RepoLookupError:
617 return False
617 return False
618
618
619
619
620 def revsymbol(repo, symbol):
620 def revsymbol(repo, symbol):
621 """Returns a context given a single revision symbol (as string).
621 """Returns a context given a single revision symbol (as string).
622
622
623 This is similar to revsingle(), but accepts only a single revision symbol,
623 This is similar to revsingle(), but accepts only a single revision symbol,
624 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but
624 i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but
625 not "max(public())".
625 not "max(public())".
626 """
626 """
627 if not isinstance(symbol, bytes):
627 if not isinstance(symbol, bytes):
628 msg = (
628 msg = (
629 b"symbol (%s of type %s) was not a string, did you mean "
629 b"symbol (%s of type %s) was not a string, did you mean "
630 b"repo[symbol]?" % (symbol, type(symbol))
630 b"repo[symbol]?" % (symbol, type(symbol))
631 )
631 )
632 raise error.ProgrammingError(msg)
632 raise error.ProgrammingError(msg)
633 try:
633 try:
634 if symbol in (b'.', b'tip', b'null'):
634 if symbol in (b'.', b'tip', b'null'):
635 return repo[symbol]
635 return repo[symbol]
636
636
637 try:
637 try:
638 r = int(symbol)
638 r = int(symbol)
639 if b'%d' % r != symbol:
639 if b'%d' % r != symbol:
640 raise ValueError
640 raise ValueError
641 l = len(repo.changelog)
641 l = len(repo.changelog)
642 if r < 0:
642 if r < 0:
643 r += l
643 r += l
644 if r < 0 or r >= l and r != wdirrev:
644 if r < 0 or r >= l and r != wdirrev:
645 raise ValueError
645 raise ValueError
646 return repo[r]
646 return repo[r]
647 except error.FilteredIndexError:
647 except error.FilteredIndexError:
648 raise
648 raise
649 except (ValueError, OverflowError, IndexError):
649 except (ValueError, OverflowError, IndexError):
650 pass
650 pass
651
651
652 if len(symbol) == 40:
652 if len(symbol) == 40:
653 try:
653 try:
654 node = bin(symbol)
654 node = bin(symbol)
655 rev = repo.changelog.rev(node)
655 rev = repo.changelog.rev(node)
656 return repo[rev]
656 return repo[rev]
657 except error.FilteredLookupError:
657 except error.FilteredLookupError:
658 raise
658 raise
659 except (TypeError, LookupError):
659 except (TypeError, LookupError):
660 pass
660 pass
661
661
662 # look up bookmarks through the name interface
662 # look up bookmarks through the name interface
663 try:
663 try:
664 node = repo.names.singlenode(repo, symbol)
664 node = repo.names.singlenode(repo, symbol)
665 rev = repo.changelog.rev(node)
665 rev = repo.changelog.rev(node)
666 return repo[rev]
666 return repo[rev]
667 except KeyError:
667 except KeyError:
668 pass
668 pass
669
669
670 node = resolvehexnodeidprefix(repo, symbol)
670 node = resolvehexnodeidprefix(repo, symbol)
671 if node is not None:
671 if node is not None:
672 rev = repo.changelog.rev(node)
672 rev = repo.changelog.rev(node)
673 return repo[rev]
673 return repo[rev]
674
674
675 raise error.RepoLookupError(_(b"unknown revision '%s'") % symbol)
675 raise error.RepoLookupError(_(b"unknown revision '%s'") % symbol)
676
676
677 except error.WdirUnsupported:
677 except error.WdirUnsupported:
678 return repo[None]
678 return repo[None]
679 except (
679 except (
680 error.FilteredIndexError,
680 error.FilteredIndexError,
681 error.FilteredLookupError,
681 error.FilteredLookupError,
682 error.FilteredRepoLookupError,
682 error.FilteredRepoLookupError,
683 ):
683 ):
684 raise _filterederror(repo, symbol)
684 raise _filterederror(repo, symbol)
685
685
686
686
687 def _filterederror(repo, changeid):
687 def _filterederror(repo, changeid):
688 """build an exception to be raised about a filtered changeid
688 """build an exception to be raised about a filtered changeid
689
689
690 This is extracted in a function to help extensions (eg: evolve) to
690 This is extracted in a function to help extensions (eg: evolve) to
691 experiment with various message variants."""
691 experiment with various message variants."""
692 if repo.filtername.startswith(b'visible'):
692 if repo.filtername.startswith(b'visible'):
693
693
694 # Check if the changeset is obsolete
694 # Check if the changeset is obsolete
695 unfilteredrepo = repo.unfiltered()
695 unfilteredrepo = repo.unfiltered()
696 ctx = revsymbol(unfilteredrepo, changeid)
696 ctx = revsymbol(unfilteredrepo, changeid)
697
697
698 # If the changeset is obsolete, enrich the message with the reason
698 # If the changeset is obsolete, enrich the message with the reason
699 # that made this changeset not visible
699 # that made this changeset not visible
700 if ctx.obsolete():
700 if ctx.obsolete():
701 msg = obsutil._getfilteredreason(repo, changeid, ctx)
701 msg = obsutil._getfilteredreason(repo, changeid, ctx)
702 else:
702 else:
703 msg = _(b"hidden revision '%s'") % changeid
703 msg = _(b"hidden revision '%s'") % changeid
704
704
705 hint = _(b'use --hidden to access hidden revisions')
705 hint = _(b'use --hidden to access hidden revisions')
706
706
707 return error.FilteredRepoLookupError(msg, hint=hint)
707 return error.FilteredRepoLookupError(msg, hint=hint)
708 msg = _(b"filtered revision '%s' (not in '%s' subset)")
708 msg = _(b"filtered revision '%s' (not in '%s' subset)")
709 msg %= (changeid, repo.filtername)
709 msg %= (changeid, repo.filtername)
710 return error.FilteredRepoLookupError(msg)
710 return error.FilteredRepoLookupError(msg)
711
711
712
712
713 def revsingle(repo, revspec, default=b'.', localalias=None):
713 def revsingle(repo, revspec, default=b'.', localalias=None):
714 if not revspec and revspec != 0:
714 if not revspec and revspec != 0:
715 return repo[default]
715 return repo[default]
716
716
717 l = revrange(repo, [revspec], localalias=localalias)
717 l = revrange(repo, [revspec], localalias=localalias)
718 if not l:
718 if not l:
719 raise error.Abort(_(b'empty revision set'))
719 raise error.Abort(_(b'empty revision set'))
720 return repo[l.last()]
720 return repo[l.last()]
721
721
722
722
723 def _pairspec(revspec):
723 def _pairspec(revspec):
724 tree = revsetlang.parse(revspec)
724 tree = revsetlang.parse(revspec)
725 return tree and tree[0] in (
725 return tree and tree[0] in (
726 b'range',
726 b'range',
727 b'rangepre',
727 b'rangepre',
728 b'rangepost',
728 b'rangepost',
729 b'rangeall',
729 b'rangeall',
730 )
730 )
731
731
732
732
733 def revpair(repo, revs):
733 def revpair(repo, revs):
734 if not revs:
734 if not revs:
735 return repo[b'.'], repo[None]
735 return repo[b'.'], repo[None]
736
736
737 l = revrange(repo, revs)
737 l = revrange(repo, revs)
738
738
739 if not l:
739 if not l:
740 raise error.Abort(_(b'empty revision range'))
740 raise error.Abort(_(b'empty revision range'))
741
741
742 first = l.first()
742 first = l.first()
743 second = l.last()
743 second = l.last()
744
744
745 if (
745 if (
746 first == second
746 first == second
747 and len(revs) >= 2
747 and len(revs) >= 2
748 and not all(revrange(repo, [r]) for r in revs)
748 and not all(revrange(repo, [r]) for r in revs)
749 ):
749 ):
750 raise error.Abort(_(b'empty revision on one side of range'))
750 raise error.Abort(_(b'empty revision on one side of range'))
751
751
752 # if top-level is range expression, the result must always be a pair
752 # if top-level is range expression, the result must always be a pair
753 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
753 if first == second and len(revs) == 1 and not _pairspec(revs[0]):
754 return repo[first], repo[None]
754 return repo[first], repo[None]
755
755
756 return repo[first], repo[second]
756 return repo[first], repo[second]
757
757
758
758
759 def revrange(repo, specs, localalias=None):
759 def revrange(repo, specs, localalias=None):
760 """Execute 1 to many revsets and return the union.
760 """Execute 1 to many revsets and return the union.
761
761
762 This is the preferred mechanism for executing revsets using user-specified
762 This is the preferred mechanism for executing revsets using user-specified
763 config options, such as revset aliases.
763 config options, such as revset aliases.
764
764
765 The revsets specified by ``specs`` will be executed via a chained ``OR``
765 The revsets specified by ``specs`` will be executed via a chained ``OR``
766 expression. If ``specs`` is empty, an empty result is returned.
766 expression. If ``specs`` is empty, an empty result is returned.
767
767
768 ``specs`` can contain integers, in which case they are assumed to be
768 ``specs`` can contain integers, in which case they are assumed to be
769 revision numbers.
769 revision numbers.
770
770
771 It is assumed the revsets are already formatted. If you have arguments
771 It is assumed the revsets are already formatted. If you have arguments
772 that need to be expanded in the revset, call ``revsetlang.formatspec()``
772 that need to be expanded in the revset, call ``revsetlang.formatspec()``
773 and pass the result as an element of ``specs``.
773 and pass the result as an element of ``specs``.
774
774
775 Specifying a single revset is allowed.
775 Specifying a single revset is allowed.
776
776
777 Returns a ``smartset.abstractsmartset`` which is a list-like interface over
777 Returns a ``smartset.abstractsmartset`` which is a list-like interface over
778 integer revisions.
778 integer revisions.
779 """
779 """
780 allspecs = []
780 allspecs = []
781 for spec in specs:
781 for spec in specs:
782 if isinstance(spec, int):
782 if isinstance(spec, int):
783 spec = revsetlang.formatspec(b'%d', spec)
783 spec = revsetlang.formatspec(b'%d', spec)
784 allspecs.append(spec)
784 allspecs.append(spec)
785 return repo.anyrevs(allspecs, user=True, localalias=localalias)
785 return repo.anyrevs(allspecs, user=True, localalias=localalias)
786
786
787
787
788 def increasingwindows(windowsize=8, sizelimit=512):
788 def increasingwindows(windowsize=8, sizelimit=512):
789 while True:
789 while True:
790 yield windowsize
790 yield windowsize
791 if windowsize < sizelimit:
791 if windowsize < sizelimit:
792 windowsize *= 2
792 windowsize *= 2
793
793
794
794
795 def walkchangerevs(repo, revs, makefilematcher, prepare):
795 def walkchangerevs(repo, revs, makefilematcher, prepare):
796 """Iterate over files and the revs in a "windowed" way.
796 """Iterate over files and the revs in a "windowed" way.
797
797
798 Callers most commonly need to iterate backwards over the history
798 Callers most commonly need to iterate backwards over the history
799 in which they are interested. Doing so has awful (quadratic-looking)
799 in which they are interested. Doing so has awful (quadratic-looking)
800 performance, so we use iterators in a "windowed" way.
800 performance, so we use iterators in a "windowed" way.
801
801
802 We walk a window of revisions in the desired order. Within the
802 We walk a window of revisions in the desired order. Within the
803 window, we first walk forwards to gather data, then in the desired
803 window, we first walk forwards to gather data, then in the desired
804 order (usually backwards) to display it.
804 order (usually backwards) to display it.
805
805
806 This function returns an iterator yielding contexts. Before
806 This function returns an iterator yielding contexts. Before
807 yielding each context, the iterator will first call the prepare
807 yielding each context, the iterator will first call the prepare
808 function on each context in the window in forward order."""
808 function on each context in the window in forward order."""
809
809
810 if not revs:
810 if not revs:
811 return []
811 return []
812 change = repo.__getitem__
812 change = repo.__getitem__
813
813
814 def iterate():
814 def iterate():
815 it = iter(revs)
815 it = iter(revs)
816 stopiteration = False
816 stopiteration = False
817 for windowsize in increasingwindows():
817 for windowsize in increasingwindows():
818 nrevs = []
818 nrevs = []
819 for i in pycompat.xrange(windowsize):
819 for i in pycompat.xrange(windowsize):
820 rev = next(it, None)
820 rev = next(it, None)
821 if rev is None:
821 if rev is None:
822 stopiteration = True
822 stopiteration = True
823 break
823 break
824 nrevs.append(rev)
824 nrevs.append(rev)
825 for rev in sorted(nrevs):
825 for rev in sorted(nrevs):
826 ctx = change(rev)
826 ctx = change(rev)
827 prepare(ctx, makefilematcher(ctx))
827 prepare(ctx, makefilematcher(ctx))
828 for rev in nrevs:
828 for rev in nrevs:
829 yield change(rev)
829 yield change(rev)
830
830
831 if stopiteration:
831 if stopiteration:
832 break
832 break
833
833
834 return iterate()
834 return iterate()
835
835
836
836
837 def meaningfulparents(repo, ctx):
837 def meaningfulparents(repo, ctx):
838 """Return list of meaningful (or all if debug) parentrevs for rev.
838 """Return list of meaningful (or all if debug) parentrevs for rev.
839
839
840 For merges (two non-nullrev revisions) both parents are meaningful.
840 For merges (two non-nullrev revisions) both parents are meaningful.
841 Otherwise the first parent revision is considered meaningful if it
841 Otherwise the first parent revision is considered meaningful if it
842 is not the preceding revision.
842 is not the preceding revision.
843 """
843 """
844 parents = ctx.parents()
844 parents = ctx.parents()
845 if len(parents) > 1:
845 if len(parents) > 1:
846 return parents
846 return parents
847 if repo.ui.debugflag:
847 if repo.ui.debugflag:
848 return [parents[0], repo[nullrev]]
848 return [parents[0], repo[nullrev]]
849 if parents[0].rev() >= intrev(ctx) - 1:
849 if parents[0].rev() >= intrev(ctx) - 1:
850 return []
850 return []
851 return parents
851 return parents
852
852
853
853
854 def getuipathfn(repo, legacyrelativevalue=False, forcerelativevalue=None):
854 def getuipathfn(repo, legacyrelativevalue=False, forcerelativevalue=None):
855 """Return a function that produced paths for presenting to the user.
855 """Return a function that produced paths for presenting to the user.
856
856
857 The returned function takes a repo-relative path and produces a path
857 The returned function takes a repo-relative path and produces a path
858 that can be presented in the UI.
858 that can be presented in the UI.
859
859
860 Depending on the value of ui.relative-paths, either a repo-relative or
860 Depending on the value of ui.relative-paths, either a repo-relative or
861 cwd-relative path will be produced.
861 cwd-relative path will be produced.
862
862
863 legacyrelativevalue is the value to use if ui.relative-paths=legacy
863 legacyrelativevalue is the value to use if ui.relative-paths=legacy
864
864
865 If forcerelativevalue is not None, then that value will be used regardless
865 If forcerelativevalue is not None, then that value will be used regardless
866 of what ui.relative-paths is set to.
866 of what ui.relative-paths is set to.
867 """
867 """
868 if forcerelativevalue is not None:
868 if forcerelativevalue is not None:
869 relative = forcerelativevalue
869 relative = forcerelativevalue
870 else:
870 else:
871 config = repo.ui.config(b'ui', b'relative-paths')
871 config = repo.ui.config(b'ui', b'relative-paths')
872 if config == b'legacy':
872 if config == b'legacy':
873 relative = legacyrelativevalue
873 relative = legacyrelativevalue
874 else:
874 else:
875 relative = stringutil.parsebool(config)
875 relative = stringutil.parsebool(config)
876 if relative is None:
876 if relative is None:
877 raise error.ConfigError(
877 raise error.ConfigError(
878 _(b"ui.relative-paths is not a boolean ('%s')") % config
878 _(b"ui.relative-paths is not a boolean ('%s')") % config
879 )
879 )
880
880
881 if relative:
881 if relative:
882 cwd = repo.getcwd()
882 cwd = repo.getcwd()
883 if cwd != b'':
883 if cwd != b'':
884 # this branch would work even if cwd == b'' (ie cwd = repo
884 # this branch would work even if cwd == b'' (ie cwd = repo
885 # root), but its generality makes the returned function slower
885 # root), but its generality makes the returned function slower
886 pathto = repo.pathto
886 pathto = repo.pathto
887 return lambda f: pathto(f, cwd)
887 return lambda f: pathto(f, cwd)
888 if repo.ui.configbool(b'ui', b'slash'):
888 if repo.ui.configbool(b'ui', b'slash'):
889 return lambda f: f
889 return lambda f: f
890 else:
890 else:
891 return util.localpath
891 return util.localpath
892
892
893
893
894 def subdiruipathfn(subpath, uipathfn):
894 def subdiruipathfn(subpath, uipathfn):
895 '''Create a new uipathfn that treats the file as relative to subpath.'''
895 '''Create a new uipathfn that treats the file as relative to subpath.'''
896 return lambda f: uipathfn(posixpath.join(subpath, f))
896 return lambda f: uipathfn(posixpath.join(subpath, f))
897
897
898
898
899 def anypats(pats, opts):
899 def anypats(pats, opts):
900 """Checks if any patterns, including --include and --exclude were given.
900 """Checks if any patterns, including --include and --exclude were given.
901
901
902 Some commands (e.g. addremove) use this condition for deciding whether to
902 Some commands (e.g. addremove) use this condition for deciding whether to
903 print absolute or relative paths.
903 print absolute or relative paths.
904 """
904 """
905 return bool(pats or opts.get(b'include') or opts.get(b'exclude'))
905 return bool(pats or opts.get(b'include') or opts.get(b'exclude'))
906
906
907
907
908 def expandpats(pats):
908 def expandpats(pats):
909 """Expand bare globs when running on windows.
909 """Expand bare globs when running on windows.
910 On posix we assume it already has already been done by sh."""
910 On posix we assume it already has already been done by sh."""
911 if not util.expandglobs:
911 if not util.expandglobs:
912 return list(pats)
912 return list(pats)
913 ret = []
913 ret = []
914 for kindpat in pats:
914 for kindpat in pats:
915 kind, pat = matchmod._patsplit(kindpat, None)
915 kind, pat = matchmod._patsplit(kindpat, None)
916 if kind is None:
916 if kind is None:
917 try:
917 try:
918 globbed = glob.glob(pat)
918 globbed = glob.glob(pat)
919 except re.error:
919 except re.error:
920 globbed = [pat]
920 globbed = [pat]
921 if globbed:
921 if globbed:
922 ret.extend(globbed)
922 ret.extend(globbed)
923 continue
923 continue
924 ret.append(kindpat)
924 ret.append(kindpat)
925 return ret
925 return ret
926
926
927
927
928 def matchandpats(
928 def matchandpats(
929 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None
929 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None
930 ):
930 ):
931 """Return a matcher and the patterns that were used.
931 """Return a matcher and the patterns that were used.
932 The matcher will warn about bad matches, unless an alternate badfn callback
932 The matcher will warn about bad matches, unless an alternate badfn callback
933 is provided."""
933 is provided."""
934 if opts is None:
934 if opts is None:
935 opts = {}
935 opts = {}
936 if not globbed and default == b'relpath':
936 if not globbed and default == b'relpath':
937 pats = expandpats(pats or [])
937 pats = expandpats(pats or [])
938
938
939 uipathfn = getuipathfn(ctx.repo(), legacyrelativevalue=True)
939 uipathfn = getuipathfn(ctx.repo(), legacyrelativevalue=True)
940
940
941 def bad(f, msg):
941 def bad(f, msg):
942 ctx.repo().ui.warn(b"%s: %s\n" % (uipathfn(f), msg))
942 ctx.repo().ui.warn(b"%s: %s\n" % (uipathfn(f), msg))
943
943
944 if badfn is None:
944 if badfn is None:
945 badfn = bad
945 badfn = bad
946
946
947 m = ctx.match(
947 m = ctx.match(
948 pats,
948 pats,
949 opts.get(b'include'),
949 opts.get(b'include'),
950 opts.get(b'exclude'),
950 opts.get(b'exclude'),
951 default,
951 default,
952 listsubrepos=opts.get(b'subrepos'),
952 listsubrepos=opts.get(b'subrepos'),
953 badfn=badfn,
953 badfn=badfn,
954 )
954 )
955
955
956 if m.always():
956 if m.always():
957 pats = []
957 pats = []
958 return m, pats
958 return m, pats
959
959
960
960
961 def match(
961 def match(
962 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None
962 ctx, pats=(), opts=None, globbed=False, default=b'relpath', badfn=None
963 ):
963 ):
964 '''Return a matcher that will warn about bad matches.'''
964 '''Return a matcher that will warn about bad matches.'''
965 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
965 return matchandpats(ctx, pats, opts, globbed, default, badfn=badfn)[0]
966
966
967
967
968 def matchall(repo):
968 def matchall(repo):
969 '''Return a matcher that will efficiently match everything.'''
969 '''Return a matcher that will efficiently match everything.'''
970 return matchmod.always()
970 return matchmod.always()
971
971
972
972
973 def matchfiles(repo, files, badfn=None):
973 def matchfiles(repo, files, badfn=None):
974 '''Return a matcher that will efficiently match exactly these files.'''
974 '''Return a matcher that will efficiently match exactly these files.'''
975 return matchmod.exact(files, badfn=badfn)
975 return matchmod.exact(files, badfn=badfn)
976
976
977
977
978 def parsefollowlinespattern(repo, rev, pat, msg):
978 def parsefollowlinespattern(repo, rev, pat, msg):
979 """Return a file name from `pat` pattern suitable for usage in followlines
979 """Return a file name from `pat` pattern suitable for usage in followlines
980 logic.
980 logic.
981 """
981 """
982 if not matchmod.patkind(pat):
982 if not matchmod.patkind(pat):
983 return pathutil.canonpath(repo.root, repo.getcwd(), pat)
983 return pathutil.canonpath(repo.root, repo.getcwd(), pat)
984 else:
984 else:
985 ctx = repo[rev]
985 ctx = repo[rev]
986 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx)
986 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=ctx)
987 files = [f for f in ctx if m(f)]
987 files = [f for f in ctx if m(f)]
988 if len(files) != 1:
988 if len(files) != 1:
989 raise error.ParseError(msg)
989 raise error.ParseError(msg)
990 return files[0]
990 return files[0]
991
991
992
992
993 def getorigvfs(ui, repo):
993 def getorigvfs(ui, repo):
994 """return a vfs suitable to save 'orig' file
994 """return a vfs suitable to save 'orig' file
995
995
996 return None if no special directory is configured"""
996 return None if no special directory is configured"""
997 origbackuppath = ui.config(b'ui', b'origbackuppath')
997 origbackuppath = ui.config(b'ui', b'origbackuppath')
998 if not origbackuppath:
998 if not origbackuppath:
999 return None
999 return None
1000 return vfs.vfs(repo.wvfs.join(origbackuppath))
1000 return vfs.vfs(repo.wvfs.join(origbackuppath))
1001
1001
1002
1002
1003 def backuppath(ui, repo, filepath):
1003 def backuppath(ui, repo, filepath):
1004 """customize where working copy backup files (.orig files) are created
1004 """customize where working copy backup files (.orig files) are created
1005
1005
1006 Fetch user defined path from config file: [ui] origbackuppath = <path>
1006 Fetch user defined path from config file: [ui] origbackuppath = <path>
1007 Fall back to default (filepath with .orig suffix) if not specified
1007 Fall back to default (filepath with .orig suffix) if not specified
1008
1008
1009 filepath is repo-relative
1009 filepath is repo-relative
1010
1010
1011 Returns an absolute path
1011 Returns an absolute path
1012 """
1012 """
1013 origvfs = getorigvfs(ui, repo)
1013 origvfs = getorigvfs(ui, repo)
1014 if origvfs is None:
1014 if origvfs is None:
1015 return repo.wjoin(filepath + b".orig")
1015 return repo.wjoin(filepath + b".orig")
1016
1016
1017 origbackupdir = origvfs.dirname(filepath)
1017 origbackupdir = origvfs.dirname(filepath)
1018 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir):
1018 if not origvfs.isdir(origbackupdir) or origvfs.islink(origbackupdir):
1019 ui.note(_(b'creating directory: %s\n') % origvfs.join(origbackupdir))
1019 ui.note(_(b'creating directory: %s\n') % origvfs.join(origbackupdir))
1020
1020
1021 # Remove any files that conflict with the backup file's path
1021 # Remove any files that conflict with the backup file's path
1022 for f in reversed(list(pathutil.finddirs(filepath))):
1022 for f in reversed(list(pathutil.finddirs(filepath))):
1023 if origvfs.isfileorlink(f):
1023 if origvfs.isfileorlink(f):
1024 ui.note(_(b'removing conflicting file: %s\n') % origvfs.join(f))
1024 ui.note(_(b'removing conflicting file: %s\n') % origvfs.join(f))
1025 origvfs.unlink(f)
1025 origvfs.unlink(f)
1026 break
1026 break
1027
1027
1028 origvfs.makedirs(origbackupdir)
1028 origvfs.makedirs(origbackupdir)
1029
1029
1030 if origvfs.isdir(filepath) and not origvfs.islink(filepath):
1030 if origvfs.isdir(filepath) and not origvfs.islink(filepath):
1031 ui.note(
1031 ui.note(
1032 _(b'removing conflicting directory: %s\n') % origvfs.join(filepath)
1032 _(b'removing conflicting directory: %s\n') % origvfs.join(filepath)
1033 )
1033 )
1034 origvfs.rmtree(filepath, forcibly=True)
1034 origvfs.rmtree(filepath, forcibly=True)
1035
1035
1036 return origvfs.join(filepath)
1036 return origvfs.join(filepath)
1037
1037
1038
1038
1039 class _containsnode(object):
1039 class _containsnode(object):
1040 """proxy __contains__(node) to container.__contains__ which accepts revs"""
1040 """proxy __contains__(node) to container.__contains__ which accepts revs"""
1041
1041
1042 def __init__(self, repo, revcontainer):
1042 def __init__(self, repo, revcontainer):
1043 self._torev = repo.changelog.rev
1043 self._torev = repo.changelog.rev
1044 self._revcontains = revcontainer.__contains__
1044 self._revcontains = revcontainer.__contains__
1045
1045
1046 def __contains__(self, node):
1046 def __contains__(self, node):
1047 return self._revcontains(self._torev(node))
1047 return self._revcontains(self._torev(node))
1048
1048
1049
1049
1050 def cleanupnodes(
1050 def cleanupnodes(
1051 repo,
1051 repo,
1052 replacements,
1052 replacements,
1053 operation,
1053 operation,
1054 moves=None,
1054 moves=None,
1055 metadata=None,
1055 metadata=None,
1056 fixphase=False,
1056 fixphase=False,
1057 targetphase=None,
1057 targetphase=None,
1058 backup=True,
1058 backup=True,
1059 ):
1059 ):
1060 """do common cleanups when old nodes are replaced by new nodes
1060 """do common cleanups when old nodes are replaced by new nodes
1061
1061
1062 That includes writing obsmarkers or stripping nodes, and moving bookmarks.
1062 That includes writing obsmarkers or stripping nodes, and moving bookmarks.
1063 (we might also want to move working directory parent in the future)
1063 (we might also want to move working directory parent in the future)
1064
1064
1065 By default, bookmark moves are calculated automatically from 'replacements',
1065 By default, bookmark moves are calculated automatically from 'replacements',
1066 but 'moves' can be used to override that. Also, 'moves' may include
1066 but 'moves' can be used to override that. Also, 'moves' may include
1067 additional bookmark moves that should not have associated obsmarkers.
1067 additional bookmark moves that should not have associated obsmarkers.
1068
1068
1069 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not
1069 replacements is {oldnode: [newnode]} or a iterable of nodes if they do not
1070 have replacements. operation is a string, like "rebase".
1070 have replacements. operation is a string, like "rebase".
1071
1071
1072 metadata is dictionary containing metadata to be stored in obsmarker if
1072 metadata is dictionary containing metadata to be stored in obsmarker if
1073 obsolescence is enabled.
1073 obsolescence is enabled.
1074 """
1074 """
1075 assert fixphase or targetphase is None
1075 assert fixphase or targetphase is None
1076 if not replacements and not moves:
1076 if not replacements and not moves:
1077 return
1077 return
1078
1078
1079 # translate mapping's other forms
1079 # translate mapping's other forms
1080 if not util.safehasattr(replacements, b'items'):
1080 if not util.safehasattr(replacements, b'items'):
1081 replacements = {(n,): () for n in replacements}
1081 replacements = {(n,): () for n in replacements}
1082 else:
1082 else:
1083 # upgrading non tuple "source" to tuple ones for BC
1083 # upgrading non tuple "source" to tuple ones for BC
1084 repls = {}
1084 repls = {}
1085 for key, value in replacements.items():
1085 for key, value in replacements.items():
1086 if not isinstance(key, tuple):
1086 if not isinstance(key, tuple):
1087 key = (key,)
1087 key = (key,)
1088 repls[key] = value
1088 repls[key] = value
1089 replacements = repls
1089 replacements = repls
1090
1090
1091 # Unfiltered repo is needed since nodes in replacements might be hidden.
1091 # Unfiltered repo is needed since nodes in replacements might be hidden.
1092 unfi = repo.unfiltered()
1092 unfi = repo.unfiltered()
1093
1093
1094 # Calculate bookmark movements
1094 # Calculate bookmark movements
1095 if moves is None:
1095 if moves is None:
1096 moves = {}
1096 moves = {}
1097 for oldnodes, newnodes in replacements.items():
1097 for oldnodes, newnodes in replacements.items():
1098 for oldnode in oldnodes:
1098 for oldnode in oldnodes:
1099 if oldnode in moves:
1099 if oldnode in moves:
1100 continue
1100 continue
1101 if len(newnodes) > 1:
1101 if len(newnodes) > 1:
1102 # usually a split, take the one with biggest rev number
1102 # usually a split, take the one with biggest rev number
1103 newnode = next(unfi.set(b'max(%ln)', newnodes)).node()
1103 newnode = next(unfi.set(b'max(%ln)', newnodes)).node()
1104 elif len(newnodes) == 0:
1104 elif len(newnodes) == 0:
1105 # move bookmark backwards
1105 # move bookmark backwards
1106 allreplaced = []
1106 allreplaced = []
1107 for rep in replacements:
1107 for rep in replacements:
1108 allreplaced.extend(rep)
1108 allreplaced.extend(rep)
1109 roots = list(
1109 roots = list(
1110 unfi.set(b'max((::%n) - %ln)', oldnode, allreplaced)
1110 unfi.set(b'max((::%n) - %ln)', oldnode, allreplaced)
1111 )
1111 )
1112 if roots:
1112 if roots:
1113 newnode = roots[0].node()
1113 newnode = roots[0].node()
1114 else:
1114 else:
1115 newnode = nullid
1115 newnode = nullid
1116 else:
1116 else:
1117 newnode = newnodes[0]
1117 newnode = newnodes[0]
1118 moves[oldnode] = newnode
1118 moves[oldnode] = newnode
1119
1119
1120 allnewnodes = [n for ns in replacements.values() for n in ns]
1120 allnewnodes = [n for ns in replacements.values() for n in ns]
1121 toretract = {}
1121 toretract = {}
1122 toadvance = {}
1122 toadvance = {}
1123 if fixphase:
1123 if fixphase:
1124 precursors = {}
1124 precursors = {}
1125 for oldnodes, newnodes in replacements.items():
1125 for oldnodes, newnodes in replacements.items():
1126 for oldnode in oldnodes:
1126 for oldnode in oldnodes:
1127 for newnode in newnodes:
1127 for newnode in newnodes:
1128 precursors.setdefault(newnode, []).append(oldnode)
1128 precursors.setdefault(newnode, []).append(oldnode)
1129
1129
1130 allnewnodes.sort(key=lambda n: unfi[n].rev())
1130 allnewnodes.sort(key=lambda n: unfi[n].rev())
1131 newphases = {}
1131 newphases = {}
1132
1132
1133 def phase(ctx):
1133 def phase(ctx):
1134 return newphases.get(ctx.node(), ctx.phase())
1134 return newphases.get(ctx.node(), ctx.phase())
1135
1135
1136 for newnode in allnewnodes:
1136 for newnode in allnewnodes:
1137 ctx = unfi[newnode]
1137 ctx = unfi[newnode]
1138 parentphase = max(phase(p) for p in ctx.parents())
1138 parentphase = max(phase(p) for p in ctx.parents())
1139 if targetphase is None:
1139 if targetphase is None:
1140 oldphase = max(
1140 oldphase = max(
1141 unfi[oldnode].phase() for oldnode in precursors[newnode]
1141 unfi[oldnode].phase() for oldnode in precursors[newnode]
1142 )
1142 )
1143 newphase = max(oldphase, parentphase)
1143 newphase = max(oldphase, parentphase)
1144 else:
1144 else:
1145 newphase = max(targetphase, parentphase)
1145 newphase = max(targetphase, parentphase)
1146 newphases[newnode] = newphase
1146 newphases[newnode] = newphase
1147 if newphase > ctx.phase():
1147 if newphase > ctx.phase():
1148 toretract.setdefault(newphase, []).append(newnode)
1148 toretract.setdefault(newphase, []).append(newnode)
1149 elif newphase < ctx.phase():
1149 elif newphase < ctx.phase():
1150 toadvance.setdefault(newphase, []).append(newnode)
1150 toadvance.setdefault(newphase, []).append(newnode)
1151
1151
1152 with repo.transaction(b'cleanup') as tr:
1152 with repo.transaction(b'cleanup') as tr:
1153 # Move bookmarks
1153 # Move bookmarks
1154 bmarks = repo._bookmarks
1154 bmarks = repo._bookmarks
1155 bmarkchanges = []
1155 bmarkchanges = []
1156 for oldnode, newnode in moves.items():
1156 for oldnode, newnode in moves.items():
1157 oldbmarks = repo.nodebookmarks(oldnode)
1157 oldbmarks = repo.nodebookmarks(oldnode)
1158 if not oldbmarks:
1158 if not oldbmarks:
1159 continue
1159 continue
1160 from . import bookmarks # avoid import cycle
1160 from . import bookmarks # avoid import cycle
1161
1161
1162 repo.ui.debug(
1162 repo.ui.debug(
1163 b'moving bookmarks %r from %s to %s\n'
1163 b'moving bookmarks %r from %s to %s\n'
1164 % (
1164 % (
1165 pycompat.rapply(pycompat.maybebytestr, oldbmarks),
1165 pycompat.rapply(pycompat.maybebytestr, oldbmarks),
1166 hex(oldnode),
1166 hex(oldnode),
1167 hex(newnode),
1167 hex(newnode),
1168 )
1168 )
1169 )
1169 )
1170 # Delete divergent bookmarks being parents of related newnodes
1170 # Delete divergent bookmarks being parents of related newnodes
1171 deleterevs = repo.revs(
1171 deleterevs = repo.revs(
1172 b'parents(roots(%ln & (::%n))) - parents(%n)',
1172 b'parents(roots(%ln & (::%n))) - parents(%n)',
1173 allnewnodes,
1173 allnewnodes,
1174 newnode,
1174 newnode,
1175 oldnode,
1175 oldnode,
1176 )
1176 )
1177 deletenodes = _containsnode(repo, deleterevs)
1177 deletenodes = _containsnode(repo, deleterevs)
1178 for name in oldbmarks:
1178 for name in oldbmarks:
1179 bmarkchanges.append((name, newnode))
1179 bmarkchanges.append((name, newnode))
1180 for b in bookmarks.divergent2delete(repo, deletenodes, name):
1180 for b in bookmarks.divergent2delete(repo, deletenodes, name):
1181 bmarkchanges.append((b, None))
1181 bmarkchanges.append((b, None))
1182
1182
1183 if bmarkchanges:
1183 if bmarkchanges:
1184 bmarks.applychanges(repo, tr, bmarkchanges)
1184 bmarks.applychanges(repo, tr, bmarkchanges)
1185
1185
1186 for phase, nodes in toretract.items():
1186 for phase, nodes in toretract.items():
1187 phases.retractboundary(repo, tr, phase, nodes)
1187 phases.retractboundary(repo, tr, phase, nodes)
1188 for phase, nodes in toadvance.items():
1188 for phase, nodes in toadvance.items():
1189 phases.advanceboundary(repo, tr, phase, nodes)
1189 phases.advanceboundary(repo, tr, phase, nodes)
1190
1190
1191 mayusearchived = repo.ui.config(b'experimental', b'cleanup-as-archived')
1191 mayusearchived = repo.ui.config(b'experimental', b'cleanup-as-archived')
1192 # Obsolete or strip nodes
1192 # Obsolete or strip nodes
1193 if obsolete.isenabled(repo, obsolete.createmarkersopt):
1193 if obsolete.isenabled(repo, obsolete.createmarkersopt):
1194 # If a node is already obsoleted, and we want to obsolete it
1194 # If a node is already obsoleted, and we want to obsolete it
1195 # without a successor, skip that obssolete request since it's
1195 # without a successor, skip that obssolete request since it's
1196 # unnecessary. That's the "if s or not isobs(n)" check below.
1196 # unnecessary. That's the "if s or not isobs(n)" check below.
1197 # Also sort the node in topology order, that might be useful for
1197 # Also sort the node in topology order, that might be useful for
1198 # some obsstore logic.
1198 # some obsstore logic.
1199 # NOTE: the sorting might belong to createmarkers.
1199 # NOTE: the sorting might belong to createmarkers.
1200 torev = unfi.changelog.rev
1200 torev = unfi.changelog.rev
1201 sortfunc = lambda ns: torev(ns[0][0])
1201 sortfunc = lambda ns: torev(ns[0][0])
1202 rels = []
1202 rels = []
1203 for ns, s in sorted(replacements.items(), key=sortfunc):
1203 for ns, s in sorted(replacements.items(), key=sortfunc):
1204 rel = (tuple(unfi[n] for n in ns), tuple(unfi[m] for m in s))
1204 rel = (tuple(unfi[n] for n in ns), tuple(unfi[m] for m in s))
1205 rels.append(rel)
1205 rels.append(rel)
1206 if rels:
1206 if rels:
1207 obsolete.createmarkers(
1207 obsolete.createmarkers(
1208 repo, rels, operation=operation, metadata=metadata
1208 repo, rels, operation=operation, metadata=metadata
1209 )
1209 )
1210 elif phases.supportinternal(repo) and mayusearchived:
1210 elif phases.supportinternal(repo) and mayusearchived:
1211 # this assume we do not have "unstable" nodes above the cleaned ones
1211 # this assume we do not have "unstable" nodes above the cleaned ones
1212 allreplaced = set()
1212 allreplaced = set()
1213 for ns in replacements.keys():
1213 for ns in replacements.keys():
1214 allreplaced.update(ns)
1214 allreplaced.update(ns)
1215 if backup:
1215 if backup:
1216 from . import repair # avoid import cycle
1216 from . import repair # avoid import cycle
1217
1217
1218 node = min(allreplaced, key=repo.changelog.rev)
1218 node = min(allreplaced, key=repo.changelog.rev)
1219 repair.backupbundle(
1219 repair.backupbundle(
1220 repo, allreplaced, allreplaced, node, operation
1220 repo, allreplaced, allreplaced, node, operation
1221 )
1221 )
1222 phases.retractboundary(repo, tr, phases.archived, allreplaced)
1222 phases.retractboundary(repo, tr, phases.archived, allreplaced)
1223 else:
1223 else:
1224 from . import repair # avoid import cycle
1224 from . import repair # avoid import cycle
1225
1225
1226 tostrip = list(n for ns in replacements for n in ns)
1226 tostrip = list(n for ns in replacements for n in ns)
1227 if tostrip:
1227 if tostrip:
1228 repair.delayedstrip(
1228 repair.delayedstrip(
1229 repo.ui, repo, tostrip, operation, backup=backup
1229 repo.ui, repo, tostrip, operation, backup=backup
1230 )
1230 )
1231
1231
1232
1232
1233 def addremove(repo, matcher, prefix, uipathfn, opts=None):
1233 def addremove(repo, matcher, prefix, uipathfn, opts=None):
1234 if opts is None:
1234 if opts is None:
1235 opts = {}
1235 opts = {}
1236 m = matcher
1236 m = matcher
1237 dry_run = opts.get(b'dry_run')
1237 dry_run = opts.get(b'dry_run')
1238 try:
1238 try:
1239 similarity = float(opts.get(b'similarity') or 0)
1239 similarity = float(opts.get(b'similarity') or 0)
1240 except ValueError:
1240 except ValueError:
1241 raise error.Abort(_(b'similarity must be a number'))
1241 raise error.Abort(_(b'similarity must be a number'))
1242 if similarity < 0 or similarity > 100:
1242 if similarity < 0 or similarity > 100:
1243 raise error.Abort(_(b'similarity must be between 0 and 100'))
1243 raise error.Abort(_(b'similarity must be between 0 and 100'))
1244 similarity /= 100.0
1244 similarity /= 100.0
1245
1245
1246 ret = 0
1246 ret = 0
1247
1247
1248 wctx = repo[None]
1248 wctx = repo[None]
1249 for subpath in sorted(wctx.substate):
1249 for subpath in sorted(wctx.substate):
1250 submatch = matchmod.subdirmatcher(subpath, m)
1250 submatch = matchmod.subdirmatcher(subpath, m)
1251 if opts.get(b'subrepos') or m.exact(subpath) or any(submatch.files()):
1251 if opts.get(b'subrepos') or m.exact(subpath) or any(submatch.files()):
1252 sub = wctx.sub(subpath)
1252 sub = wctx.sub(subpath)
1253 subprefix = repo.wvfs.reljoin(prefix, subpath)
1253 subprefix = repo.wvfs.reljoin(prefix, subpath)
1254 subuipathfn = subdiruipathfn(subpath, uipathfn)
1254 subuipathfn = subdiruipathfn(subpath, uipathfn)
1255 try:
1255 try:
1256 if sub.addremove(submatch, subprefix, subuipathfn, opts):
1256 if sub.addremove(submatch, subprefix, subuipathfn, opts):
1257 ret = 1
1257 ret = 1
1258 except error.LookupError:
1258 except error.LookupError:
1259 repo.ui.status(
1259 repo.ui.status(
1260 _(b"skipping missing subrepository: %s\n")
1260 _(b"skipping missing subrepository: %s\n")
1261 % uipathfn(subpath)
1261 % uipathfn(subpath)
1262 )
1262 )
1263
1263
1264 rejected = []
1264 rejected = []
1265
1265
1266 def badfn(f, msg):
1266 def badfn(f, msg):
1267 if f in m.files():
1267 if f in m.files():
1268 m.bad(f, msg)
1268 m.bad(f, msg)
1269 rejected.append(f)
1269 rejected.append(f)
1270
1270
1271 badmatch = matchmod.badmatch(m, badfn)
1271 badmatch = matchmod.badmatch(m, badfn)
1272 added, unknown, deleted, removed, forgotten = _interestingfiles(
1272 added, unknown, deleted, removed, forgotten = _interestingfiles(
1273 repo, badmatch
1273 repo, badmatch
1274 )
1274 )
1275
1275
1276 unknownset = set(unknown + forgotten)
1276 unknownset = set(unknown + forgotten)
1277 toprint = unknownset.copy()
1277 toprint = unknownset.copy()
1278 toprint.update(deleted)
1278 toprint.update(deleted)
1279 for abs in sorted(toprint):
1279 for abs in sorted(toprint):
1280 if repo.ui.verbose or not m.exact(abs):
1280 if repo.ui.verbose or not m.exact(abs):
1281 if abs in unknownset:
1281 if abs in unknownset:
1282 status = _(b'adding %s\n') % uipathfn(abs)
1282 status = _(b'adding %s\n') % uipathfn(abs)
1283 label = b'ui.addremove.added'
1283 label = b'ui.addremove.added'
1284 else:
1284 else:
1285 status = _(b'removing %s\n') % uipathfn(abs)
1285 status = _(b'removing %s\n') % uipathfn(abs)
1286 label = b'ui.addremove.removed'
1286 label = b'ui.addremove.removed'
1287 repo.ui.status(status, label=label)
1287 repo.ui.status(status, label=label)
1288
1288
1289 renames = _findrenames(
1289 renames = _findrenames(
1290 repo, m, added + unknown, removed + deleted, similarity, uipathfn
1290 repo, m, added + unknown, removed + deleted, similarity, uipathfn
1291 )
1291 )
1292
1292
1293 if not dry_run:
1293 if not dry_run:
1294 _markchanges(repo, unknown + forgotten, deleted, renames)
1294 _markchanges(repo, unknown + forgotten, deleted, renames)
1295
1295
1296 for f in rejected:
1296 for f in rejected:
1297 if f in m.files():
1297 if f in m.files():
1298 return 1
1298 return 1
1299 return ret
1299 return ret
1300
1300
1301
1301
1302 def marktouched(repo, files, similarity=0.0):
1302 def marktouched(repo, files, similarity=0.0):
1303 """Assert that files have somehow been operated upon. files are relative to
1303 """Assert that files have somehow been operated upon. files are relative to
1304 the repo root."""
1304 the repo root."""
1305 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x))
1305 m = matchfiles(repo, files, badfn=lambda x, y: rejected.append(x))
1306 rejected = []
1306 rejected = []
1307
1307
1308 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
1308 added, unknown, deleted, removed, forgotten = _interestingfiles(repo, m)
1309
1309
1310 if repo.ui.verbose:
1310 if repo.ui.verbose:
1311 unknownset = set(unknown + forgotten)
1311 unknownset = set(unknown + forgotten)
1312 toprint = unknownset.copy()
1312 toprint = unknownset.copy()
1313 toprint.update(deleted)
1313 toprint.update(deleted)
1314 for abs in sorted(toprint):
1314 for abs in sorted(toprint):
1315 if abs in unknownset:
1315 if abs in unknownset:
1316 status = _(b'adding %s\n') % abs
1316 status = _(b'adding %s\n') % abs
1317 else:
1317 else:
1318 status = _(b'removing %s\n') % abs
1318 status = _(b'removing %s\n') % abs
1319 repo.ui.status(status)
1319 repo.ui.status(status)
1320
1320
1321 # TODO: We should probably have the caller pass in uipathfn and apply it to
1321 # TODO: We should probably have the caller pass in uipathfn and apply it to
1322 # the messages above too. legacyrelativevalue=True is consistent with how
1322 # the messages above too. legacyrelativevalue=True is consistent with how
1323 # it used to work.
1323 # it used to work.
1324 uipathfn = getuipathfn(repo, legacyrelativevalue=True)
1324 uipathfn = getuipathfn(repo, legacyrelativevalue=True)
1325 renames = _findrenames(
1325 renames = _findrenames(
1326 repo, m, added + unknown, removed + deleted, similarity, uipathfn
1326 repo, m, added + unknown, removed + deleted, similarity, uipathfn
1327 )
1327 )
1328
1328
1329 _markchanges(repo, unknown + forgotten, deleted, renames)
1329 _markchanges(repo, unknown + forgotten, deleted, renames)
1330
1330
1331 for f in rejected:
1331 for f in rejected:
1332 if f in m.files():
1332 if f in m.files():
1333 return 1
1333 return 1
1334 return 0
1334 return 0
1335
1335
1336
1336
1337 def _interestingfiles(repo, matcher):
1337 def _interestingfiles(repo, matcher):
1338 """Walk dirstate with matcher, looking for files that addremove would care
1338 """Walk dirstate with matcher, looking for files that addremove would care
1339 about.
1339 about.
1340
1340
1341 This is different from dirstate.status because it doesn't care about
1341 This is different from dirstate.status because it doesn't care about
1342 whether files are modified or clean."""
1342 whether files are modified or clean."""
1343 added, unknown, deleted, removed, forgotten = [], [], [], [], []
1343 added, unknown, deleted, removed, forgotten = [], [], [], [], []
1344 audit_path = pathutil.pathauditor(repo.root, cached=True)
1344 audit_path = pathutil.pathauditor(repo.root, cached=True)
1345
1345
1346 ctx = repo[None]
1346 ctx = repo[None]
1347 dirstate = repo.dirstate
1347 dirstate = repo.dirstate
1348 matcher = repo.narrowmatch(matcher, includeexact=True)
1348 matcher = repo.narrowmatch(matcher, includeexact=True)
1349 walkresults = dirstate.walk(
1349 walkresults = dirstate.walk(
1350 matcher,
1350 matcher,
1351 subrepos=sorted(ctx.substate),
1351 subrepos=sorted(ctx.substate),
1352 unknown=True,
1352 unknown=True,
1353 ignored=False,
1353 ignored=False,
1354 full=False,
1354 full=False,
1355 )
1355 )
1356 for abs, st in pycompat.iteritems(walkresults):
1356 for abs, st in pycompat.iteritems(walkresults):
1357 dstate = dirstate[abs]
1357 dstate = dirstate[abs]
1358 if dstate == b'?' and audit_path.check(abs):
1358 if dstate == b'?' and audit_path.check(abs):
1359 unknown.append(abs)
1359 unknown.append(abs)
1360 elif dstate != b'r' and not st:
1360 elif dstate != b'r' and not st:
1361 deleted.append(abs)
1361 deleted.append(abs)
1362 elif dstate == b'r' and st:
1362 elif dstate == b'r' and st:
1363 forgotten.append(abs)
1363 forgotten.append(abs)
1364 # for finding renames
1364 # for finding renames
1365 elif dstate == b'r' and not st:
1365 elif dstate == b'r' and not st:
1366 removed.append(abs)
1366 removed.append(abs)
1367 elif dstate == b'a':
1367 elif dstate == b'a':
1368 added.append(abs)
1368 added.append(abs)
1369
1369
1370 return added, unknown, deleted, removed, forgotten
1370 return added, unknown, deleted, removed, forgotten
1371
1371
1372
1372
1373 def _findrenames(repo, matcher, added, removed, similarity, uipathfn):
1373 def _findrenames(repo, matcher, added, removed, similarity, uipathfn):
1374 '''Find renames from removed files to added ones.'''
1374 '''Find renames from removed files to added ones.'''
1375 renames = {}
1375 renames = {}
1376 if similarity > 0:
1376 if similarity > 0:
1377 for old, new, score in similar.findrenames(
1377 for old, new, score in similar.findrenames(
1378 repo, added, removed, similarity
1378 repo, added, removed, similarity
1379 ):
1379 ):
1380 if (
1380 if (
1381 repo.ui.verbose
1381 repo.ui.verbose
1382 or not matcher.exact(old)
1382 or not matcher.exact(old)
1383 or not matcher.exact(new)
1383 or not matcher.exact(new)
1384 ):
1384 ):
1385 repo.ui.status(
1385 repo.ui.status(
1386 _(
1386 _(
1387 b'recording removal of %s as rename to %s '
1387 b'recording removal of %s as rename to %s '
1388 b'(%d%% similar)\n'
1388 b'(%d%% similar)\n'
1389 )
1389 )
1390 % (uipathfn(old), uipathfn(new), score * 100)
1390 % (uipathfn(old), uipathfn(new), score * 100)
1391 )
1391 )
1392 renames[new] = old
1392 renames[new] = old
1393 return renames
1393 return renames
1394
1394
1395
1395
1396 def _markchanges(repo, unknown, deleted, renames):
1396 def _markchanges(repo, unknown, deleted, renames):
1397 """Marks the files in unknown as added, the files in deleted as removed,
1397 """Marks the files in unknown as added, the files in deleted as removed,
1398 and the files in renames as copied."""
1398 and the files in renames as copied."""
1399 wctx = repo[None]
1399 wctx = repo[None]
1400 with repo.wlock():
1400 with repo.wlock():
1401 wctx.forget(deleted)
1401 wctx.forget(deleted)
1402 wctx.add(unknown)
1402 wctx.add(unknown)
1403 for new, old in pycompat.iteritems(renames):
1403 for new, old in pycompat.iteritems(renames):
1404 wctx.copy(old, new)
1404 wctx.copy(old, new)
1405
1405
1406
1406
1407 def getrenamedfn(repo, endrev=None):
1407 def getrenamedfn(repo, endrev=None):
1408 if copiesmod.usechangesetcentricalgo(repo):
1408 if copiesmod.usechangesetcentricalgo(repo):
1409
1409
1410 def getrenamed(fn, rev):
1410 def getrenamed(fn, rev):
1411 ctx = repo[rev]
1411 ctx = repo[rev]
1412 p1copies = ctx.p1copies()
1412 p1copies = ctx.p1copies()
1413 if fn in p1copies:
1413 if fn in p1copies:
1414 return p1copies[fn]
1414 return p1copies[fn]
1415 p2copies = ctx.p2copies()
1415 p2copies = ctx.p2copies()
1416 if fn in p2copies:
1416 if fn in p2copies:
1417 return p2copies[fn]
1417 return p2copies[fn]
1418 return None
1418 return None
1419
1419
1420 return getrenamed
1420 return getrenamed
1421
1421
1422 rcache = {}
1422 rcache = {}
1423 if endrev is None:
1423 if endrev is None:
1424 endrev = len(repo)
1424 endrev = len(repo)
1425
1425
1426 def getrenamed(fn, rev):
1426 def getrenamed(fn, rev):
1427 """looks up all renames for a file (up to endrev) the first
1427 """looks up all renames for a file (up to endrev) the first
1428 time the file is given. It indexes on the changerev and only
1428 time the file is given. It indexes on the changerev and only
1429 parses the manifest if linkrev != changerev.
1429 parses the manifest if linkrev != changerev.
1430 Returns rename info for fn at changerev rev."""
1430 Returns rename info for fn at changerev rev."""
1431 if fn not in rcache:
1431 if fn not in rcache:
1432 rcache[fn] = {}
1432 rcache[fn] = {}
1433 fl = repo.file(fn)
1433 fl = repo.file(fn)
1434 for i in fl:
1434 for i in fl:
1435 lr = fl.linkrev(i)
1435 lr = fl.linkrev(i)
1436 renamed = fl.renamed(fl.node(i))
1436 renamed = fl.renamed(fl.node(i))
1437 rcache[fn][lr] = renamed and renamed[0]
1437 rcache[fn][lr] = renamed and renamed[0]
1438 if lr >= endrev:
1438 if lr >= endrev:
1439 break
1439 break
1440 if rev in rcache[fn]:
1440 if rev in rcache[fn]:
1441 return rcache[fn][rev]
1441 return rcache[fn][rev]
1442
1442
1443 # If linkrev != rev (i.e. rev not found in rcache) fallback to
1443 # If linkrev != rev (i.e. rev not found in rcache) fallback to
1444 # filectx logic.
1444 # filectx logic.
1445 try:
1445 try:
1446 return repo[rev][fn].copysource()
1446 return repo[rev][fn].copysource()
1447 except error.LookupError:
1447 except error.LookupError:
1448 return None
1448 return None
1449
1449
1450 return getrenamed
1450 return getrenamed
1451
1451
1452
1452
1453 def getcopiesfn(repo, endrev=None):
1453 def getcopiesfn(repo, endrev=None):
1454 if copiesmod.usechangesetcentricalgo(repo):
1454 if copiesmod.usechangesetcentricalgo(repo):
1455
1455
1456 def copiesfn(ctx):
1456 def copiesfn(ctx):
1457 if ctx.p2copies():
1457 if ctx.p2copies():
1458 allcopies = ctx.p1copies().copy()
1458 allcopies = ctx.p1copies().copy()
1459 # There should be no overlap
1459 # There should be no overlap
1460 allcopies.update(ctx.p2copies())
1460 allcopies.update(ctx.p2copies())
1461 return sorted(allcopies.items())
1461 return sorted(allcopies.items())
1462 else:
1462 else:
1463 return sorted(ctx.p1copies().items())
1463 return sorted(ctx.p1copies().items())
1464
1464
1465 else:
1465 else:
1466 getrenamed = getrenamedfn(repo, endrev)
1466 getrenamed = getrenamedfn(repo, endrev)
1467
1467
1468 def copiesfn(ctx):
1468 def copiesfn(ctx):
1469 copies = []
1469 copies = []
1470 for fn in ctx.files():
1470 for fn in ctx.files():
1471 rename = getrenamed(fn, ctx.rev())
1471 rename = getrenamed(fn, ctx.rev())
1472 if rename:
1472 if rename:
1473 copies.append((fn, rename))
1473 copies.append((fn, rename))
1474 return copies
1474 return copies
1475
1475
1476 return copiesfn
1476 return copiesfn
1477
1477
1478
1478
1479 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
1479 def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None):
1480 """Update the dirstate to reflect the intent of copying src to dst. For
1480 """Update the dirstate to reflect the intent of copying src to dst. For
1481 different reasons it might not end with dst being marked as copied from src.
1481 different reasons it might not end with dst being marked as copied from src.
1482 """
1482 """
1483 origsrc = repo.dirstate.copied(src) or src
1483 origsrc = repo.dirstate.copied(src) or src
1484 if dst == origsrc: # copying back a copy?
1484 if dst == origsrc: # copying back a copy?
1485 if repo.dirstate[dst] not in b'mn' and not dryrun:
1485 if repo.dirstate[dst] not in b'mn' and not dryrun:
1486 repo.dirstate.normallookup(dst)
1486 repo.dirstate.normallookup(dst)
1487 else:
1487 else:
1488 if repo.dirstate[origsrc] == b'a' and origsrc == src:
1488 if repo.dirstate[origsrc] == b'a' and origsrc == src:
1489 if not ui.quiet:
1489 if not ui.quiet:
1490 ui.warn(
1490 ui.warn(
1491 _(
1491 _(
1492 b"%s has not been committed yet, so no copy "
1492 b"%s has not been committed yet, so no copy "
1493 b"data will be stored for %s.\n"
1493 b"data will be stored for %s.\n"
1494 )
1494 )
1495 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd))
1495 % (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd))
1496 )
1496 )
1497 if repo.dirstate[dst] in b'?r' and not dryrun:
1497 if repo.dirstate[dst] in b'?r' and not dryrun:
1498 wctx.add([dst])
1498 wctx.add([dst])
1499 elif not dryrun:
1499 elif not dryrun:
1500 wctx.copy(origsrc, dst)
1500 wctx.copy(origsrc, dst)
1501
1501
1502
1502
1503 def movedirstate(repo, newctx, match=None):
1503 def movedirstate(repo, newctx, match=None):
1504 """Move the dirstate to newctx and adjust it as necessary.
1504 """Move the dirstate to newctx and adjust it as necessary.
1505
1505
1506 A matcher can be provided as an optimization. It is probably a bug to pass
1506 A matcher can be provided as an optimization. It is probably a bug to pass
1507 a matcher that doesn't match all the differences between the parent of the
1507 a matcher that doesn't match all the differences between the parent of the
1508 working copy and newctx.
1508 working copy and newctx.
1509 """
1509 """
1510 oldctx = repo[b'.']
1510 oldctx = repo[b'.']
1511 ds = repo.dirstate
1511 ds = repo.dirstate
1512 copies = dict(ds.copies())
1512 copies = dict(ds.copies())
1513 ds.setparents(newctx.node(), nullid)
1513 ds.setparents(newctx.node(), nullid)
1514 s = newctx.status(oldctx, match=match)
1514 s = newctx.status(oldctx, match=match)
1515 for f in s.modified:
1515 for f in s.modified:
1516 if ds[f] == b'r':
1516 if ds[f] == b'r':
1517 # modified + removed -> removed
1517 # modified + removed -> removed
1518 continue
1518 continue
1519 ds.normallookup(f)
1519 ds.normallookup(f)
1520
1520
1521 for f in s.added:
1521 for f in s.added:
1522 if ds[f] == b'r':
1522 if ds[f] == b'r':
1523 # added + removed -> unknown
1523 # added + removed -> unknown
1524 ds.drop(f)
1524 ds.drop(f)
1525 elif ds[f] != b'a':
1525 elif ds[f] != b'a':
1526 ds.add(f)
1526 ds.add(f)
1527
1527
1528 for f in s.removed:
1528 for f in s.removed:
1529 if ds[f] == b'a':
1529 if ds[f] == b'a':
1530 # removed + added -> normal
1530 # removed + added -> normal
1531 ds.normallookup(f)
1531 ds.normallookup(f)
1532 elif ds[f] != b'r':
1532 elif ds[f] != b'r':
1533 ds.remove(f)
1533 ds.remove(f)
1534
1534
1535 # Merge old parent and old working dir copies
1535 # Merge old parent and old working dir copies
1536 oldcopies = copiesmod.pathcopies(newctx, oldctx, match)
1536 oldcopies = copiesmod.pathcopies(newctx, oldctx, match)
1537 oldcopies.update(copies)
1537 oldcopies.update(copies)
1538 copies = {
1538 copies = {
1539 dst: oldcopies.get(src, src)
1539 dst: oldcopies.get(src, src)
1540 for dst, src in pycompat.iteritems(oldcopies)
1540 for dst, src in pycompat.iteritems(oldcopies)
1541 }
1541 }
1542 # Adjust the dirstate copies
1542 # Adjust the dirstate copies
1543 for dst, src in pycompat.iteritems(copies):
1543 for dst, src in pycompat.iteritems(copies):
1544 if src not in newctx or dst in newctx or ds[dst] != b'a':
1544 if src not in newctx or dst in newctx or ds[dst] != b'a':
1545 src = None
1545 src = None
1546 ds.copy(src, dst)
1546 ds.copy(src, dst)
1547 repo._quick_access_changeid_invalidate()
1547 repo._quick_access_changeid_invalidate()
1548
1548
1549
1549
1550 def filterrequirements(requirements):
1550 def filterrequirements(requirements):
1551 """filters the requirements into two sets:
1551 """filters the requirements into two sets:
1552
1552
1553 wcreq: requirements which should be written in .hg/requires
1553 wcreq: requirements which should be written in .hg/requires
1554 storereq: which should be written in .hg/store/requires
1554 storereq: which should be written in .hg/store/requires
1555
1555
1556 Returns (wcreq, storereq)
1556 Returns (wcreq, storereq)
1557 """
1557 """
1558 if requirementsmod.SHARESAFE_REQUIREMENT in requirements:
1558 if requirementsmod.SHARESAFE_REQUIREMENT in requirements:
1559 wc, store = set(), set()
1559 wc, store = set(), set()
1560 for r in requirements:
1560 for r in requirements:
1561 if r in requirementsmod.WORKING_DIR_REQUIREMENTS:
1561 if r in requirementsmod.WORKING_DIR_REQUIREMENTS:
1562 wc.add(r)
1562 wc.add(r)
1563 else:
1563 else:
1564 store.add(r)
1564 store.add(r)
1565 return wc, store
1565 return wc, store
1566 return requirements, None
1566 return requirements, None
1567
1567
1568
1568
1569 def istreemanifest(repo):
1569 def istreemanifest(repo):
1570 """ returns whether the repository is using treemanifest or not """
1570 """ returns whether the repository is using treemanifest or not """
1571 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements
1571 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements
1572
1572
1573
1573
1574 def writereporequirements(repo, requirements=None):
1574 def writereporequirements(repo, requirements=None):
1575 """ writes requirements for the repo to .hg/requires """
1575 """ writes requirements for the repo to .hg/requires """
1576 if requirements:
1576 if requirements:
1577 repo.requirements = requirements
1577 repo.requirements = requirements
1578 wcreq, storereq = filterrequirements(repo.requirements)
1578 wcreq, storereq = filterrequirements(repo.requirements)
1579 if wcreq is not None:
1579 if wcreq is not None:
1580 writerequires(repo.vfs, wcreq)
1580 writerequires(repo.vfs, wcreq)
1581 if storereq is not None:
1581 if storereq is not None:
1582 writerequires(repo.svfs, storereq)
1582 writerequires(repo.svfs, storereq)
1583 elif repo.ui.configbool(b'format', b'usestore'):
1583 elif repo.ui.configbool(b'format', b'usestore'):
1584 # only remove store requires if we are using store
1584 # only remove store requires if we are using store
1585 repo.svfs.tryunlink(b'requires')
1585 repo.svfs.tryunlink(b'requires')
1586
1586
1587
1587
1588 def writerequires(opener, requirements):
1588 def writerequires(opener, requirements):
1589 with opener(b'requires', b'w', atomictemp=True) as fp:
1589 with opener(b'requires', b'w', atomictemp=True) as fp:
1590 for r in sorted(requirements):
1590 for r in sorted(requirements):
1591 fp.write(b"%s\n" % r)
1591 fp.write(b"%s\n" % r)
1592
1592
1593
1593
1594 class filecachesubentry(object):
1594 class filecachesubentry(object):
1595 def __init__(self, path, stat):
1595 def __init__(self, path, stat):
1596 self.path = path
1596 self.path = path
1597 self.cachestat = None
1597 self.cachestat = None
1598 self._cacheable = None
1598 self._cacheable = None
1599
1599
1600 if stat:
1600 if stat:
1601 self.cachestat = filecachesubentry.stat(self.path)
1601 self.cachestat = filecachesubentry.stat(self.path)
1602
1602
1603 if self.cachestat:
1603 if self.cachestat:
1604 self._cacheable = self.cachestat.cacheable()
1604 self._cacheable = self.cachestat.cacheable()
1605 else:
1605 else:
1606 # None means we don't know yet
1606 # None means we don't know yet
1607 self._cacheable = None
1607 self._cacheable = None
1608
1608
1609 def refresh(self):
1609 def refresh(self):
1610 if self.cacheable():
1610 if self.cacheable():
1611 self.cachestat = filecachesubentry.stat(self.path)
1611 self.cachestat = filecachesubentry.stat(self.path)
1612
1612
1613 def cacheable(self):
1613 def cacheable(self):
1614 if self._cacheable is not None:
1614 if self._cacheable is not None:
1615 return self._cacheable
1615 return self._cacheable
1616
1616
1617 # we don't know yet, assume it is for now
1617 # we don't know yet, assume it is for now
1618 return True
1618 return True
1619
1619
1620 def changed(self):
1620 def changed(self):
1621 # no point in going further if we can't cache it
1621 # no point in going further if we can't cache it
1622 if not self.cacheable():
1622 if not self.cacheable():
1623 return True
1623 return True
1624
1624
1625 newstat = filecachesubentry.stat(self.path)
1625 newstat = filecachesubentry.stat(self.path)
1626
1626
1627 # we may not know if it's cacheable yet, check again now
1627 # we may not know if it's cacheable yet, check again now
1628 if newstat and self._cacheable is None:
1628 if newstat and self._cacheable is None:
1629 self._cacheable = newstat.cacheable()
1629 self._cacheable = newstat.cacheable()
1630
1630
1631 # check again
1631 # check again
1632 if not self._cacheable:
1632 if not self._cacheable:
1633 return True
1633 return True
1634
1634
1635 if self.cachestat != newstat:
1635 if self.cachestat != newstat:
1636 self.cachestat = newstat
1636 self.cachestat = newstat
1637 return True
1637 return True
1638 else:
1638 else:
1639 return False
1639 return False
1640
1640
1641 @staticmethod
1641 @staticmethod
1642 def stat(path):
1642 def stat(path):
1643 try:
1643 try:
1644 return util.cachestat(path)
1644 return util.cachestat(path)
1645 except OSError as e:
1645 except OSError as e:
1646 if e.errno != errno.ENOENT:
1646 if e.errno != errno.ENOENT:
1647 raise
1647 raise
1648
1648
1649
1649
1650 class filecacheentry(object):
1650 class filecacheentry(object):
1651 def __init__(self, paths, stat=True):
1651 def __init__(self, paths, stat=True):
1652 self._entries = []
1652 self._entries = []
1653 for path in paths:
1653 for path in paths:
1654 self._entries.append(filecachesubentry(path, stat))
1654 self._entries.append(filecachesubentry(path, stat))
1655
1655
1656 def changed(self):
1656 def changed(self):
1657 '''true if any entry has changed'''
1657 '''true if any entry has changed'''
1658 for entry in self._entries:
1658 for entry in self._entries:
1659 if entry.changed():
1659 if entry.changed():
1660 return True
1660 return True
1661 return False
1661 return False
1662
1662
1663 def refresh(self):
1663 def refresh(self):
1664 for entry in self._entries:
1664 for entry in self._entries:
1665 entry.refresh()
1665 entry.refresh()
1666
1666
1667
1667
1668 class filecache(object):
1668 class filecache(object):
1669 """A property like decorator that tracks files under .hg/ for updates.
1669 """A property like decorator that tracks files under .hg/ for updates.
1670
1670
1671 On first access, the files defined as arguments are stat()ed and the
1671 On first access, the files defined as arguments are stat()ed and the
1672 results cached. The decorated function is called. The results are stashed
1672 results cached. The decorated function is called. The results are stashed
1673 away in a ``_filecache`` dict on the object whose method is decorated.
1673 away in a ``_filecache`` dict on the object whose method is decorated.
1674
1674
1675 On subsequent access, the cached result is used as it is set to the
1675 On subsequent access, the cached result is used as it is set to the
1676 instance dictionary.
1676 instance dictionary.
1677
1677
1678 On external property set/delete operations, the caller must update the
1678 On external property set/delete operations, the caller must update the
1679 corresponding _filecache entry appropriately. Use __class__.<attr>.set()
1679 corresponding _filecache entry appropriately. Use __class__.<attr>.set()
1680 instead of directly setting <attr>.
1680 instead of directly setting <attr>.
1681
1681
1682 When using the property API, the cached data is always used if available.
1682 When using the property API, the cached data is always used if available.
1683 No stat() is performed to check if the file has changed.
1683 No stat() is performed to check if the file has changed.
1684
1684
1685 Others can muck about with the state of the ``_filecache`` dict. e.g. they
1685 Others can muck about with the state of the ``_filecache`` dict. e.g. they
1686 can populate an entry before the property's getter is called. In this case,
1686 can populate an entry before the property's getter is called. In this case,
1687 entries in ``_filecache`` will be used during property operations,
1687 entries in ``_filecache`` will be used during property operations,
1688 if available. If the underlying file changes, it is up to external callers
1688 if available. If the underlying file changes, it is up to external callers
1689 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached
1689 to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached
1690 method result as well as possibly calling ``del obj._filecache[attr]`` to
1690 method result as well as possibly calling ``del obj._filecache[attr]`` to
1691 remove the ``filecacheentry``.
1691 remove the ``filecacheentry``.
1692 """
1692 """
1693
1693
1694 def __init__(self, *paths):
1694 def __init__(self, *paths):
1695 self.paths = paths
1695 self.paths = paths
1696
1696
1697 def join(self, obj, fname):
1697 def join(self, obj, fname):
1698 """Used to compute the runtime path of a cached file.
1698 """Used to compute the runtime path of a cached file.
1699
1699
1700 Users should subclass filecache and provide their own version of this
1700 Users should subclass filecache and provide their own version of this
1701 function to call the appropriate join function on 'obj' (an instance
1701 function to call the appropriate join function on 'obj' (an instance
1702 of the class that its member function was decorated).
1702 of the class that its member function was decorated).
1703 """
1703 """
1704 raise NotImplementedError
1704 raise NotImplementedError
1705
1705
1706 def __call__(self, func):
1706 def __call__(self, func):
1707 self.func = func
1707 self.func = func
1708 self.sname = func.__name__
1708 self.sname = func.__name__
1709 self.name = pycompat.sysbytes(self.sname)
1709 self.name = pycompat.sysbytes(self.sname)
1710 return self
1710 return self
1711
1711
1712 def __get__(self, obj, type=None):
1712 def __get__(self, obj, type=None):
1713 # if accessed on the class, return the descriptor itself.
1713 # if accessed on the class, return the descriptor itself.
1714 if obj is None:
1714 if obj is None:
1715 return self
1715 return self
1716
1716
1717 assert self.sname not in obj.__dict__
1717 assert self.sname not in obj.__dict__
1718
1718
1719 entry = obj._filecache.get(self.name)
1719 entry = obj._filecache.get(self.name)
1720
1720
1721 if entry:
1721 if entry:
1722 if entry.changed():
1722 if entry.changed():
1723 entry.obj = self.func(obj)
1723 entry.obj = self.func(obj)
1724 else:
1724 else:
1725 paths = [self.join(obj, path) for path in self.paths]
1725 paths = [self.join(obj, path) for path in self.paths]
1726
1726
1727 # We stat -before- creating the object so our cache doesn't lie if
1727 # We stat -before- creating the object so our cache doesn't lie if
1728 # a writer modified between the time we read and stat
1728 # a writer modified between the time we read and stat
1729 entry = filecacheentry(paths, True)
1729 entry = filecacheentry(paths, True)
1730 entry.obj = self.func(obj)
1730 entry.obj = self.func(obj)
1731
1731
1732 obj._filecache[self.name] = entry
1732 obj._filecache[self.name] = entry
1733
1733
1734 obj.__dict__[self.sname] = entry.obj
1734 obj.__dict__[self.sname] = entry.obj
1735 return entry.obj
1735 return entry.obj
1736
1736
1737 # don't implement __set__(), which would make __dict__ lookup as slow as
1737 # don't implement __set__(), which would make __dict__ lookup as slow as
1738 # function call.
1738 # function call.
1739
1739
1740 def set(self, obj, value):
1740 def set(self, obj, value):
1741 if self.name not in obj._filecache:
1741 if self.name not in obj._filecache:
1742 # we add an entry for the missing value because X in __dict__
1742 # we add an entry for the missing value because X in __dict__
1743 # implies X in _filecache
1743 # implies X in _filecache
1744 paths = [self.join(obj, path) for path in self.paths]
1744 paths = [self.join(obj, path) for path in self.paths]
1745 ce = filecacheentry(paths, False)
1745 ce = filecacheentry(paths, False)
1746 obj._filecache[self.name] = ce
1746 obj._filecache[self.name] = ce
1747 else:
1747 else:
1748 ce = obj._filecache[self.name]
1748 ce = obj._filecache[self.name]
1749
1749
1750 ce.obj = value # update cached copy
1750 ce.obj = value # update cached copy
1751 obj.__dict__[self.sname] = value # update copy returned by obj.x
1751 obj.__dict__[self.sname] = value # update copy returned by obj.x
1752
1752
1753
1753
1754 def extdatasource(repo, source):
1754 def extdatasource(repo, source):
1755 """Gather a map of rev -> value dict from the specified source
1755 """Gather a map of rev -> value dict from the specified source
1756
1756
1757 A source spec is treated as a URL, with a special case shell: type
1757 A source spec is treated as a URL, with a special case shell: type
1758 for parsing the output from a shell command.
1758 for parsing the output from a shell command.
1759
1759
1760 The data is parsed as a series of newline-separated records where
1760 The data is parsed as a series of newline-separated records where
1761 each record is a revision specifier optionally followed by a space
1761 each record is a revision specifier optionally followed by a space
1762 and a freeform string value. If the revision is known locally, it
1762 and a freeform string value. If the revision is known locally, it
1763 is converted to a rev, otherwise the record is skipped.
1763 is converted to a rev, otherwise the record is skipped.
1764
1764
1765 Note that both key and value are treated as UTF-8 and converted to
1765 Note that both key and value are treated as UTF-8 and converted to
1766 the local encoding. This allows uniformity between local and
1766 the local encoding. This allows uniformity between local and
1767 remote data sources.
1767 remote data sources.
1768 """
1768 """
1769
1769
1770 spec = repo.ui.config(b"extdata", source)
1770 spec = repo.ui.config(b"extdata", source)
1771 if not spec:
1771 if not spec:
1772 raise error.Abort(_(b"unknown extdata source '%s'") % source)
1772 raise error.Abort(_(b"unknown extdata source '%s'") % source)
1773
1773
1774 data = {}
1774 data = {}
1775 src = proc = None
1775 src = proc = None
1776 try:
1776 try:
1777 if spec.startswith(b"shell:"):
1777 if spec.startswith(b"shell:"):
1778 # external commands should be run relative to the repo root
1778 # external commands should be run relative to the repo root
1779 cmd = spec[6:]
1779 cmd = spec[6:]
1780 proc = subprocess.Popen(
1780 proc = subprocess.Popen(
1781 procutil.tonativestr(cmd),
1781 procutil.tonativestr(cmd),
1782 shell=True,
1782 shell=True,
1783 bufsize=-1,
1783 bufsize=-1,
1784 close_fds=procutil.closefds,
1784 close_fds=procutil.closefds,
1785 stdout=subprocess.PIPE,
1785 stdout=subprocess.PIPE,
1786 cwd=procutil.tonativestr(repo.root),
1786 cwd=procutil.tonativestr(repo.root),
1787 )
1787 )
1788 src = proc.stdout
1788 src = proc.stdout
1789 else:
1789 else:
1790 # treat as a URL or file
1790 # treat as a URL or file
1791 src = url.open(repo.ui, spec)
1791 src = url.open(repo.ui, spec)
1792 for l in src:
1792 for l in src:
1793 if b" " in l:
1793 if b" " in l:
1794 k, v = l.strip().split(b" ", 1)
1794 k, v = l.strip().split(b" ", 1)
1795 else:
1795 else:
1796 k, v = l.strip(), b""
1796 k, v = l.strip(), b""
1797
1797
1798 k = encoding.tolocal(k)
1798 k = encoding.tolocal(k)
1799 try:
1799 try:
1800 data[revsingle(repo, k).rev()] = encoding.tolocal(v)
1800 data[revsingle(repo, k).rev()] = encoding.tolocal(v)
1801 except (error.LookupError, error.RepoLookupError):
1801 except (error.LookupError, error.RepoLookupError):
1802 pass # we ignore data for nodes that don't exist locally
1802 pass # we ignore data for nodes that don't exist locally
1803 finally:
1803 finally:
1804 if proc:
1804 if proc:
1805 try:
1805 try:
1806 proc.communicate()
1806 proc.communicate()
1807 except ValueError:
1807 except ValueError:
1808 # This happens if we started iterating src and then
1808 # This happens if we started iterating src and then
1809 # get a parse error on a line. It should be safe to ignore.
1809 # get a parse error on a line. It should be safe to ignore.
1810 pass
1810 pass
1811 if src:
1811 if src:
1812 src.close()
1812 src.close()
1813 if proc and proc.returncode != 0:
1813 if proc and proc.returncode != 0:
1814 raise error.Abort(
1814 raise error.Abort(
1815 _(b"extdata command '%s' failed: %s")
1815 _(b"extdata command '%s' failed: %s")
1816 % (cmd, procutil.explainexit(proc.returncode))
1816 % (cmd, procutil.explainexit(proc.returncode))
1817 )
1817 )
1818
1818
1819 return data
1819 return data
1820
1820
1821
1821
1822 class progress(object):
1822 class progress(object):
1823 def __init__(self, ui, updatebar, topic, unit=b"", total=None):
1823 def __init__(self, ui, updatebar, topic, unit=b"", total=None):
1824 self.ui = ui
1824 self.ui = ui
1825 self.pos = 0
1825 self.pos = 0
1826 self.topic = topic
1826 self.topic = topic
1827 self.unit = unit
1827 self.unit = unit
1828 self.total = total
1828 self.total = total
1829 self.debug = ui.configbool(b'progress', b'debug')
1829 self.debug = ui.configbool(b'progress', b'debug')
1830 self._updatebar = updatebar
1830 self._updatebar = updatebar
1831
1831
1832 def __enter__(self):
1832 def __enter__(self):
1833 return self
1833 return self
1834
1834
1835 def __exit__(self, exc_type, exc_value, exc_tb):
1835 def __exit__(self, exc_type, exc_value, exc_tb):
1836 self.complete()
1836 self.complete()
1837
1837
1838 def update(self, pos, item=b"", total=None):
1838 def update(self, pos, item=b"", total=None):
1839 assert pos is not None
1839 assert pos is not None
1840 if total:
1840 if total:
1841 self.total = total
1841 self.total = total
1842 self.pos = pos
1842 self.pos = pos
1843 self._updatebar(self.topic, self.pos, item, self.unit, self.total)
1843 self._updatebar(self.topic, self.pos, item, self.unit, self.total)
1844 if self.debug:
1844 if self.debug:
1845 self._printdebug(item)
1845 self._printdebug(item)
1846
1846
1847 def increment(self, step=1, item=b"", total=None):
1847 def increment(self, step=1, item=b"", total=None):
1848 self.update(self.pos + step, item, total)
1848 self.update(self.pos + step, item, total)
1849
1849
1850 def complete(self):
1850 def complete(self):
1851 self.pos = None
1851 self.pos = None
1852 self.unit = b""
1852 self.unit = b""
1853 self.total = None
1853 self.total = None
1854 self._updatebar(self.topic, self.pos, b"", self.unit, self.total)
1854 self._updatebar(self.topic, self.pos, b"", self.unit, self.total)
1855
1855
1856 def _printdebug(self, item):
1856 def _printdebug(self, item):
1857 unit = b''
1857 unit = b''
1858 if self.unit:
1858 if self.unit:
1859 unit = b' ' + self.unit
1859 unit = b' ' + self.unit
1860 if item:
1860 if item:
1861 item = b' ' + item
1861 item = b' ' + item
1862
1862
1863 if self.total:
1863 if self.total:
1864 pct = 100.0 * self.pos / self.total
1864 pct = 100.0 * self.pos / self.total
1865 self.ui.debug(
1865 self.ui.debug(
1866 b'%s:%s %d/%d%s (%4.2f%%)\n'
1866 b'%s:%s %d/%d%s (%4.2f%%)\n'
1867 % (self.topic, item, self.pos, self.total, unit, pct)
1867 % (self.topic, item, self.pos, self.total, unit, pct)
1868 )
1868 )
1869 else:
1869 else:
1870 self.ui.debug(b'%s:%s %d%s\n' % (self.topic, item, self.pos, unit))
1870 self.ui.debug(b'%s:%s %d%s\n' % (self.topic, item, self.pos, unit))
1871
1871
1872
1872
1873 def gdinitconfig(ui):
1873 def gdinitconfig(ui):
1874 """helper function to know if a repo should be created as general delta"""
1874 """helper function to know if a repo should be created as general delta"""
1875 # experimental config: format.generaldelta
1875 # experimental config: format.generaldelta
1876 return ui.configbool(b'format', b'generaldelta') or ui.configbool(
1876 return ui.configbool(b'format', b'generaldelta') or ui.configbool(
1877 b'format', b'usegeneraldelta'
1877 b'format', b'usegeneraldelta'
1878 )
1878 )
1879
1879
1880
1880
1881 def gddeltaconfig(ui):
1881 def gddeltaconfig(ui):
1882 """helper function to know if incoming delta should be optimised"""
1882 """helper function to know if incoming delta should be optimised"""
1883 # experimental config: format.generaldelta
1883 # experimental config: format.generaldelta
1884 return ui.configbool(b'format', b'generaldelta')
1884 return ui.configbool(b'format', b'generaldelta')
1885
1885
1886
1886
1887 class simplekeyvaluefile(object):
1887 class simplekeyvaluefile(object):
1888 """A simple file with key=value lines
1888 """A simple file with key=value lines
1889
1889
1890 Keys must be alphanumerics and start with a letter, values must not
1890 Keys must be alphanumerics and start with a letter, values must not
1891 contain '\n' characters"""
1891 contain '\n' characters"""
1892
1892
1893 firstlinekey = b'__firstline'
1893 firstlinekey = b'__firstline'
1894
1894
1895 def __init__(self, vfs, path, keys=None):
1895 def __init__(self, vfs, path, keys=None):
1896 self.vfs = vfs
1896 self.vfs = vfs
1897 self.path = path
1897 self.path = path
1898
1898
1899 def read(self, firstlinenonkeyval=False):
1899 def read(self, firstlinenonkeyval=False):
1900 """Read the contents of a simple key-value file
1900 """Read the contents of a simple key-value file
1901
1901
1902 'firstlinenonkeyval' indicates whether the first line of file should
1902 'firstlinenonkeyval' indicates whether the first line of file should
1903 be treated as a key-value pair or reuturned fully under the
1903 be treated as a key-value pair or reuturned fully under the
1904 __firstline key."""
1904 __firstline key."""
1905 lines = self.vfs.readlines(self.path)
1905 lines = self.vfs.readlines(self.path)
1906 d = {}
1906 d = {}
1907 if firstlinenonkeyval:
1907 if firstlinenonkeyval:
1908 if not lines:
1908 if not lines:
1909 e = _(b"empty simplekeyvalue file")
1909 e = _(b"empty simplekeyvalue file")
1910 raise error.CorruptedState(e)
1910 raise error.CorruptedState(e)
1911 # we don't want to include '\n' in the __firstline
1911 # we don't want to include '\n' in the __firstline
1912 d[self.firstlinekey] = lines[0][:-1]
1912 d[self.firstlinekey] = lines[0][:-1]
1913 del lines[0]
1913 del lines[0]
1914
1914
1915 try:
1915 try:
1916 # the 'if line.strip()' part prevents us from failing on empty
1916 # the 'if line.strip()' part prevents us from failing on empty
1917 # lines which only contain '\n' therefore are not skipped
1917 # lines which only contain '\n' therefore are not skipped
1918 # by 'if line'
1918 # by 'if line'
1919 updatedict = dict(
1919 updatedict = dict(
1920 line[:-1].split(b'=', 1) for line in lines if line.strip()
1920 line[:-1].split(b'=', 1) for line in lines if line.strip()
1921 )
1921 )
1922 if self.firstlinekey in updatedict:
1922 if self.firstlinekey in updatedict:
1923 e = _(b"%r can't be used as a key")
1923 e = _(b"%r can't be used as a key")
1924 raise error.CorruptedState(e % self.firstlinekey)
1924 raise error.CorruptedState(e % self.firstlinekey)
1925 d.update(updatedict)
1925 d.update(updatedict)
1926 except ValueError as e:
1926 except ValueError as e:
1927 raise error.CorruptedState(stringutil.forcebytestr(e))
1927 raise error.CorruptedState(stringutil.forcebytestr(e))
1928 return d
1928 return d
1929
1929
1930 def write(self, data, firstline=None):
1930 def write(self, data, firstline=None):
1931 """Write key=>value mapping to a file
1931 """Write key=>value mapping to a file
1932 data is a dict. Keys must be alphanumerical and start with a letter.
1932 data is a dict. Keys must be alphanumerical and start with a letter.
1933 Values must not contain newline characters.
1933 Values must not contain newline characters.
1934
1934
1935 If 'firstline' is not None, it is written to file before
1935 If 'firstline' is not None, it is written to file before
1936 everything else, as it is, not in a key=value form"""
1936 everything else, as it is, not in a key=value form"""
1937 lines = []
1937 lines = []
1938 if firstline is not None:
1938 if firstline is not None:
1939 lines.append(b'%s\n' % firstline)
1939 lines.append(b'%s\n' % firstline)
1940
1940
1941 for k, v in data.items():
1941 for k, v in data.items():
1942 if k == self.firstlinekey:
1942 if k == self.firstlinekey:
1943 e = b"key name '%s' is reserved" % self.firstlinekey
1943 e = b"key name '%s' is reserved" % self.firstlinekey
1944 raise error.ProgrammingError(e)
1944 raise error.ProgrammingError(e)
1945 if not k[0:1].isalpha():
1945 if not k[0:1].isalpha():
1946 e = b"keys must start with a letter in a key-value file"
1946 e = b"keys must start with a letter in a key-value file"
1947 raise error.ProgrammingError(e)
1947 raise error.ProgrammingError(e)
1948 if not k.isalnum():
1948 if not k.isalnum():
1949 e = b"invalid key name in a simple key-value file"
1949 e = b"invalid key name in a simple key-value file"
1950 raise error.ProgrammingError(e)
1950 raise error.ProgrammingError(e)
1951 if b'\n' in v:
1951 if b'\n' in v:
1952 e = b"invalid value in a simple key-value file"
1952 e = b"invalid value in a simple key-value file"
1953 raise error.ProgrammingError(e)
1953 raise error.ProgrammingError(e)
1954 lines.append(b"%s=%s\n" % (k, v))
1954 lines.append(b"%s=%s\n" % (k, v))
1955 with self.vfs(self.path, mode=b'wb', atomictemp=True) as fp:
1955 with self.vfs(self.path, mode=b'wb', atomictemp=True) as fp:
1956 fp.write(b''.join(lines))
1956 fp.write(b''.join(lines))
1957
1957
1958
1958
1959 _reportobsoletedsource = [
1959 _reportobsoletedsource = [
1960 b'debugobsolete',
1960 b'debugobsolete',
1961 b'pull',
1961 b'pull',
1962 b'push',
1962 b'push',
1963 b'serve',
1963 b'serve',
1964 b'unbundle',
1964 b'unbundle',
1965 ]
1965 ]
1966
1966
1967 _reportnewcssource = [
1967 _reportnewcssource = [
1968 b'pull',
1968 b'pull',
1969 b'unbundle',
1969 b'unbundle',
1970 ]
1970 ]
1971
1971
1972
1972
1973 def prefetchfiles(repo, revmatches):
1973 def prefetchfiles(repo, revmatches):
1974 """Invokes the registered file prefetch functions, allowing extensions to
1974 """Invokes the registered file prefetch functions, allowing extensions to
1975 ensure the corresponding files are available locally, before the command
1975 ensure the corresponding files are available locally, before the command
1976 uses them.
1976 uses them.
1977
1977
1978 Args:
1978 Args:
1979 revmatches: a list of (revision, match) tuples to indicate the files to
1979 revmatches: a list of (revision, match) tuples to indicate the files to
1980 fetch at each revision. If any of the match elements is None, it matches
1980 fetch at each revision. If any of the match elements is None, it matches
1981 all files.
1981 all files.
1982 """
1982 """
1983
1983
1984 def _matcher(m):
1984 def _matcher(m):
1985 if m:
1985 if m:
1986 assert isinstance(m, matchmod.basematcher)
1986 assert isinstance(m, matchmod.basematcher)
1987 # The command itself will complain about files that don't exist, so
1987 # The command itself will complain about files that don't exist, so
1988 # don't duplicate the message.
1988 # don't duplicate the message.
1989 return matchmod.badmatch(m, lambda fn, msg: None)
1989 return matchmod.badmatch(m, lambda fn, msg: None)
1990 else:
1990 else:
1991 return matchall(repo)
1991 return matchall(repo)
1992
1992
1993 revbadmatches = [(rev, _matcher(match)) for (rev, match) in revmatches]
1993 revbadmatches = [(rev, _matcher(match)) for (rev, match) in revmatches]
1994
1994
1995 fileprefetchhooks(repo, revbadmatches)
1995 fileprefetchhooks(repo, revbadmatches)
1996
1996
1997
1997
1998 # a list of (repo, revs, match) prefetch functions
1998 # a list of (repo, revs, match) prefetch functions
1999 fileprefetchhooks = util.hooks()
1999 fileprefetchhooks = util.hooks()
2000
2000
2001 # A marker that tells the evolve extension to suppress its own reporting
2001 # A marker that tells the evolve extension to suppress its own reporting
2002 _reportstroubledchangesets = True
2002 _reportstroubledchangesets = True
2003
2003
2004
2004
2005 def registersummarycallback(repo, otr, txnname=b'', as_validator=False):
2005 def registersummarycallback(repo, otr, txnname=b'', as_validator=False):
2006 """register a callback to issue a summary after the transaction is closed
2006 """register a callback to issue a summary after the transaction is closed
2007
2007
2008 If as_validator is true, then the callbacks are registered as transaction
2008 If as_validator is true, then the callbacks are registered as transaction
2009 validators instead
2009 validators instead
2010 """
2010 """
2011
2011
2012 def txmatch(sources):
2012 def txmatch(sources):
2013 return any(txnname.startswith(source) for source in sources)
2013 return any(txnname.startswith(source) for source in sources)
2014
2014
2015 categories = []
2015 categories = []
2016
2016
2017 def reportsummary(func):
2017 def reportsummary(func):
2018 """decorator for report callbacks."""
2018 """decorator for report callbacks."""
2019 # The repoview life cycle is shorter than the one of the actual
2019 # The repoview life cycle is shorter than the one of the actual
2020 # underlying repository. So the filtered object can die before the
2020 # underlying repository. So the filtered object can die before the
2021 # weakref is used leading to troubles. We keep a reference to the
2021 # weakref is used leading to troubles. We keep a reference to the
2022 # unfiltered object and restore the filtering when retrieving the
2022 # unfiltered object and restore the filtering when retrieving the
2023 # repository through the weakref.
2023 # repository through the weakref.
2024 filtername = repo.filtername
2024 filtername = repo.filtername
2025 reporef = weakref.ref(repo.unfiltered())
2025 reporef = weakref.ref(repo.unfiltered())
2026
2026
2027 def wrapped(tr):
2027 def wrapped(tr):
2028 repo = reporef()
2028 repo = reporef()
2029 if filtername:
2029 if filtername:
2030 assert repo is not None # help pytype
2030 assert repo is not None # help pytype
2031 repo = repo.filtered(filtername)
2031 repo = repo.filtered(filtername)
2032 func(repo, tr)
2032 func(repo, tr)
2033
2033
2034 newcat = b'%02i-txnreport' % len(categories)
2034 newcat = b'%02i-txnreport' % len(categories)
2035 if as_validator:
2035 if as_validator:
2036 otr.addvalidator(newcat, wrapped)
2036 otr.addvalidator(newcat, wrapped)
2037 else:
2037 else:
2038 otr.addpostclose(newcat, wrapped)
2038 otr.addpostclose(newcat, wrapped)
2039 categories.append(newcat)
2039 categories.append(newcat)
2040 return wrapped
2040 return wrapped
2041
2041
2042 @reportsummary
2042 @reportsummary
2043 def reportchangegroup(repo, tr):
2043 def reportchangegroup(repo, tr):
2044 cgchangesets = tr.changes.get(b'changegroup-count-changesets', 0)
2044 cgchangesets = tr.changes.get(b'changegroup-count-changesets', 0)
2045 cgrevisions = tr.changes.get(b'changegroup-count-revisions', 0)
2045 cgrevisions = tr.changes.get(b'changegroup-count-revisions', 0)
2046 cgfiles = tr.changes.get(b'changegroup-count-files', 0)
2046 cgfiles = tr.changes.get(b'changegroup-count-files', 0)
2047 cgheads = tr.changes.get(b'changegroup-count-heads', 0)
2047 cgheads = tr.changes.get(b'changegroup-count-heads', 0)
2048 if cgchangesets or cgrevisions or cgfiles:
2048 if cgchangesets or cgrevisions or cgfiles:
2049 htext = b""
2049 htext = b""
2050 if cgheads:
2050 if cgheads:
2051 htext = _(b" (%+d heads)") % cgheads
2051 htext = _(b" (%+d heads)") % cgheads
2052 msg = _(b"added %d changesets with %d changes to %d files%s\n")
2052 msg = _(b"added %d changesets with %d changes to %d files%s\n")
2053 if as_validator:
2053 if as_validator:
2054 msg = _(b"adding %d changesets with %d changes to %d files%s\n")
2054 msg = _(b"adding %d changesets with %d changes to %d files%s\n")
2055 assert repo is not None # help pytype
2055 assert repo is not None # help pytype
2056 repo.ui.status(msg % (cgchangesets, cgrevisions, cgfiles, htext))
2056 repo.ui.status(msg % (cgchangesets, cgrevisions, cgfiles, htext))
2057
2057
2058 if txmatch(_reportobsoletedsource):
2058 if txmatch(_reportobsoletedsource):
2059
2059
2060 @reportsummary
2060 @reportsummary
2061 def reportobsoleted(repo, tr):
2061 def reportobsoleted(repo, tr):
2062 obsoleted = obsutil.getobsoleted(repo, tr)
2062 obsoleted = obsutil.getobsoleted(repo, tr)
2063 newmarkers = len(tr.changes.get(b'obsmarkers', ()))
2063 newmarkers = len(tr.changes.get(b'obsmarkers', ()))
2064 if newmarkers:
2064 if newmarkers:
2065 repo.ui.status(_(b'%i new obsolescence markers\n') % newmarkers)
2065 repo.ui.status(_(b'%i new obsolescence markers\n') % newmarkers)
2066 if obsoleted:
2066 if obsoleted:
2067 msg = _(b'obsoleted %i changesets\n')
2067 msg = _(b'obsoleted %i changesets\n')
2068 if as_validator:
2068 if as_validator:
2069 msg = _(b'obsoleting %i changesets\n')
2069 msg = _(b'obsoleting %i changesets\n')
2070 repo.ui.status(msg % len(obsoleted))
2070 repo.ui.status(msg % len(obsoleted))
2071
2071
2072 if obsolete.isenabled(
2072 if obsolete.isenabled(
2073 repo, obsolete.createmarkersopt
2073 repo, obsolete.createmarkersopt
2074 ) and repo.ui.configbool(
2074 ) and repo.ui.configbool(
2075 b'experimental', b'evolution.report-instabilities'
2075 b'experimental', b'evolution.report-instabilities'
2076 ):
2076 ):
2077 instabilitytypes = [
2077 instabilitytypes = [
2078 (b'orphan', b'orphan'),
2078 (b'orphan', b'orphan'),
2079 (b'phase-divergent', b'phasedivergent'),
2079 (b'phase-divergent', b'phasedivergent'),
2080 (b'content-divergent', b'contentdivergent'),
2080 (b'content-divergent', b'contentdivergent'),
2081 ]
2081 ]
2082
2082
2083 def getinstabilitycounts(repo):
2083 def getinstabilitycounts(repo):
2084 filtered = repo.changelog.filteredrevs
2084 filtered = repo.changelog.filteredrevs
2085 counts = {}
2085 counts = {}
2086 for instability, revset in instabilitytypes:
2086 for instability, revset in instabilitytypes:
2087 counts[instability] = len(
2087 counts[instability] = len(
2088 set(obsolete.getrevs(repo, revset)) - filtered
2088 set(obsolete.getrevs(repo, revset)) - filtered
2089 )
2089 )
2090 return counts
2090 return counts
2091
2091
2092 oldinstabilitycounts = getinstabilitycounts(repo)
2092 oldinstabilitycounts = getinstabilitycounts(repo)
2093
2093
2094 @reportsummary
2094 @reportsummary
2095 def reportnewinstabilities(repo, tr):
2095 def reportnewinstabilities(repo, tr):
2096 newinstabilitycounts = getinstabilitycounts(repo)
2096 newinstabilitycounts = getinstabilitycounts(repo)
2097 for instability, revset in instabilitytypes:
2097 for instability, revset in instabilitytypes:
2098 delta = (
2098 delta = (
2099 newinstabilitycounts[instability]
2099 newinstabilitycounts[instability]
2100 - oldinstabilitycounts[instability]
2100 - oldinstabilitycounts[instability]
2101 )
2101 )
2102 msg = getinstabilitymessage(delta, instability)
2102 msg = getinstabilitymessage(delta, instability)
2103 if msg:
2103 if msg:
2104 repo.ui.warn(msg)
2104 repo.ui.warn(msg)
2105
2105
2106 if txmatch(_reportnewcssource):
2106 if txmatch(_reportnewcssource):
2107
2107
2108 @reportsummary
2108 @reportsummary
2109 def reportnewcs(repo, tr):
2109 def reportnewcs(repo, tr):
2110 """Report the range of new revisions pulled/unbundled."""
2110 """Report the range of new revisions pulled/unbundled."""
2111 origrepolen = tr.changes.get(b'origrepolen', len(repo))
2111 origrepolen = tr.changes.get(b'origrepolen', len(repo))
2112 unfi = repo.unfiltered()
2112 unfi = repo.unfiltered()
2113 if origrepolen >= len(unfi):
2113 if origrepolen >= len(unfi):
2114 return
2114 return
2115
2115
2116 # Compute the bounds of new visible revisions' range.
2116 # Compute the bounds of new visible revisions' range.
2117 revs = smartset.spanset(repo, start=origrepolen)
2117 revs = smartset.spanset(repo, start=origrepolen)
2118 if revs:
2118 if revs:
2119 minrev, maxrev = repo[revs.min()], repo[revs.max()]
2119 minrev, maxrev = repo[revs.min()], repo[revs.max()]
2120
2120
2121 if minrev == maxrev:
2121 if minrev == maxrev:
2122 revrange = minrev
2122 revrange = minrev
2123 else:
2123 else:
2124 revrange = b'%s:%s' % (minrev, maxrev)
2124 revrange = b'%s:%s' % (minrev, maxrev)
2125 draft = len(repo.revs(b'%ld and draft()', revs))
2125 draft = len(repo.revs(b'%ld and draft()', revs))
2126 secret = len(repo.revs(b'%ld and secret()', revs))
2126 secret = len(repo.revs(b'%ld and secret()', revs))
2127 if not (draft or secret):
2127 if not (draft or secret):
2128 msg = _(b'new changesets %s\n') % revrange
2128 msg = _(b'new changesets %s\n') % revrange
2129 elif draft and secret:
2129 elif draft and secret:
2130 msg = _(b'new changesets %s (%d drafts, %d secrets)\n')
2130 msg = _(b'new changesets %s (%d drafts, %d secrets)\n')
2131 msg %= (revrange, draft, secret)
2131 msg %= (revrange, draft, secret)
2132 elif draft:
2132 elif draft:
2133 msg = _(b'new changesets %s (%d drafts)\n')
2133 msg = _(b'new changesets %s (%d drafts)\n')
2134 msg %= (revrange, draft)
2134 msg %= (revrange, draft)
2135 elif secret:
2135 elif secret:
2136 msg = _(b'new changesets %s (%d secrets)\n')
2136 msg = _(b'new changesets %s (%d secrets)\n')
2137 msg %= (revrange, secret)
2137 msg %= (revrange, secret)
2138 else:
2138 else:
2139 errormsg = b'entered unreachable condition'
2139 errormsg = b'entered unreachable condition'
2140 raise error.ProgrammingError(errormsg)
2140 raise error.ProgrammingError(errormsg)
2141 repo.ui.status(msg)
2141 repo.ui.status(msg)
2142
2142
2143 # search new changesets directly pulled as obsolete
2143 # search new changesets directly pulled as obsolete
2144 duplicates = tr.changes.get(b'revduplicates', ())
2144 duplicates = tr.changes.get(b'revduplicates', ())
2145 obsadded = unfi.revs(
2145 obsadded = unfi.revs(
2146 b'(%d: + %ld) and obsolete()', origrepolen, duplicates
2146 b'(%d: + %ld) and obsolete()', origrepolen, duplicates
2147 )
2147 )
2148 cl = repo.changelog
2148 cl = repo.changelog
2149 extinctadded = [r for r in obsadded if r not in cl]
2149 extinctadded = [r for r in obsadded if r not in cl]
2150 if extinctadded:
2150 if extinctadded:
2151 # They are not just obsolete, but obsolete and invisible
2151 # They are not just obsolete, but obsolete and invisible
2152 # we call them "extinct" internally but the terms have not been
2152 # we call them "extinct" internally but the terms have not been
2153 # exposed to users.
2153 # exposed to users.
2154 msg = b'(%d other changesets obsolete on arrival)\n'
2154 msg = b'(%d other changesets obsolete on arrival)\n'
2155 repo.ui.status(msg % len(extinctadded))
2155 repo.ui.status(msg % len(extinctadded))
2156
2156
2157 @reportsummary
2157 @reportsummary
2158 def reportphasechanges(repo, tr):
2158 def reportphasechanges(repo, tr):
2159 """Report statistics of phase changes for changesets pre-existing
2159 """Report statistics of phase changes for changesets pre-existing
2160 pull/unbundle.
2160 pull/unbundle.
2161 """
2161 """
2162 origrepolen = tr.changes.get(b'origrepolen', len(repo))
2162 origrepolen = tr.changes.get(b'origrepolen', len(repo))
2163 published = []
2163 published = []
2164 for revs, (old, new) in tr.changes.get(b'phases', []):
2164 for revs, (old, new) in tr.changes.get(b'phases', []):
2165 if new != phases.public:
2165 if new != phases.public:
2166 continue
2166 continue
2167 published.extend(rev for rev in revs if rev < origrepolen)
2167 published.extend(rev for rev in revs if rev < origrepolen)
2168 if not published:
2168 if not published:
2169 return
2169 return
2170 msg = _(b'%d local changesets published\n')
2170 msg = _(b'%d local changesets published\n')
2171 if as_validator:
2171 if as_validator:
2172 msg = _(b'%d local changesets will be published\n')
2172 msg = _(b'%d local changesets will be published\n')
2173 repo.ui.status(msg % len(published))
2173 repo.ui.status(msg % len(published))
2174
2174
2175
2175
2176 def getinstabilitymessage(delta, instability):
2176 def getinstabilitymessage(delta, instability):
2177 """function to return the message to show warning about new instabilities
2177 """function to return the message to show warning about new instabilities
2178
2178
2179 exists as a separate function so that extension can wrap to show more
2179 exists as a separate function so that extension can wrap to show more
2180 information like how to fix instabilities"""
2180 information like how to fix instabilities"""
2181 if delta > 0:
2181 if delta > 0:
2182 return _(b'%i new %s changesets\n') % (delta, instability)
2182 return _(b'%i new %s changesets\n') % (delta, instability)
2183
2183
2184
2184
2185 def nodesummaries(repo, nodes, maxnumnodes=4):
2185 def nodesummaries(repo, nodes, maxnumnodes=4):
2186 if len(nodes) <= maxnumnodes or repo.ui.verbose:
2186 if len(nodes) <= maxnumnodes or repo.ui.verbose:
2187 return b' '.join(short(h) for h in nodes)
2187 return b' '.join(short(h) for h in nodes)
2188 first = b' '.join(short(h) for h in nodes[:maxnumnodes])
2188 first = b' '.join(short(h) for h in nodes[:maxnumnodes])
2189 return _(b"%s and %d others") % (first, len(nodes) - maxnumnodes)
2189 return _(b"%s and %d others") % (first, len(nodes) - maxnumnodes)
2190
2190
2191
2191
2192 def enforcesinglehead(repo, tr, desc, accountclosed=False):
2192 def enforcesinglehead(repo, tr, desc, accountclosed=False):
2193 """check that no named branch has multiple heads"""
2193 """check that no named branch has multiple heads"""
2194 if desc in (b'strip', b'repair'):
2194 if desc in (b'strip', b'repair'):
2195 # skip the logic during strip
2195 # skip the logic during strip
2196 return
2196 return
2197 visible = repo.filtered(b'visible')
2197 visible = repo.filtered(b'visible')
2198 # possible improvement: we could restrict the check to affected branch
2198 # possible improvement: we could restrict the check to affected branch
2199 bm = visible.branchmap()
2199 bm = visible.branchmap()
2200 for name in bm:
2200 for name in bm:
2201 heads = bm.branchheads(name, closed=accountclosed)
2201 heads = bm.branchheads(name, closed=accountclosed)
2202 if len(heads) > 1:
2202 if len(heads) > 1:
2203 msg = _(b'rejecting multiple heads on branch "%s"')
2203 msg = _(b'rejecting multiple heads on branch "%s"')
2204 msg %= name
2204 msg %= name
2205 hint = _(b'%d heads: %s')
2205 hint = _(b'%d heads: %s')
2206 hint %= (len(heads), nodesummaries(repo, heads))
2206 hint %= (len(heads), nodesummaries(repo, heads))
2207 raise error.Abort(msg, hint=hint)
2207 raise error.Abort(msg, hint=hint)
2208
2208
2209
2209
2210 def wrapconvertsink(sink):
2210 def wrapconvertsink(sink):
2211 """Allow extensions to wrap the sink returned by convcmd.convertsink()
2211 """Allow extensions to wrap the sink returned by convcmd.convertsink()
2212 before it is used, whether or not the convert extension was formally loaded.
2212 before it is used, whether or not the convert extension was formally loaded.
2213 """
2213 """
2214 return sink
2214 return sink
2215
2215
2216
2216
2217 def unhidehashlikerevs(repo, specs, hiddentype):
2217 def unhidehashlikerevs(repo, specs, hiddentype):
2218 """parse the user specs and unhide changesets whose hash or revision number
2218 """parse the user specs and unhide changesets whose hash or revision number
2219 is passed.
2219 is passed.
2220
2220
2221 hiddentype can be: 1) 'warn': warn while unhiding changesets
2221 hiddentype can be: 1) 'warn': warn while unhiding changesets
2222 2) 'nowarn': don't warn while unhiding changesets
2222 2) 'nowarn': don't warn while unhiding changesets
2223
2223
2224 returns a repo object with the required changesets unhidden
2224 returns a repo object with the required changesets unhidden
2225 """
2225 """
2226 if not repo.filtername or not repo.ui.configbool(
2226 if not repo.filtername or not repo.ui.configbool(
2227 b'experimental', b'directaccess'
2227 b'experimental', b'directaccess'
2228 ):
2228 ):
2229 return repo
2229 return repo
2230
2230
2231 if repo.filtername not in (b'visible', b'visible-hidden'):
2231 if repo.filtername not in (b'visible', b'visible-hidden'):
2232 return repo
2232 return repo
2233
2233
2234 symbols = set()
2234 symbols = set()
2235 for spec in specs:
2235 for spec in specs:
2236 try:
2236 try:
2237 tree = revsetlang.parse(spec)
2237 tree = revsetlang.parse(spec)
2238 except error.ParseError: # will be reported by scmutil.revrange()
2238 except error.ParseError: # will be reported by scmutil.revrange()
2239 continue
2239 continue
2240
2240
2241 symbols.update(revsetlang.gethashlikesymbols(tree))
2241 symbols.update(revsetlang.gethashlikesymbols(tree))
2242
2242
2243 if not symbols:
2243 if not symbols:
2244 return repo
2244 return repo
2245
2245
2246 revs = _getrevsfromsymbols(repo, symbols)
2246 revs = _getrevsfromsymbols(repo, symbols)
2247
2247
2248 if not revs:
2248 if not revs:
2249 return repo
2249 return repo
2250
2250
2251 if hiddentype == b'warn':
2251 if hiddentype == b'warn':
2252 unfi = repo.unfiltered()
2252 unfi = repo.unfiltered()
2253 revstr = b", ".join([pycompat.bytestr(unfi[l]) for l in revs])
2253 revstr = b", ".join([pycompat.bytestr(unfi[l]) for l in revs])
2254 repo.ui.warn(
2254 repo.ui.warn(
2255 _(
2255 _(
2256 b"warning: accessing hidden changesets for write "
2256 b"warning: accessing hidden changesets for write "
2257 b"operation: %s\n"
2257 b"operation: %s\n"
2258 )
2258 )
2259 % revstr
2259 % revstr
2260 )
2260 )
2261
2261
2262 # we have to use new filtername to separate branch/tags cache until we can
2262 # we have to use new filtername to separate branch/tags cache until we can
2263 # disbale these cache when revisions are dynamically pinned.
2263 # disbale these cache when revisions are dynamically pinned.
2264 return repo.filtered(b'visible-hidden', revs)
2264 return repo.filtered(b'visible-hidden', revs)
2265
2265
2266
2266
2267 def _getrevsfromsymbols(repo, symbols):
2267 def _getrevsfromsymbols(repo, symbols):
2268 """parse the list of symbols and returns a set of revision numbers of hidden
2268 """parse the list of symbols and returns a set of revision numbers of hidden
2269 changesets present in symbols"""
2269 changesets present in symbols"""
2270 revs = set()
2270 revs = set()
2271 unfi = repo.unfiltered()
2271 unfi = repo.unfiltered()
2272 unficl = unfi.changelog
2272 unficl = unfi.changelog
2273 cl = repo.changelog
2273 cl = repo.changelog
2274 tiprev = len(unficl)
2274 tiprev = len(unficl)
2275 allowrevnums = repo.ui.configbool(b'experimental', b'directaccess.revnums')
2275 allowrevnums = repo.ui.configbool(b'experimental', b'directaccess.revnums')
2276 for s in symbols:
2276 for s in symbols:
2277 try:
2277 try:
2278 n = int(s)
2278 n = int(s)
2279 if n <= tiprev:
2279 if n <= tiprev:
2280 if not allowrevnums:
2280 if not allowrevnums:
2281 continue
2281 continue
2282 else:
2282 else:
2283 if n not in cl:
2283 if n not in cl:
2284 revs.add(n)
2284 revs.add(n)
2285 continue
2285 continue
2286 except ValueError:
2286 except ValueError:
2287 pass
2287 pass
2288
2288
2289 try:
2289 try:
2290 s = resolvehexnodeidprefix(unfi, s)
2290 s = resolvehexnodeidprefix(unfi, s)
2291 except (error.LookupError, error.WdirUnsupported):
2291 except (error.LookupError, error.WdirUnsupported):
2292 s = None
2292 s = None
2293
2293
2294 if s is not None:
2294 if s is not None:
2295 rev = unficl.rev(s)
2295 rev = unficl.rev(s)
2296 if rev not in cl:
2296 if rev not in cl:
2297 revs.add(rev)
2297 revs.add(rev)
2298
2298
2299 return revs
2299 return revs
2300
2300
2301
2301
2302 def bookmarkrevs(repo, mark):
2302 def bookmarkrevs(repo, mark):
2303 """Select revisions reachable by a given bookmark
2303 """Select revisions reachable by a given bookmark
2304
2304
2305 If the bookmarked revision isn't a head, an empty set will be returned.
2305 If the bookmarked revision isn't a head, an empty set will be returned.
2306 """
2306 """
2307 return repo.revs(format_bookmark_revspec(mark))
2307 return repo.revs(format_bookmark_revspec(mark))
2308
2308
2309
2309
2310 def format_bookmark_revspec(mark):
2310 def format_bookmark_revspec(mark):
2311 """Build a revset expression to select revisions reachable by a given
2311 """Build a revset expression to select revisions reachable by a given
2312 bookmark"""
2312 bookmark"""
2313 mark = b'literal:' + mark
2313 return revsetlang.formatspec(
2314 return revsetlang.formatspec(
2314 b"ancestors(bookmark(%s)) - "
2315 b"ancestors(bookmark(%s)) - "
2315 b"ancestors(head() and not bookmark(%s)) - "
2316 b"ancestors(head() and not bookmark(%s)) - "
2316 b"ancestors(bookmark() and not bookmark(%s))",
2317 b"ancestors(bookmark() and not bookmark(%s))",
2317 mark,
2318 mark,
2318 mark,
2319 mark,
2319 mark,
2320 mark,
2320 )
2321 )
@@ -1,3115 +1,3115 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 $ commit()
71 $ commit()
72 > {
72 > {
73 > rev=$1
73 > rev=$1
74 > msg=$2
74 > msg=$2
75 > shift 2
75 > shift 2
76 > if [ "$#" -gt 0 ]; then
76 > if [ "$#" -gt 0 ]; then
77 > hg debugsetparents "$@"
77 > hg debugsetparents "$@"
78 > fi
78 > fi
79 > echo $rev > a
79 > echo $rev > a
80 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
80 > hg commit -Aqd "$rev 0" -m "($rev) $msg"
81 > }
81 > }
82
82
83 $ echo "[extensions]" >> $HGRCPATH
83 $ echo "[extensions]" >> $HGRCPATH
84 $ echo "printrevset=$TESTDIR/printrevset.py" >> $HGRCPATH
84 $ echo "printrevset=$TESTDIR/printrevset.py" >> $HGRCPATH
85 $ echo "beautifygraph=" >> $HGRCPATH
85 $ echo "beautifygraph=" >> $HGRCPATH
86
86
87 Set a default of narrow-text UTF-8.
87 Set a default of narrow-text UTF-8.
88
88
89 $ HGENCODING=UTF-8; export HGENCODING
89 $ HGENCODING=UTF-8; export HGENCODING
90 $ HGENCODINGAMBIGUOUS=narrow; export HGENCODINGAMBIGUOUS
90 $ HGENCODINGAMBIGUOUS=narrow; export HGENCODINGAMBIGUOUS
91
91
92 Empty repo:
92 Empty repo:
93
93
94 $ hg init repo
94 $ hg init repo
95 $ cd repo
95 $ cd repo
96 $ hg log -G
96 $ hg log -G
97
97
98 Building DAG:
98 Building DAG:
99
99
100 $ commit 0 "root"
100 $ commit 0 "root"
101 $ commit 1 "collapse" 0
101 $ commit 1 "collapse" 0
102 $ commit 2 "collapse" 1
102 $ commit 2 "collapse" 1
103 $ commit 3 "collapse" 2
103 $ commit 3 "collapse" 2
104 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
104 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
105 $ commit 5 "expand" 3 4
105 $ commit 5 "expand" 3 4
106 $ commit 6 "merge two known; one immediate left, one far left" 2 5
106 $ commit 6 "merge two known; one immediate left, one far left" 2 5
107 $ commit 7 "expand" 2 5
107 $ commit 7 "expand" 2 5
108 $ commit 8 "merge two known; one immediate left, one far right" 0 7
108 $ commit 8 "merge two known; one immediate left, one far right" 0 7
109 $ commit 9 "expand" 7 8
109 $ commit 9 "expand" 7 8
110 $ commit 10 "merge two known; one immediate left, one near right" 0 6
110 $ commit 10 "merge two known; one immediate left, one near right" 0 6
111 $ commit 11 "expand" 6 10
111 $ commit 11 "expand" 6 10
112 $ commit 12 "merge two known; one immediate right, one far left" 1 9
112 $ commit 12 "merge two known; one immediate right, one far left" 1 9
113 $ commit 13 "expand" 9 11
113 $ commit 13 "expand" 9 11
114 $ commit 14 "merge two known; one immediate right, one far right" 0 12
114 $ commit 14 "merge two known; one immediate right, one far right" 0 12
115 $ commit 15 "expand" 13 14
115 $ commit 15 "expand" 13 14
116 $ commit 16 "merge two known; one immediate right, one near right" 0 1
116 $ commit 16 "merge two known; one immediate right, one near right" 0 1
117 $ commit 17 "expand" 12 16
117 $ commit 17 "expand" 12 16
118 $ commit 18 "merge two known; two far left" 1 15
118 $ commit 18 "merge two known; two far left" 1 15
119 $ commit 19 "expand" 15 17
119 $ commit 19 "expand" 15 17
120 $ commit 20 "merge two known; two far right" 0 18
120 $ commit 20 "merge two known; two far right" 0 18
121 $ commit 21 "expand" 19 20
121 $ commit 21 "expand" 19 20
122 $ commit 22 "merge two known; one far left, one far right" 18 21
122 $ commit 22 "merge two known; one far left, one far right" 18 21
123 $ commit 23 "merge one known; immediate left" 1 22
123 $ commit 23 "merge one known; immediate left" 1 22
124 $ commit 24 "merge one known; immediate right" 0 23
124 $ commit 24 "merge one known; immediate right" 0 23
125 $ commit 25 "merge one known; far left" 21 24
125 $ commit 25 "merge one known; far left" 21 24
126 $ commit 26 "merge one known; far right" 18 25
126 $ commit 26 "merge one known; far right" 18 25
127 $ commit 27 "collapse" 21
127 $ commit 27 "collapse" 21
128 $ commit 28 "merge zero known" 1 26
128 $ commit 28 "merge zero known" 1 26
129 $ commit 29 "regular commit" 0
129 $ commit 29 "regular commit" 0
130 $ commit 30 "expand" 28 29
130 $ commit 30 "expand" 28 29
131 $ commit 31 "expand" 21 30
131 $ commit 31 "expand" 21 30
132 $ commit 32 "expand" 27 31
132 $ commit 32 "expand" 27 31
133 $ commit 33 "head" 18
133 $ commit 33 "head" 18
134 $ commit 34 "head" 32
134 $ commit 34 "head" 32
135
135
136 The extension should not turn on unless we're in UTF-8.
136 The extension should not turn on unless we're in UTF-8.
137
137
138 $ HGENCODING=latin1 hg log -G -q
138 $ HGENCODING=latin1 hg log -G -q
139 beautifygraph: unsupported encoding, UTF-8 required
139 beautifygraph: unsupported encoding, UTF-8 required
140 @ 34:fea3ac5810e0
140 @ 34:fea3ac5810e0
141 |
141 |
142 | o 33:68608f5145f9
142 | o 33:68608f5145f9
143 | |
143 | |
144 o | 32:d06dffa21a31
144 o | 32:d06dffa21a31
145 |\ \
145 |\ \
146 | o \ 31:621d83e11f67
146 | o \ 31:621d83e11f67
147 | |\ \
147 | |\ \
148 | | o \ 30:6e11cd4b648f
148 | | o \ 30:6e11cd4b648f
149 | | |\ \
149 | | |\ \
150 | | | o | 29:cd9bb2be7593
150 | | | o | 29:cd9bb2be7593
151 | | | | |
151 | | | | |
152 | | o | | 28:44ecd0b9ae99
152 | | o | | 28:44ecd0b9ae99
153 | | |\ \ \
153 | | |\ \ \
154 o | | | | | 27:886ed638191b
154 o | | | | | 27:886ed638191b
155 |/ / / / /
155 |/ / / / /
156 | | o---+ 26:7f25b6c2f0b9
156 | | o---+ 26:7f25b6c2f0b9
157 | | | | |
157 | | | | |
158 +---o | | 25:91da8ed57247
158 +---o | | 25:91da8ed57247
159 | | | | |
159 | | | | |
160 | | o | | 24:a9c19a3d96b7
160 | | o | | 24:a9c19a3d96b7
161 | | |\| |
161 | | |\| |
162 | | o | | 23:a01cddf0766d
162 | | o | | 23:a01cddf0766d
163 | |/| | |
163 | |/| | |
164 +---o---+ 22:e0d9cccacb5d
164 +---o---+ 22:e0d9cccacb5d
165 | | / /
165 | | / /
166 o | | | 21:d42a756af44d
166 o | | | 21:d42a756af44d
167 |\ \ \ \
167 |\ \ \ \
168 | o---+-+ 20:d30ed6450e32
168 | o---+-+ 20:d30ed6450e32
169 | / / /
169 | / / /
170 o | | | 19:31ddc2c1573b
170 o | | | 19:31ddc2c1573b
171 |\ \ \ \
171 |\ \ \ \
172 +---+---o 18:1aa84d96232a
172 +---+---o 18:1aa84d96232a
173 | | | |
173 | | | |
174 | o | | 17:44765d7c06e0
174 | o | | 17:44765d7c06e0
175 | |\ \ \
175 | |\ \ \
176 | | o---+ 16:3677d192927d
176 | | o---+ 16:3677d192927d
177 | | |/ /
177 | | |/ /
178 o | | | 15:1dda3f72782d
178 o | | | 15:1dda3f72782d
179 |\ \ \ \
179 |\ \ \ \
180 | o-----+ 14:8eac370358ef
180 | o-----+ 14:8eac370358ef
181 | |/ / /
181 | |/ / /
182 o | | | 13:22d8966a97e3
182 o | | | 13:22d8966a97e3
183 |\ \ \ \
183 |\ \ \ \
184 +---o | | 12:86b91144a6e9
184 +---o | | 12:86b91144a6e9
185 | | |/ /
185 | | |/ /
186 | o | | 11:832d76e6bdf2
186 | o | | 11:832d76e6bdf2
187 | |\ \ \
187 | |\ \ \
188 | | o---+ 10:74c64d036d72
188 | | o---+ 10:74c64d036d72
189 | |/ / /
189 | |/ / /
190 o | | | 9:7010c0af0a35
190 o | | | 9:7010c0af0a35
191 |\ \ \ \
191 |\ \ \ \
192 | o-----+ 8:7a0b11f71937
192 | o-----+ 8:7a0b11f71937
193 |/ / / /
193 |/ / / /
194 o | | | 7:b632bb1b1224
194 o | | | 7:b632bb1b1224
195 |\ \ \ \
195 |\ \ \ \
196 +---o | | 6:b105a072e251
196 +---o | | 6:b105a072e251
197 | |/ / /
197 | |/ / /
198 | o | | 5:4409d547b708
198 | o | | 5:4409d547b708
199 | |\ \ \
199 | |\ \ \
200 | | o | | 4:26a8bac39d9f
200 | | o | | 4:26a8bac39d9f
201 | |/|/ /
201 | |/|/ /
202 | o / / 3:27eef8ed80b4
202 | o / / 3:27eef8ed80b4
203 |/ / /
203 |/ / /
204 o / / 2:3d9a33b8d1e1
204 o / / 2:3d9a33b8d1e1
205 |/ /
205 |/ /
206 o / 1:6db2ef61d156
206 o / 1:6db2ef61d156
207 |/
207 |/
208 o 0:e6eb3150255d
208 o 0:e6eb3150255d
209
209
210
210
211 The extension should not turn on if we're using wide text.
211 The extension should not turn on if we're using wide text.
212
212
213 $ HGENCODINGAMBIGUOUS=wide hg log -G -q
213 $ HGENCODINGAMBIGUOUS=wide hg log -G -q
214 beautifygraph: unsupported terminal settings, monospace narrow text required
214 beautifygraph: unsupported terminal settings, monospace narrow text required
215 @ 34:fea3ac5810e0
215 @ 34:fea3ac5810e0
216 |
216 |
217 | o 33:68608f5145f9
217 | o 33:68608f5145f9
218 | |
218 | |
219 o | 32:d06dffa21a31
219 o | 32:d06dffa21a31
220 |\ \
220 |\ \
221 | o \ 31:621d83e11f67
221 | o \ 31:621d83e11f67
222 | |\ \
222 | |\ \
223 | | o \ 30:6e11cd4b648f
223 | | o \ 30:6e11cd4b648f
224 | | |\ \
224 | | |\ \
225 | | | o | 29:cd9bb2be7593
225 | | | o | 29:cd9bb2be7593
226 | | | | |
226 | | | | |
227 | | o | | 28:44ecd0b9ae99
227 | | o | | 28:44ecd0b9ae99
228 | | |\ \ \
228 | | |\ \ \
229 o | | | | | 27:886ed638191b
229 o | | | | | 27:886ed638191b
230 |/ / / / /
230 |/ / / / /
231 | | o---+ 26:7f25b6c2f0b9
231 | | o---+ 26:7f25b6c2f0b9
232 | | | | |
232 | | | | |
233 +---o | | 25:91da8ed57247
233 +---o | | 25:91da8ed57247
234 | | | | |
234 | | | | |
235 | | o | | 24:a9c19a3d96b7
235 | | o | | 24:a9c19a3d96b7
236 | | |\| |
236 | | |\| |
237 | | o | | 23:a01cddf0766d
237 | | o | | 23:a01cddf0766d
238 | |/| | |
238 | |/| | |
239 +---o---+ 22:e0d9cccacb5d
239 +---o---+ 22:e0d9cccacb5d
240 | | / /
240 | | / /
241 o | | | 21:d42a756af44d
241 o | | | 21:d42a756af44d
242 |\ \ \ \
242 |\ \ \ \
243 | o---+-+ 20:d30ed6450e32
243 | o---+-+ 20:d30ed6450e32
244 | / / /
244 | / / /
245 o | | | 19:31ddc2c1573b
245 o | | | 19:31ddc2c1573b
246 |\ \ \ \
246 |\ \ \ \
247 +---+---o 18:1aa84d96232a
247 +---+---o 18:1aa84d96232a
248 | | | |
248 | | | |
249 | o | | 17:44765d7c06e0
249 | o | | 17:44765d7c06e0
250 | |\ \ \
250 | |\ \ \
251 | | o---+ 16:3677d192927d
251 | | o---+ 16:3677d192927d
252 | | |/ /
252 | | |/ /
253 o | | | 15:1dda3f72782d
253 o | | | 15:1dda3f72782d
254 |\ \ \ \
254 |\ \ \ \
255 | o-----+ 14:8eac370358ef
255 | o-----+ 14:8eac370358ef
256 | |/ / /
256 | |/ / /
257 o | | | 13:22d8966a97e3
257 o | | | 13:22d8966a97e3
258 |\ \ \ \
258 |\ \ \ \
259 +---o | | 12:86b91144a6e9
259 +---o | | 12:86b91144a6e9
260 | | |/ /
260 | | |/ /
261 | o | | 11:832d76e6bdf2
261 | o | | 11:832d76e6bdf2
262 | |\ \ \
262 | |\ \ \
263 | | o---+ 10:74c64d036d72
263 | | o---+ 10:74c64d036d72
264 | |/ / /
264 | |/ / /
265 o | | | 9:7010c0af0a35
265 o | | | 9:7010c0af0a35
266 |\ \ \ \
266 |\ \ \ \
267 | o-----+ 8:7a0b11f71937
267 | o-----+ 8:7a0b11f71937
268 |/ / / /
268 |/ / / /
269 o | | | 7:b632bb1b1224
269 o | | | 7:b632bb1b1224
270 |\ \ \ \
270 |\ \ \ \
271 +---o | | 6:b105a072e251
271 +---o | | 6:b105a072e251
272 | |/ / /
272 | |/ / /
273 | o | | 5:4409d547b708
273 | o | | 5:4409d547b708
274 | |\ \ \
274 | |\ \ \
275 | | o | | 4:26a8bac39d9f
275 | | o | | 4:26a8bac39d9f
276 | |/|/ /
276 | |/|/ /
277 | o / / 3:27eef8ed80b4
277 | o / / 3:27eef8ed80b4
278 |/ / /
278 |/ / /
279 o / / 2:3d9a33b8d1e1
279 o / / 2:3d9a33b8d1e1
280 |/ /
280 |/ /
281 o / 1:6db2ef61d156
281 o / 1:6db2ef61d156
282 |/
282 |/
283 o 0:e6eb3150255d
283 o 0:e6eb3150255d
284
284
285
285
286 The rest of our tests will use the default narrow text UTF-8.
286 The rest of our tests will use the default narrow text UTF-8.
287
287
288 $ hg log -G -q
288 $ hg log -G -q
289 \xe2\x97\x8d 34:fea3ac5810e0 (esc)
289 \xe2\x97\x8d 34:fea3ac5810e0 (esc)
290 \xe2\x94\x82 (esc)
290 \xe2\x94\x82 (esc)
291 \xe2\x94\x82 \xe2\x97\x8b 33:68608f5145f9 (esc)
291 \xe2\x94\x82 \xe2\x97\x8b 33:68608f5145f9 (esc)
292 \xe2\x94\x82 \xe2\x94\x82 (esc)
292 \xe2\x94\x82 \xe2\x94\x82 (esc)
293 \xe2\x97\x8b \xe2\x94\x82 32:d06dffa21a31 (esc)
293 \xe2\x97\x8b \xe2\x94\x82 32:d06dffa21a31 (esc)
294 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
294 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
295 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb2 31:621d83e11f67 (esc)
295 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb2 31:621d83e11f67 (esc)
296 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
296 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
297 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb2 30:6e11cd4b648f (esc)
297 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb2 30:6e11cd4b648f (esc)
298 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
298 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 (esc)
299 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 29:cd9bb2be7593 (esc)
299 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 29:cd9bb2be7593 (esc)
300 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
300 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
301 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 28:44ecd0b9ae99 (esc)
301 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 28:44ecd0b9ae99 (esc)
302 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
302 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
303 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 27:886ed638191b (esc)
303 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 27:886ed638191b (esc)
304 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
304 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
305 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 26:7f25b6c2f0b9 (esc)
305 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 26:7f25b6c2f0b9 (esc)
306 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
306 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
307 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 25:91da8ed57247 (esc)
307 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 25:91da8ed57247 (esc)
308 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
308 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
309 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 24:a9c19a3d96b7 (esc)
309 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 24:a9c19a3d96b7 (esc)
310 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 (esc)
310 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 (esc)
311 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 23:a01cddf0766d (esc)
311 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 23:a01cddf0766d (esc)
312 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
312 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
313 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 22:e0d9cccacb5d (esc)
313 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 22:e0d9cccacb5d (esc)
314 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
314 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
315 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 21:d42a756af44d (esc)
315 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 21:d42a756af44d (esc)
316 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
316 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
317 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 20:d30ed6450e32 (esc)
317 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 20:d30ed6450e32 (esc)
318 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
318 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
319 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 19:31ddc2c1573b (esc)
319 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 19:31ddc2c1573b (esc)
320 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
320 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
321 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b 18:1aa84d96232a (esc)
321 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b 18:1aa84d96232a (esc)
322 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
322 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
323 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 17:44765d7c06e0 (esc)
323 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 17:44765d7c06e0 (esc)
324 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
324 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
325 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 16:3677d192927d (esc)
325 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 16:3677d192927d (esc)
326 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
326 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
327 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 15:1dda3f72782d (esc)
327 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 15:1dda3f72782d (esc)
328 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
328 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
329 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 14:8eac370358ef (esc)
329 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 14:8eac370358ef (esc)
330 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
330 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
331 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 13:22d8966a97e3 (esc)
331 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 13:22d8966a97e3 (esc)
332 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
332 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
333 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 12:86b91144a6e9 (esc)
333 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 12:86b91144a6e9 (esc)
334 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
334 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
335 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 11:832d76e6bdf2 (esc)
335 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 11:832d76e6bdf2 (esc)
336 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
336 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
337 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 10:74c64d036d72 (esc)
337 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 10:74c64d036d72 (esc)
338 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
338 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
339 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 9:7010c0af0a35 (esc)
339 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 9:7010c0af0a35 (esc)
340 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
340 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
341 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 8:7a0b11f71937 (esc)
341 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 8:7a0b11f71937 (esc)
342 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
342 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
343 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 7:b632bb1b1224 (esc)
343 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 7:b632bb1b1224 (esc)
344 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
344 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
345 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 6:b105a072e251 (esc)
345 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 6:b105a072e251 (esc)
346 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
346 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
347 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 5:4409d547b708 (esc)
347 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 5:4409d547b708 (esc)
348 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
348 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 (esc)
349 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 4:26a8bac39d9f (esc)
349 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 4:26a8bac39d9f (esc)
350 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
350 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
351 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb1 \xe2\x95\xb1 3:27eef8ed80b4 (esc)
351 \xe2\x94\x82 \xe2\x97\x8b \xe2\x95\xb1 \xe2\x95\xb1 3:27eef8ed80b4 (esc)
352 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
352 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
353 \xe2\x97\x8b \xe2\x95\xb1 \xe2\x95\xb1 2:3d9a33b8d1e1 (esc)
353 \xe2\x97\x8b \xe2\x95\xb1 \xe2\x95\xb1 2:3d9a33b8d1e1 (esc)
354 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
354 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 (esc)
355 \xe2\x97\x8b \xe2\x95\xb1 1:6db2ef61d156 (esc)
355 \xe2\x97\x8b \xe2\x95\xb1 1:6db2ef61d156 (esc)
356 \xe2\x94\x82\xe2\x95\xb1 (esc)
356 \xe2\x94\x82\xe2\x95\xb1 (esc)
357 \xe2\x97\x8b 0:e6eb3150255d (esc)
357 \xe2\x97\x8b 0:e6eb3150255d (esc)
358
358
359
359
360 $ hg log -G
360 $ hg log -G
361 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
361 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
362 \xe2\x94\x82 tag: tip (esc)
362 \xe2\x94\x82 tag: tip (esc)
363 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
363 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
364 \xe2\x94\x82 user: test (esc)
364 \xe2\x94\x82 user: test (esc)
365 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
365 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
366 \xe2\x94\x82 summary: (34) head (esc)
366 \xe2\x94\x82 summary: (34) head (esc)
367 \xe2\x94\x82 (esc)
367 \xe2\x94\x82 (esc)
368 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
368 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
369 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
369 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
370 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
370 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
371 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
371 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
372 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
372 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
373 \xe2\x94\x82 \xe2\x94\x82 (esc)
373 \xe2\x94\x82 \xe2\x94\x82 (esc)
374 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
374 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
375 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
375 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
376 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
376 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
377 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
377 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
378 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
378 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
379 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
379 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
380 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
380 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
381 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
381 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
382 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
382 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
383 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
383 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
384 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
384 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
385 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
385 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
386 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
386 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
387 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
387 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
388 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
388 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
389 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
389 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
390 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
390 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
391 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
391 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
392 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
392 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
393 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
393 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
394 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
394 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
395 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
395 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
396 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
396 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
397 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
397 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
398 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
398 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
399 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
399 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
400 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
400 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
401 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
401 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
402 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
402 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
403 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
403 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
404 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
404 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
405 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
405 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
406 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
406 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
407 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
407 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
408 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
408 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
409 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
409 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
410 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
410 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
411 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
411 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
412 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
412 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
413 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
413 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
414 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
414 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
415 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
415 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
416 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
416 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
417 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
417 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
418 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
418 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
419 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
419 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
420 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
420 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
421 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
421 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
422 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
422 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
423 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
423 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
424 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
424 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
425 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
425 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
426 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
426 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
427 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
427 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
428 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
428 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
429 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
429 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
430 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
430 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
431 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
431 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
432 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
432 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
433 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
433 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
434 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
434 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
435 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
435 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
436 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
436 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
437 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
437 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
438 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
438 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
439 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
439 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
440 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
440 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
441 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
441 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
442 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
442 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
443 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
443 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
444 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
444 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
445 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
445 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
446 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
446 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
447 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
447 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
448 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
448 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
449 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
449 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
450 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
450 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
451 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
451 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
452 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
452 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
453 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
453 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
454 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
454 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
455 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
455 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
456 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
456 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
457 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
457 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
458 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
458 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
459 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
459 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
460 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
460 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
461 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
461 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
462 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
462 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
463 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
463 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
464 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
464 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
465 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
465 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
466 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
466 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
467 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
467 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
468 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
468 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
469 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
469 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
470 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
470 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
471 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
471 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
472 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
472 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
473 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
473 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
474 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
474 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
475 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
475 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
476 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
476 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
477 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
477 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
478 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
478 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
479 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
479 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
480 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
480 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
481 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
481 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
482 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
482 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
483 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
483 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
484 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
484 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
485 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
485 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
486 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
486 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
487 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
487 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
488 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
488 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
489 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
489 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
490 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
490 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
491 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
491 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
492 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
492 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
493 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
493 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
494 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
494 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
495 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
495 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
496 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
496 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
497 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
497 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
498 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
498 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
499 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
499 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
500 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
500 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
501 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
501 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
502 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
502 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
503 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
503 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
504 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
504 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
505 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
505 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
506 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
506 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
507 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
507 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
508 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
508 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
509 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
509 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
510 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
510 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
511 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
511 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
512 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
512 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
513 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
513 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
514 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
514 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
515 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
515 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
516 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
516 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
517 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
517 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
518 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
518 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
519 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
519 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
520 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
520 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
521 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
521 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
522 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
522 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
523 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
523 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
524 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
524 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
525 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
525 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
526 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
526 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
527 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
527 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
528 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
528 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
529 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
529 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
530 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
530 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
531 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
531 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
532 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
532 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
533 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
533 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
534 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
534 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
535 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
535 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
536 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
536 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
537 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
537 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
538 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
538 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
539 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
539 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
540 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
540 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
541 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
541 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
542 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
542 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
543 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
543 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
544 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
544 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
545 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
545 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
546 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
546 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
547 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
547 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
548 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
548 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
549 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
549 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
550 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
550 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
551 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
551 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
552 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
552 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
553 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
553 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
554 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
554 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
555 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
555 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
556 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
556 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
557 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
557 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
558 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
558 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
559 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
559 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
560 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
560 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
561 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
561 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
562 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
562 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
563 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
563 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
564 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
564 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
565 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
565 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
566 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
566 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
567 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
567 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
568 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
568 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
569 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
569 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
570 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
570 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
571 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
571 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
572 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
572 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
573 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
573 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
574 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
574 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
575 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
575 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
576 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
576 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
577 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
577 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
578 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
578 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
579 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
579 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
580 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
580 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
581 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
581 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
582 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
582 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
583 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
583 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
584 \xe2\x94\x82 \xe2\x94\x82 (esc)
584 \xe2\x94\x82 \xe2\x94\x82 (esc)
585 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
585 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
586 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
586 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
587 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
587 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
588 \xe2\x94\x82 summary: (1) collapse (esc)
588 \xe2\x94\x82 summary: (1) collapse (esc)
589 \xe2\x94\x82 (esc)
589 \xe2\x94\x82 (esc)
590 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
590 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
591 user: test
591 user: test
592 date: Thu Jan 01 00:00:00 1970 +0000
592 date: Thu Jan 01 00:00:00 1970 +0000
593 summary: (0) root
593 summary: (0) root
594
594
595 File glog:
595 File glog:
596 $ hg log -G a
596 $ hg log -G a
597 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
597 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
598 \xe2\x94\x82 tag: tip (esc)
598 \xe2\x94\x82 tag: tip (esc)
599 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
599 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
600 \xe2\x94\x82 user: test (esc)
600 \xe2\x94\x82 user: test (esc)
601 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
601 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
602 \xe2\x94\x82 summary: (34) head (esc)
602 \xe2\x94\x82 summary: (34) head (esc)
603 \xe2\x94\x82 (esc)
603 \xe2\x94\x82 (esc)
604 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
604 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
605 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
605 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
606 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
606 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
607 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
607 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
608 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
608 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
609 \xe2\x94\x82 \xe2\x94\x82 (esc)
609 \xe2\x94\x82 \xe2\x94\x82 (esc)
610 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
610 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
611 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
611 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
612 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
612 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
613 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
613 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
614 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
614 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
615 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
615 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
616 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
616 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
617 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
617 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
618 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
618 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
619 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
619 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
620 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
620 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
621 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
621 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
622 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
622 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
623 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
623 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
624 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
624 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
625 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
625 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
626 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
626 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
627 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
627 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
628 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
628 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
629 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
629 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
630 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
630 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
631 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
631 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
632 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
632 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
633 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
633 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
634 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
634 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
635 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
635 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
636 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
636 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
637 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
637 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
638 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
638 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
639 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
639 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
640 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
640 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
641 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
641 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
642 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
642 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
643 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
643 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
644 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
644 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
645 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
645 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
646 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
646 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
647 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
647 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
648 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
648 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
649 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
649 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
650 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
650 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
651 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
651 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
652 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
652 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
653 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
653 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
654 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
654 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
655 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
655 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
656 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
656 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
657 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
657 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
658 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
658 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
659 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
659 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
660 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
660 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
661 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
661 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
662 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
662 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
663 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
663 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
664 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
664 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
665 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
665 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
666 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
666 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
667 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
667 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
668 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
668 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
669 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
669 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
670 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
670 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
671 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
671 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
672 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
672 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
673 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
673 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
674 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
674 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
675 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
675 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
676 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
676 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
677 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
677 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
678 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
678 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
679 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
679 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
680 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
680 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
681 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
681 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
682 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
682 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
683 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
683 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
684 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
684 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
685 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
685 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
686 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
686 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
687 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
687 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
688 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
688 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
689 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
689 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
690 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
690 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
691 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
691 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
692 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
692 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
693 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
693 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
694 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
694 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
695 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
695 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
696 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
696 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
697 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
697 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
698 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
698 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
699 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
699 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
700 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
700 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
701 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
701 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
702 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
702 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
703 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
703 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
704 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
704 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
705 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
705 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
706 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
706 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
707 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
707 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
708 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
708 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
709 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
709 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
710 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
710 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
711 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
711 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
712 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
712 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
713 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
713 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
714 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
714 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
715 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
715 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
716 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
716 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
717 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
717 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
718 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
718 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
719 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
719 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
720 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
720 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
721 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
721 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
722 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
722 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
723 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
723 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
724 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
724 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
725 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
725 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
726 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
726 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
727 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
727 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
728 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
728 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
729 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
729 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
730 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
730 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
731 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
731 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
732 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
732 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
733 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
733 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
734 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
734 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
735 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
735 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
736 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
736 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
737 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
737 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
738 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
738 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
739 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
739 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
740 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
740 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
741 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
741 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
742 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
742 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
743 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
743 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
744 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
744 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
745 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
745 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
746 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
746 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
747 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
747 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
748 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
748 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
749 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
749 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
750 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
750 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
751 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
751 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
752 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
752 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
753 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
753 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
754 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
754 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
755 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
755 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
756 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
756 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
757 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
757 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
758 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
758 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
759 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
759 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
760 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
760 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
761 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
761 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
762 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
762 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
763 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
763 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
764 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
764 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
765 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
765 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
766 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
766 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
767 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
767 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
768 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
768 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
769 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
769 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
770 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
770 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
771 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
771 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
772 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
772 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
773 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
773 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
774 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
774 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
775 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
775 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
776 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
776 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
777 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
777 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
778 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
778 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
779 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
779 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
780 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
780 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
781 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
781 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
782 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
782 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
783 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
783 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
784 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
784 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
785 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
785 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
786 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
786 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
787 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
787 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
788 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
788 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
789 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
789 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
790 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
790 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
791 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
791 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
792 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
792 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
793 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
793 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
794 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
794 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
795 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
795 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
796 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
796 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
797 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
797 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
798 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
798 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
799 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
799 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
800 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
800 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
801 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
801 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
802 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
802 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
803 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
803 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
804 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
804 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
805 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
805 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
806 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
806 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
807 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
807 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
808 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
808 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
809 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
809 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
810 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
810 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
811 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
811 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
812 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
812 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
813 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
813 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
814 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
814 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
815 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
815 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
816 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
816 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
817 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
817 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
818 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
818 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
819 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
819 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
820 \xe2\x94\x82 \xe2\x94\x82 (esc)
820 \xe2\x94\x82 \xe2\x94\x82 (esc)
821 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
821 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
822 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
822 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
823 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
823 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
824 \xe2\x94\x82 summary: (1) collapse (esc)
824 \xe2\x94\x82 summary: (1) collapse (esc)
825 \xe2\x94\x82 (esc)
825 \xe2\x94\x82 (esc)
826 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
826 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
827 user: test
827 user: test
828 date: Thu Jan 01 00:00:00 1970 +0000
828 date: Thu Jan 01 00:00:00 1970 +0000
829 summary: (0) root
829 summary: (0) root
830
830
831 File glog per revset:
831 File glog per revset:
832
832
833 $ hg log -G -r 'file("a")'
833 $ hg log -G -r 'file("a")'
834 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
834 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
835 \xe2\x94\x82 tag: tip (esc)
835 \xe2\x94\x82 tag: tip (esc)
836 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
836 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
837 \xe2\x94\x82 user: test (esc)
837 \xe2\x94\x82 user: test (esc)
838 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
838 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
839 \xe2\x94\x82 summary: (34) head (esc)
839 \xe2\x94\x82 summary: (34) head (esc)
840 \xe2\x94\x82 (esc)
840 \xe2\x94\x82 (esc)
841 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
841 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
842 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
842 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
843 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
843 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
844 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
844 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
845 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
845 \xe2\x94\x82 \xe2\x94\x82 summary: (33) head (esc)
846 \xe2\x94\x82 \xe2\x94\x82 (esc)
846 \xe2\x94\x82 \xe2\x94\x82 (esc)
847 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
847 \xe2\x97\x8b \xe2\x94\x82 changeset: 32:d06dffa21a31 (esc)
848 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
848 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 27:886ed638191b (esc)
849 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
849 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
850 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
850 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
851 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
851 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
852 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
852 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (32) expand (esc)
853 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
853 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
854 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
854 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 31:621d83e11f67 (esc)
855 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
855 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 21:d42a756af44d (esc)
856 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
856 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 30:6e11cd4b648f (esc)
857 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
857 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
858 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
858 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
859 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
859 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (31) expand (esc)
860 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
860 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
861 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
861 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 30:6e11cd4b648f (esc)
862 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
862 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
863 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
863 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 29:cd9bb2be7593 (esc)
864 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
864 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
865 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
865 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
866 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
866 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (30) expand (esc)
867 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
867 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
868 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
868 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 29:cd9bb2be7593 (esc)
869 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
869 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
870 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
870 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
871 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
871 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:29 1970 +0000 (esc)
872 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
872 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (29) regular commit (esc)
873 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
873 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
874 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
874 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 28:44ecd0b9ae99 (esc)
875 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
875 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
876 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
876 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 26:7f25b6c2f0b9 (esc)
877 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
877 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
878 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
878 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
879 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
879 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (28) merge zero known (esc)
880 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
880 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
881 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
881 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 27:886ed638191b (esc)
882 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
882 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
883 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
883 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
884 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
884 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:27 1970 +0000 (esc)
885 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
885 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (27) collapse (esc)
886 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
886 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
887 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
887 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 26:7f25b6c2f0b9 (esc)
888 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
888 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
889 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
889 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 25:91da8ed57247 (esc)
890 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
890 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
891 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
891 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
892 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
892 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (26) merge one known; far right (esc)
893 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
893 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
894 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
894 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 25:91da8ed57247 (esc)
895 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
895 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 21:d42a756af44d (esc)
896 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
896 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 24:a9c19a3d96b7 (esc)
897 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
897 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
898 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
898 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
899 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
899 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (25) merge one known; far left (esc)
900 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
900 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
901 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
901 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 24:a9c19a3d96b7 (esc)
902 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
902 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
903 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
903 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 23:a01cddf0766d (esc)
904 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
904 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
905 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
905 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
906 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
906 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (24) merge one known; immediate right (esc)
907 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
907 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
908 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
908 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 23:a01cddf0766d (esc)
909 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
909 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
910 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
910 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 22:e0d9cccacb5d (esc)
911 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
911 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
912 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
912 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
913 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
913 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (23) merge one known; immediate left (esc)
914 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
914 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
915 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
915 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 22:e0d9cccacb5d (esc)
916 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
916 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
917 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
917 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 parent: 21:d42a756af44d (esc)
918 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
918 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
919 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
919 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
920 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
920 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (22) merge two known; one far left, one far right (esc)
921 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
921 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
922 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
922 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 21:d42a756af44d (esc)
923 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
923 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
924 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
924 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
925 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
925 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
926 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
926 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
927 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
927 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
928 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
928 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
929 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
929 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\xa4 changeset: 20:d30ed6450e32 (esc)
930 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
930 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
931 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
931 \xe2\x94\x82 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
932 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
932 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
933 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
933 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
934 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
934 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
935 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
935 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
936 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
936 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 19:31ddc2c1573b (esc)
937 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
937 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
938 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
938 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
939 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
939 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
940 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
940 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
941 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
941 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
942 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
942 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
943 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
943 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 18:1aa84d96232a (esc)
944 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
944 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
945 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
945 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
946 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
946 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
947 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
947 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
948 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
948 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
949 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
949 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
950 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
950 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 17:44765d7c06e0 (esc)
951 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
951 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
952 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
952 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
953 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
953 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
954 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
954 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
955 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
955 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
956 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
956 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
957 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
957 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 16:3677d192927d (esc)
958 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
958 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
959 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
959 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
960 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
960 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
961 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
961 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
962 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
962 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
963 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
963 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
964 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
964 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
965 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
965 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
966 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
966 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
967 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
967 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
968 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
968 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
969 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
969 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
970 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
970 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
971 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
971 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 14:8eac370358ef (esc)
972 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
972 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
973 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
973 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 12:86b91144a6e9 (esc)
974 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
974 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
975 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
975 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
976 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
976 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
977 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
977 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
978 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
978 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
979 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
979 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
980 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
980 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
981 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
981 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
982 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
982 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
983 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
983 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
984 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
984 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
985 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
985 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 12:86b91144a6e9 (esc)
986 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
986 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
987 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
987 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 9:7010c0af0a35 (esc)
988 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
988 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
989 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
989 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
990 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
990 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
991 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
991 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
992 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
992 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 11:832d76e6bdf2 (esc)
993 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
993 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 6:b105a072e251 (esc)
994 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
994 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
995 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
995 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
996 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
996 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
997 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
997 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
998 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
998 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
999 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
999 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 10:74c64d036d72 (esc)
1000 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1000 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1001 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
1001 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 6:b105a072e251 (esc)
1002 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1002 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1003 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
1003 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
1004 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
1004 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
1005 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1005 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1006 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
1006 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
1007 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1007 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1008 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
1008 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
1009 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1009 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1010 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1010 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1011 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
1011 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
1012 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1012 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1013 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
1013 \xe2\x94\x82 \xe2\x97\x8b\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4 changeset: 8:7a0b11f71937 (esc)
1014 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1014 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1015 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
1015 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 7:b632bb1b1224 (esc)
1016 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1016 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1017 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
1017 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
1018 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
1018 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
1019 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1019 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1020 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
1020 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
1021 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
1021 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
1022 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1022 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1023 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1023 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1024 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
1024 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
1025 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
1025 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
1026 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1026 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1027 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
1027 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 6:b105a072e251 (esc)
1028 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
1028 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 parent: 2:3d9a33b8d1e1 (esc)
1029 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1029 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1030 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1030 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1031 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
1031 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
1032 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
1032 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
1033 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1033 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1034 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
1034 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 5:4409d547b708 (esc)
1035 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
1035 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 \xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
1036 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
1036 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 4:26a8bac39d9f (esc)
1037 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1037 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1038 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
1038 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
1039 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
1039 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (5) expand (esc)
1040 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1040 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1041 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
1041 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 4:26a8bac39d9f (esc)
1042 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
1042 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 parent: 1:6db2ef61d156 (esc)
1043 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
1043 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 3:27eef8ed80b4 (esc)
1044 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1044 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1045 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
1045 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:04 1970 +0000 (esc)
1046 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
1046 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (4) merge two known; one immediate left, one immediate right (esc)
1047 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1047 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1048 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
1048 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 3:27eef8ed80b4 (esc)
1049 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
1049 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
1050 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
1050 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:03 1970 +0000 (esc)
1051 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
1051 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (3) collapse (esc)
1052 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1052 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1053 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
1053 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 2:3d9a33b8d1e1 (esc)
1054 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
1054 \xe2\x94\x82\xe2\x95\xb1 \xe2\x95\xb1 user: test (esc)
1055 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
1055 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:02 1970 +0000 (esc)
1056 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
1056 \xe2\x94\x82 \xe2\x94\x82 summary: (2) collapse (esc)
1057 \xe2\x94\x82 \xe2\x94\x82 (esc)
1057 \xe2\x94\x82 \xe2\x94\x82 (esc)
1058 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
1058 \xe2\x97\x8b \xe2\x94\x82 changeset: 1:6db2ef61d156 (esc)
1059 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
1059 \xe2\x94\x82\xe2\x95\xb1 user: test (esc)
1060 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
1060 \xe2\x94\x82 date: Thu Jan 01 00:00:01 1970 +0000 (esc)
1061 \xe2\x94\x82 summary: (1) collapse (esc)
1061 \xe2\x94\x82 summary: (1) collapse (esc)
1062 \xe2\x94\x82 (esc)
1062 \xe2\x94\x82 (esc)
1063 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
1063 \xe2\x97\x8b changeset: 0:e6eb3150255d (esc)
1064 user: test
1064 user: test
1065 date: Thu Jan 01 00:00:00 1970 +0000
1065 date: Thu Jan 01 00:00:00 1970 +0000
1066 summary: (0) root
1066 summary: (0) root
1067
1067
1068
1068
1069 File glog per revset (only merges):
1069 File glog per revset (only merges):
1070
1070
1071 $ hg log -G -r 'file("a")' -m
1071 $ hg log -G -r 'file("a")' -m
1072 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1072 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1073 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1073 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1074 \xe2\x94\x82 \xe2\x94\x86 parent: 31:621d83e11f67 (esc)
1074 \xe2\x94\x82 \xe2\x94\x86 parent: 31:621d83e11f67 (esc)
1075 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1075 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1076 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1076 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1077 \xe2\x94\x82 \xe2\x94\x86 summary: (32) expand (esc)
1077 \xe2\x94\x82 \xe2\x94\x86 summary: (32) expand (esc)
1078 \xe2\x94\x82 \xe2\x94\x86 (esc)
1078 \xe2\x94\x82 \xe2\x94\x86 (esc)
1079 \xe2\x97\x8b \xe2\x94\x86 changeset: 31:621d83e11f67 (esc)
1079 \xe2\x97\x8b \xe2\x94\x86 changeset: 31:621d83e11f67 (esc)
1080 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
1080 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
1081 \xe2\x94\x82 \xe2\x94\x86 parent: 30:6e11cd4b648f (esc)
1081 \xe2\x94\x82 \xe2\x94\x86 parent: 30:6e11cd4b648f (esc)
1082 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1082 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1083 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
1083 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
1084 \xe2\x94\x82 \xe2\x94\x86 summary: (31) expand (esc)
1084 \xe2\x94\x82 \xe2\x94\x86 summary: (31) expand (esc)
1085 \xe2\x94\x82 \xe2\x94\x86 (esc)
1085 \xe2\x94\x82 \xe2\x94\x86 (esc)
1086 \xe2\x97\x8b \xe2\x94\x86 changeset: 30:6e11cd4b648f (esc)
1086 \xe2\x97\x8b \xe2\x94\x86 changeset: 30:6e11cd4b648f (esc)
1087 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
1087 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
1088 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 29:cd9bb2be7593 (esc)
1088 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 29:cd9bb2be7593 (esc)
1089 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1089 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1090 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
1090 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
1091 \xe2\x94\x82 \xe2\x94\x86 summary: (30) expand (esc)
1091 \xe2\x94\x82 \xe2\x94\x86 summary: (30) expand (esc)
1092 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1092 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1093 \xe2\x97\x8b \xe2\x94\x86 changeset: 28:44ecd0b9ae99 (esc)
1093 \xe2\x97\x8b \xe2\x94\x86 changeset: 28:44ecd0b9ae99 (esc)
1094 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1094 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1095 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 26:7f25b6c2f0b9 (esc)
1095 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 26:7f25b6c2f0b9 (esc)
1096 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1096 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1097 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
1097 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
1098 \xe2\x94\x82 \xe2\x94\x86 summary: (28) merge zero known (esc)
1098 \xe2\x94\x82 \xe2\x94\x86 summary: (28) merge zero known (esc)
1099 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1099 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1100 \xe2\x97\x8b \xe2\x94\x86 changeset: 26:7f25b6c2f0b9 (esc)
1100 \xe2\x97\x8b \xe2\x94\x86 changeset: 26:7f25b6c2f0b9 (esc)
1101 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 18:1aa84d96232a (esc)
1101 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 18:1aa84d96232a (esc)
1102 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 25:91da8ed57247 (esc)
1102 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 25:91da8ed57247 (esc)
1103 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1103 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1104 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
1104 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
1105 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (26) merge one known; far right (esc)
1105 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (26) merge one known; far right (esc)
1106 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
1106 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
1107 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 25:91da8ed57247 (esc)
1107 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 25:91da8ed57247 (esc)
1108 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
1108 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
1109 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 24:a9c19a3d96b7 (esc)
1109 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 24:a9c19a3d96b7 (esc)
1110 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1110 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1111 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
1111 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
1112 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (25) merge one known; far left (esc)
1112 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (25) merge one known; far left (esc)
1113 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
1113 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
1114 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 24:a9c19a3d96b7 (esc)
1114 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 24:a9c19a3d96b7 (esc)
1115 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1115 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1116 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 23:a01cddf0766d (esc)
1116 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 23:a01cddf0766d (esc)
1117 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1117 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1118 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
1118 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
1119 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (24) merge one known; immediate right (esc)
1119 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (24) merge one known; immediate right (esc)
1120 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1120 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1121 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 23:a01cddf0766d (esc)
1121 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 23:a01cddf0766d (esc)
1122 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1122 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1123 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 22:e0d9cccacb5d (esc)
1123 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 22:e0d9cccacb5d (esc)
1124 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1124 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1125 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
1125 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
1126 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (23) merge one known; immediate left (esc)
1126 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (23) merge one known; immediate left (esc)
1127 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1127 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1128 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 22:e0d9cccacb5d (esc)
1128 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 22:e0d9cccacb5d (esc)
1129 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x86\xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
1129 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x86\xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
1130 \xe2\x94\x82 \xe2\x94\x86 parent: 21:d42a756af44d (esc)
1130 \xe2\x94\x82 \xe2\x94\x86 parent: 21:d42a756af44d (esc)
1131 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1131 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
1132 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
1132 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
1133 \xe2\x94\x82 \xe2\x94\x86 summary: (22) merge two known; one far left, one far right (esc)
1133 \xe2\x94\x82 \xe2\x94\x86 summary: (22) merge two known; one far left, one far right (esc)
1134 \xe2\x94\x82 \xe2\x94\x86 (esc)
1134 \xe2\x94\x82 \xe2\x94\x86 (esc)
1135 \xe2\x94\x82 \xe2\x97\x8b changeset: 21:d42a756af44d (esc)
1135 \xe2\x94\x82 \xe2\x97\x8b changeset: 21:d42a756af44d (esc)
1136 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
1136 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
1137 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
1137 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
1138 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1138 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1139 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
1139 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
1140 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
1140 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
1141 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1141 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1142 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 20:d30ed6450e32 (esc)
1142 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 20:d30ed6450e32 (esc)
1143 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1143 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1144 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 18:1aa84d96232a (esc)
1144 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 18:1aa84d96232a (esc)
1145 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1145 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1146 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
1146 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
1147 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
1147 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
1148 \xe2\x94\x82 \xe2\x94\x82 (esc)
1148 \xe2\x94\x82 \xe2\x94\x82 (esc)
1149 \xe2\x94\x82 \xe2\x97\x8b changeset: 19:31ddc2c1573b (esc)
1149 \xe2\x94\x82 \xe2\x97\x8b changeset: 19:31ddc2c1573b (esc)
1150 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
1150 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
1151 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
1151 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
1152 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1152 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1153 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
1153 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
1154 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
1154 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
1155 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1155 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1156 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 18:1aa84d96232a (esc)
1156 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 18:1aa84d96232a (esc)
1157 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
1157 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
1158 \xe2\x95\xa7 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
1158 \xe2\x95\xa7 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
1159 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1159 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1160 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
1160 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
1161 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
1161 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
1162 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
1162 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
1163 \xe2\x94\x82 \xe2\x97\x8b changeset: 17:44765d7c06e0 (esc)
1163 \xe2\x94\x82 \xe2\x97\x8b changeset: 17:44765d7c06e0 (esc)
1164 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
1164 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
1165 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
1165 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
1166 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1166 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1167 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
1167 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
1168 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
1168 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
1169 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1169 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1170 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 16:3677d192927d (esc)
1170 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 16:3677d192927d (esc)
1171 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1171 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1172 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x95\xa7 parent: 1:6db2ef61d156 (esc)
1172 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x95\xa7 parent: 1:6db2ef61d156 (esc)
1173 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1173 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1174 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
1174 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
1175 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
1175 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
1176 \xe2\x94\x82 \xe2\x94\x82 (esc)
1176 \xe2\x94\x82 \xe2\x94\x82 (esc)
1177 \xe2\x97\x8b \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
1177 \xe2\x97\x8b \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
1178 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
1178 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
1179 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
1179 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
1180 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1180 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1181 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
1181 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
1182 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
1182 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
1183 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1183 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1184 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 14:8eac370358ef (esc)
1184 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 14:8eac370358ef (esc)
1185 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1185 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1186 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 12:86b91144a6e9 (esc)
1186 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 12:86b91144a6e9 (esc)
1187 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1187 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1188 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
1188 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
1189 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
1189 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
1190 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1190 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1191 \xe2\x97\x8b \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
1191 \xe2\x97\x8b \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
1192 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
1192 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
1193 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
1193 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
1194 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1194 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1195 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
1195 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
1196 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
1196 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
1197 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1197 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1198 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 12:86b91144a6e9 (esc)
1198 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 12:86b91144a6e9 (esc)
1199 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
1199 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
1200 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 9:7010c0af0a35 (esc)
1200 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 9:7010c0af0a35 (esc)
1201 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1201 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1202 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
1202 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
1203 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
1203 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
1204 \xe2\x94\x82 \xe2\x94\x82 (esc)
1204 \xe2\x94\x82 \xe2\x94\x82 (esc)
1205 \xe2\x94\x82 \xe2\x97\x8b changeset: 11:832d76e6bdf2 (esc)
1205 \xe2\x94\x82 \xe2\x97\x8b changeset: 11:832d76e6bdf2 (esc)
1206 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 6:b105a072e251 (esc)
1206 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 6:b105a072e251 (esc)
1207 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
1207 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
1208 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1208 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1209 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
1209 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
1210 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
1210 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
1211 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1211 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1212 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 10:74c64d036d72 (esc)
1212 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 10:74c64d036d72 (esc)
1213 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1213 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1214 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 6:b105a072e251 (esc)
1214 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 6:b105a072e251 (esc)
1215 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1215 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1216 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
1216 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
1217 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
1217 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
1218 \xe2\x94\x82 \xe2\x94\x82 (esc)
1218 \xe2\x94\x82 \xe2\x94\x82 (esc)
1219 \xe2\x97\x8b \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
1219 \xe2\x97\x8b \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
1220 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1220 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1221 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
1221 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
1222 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1222 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1223 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1223 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1224 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
1224 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
1225 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1225 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
1226 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 8:7a0b11f71937 (esc)
1226 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 8:7a0b11f71937 (esc)
1227 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1227 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
1228 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 7:b632bb1b1224 (esc)
1228 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 7:b632bb1b1224 (esc)
1229 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1229 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1230 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
1230 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
1231 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
1231 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
1232 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1232 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1233 \xe2\x97\x8b \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
1233 \xe2\x97\x8b \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
1234 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
1234 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
1235 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1235 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
1236 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1236 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
1237 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
1237 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
1238 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
1238 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
1239 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1239 \xe2\x94\x82 \xe2\x95\xb1 (esc)
1240 \xe2\x94\x82 \xe2\x97\x8b changeset: 6:b105a072e251 (esc)
1240 \xe2\x94\x82 \xe2\x97\x8b changeset: 6:b105a072e251 (esc)
1241 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 2:3d9a33b8d1e1 (esc)
1241 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 2:3d9a33b8d1e1 (esc)
1242 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:4409d547b708 (esc)
1242 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:4409d547b708 (esc)
1243 \xe2\x94\x82 user: test (esc)
1243 \xe2\x94\x82 user: test (esc)
1244 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
1244 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
1245 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
1245 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
1246 \xe2\x94\x82 (esc)
1246 \xe2\x94\x82 (esc)
1247 \xe2\x97\x8b changeset: 5:4409d547b708 (esc)
1247 \xe2\x97\x8b changeset: 5:4409d547b708 (esc)
1248 \xe2\x94\x82\xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
1248 \xe2\x94\x82\xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
1249 \xe2\x94\x82 \xe2\x95\xa7 parent: 4:26a8bac39d9f (esc)
1249 \xe2\x94\x82 \xe2\x95\xa7 parent: 4:26a8bac39d9f (esc)
1250 \xe2\x94\x82 user: test (esc)
1250 \xe2\x94\x82 user: test (esc)
1251 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
1251 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
1252 \xe2\x94\x82 summary: (5) expand (esc)
1252 \xe2\x94\x82 summary: (5) expand (esc)
1253 \xe2\x94\x82 (esc)
1253 \xe2\x94\x82 (esc)
1254 \xe2\x97\x8b changeset: 4:26a8bac39d9f (esc)
1254 \xe2\x97\x8b changeset: 4:26a8bac39d9f (esc)
1255 \xe2\x94\x82\xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1255 \xe2\x94\x82\xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
1256 \xe2\x95\xa7 \xe2\x95\xa7 parent: 3:27eef8ed80b4 (esc)
1256 \xe2\x95\xa7 \xe2\x95\xa7 parent: 3:27eef8ed80b4 (esc)
1257 user: test
1257 user: test
1258 date: Thu Jan 01 00:00:04 1970 +0000
1258 date: Thu Jan 01 00:00:04 1970 +0000
1259 summary: (4) merge two known; one immediate left, one immediate right
1259 summary: (4) merge two known; one immediate left, one immediate right
1260
1260
1261
1261
1262 Empty revision range - display nothing:
1262 Empty revision range - display nothing:
1263 $ hg log -G -r 1..0
1263 $ hg log -G -r 1..0
1264
1264
1265 $ cd ..
1265 $ cd ..
1266
1266
1267 #if no-outer-repo
1267 #if no-outer-repo
1268
1268
1269 From outer space:
1269 From outer space:
1270 $ hg log -G -l1 repo
1270 $ hg log -G -l1 repo
1271 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1271 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1272 \xe2\x94\x82 tag: tip (esc)
1272 \xe2\x94\x82 tag: tip (esc)
1273 \xe2\x95\xa7 parent: 32:d06dffa21a31 (esc)
1273 \xe2\x95\xa7 parent: 32:d06dffa21a31 (esc)
1274 user: test
1274 user: test
1275 date: Thu Jan 01 00:00:34 1970 +0000
1275 date: Thu Jan 01 00:00:34 1970 +0000
1276 summary: (34) head
1276 summary: (34) head
1277
1277
1278 $ hg log -G -l1 repo/a
1278 $ hg log -G -l1 repo/a
1279 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1279 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1280 \xe2\x94\x82 tag: tip (esc)
1280 \xe2\x94\x82 tag: tip (esc)
1281 \xe2\x95\xa7 parent: 32:d06dffa21a31 (esc)
1281 \xe2\x95\xa7 parent: 32:d06dffa21a31 (esc)
1282 user: test
1282 user: test
1283 date: Thu Jan 01 00:00:34 1970 +0000
1283 date: Thu Jan 01 00:00:34 1970 +0000
1284 summary: (34) head
1284 summary: (34) head
1285
1285
1286 $ hg log -G -l1 repo/missing
1286 $ hg log -G -l1 repo/missing
1287
1287
1288 #endif
1288 #endif
1289
1289
1290 File log with revs != cset revs:
1290 File log with revs != cset revs:
1291 $ hg init flog
1291 $ hg init flog
1292 $ cd flog
1292 $ cd flog
1293 $ echo one >one
1293 $ echo one >one
1294 $ hg add one
1294 $ hg add one
1295 $ hg commit -mone
1295 $ hg commit -mone
1296 $ echo two >two
1296 $ echo two >two
1297 $ hg add two
1297 $ hg add two
1298 $ hg commit -mtwo
1298 $ hg commit -mtwo
1299 $ echo more >two
1299 $ echo more >two
1300 $ hg commit -mmore
1300 $ hg commit -mmore
1301 $ hg log -G two
1301 $ hg log -G two
1302 \xe2\x97\x8d changeset: 2:12c28321755b (esc)
1302 \xe2\x97\x8d changeset: 2:12c28321755b (esc)
1303 \xe2\x94\x82 tag: tip (esc)
1303 \xe2\x94\x82 tag: tip (esc)
1304 \xe2\x94\x82 user: test (esc)
1304 \xe2\x94\x82 user: test (esc)
1305 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1305 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1306 \xe2\x94\x82 summary: more (esc)
1306 \xe2\x94\x82 summary: more (esc)
1307 \xe2\x94\x82 (esc)
1307 \xe2\x94\x82 (esc)
1308 \xe2\x97\x8b changeset: 1:5ac72c0599bf (esc)
1308 \xe2\x97\x8b changeset: 1:5ac72c0599bf (esc)
1309 \xe2\x94\x82 user: test (esc)
1309 \xe2\x94\x82 user: test (esc)
1310 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1310 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1311 summary: two
1311 summary: two
1312
1312
1313
1313
1314 Issue1896: File log with explicit style
1314 Issue1896: File log with explicit style
1315 $ hg log -G --style=default one
1315 $ hg log -G --style=default one
1316 \xe2\x97\x8b changeset: 0:3d578b4a1f53 (esc)
1316 \xe2\x97\x8b changeset: 0:3d578b4a1f53 (esc)
1317 user: test
1317 user: test
1318 date: Thu Jan 01 00:00:00 1970 +0000
1318 date: Thu Jan 01 00:00:00 1970 +0000
1319 summary: one
1319 summary: one
1320
1320
1321 Issue2395: glog --style header and footer
1321 Issue2395: glog --style header and footer
1322 $ hg log -G --style=xml one
1322 $ hg log -G --style=xml one
1323 <?xml version="1.0"?>
1323 <?xml version="1.0"?>
1324 <log>
1324 <log>
1325 \xe2\x97\x8b <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1"> (esc)
1325 \xe2\x97\x8b <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1"> (esc)
1326 <author email="test">test</author>
1326 <author email="test">test</author>
1327 <date>1970-01-01T00:00:00+00:00</date>
1327 <date>1970-01-01T00:00:00+00:00</date>
1328 <msg xml:space="preserve">one</msg>
1328 <msg xml:space="preserve">one</msg>
1329 </logentry>
1329 </logentry>
1330 </log>
1330 </log>
1331
1331
1332 $ cd ..
1332 $ cd ..
1333
1333
1334 Incoming and outgoing:
1334 Incoming and outgoing:
1335
1335
1336 $ hg clone -U -r31 repo repo2
1336 $ hg clone -U -r31 repo repo2
1337 adding changesets
1337 adding changesets
1338 adding manifests
1338 adding manifests
1339 adding file changes
1339 adding file changes
1340 added 31 changesets with 31 changes to 1 files
1340 added 31 changesets with 31 changes to 1 files
1341 new changesets e6eb3150255d:621d83e11f67
1341 new changesets e6eb3150255d:621d83e11f67
1342 $ cd repo2
1342 $ cd repo2
1343
1343
1344 $ hg incoming --graph ../repo
1344 $ hg incoming --graph ../repo
1345 comparing with ../repo
1345 comparing with ../repo
1346 searching for changes
1346 searching for changes
1347 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1347 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1348 \xe2\x94\x82 tag: tip (esc)
1348 \xe2\x94\x82 tag: tip (esc)
1349 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1349 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1350 \xe2\x94\x82 user: test (esc)
1350 \xe2\x94\x82 user: test (esc)
1351 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1351 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1352 \xe2\x94\x82 summary: (34) head (esc)
1352 \xe2\x94\x82 summary: (34) head (esc)
1353 \xe2\x94\x82 (esc)
1353 \xe2\x94\x82 (esc)
1354 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1354 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1355 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1355 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1356 \xe2\x94\x82 user: test (esc)
1356 \xe2\x94\x82 user: test (esc)
1357 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1357 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1358 \xe2\x94\x82 summary: (33) head (esc)
1358 \xe2\x94\x82 summary: (33) head (esc)
1359 \xe2\x94\x82 (esc)
1359 \xe2\x94\x82 (esc)
1360 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1360 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1361 \xe2\x94\x82 parent: 27:886ed638191b (esc)
1361 \xe2\x94\x82 parent: 27:886ed638191b (esc)
1362 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
1362 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
1363 \xe2\x94\x82 user: test (esc)
1363 \xe2\x94\x82 user: test (esc)
1364 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1364 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1365 \xe2\x94\x82 summary: (32) expand (esc)
1365 \xe2\x94\x82 summary: (32) expand (esc)
1366 \xe2\x94\x82 (esc)
1366 \xe2\x94\x82 (esc)
1367 \xe2\x97\x8b changeset: 27:886ed638191b (esc)
1367 \xe2\x97\x8b changeset: 27:886ed638191b (esc)
1368 parent: 21:d42a756af44d
1368 parent: 21:d42a756af44d
1369 user: test
1369 user: test
1370 date: Thu Jan 01 00:00:27 1970 +0000
1370 date: Thu Jan 01 00:00:27 1970 +0000
1371 summary: (27) collapse
1371 summary: (27) collapse
1372
1372
1373 $ cd ..
1373 $ cd ..
1374
1374
1375 $ hg -R repo outgoing --graph repo2
1375 $ hg -R repo outgoing --graph repo2
1376 comparing with repo2
1376 comparing with repo2
1377 searching for changes
1377 searching for changes
1378 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1378 \xe2\x97\x8d changeset: 34:fea3ac5810e0 (esc)
1379 \xe2\x94\x82 tag: tip (esc)
1379 \xe2\x94\x82 tag: tip (esc)
1380 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1380 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1381 \xe2\x94\x82 user: test (esc)
1381 \xe2\x94\x82 user: test (esc)
1382 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1382 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1383 \xe2\x94\x82 summary: (34) head (esc)
1383 \xe2\x94\x82 summary: (34) head (esc)
1384 \xe2\x94\x82 (esc)
1384 \xe2\x94\x82 (esc)
1385 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1385 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1386 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1386 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1387 \xe2\x94\x82 user: test (esc)
1387 \xe2\x94\x82 user: test (esc)
1388 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1388 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1389 \xe2\x94\x82 summary: (33) head (esc)
1389 \xe2\x94\x82 summary: (33) head (esc)
1390 \xe2\x94\x82 (esc)
1390 \xe2\x94\x82 (esc)
1391 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1391 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1392 \xe2\x94\x82 parent: 27:886ed638191b (esc)
1392 \xe2\x94\x82 parent: 27:886ed638191b (esc)
1393 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
1393 \xe2\x94\x82 parent: 31:621d83e11f67 (esc)
1394 \xe2\x94\x82 user: test (esc)
1394 \xe2\x94\x82 user: test (esc)
1395 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1395 \xe2\x94\x82 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
1396 \xe2\x94\x82 summary: (32) expand (esc)
1396 \xe2\x94\x82 summary: (32) expand (esc)
1397 \xe2\x94\x82 (esc)
1397 \xe2\x94\x82 (esc)
1398 \xe2\x97\x8b changeset: 27:886ed638191b (esc)
1398 \xe2\x97\x8b changeset: 27:886ed638191b (esc)
1399 parent: 21:d42a756af44d
1399 parent: 21:d42a756af44d
1400 user: test
1400 user: test
1401 date: Thu Jan 01 00:00:27 1970 +0000
1401 date: Thu Jan 01 00:00:27 1970 +0000
1402 summary: (27) collapse
1402 summary: (27) collapse
1403
1403
1404
1404
1405 File + limit with revs != cset revs:
1405 File + limit with revs != cset revs:
1406 $ cd repo
1406 $ cd repo
1407 $ touch b
1407 $ touch b
1408 $ hg ci -Aqm0
1408 $ hg ci -Aqm0
1409 $ hg log -G -l2 a
1409 $ hg log -G -l2 a
1410 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1410 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1411 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1411 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1412 \xe2\x95\xa7 user: test (esc)
1412 \xe2\x95\xa7 user: test (esc)
1413 date: Thu Jan 01 00:00:34 1970 +0000
1413 date: Thu Jan 01 00:00:34 1970 +0000
1414 summary: (34) head
1414 summary: (34) head
1415
1415
1416 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1416 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1417 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1417 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1418 \xe2\x95\xa7 user: test (esc)
1418 \xe2\x95\xa7 user: test (esc)
1419 date: Thu Jan 01 00:00:33 1970 +0000
1419 date: Thu Jan 01 00:00:33 1970 +0000
1420 summary: (33) head
1420 summary: (33) head
1421
1421
1422
1422
1423 File + limit + -ra:b, (b - a) < limit:
1423 File + limit + -ra:b, (b - a) < limit:
1424 $ hg log -G -l3000 -r32:tip a
1424 $ hg log -G -l3000 -r32:tip a
1425 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1425 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1426 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1426 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1427 \xe2\x94\x82 user: test (esc)
1427 \xe2\x94\x82 user: test (esc)
1428 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1428 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1429 \xe2\x94\x82 summary: (34) head (esc)
1429 \xe2\x94\x82 summary: (34) head (esc)
1430 \xe2\x94\x82 (esc)
1430 \xe2\x94\x82 (esc)
1431 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1431 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1432 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1432 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1433 \xe2\x94\x82 \xe2\x95\xa7 user: test (esc)
1433 \xe2\x94\x82 \xe2\x95\xa7 user: test (esc)
1434 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1434 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1435 \xe2\x94\x82 summary: (33) head (esc)
1435 \xe2\x94\x82 summary: (33) head (esc)
1436 \xe2\x94\x82 (esc)
1436 \xe2\x94\x82 (esc)
1437 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1437 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1438 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1438 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1439 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1439 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1440 user: test
1440 user: test
1441 date: Thu Jan 01 00:00:32 1970 +0000
1441 date: Thu Jan 01 00:00:32 1970 +0000
1442 summary: (32) expand
1442 summary: (32) expand
1443
1443
1444
1444
1445 Point out a common and an uncommon unshown parent
1445 Point out a common and an uncommon unshown parent
1446
1446
1447 $ hg log -G -r 'rev(8) or rev(9)'
1447 $ hg log -G -r 'rev(8) or rev(9)'
1448 \xe2\x97\x8b changeset: 9:7010c0af0a35 (esc)
1448 \xe2\x97\x8b changeset: 9:7010c0af0a35 (esc)
1449 \xe2\x94\x82\xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1449 \xe2\x94\x82\xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
1450 \xe2\x94\x82 \xe2\x95\xa7 parent: 8:7a0b11f71937 (esc)
1450 \xe2\x94\x82 \xe2\x95\xa7 parent: 8:7a0b11f71937 (esc)
1451 \xe2\x94\x82 user: test (esc)
1451 \xe2\x94\x82 user: test (esc)
1452 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1452 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
1453 \xe2\x94\x82 summary: (9) expand (esc)
1453 \xe2\x94\x82 summary: (9) expand (esc)
1454 \xe2\x94\x82 (esc)
1454 \xe2\x94\x82 (esc)
1455 \xe2\x97\x8b changeset: 8:7a0b11f71937 (esc)
1455 \xe2\x97\x8b changeset: 8:7a0b11f71937 (esc)
1456 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1456 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
1457 \xe2\x95\xa7 \xe2\x95\xa7 parent: 7:b632bb1b1224 (esc)
1457 \xe2\x95\xa7 \xe2\x95\xa7 parent: 7:b632bb1b1224 (esc)
1458 user: test
1458 user: test
1459 date: Thu Jan 01 00:00:08 1970 +0000
1459 date: Thu Jan 01 00:00:08 1970 +0000
1460 summary: (8) merge two known; one immediate left, one far right
1460 summary: (8) merge two known; one immediate left, one far right
1461
1461
1462
1462
1463 File + limit + -ra:b, b < tip:
1463 File + limit + -ra:b, b < tip:
1464
1464
1465 $ hg log -G -l1 -r32:34 a
1465 $ hg log -G -l1 -r32:34 a
1466 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1466 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1467 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1467 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1468 \xe2\x95\xa7 user: test (esc)
1468 \xe2\x95\xa7 user: test (esc)
1469 date: Thu Jan 01 00:00:34 1970 +0000
1469 date: Thu Jan 01 00:00:34 1970 +0000
1470 summary: (34) head
1470 summary: (34) head
1471
1471
1472
1472
1473 file(File) + limit + -ra:b, b < tip:
1473 file(File) + limit + -ra:b, b < tip:
1474
1474
1475 $ hg log -G -l1 -r32:34 -r 'file("a")'
1475 $ hg log -G -l1 -r32:34 -r 'file("a")'
1476 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1476 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1477 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1477 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1478 \xe2\x95\xa7 user: test (esc)
1478 \xe2\x95\xa7 user: test (esc)
1479 date: Thu Jan 01 00:00:34 1970 +0000
1479 date: Thu Jan 01 00:00:34 1970 +0000
1480 summary: (34) head
1480 summary: (34) head
1481
1481
1482
1482
1483 limit(file(File) and a::b), b < tip:
1483 limit(file(File) and a::b), b < tip:
1484
1484
1485 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1485 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1486 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1486 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1487 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1487 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1488 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1488 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1489 user: test
1489 user: test
1490 date: Thu Jan 01 00:00:32 1970 +0000
1490 date: Thu Jan 01 00:00:32 1970 +0000
1491 summary: (32) expand
1491 summary: (32) expand
1492
1492
1493
1493
1494 File + limit + -ra:b, b < tip:
1494 File + limit + -ra:b, b < tip:
1495
1495
1496 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1496 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1497
1497
1498 File + limit + -ra:b, b < tip, (b - a) < limit:
1498 File + limit + -ra:b, b < tip, (b - a) < limit:
1499
1499
1500 $ hg log -G -l10 -r33:34 a
1500 $ hg log -G -l10 -r33:34 a
1501 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1501 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1502 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1502 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1503 \xe2\x95\xa7 user: test (esc)
1503 \xe2\x95\xa7 user: test (esc)
1504 date: Thu Jan 01 00:00:34 1970 +0000
1504 date: Thu Jan 01 00:00:34 1970 +0000
1505 summary: (34) head
1505 summary: (34) head
1506
1506
1507 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1507 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1508 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1508 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1509 \xe2\x95\xa7 user: test (esc)
1509 \xe2\x95\xa7 user: test (esc)
1510 date: Thu Jan 01 00:00:33 1970 +0000
1510 date: Thu Jan 01 00:00:33 1970 +0000
1511 summary: (33) head
1511 summary: (33) head
1512
1512
1513
1513
1514 Do not crash or produce strange graphs if history is buggy
1514 Do not crash or produce strange graphs if history is buggy
1515
1515
1516 $ hg branch branch
1516 $ hg branch branch
1517 marked working directory as branch branch
1517 marked working directory as branch branch
1518 (branches are permanent and global, did you want a bookmark?)
1518 (branches are permanent and global, did you want a bookmark?)
1519 $ commit 36 "buggy merge: identical parents" 35 35
1519 $ commit 36 "buggy merge: identical parents" 35 35
1520 $ hg log -G -l5
1520 $ hg log -G -l5
1521 \xe2\x97\x8d changeset: 36:08a19a744424 (esc)
1521 \xe2\x97\x8d changeset: 36:08a19a744424 (esc)
1522 \xe2\x94\x82 branch: branch (esc)
1522 \xe2\x94\x82 branch: branch (esc)
1523 \xe2\x94\x82 tag: tip (esc)
1523 \xe2\x94\x82 tag: tip (esc)
1524 \xe2\x94\x82 parent: 35:9159c3644c5e (esc)
1524 \xe2\x94\x82 parent: 35:9159c3644c5e (esc)
1525 \xe2\x94\x82 parent: 35:9159c3644c5e (esc)
1525 \xe2\x94\x82 parent: 35:9159c3644c5e (esc)
1526 \xe2\x94\x82 user: test (esc)
1526 \xe2\x94\x82 user: test (esc)
1527 \xe2\x94\x82 date: Thu Jan 01 00:00:36 1970 +0000 (esc)
1527 \xe2\x94\x82 date: Thu Jan 01 00:00:36 1970 +0000 (esc)
1528 \xe2\x94\x82 summary: (36) buggy merge: identical parents (esc)
1528 \xe2\x94\x82 summary: (36) buggy merge: identical parents (esc)
1529 \xe2\x94\x82 (esc)
1529 \xe2\x94\x82 (esc)
1530 \xe2\x97\x8b changeset: 35:9159c3644c5e (esc)
1530 \xe2\x97\x8b changeset: 35:9159c3644c5e (esc)
1531 \xe2\x94\x82 user: test (esc)
1531 \xe2\x94\x82 user: test (esc)
1532 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1532 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
1533 \xe2\x94\x82 summary: 0 (esc)
1533 \xe2\x94\x82 summary: 0 (esc)
1534 \xe2\x94\x82 (esc)
1534 \xe2\x94\x82 (esc)
1535 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1535 \xe2\x97\x8b changeset: 34:fea3ac5810e0 (esc)
1536 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1536 \xe2\x94\x82 parent: 32:d06dffa21a31 (esc)
1537 \xe2\x94\x82 user: test (esc)
1537 \xe2\x94\x82 user: test (esc)
1538 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1538 \xe2\x94\x82 date: Thu Jan 01 00:00:34 1970 +0000 (esc)
1539 \xe2\x94\x82 summary: (34) head (esc)
1539 \xe2\x94\x82 summary: (34) head (esc)
1540 \xe2\x94\x82 (esc)
1540 \xe2\x94\x82 (esc)
1541 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1541 \xe2\x94\x82 \xe2\x97\x8b changeset: 33:68608f5145f9 (esc)
1542 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1542 \xe2\x94\x82 \xe2\x94\x82 parent: 18:1aa84d96232a (esc)
1543 \xe2\x94\x82 \xe2\x95\xa7 user: test (esc)
1543 \xe2\x94\x82 \xe2\x95\xa7 user: test (esc)
1544 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1544 \xe2\x94\x82 date: Thu Jan 01 00:00:33 1970 +0000 (esc)
1545 \xe2\x94\x82 summary: (33) head (esc)
1545 \xe2\x94\x82 summary: (33) head (esc)
1546 \xe2\x94\x82 (esc)
1546 \xe2\x94\x82 (esc)
1547 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1547 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
1548 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1548 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
1549 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1549 \xe2\x95\xa7 \xe2\x95\xa7 parent: 31:621d83e11f67 (esc)
1550 user: test
1550 user: test
1551 date: Thu Jan 01 00:00:32 1970 +0000
1551 date: Thu Jan 01 00:00:32 1970 +0000
1552 summary: (32) expand
1552 summary: (32) expand
1553
1553
1554
1554
1555 Test log -G options
1555 Test log -G options
1556
1556
1557 $ testlog() {
1557 $ testlog() {
1558 > hg log -G --print-revset "$@"
1558 > hg log -G --print-revset "$@"
1559 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1559 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1560 > | sed 's/.*nodetag/nodetag/' > log.nodes
1560 > | sed 's/.*nodetag/nodetag/' > log.nodes
1561 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1561 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1562 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1562 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1563 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1563 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1564 > | grep '^[-+@ ]' || :
1564 > | grep '^[-+@ ]' || :
1565 > }
1565 > }
1566
1566
1567 glog always reorders nodes which explains the difference with log
1567 glog always reorders nodes which explains the difference with log
1568
1568
1569 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1569 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1570 ['27', '25', '21', '34', '32', '31']
1570 ['27', '25', '21', '34', '32', '31']
1571 []
1571 []
1572 <baseset- [21, 25, 27, 31, 32, 34]>
1572 <baseset- [21, 25, 27, 31, 32, 34]>
1573 --- log.nodes * (glob)
1573 --- log.nodes * (glob)
1574 +++ glog.nodes * (glob)
1574 +++ glog.nodes * (glob)
1575 @@ -1,6 +1,6 @@
1575 @@ -1,6 +1,6 @@
1576 -nodetag 27
1576 -nodetag 27
1577 -nodetag 25
1577 -nodetag 25
1578 -nodetag 21
1578 -nodetag 21
1579 nodetag 34
1579 nodetag 34
1580 nodetag 32
1580 nodetag 32
1581 nodetag 31
1581 nodetag 31
1582 +nodetag 27
1582 +nodetag 27
1583 +nodetag 25
1583 +nodetag 25
1584 +nodetag 21
1584 +nodetag 21
1585 $ testlog -u test -u not-a-user
1585 $ testlog -u test -u not-a-user
1586 []
1586 []
1587 (or
1587 (or
1588 (list
1588 (list
1589 (func
1589 (func
1590 (symbol 'user')
1590 (symbol 'user')
1591 (string 'test'))
1591 (string 'literal:test'))
1592 (func
1592 (func
1593 (symbol 'user')
1593 (symbol 'user')
1594 (string 'not-a-user'))))
1594 (string 'literal:not-a-user'))))
1595 <filteredset
1595 <filteredset
1596 <spanset- 0:37>,
1596 <spanset- 0:37>,
1597 <addset
1597 <addset
1598 <filteredset
1598 <filteredset
1599 <fullreposet+ 0:37>,
1599 <fullreposet+ 0:37>,
1600 <user 'test'>>,
1600 <user 'literal:test'>>,
1601 <filteredset
1601 <filteredset
1602 <fullreposet+ 0:37>,
1602 <fullreposet+ 0:37>,
1603 <user 'not-a-user'>>>>
1603 <user 'literal:not-a-user'>>>>
1604 $ testlog -b not-a-branch
1604 $ testlog -b not-a-branch
1605 abort: unknown revision 'not-a-branch'
1605 abort: unknown revision 'not-a-branch'
1606 abort: unknown revision 'not-a-branch'
1606 abort: unknown revision 'not-a-branch'
1607 abort: unknown revision 'not-a-branch'
1607 abort: unknown revision 'not-a-branch'
1608 $ testlog -b 35 -b 36 --only-branch branch
1608 $ testlog -b 35 -b 36 --only-branch branch
1609 []
1609 []
1610 (or
1610 (or
1611 (list
1611 (list
1612 (func
1612 (func
1613 (symbol 'branch')
1613 (symbol 'branch')
1614 (string 'default'))
1614 (string 'literal:default'))
1615 (or
1615 (or
1616 (list
1616 (list
1617 (func
1617 (func
1618 (symbol 'branch')
1618 (symbol 'branch')
1619 (string 'branch'))
1619 (string 'literal:branch'))
1620 (func
1620 (func
1621 (symbol 'branch')
1621 (symbol 'branch')
1622 (string 'branch'))))))
1622 (string 'literal:branch'))))))
1623 <filteredset
1623 <filteredset
1624 <spanset- 0:37>,
1624 <spanset- 0:37>,
1625 <addset
1625 <addset
1626 <filteredset
1626 <filteredset
1627 <fullreposet+ 0:37>,
1627 <fullreposet+ 0:37>,
1628 <branch 'default'>>,
1628 <branch 'literal:default'>>,
1629 <addset
1629 <addset
1630 <filteredset
1630 <filteredset
1631 <fullreposet+ 0:37>,
1631 <fullreposet+ 0:37>,
1632 <branch 'branch'>>,
1632 <branch 'literal:branch'>>,
1633 <filteredset
1633 <filteredset
1634 <fullreposet+ 0:37>,
1634 <fullreposet+ 0:37>,
1635 <branch 'branch'>>>>>
1635 <branch 'literal:branch'>>>>>
1636 $ testlog -k expand -k merge
1636 $ testlog -k expand -k merge
1637 []
1637 []
1638 (or
1638 (or
1639 (list
1639 (list
1640 (func
1640 (func
1641 (symbol 'keyword')
1641 (symbol 'keyword')
1642 (string 'expand'))
1642 (string 'expand'))
1643 (func
1643 (func
1644 (symbol 'keyword')
1644 (symbol 'keyword')
1645 (string 'merge'))))
1645 (string 'merge'))))
1646 <filteredset
1646 <filteredset
1647 <spanset- 0:37>,
1647 <spanset- 0:37>,
1648 <addset
1648 <addset
1649 <filteredset
1649 <filteredset
1650 <fullreposet+ 0:37>,
1650 <fullreposet+ 0:37>,
1651 <keyword 'expand'>>,
1651 <keyword 'expand'>>,
1652 <filteredset
1652 <filteredset
1653 <fullreposet+ 0:37>,
1653 <fullreposet+ 0:37>,
1654 <keyword 'merge'>>>>
1654 <keyword 'merge'>>>>
1655 $ testlog --only-merges
1655 $ testlog --only-merges
1656 []
1656 []
1657 (func
1657 (func
1658 (symbol 'merge')
1658 (symbol 'merge')
1659 None)
1659 None)
1660 <filteredset
1660 <filteredset
1661 <spanset- 0:37>,
1661 <spanset- 0:37>,
1662 <merge>>
1662 <merge>>
1663 $ testlog --no-merges
1663 $ testlog --no-merges
1664 []
1664 []
1665 (not
1665 (not
1666 (func
1666 (func
1667 (symbol 'merge')
1667 (symbol 'merge')
1668 None))
1668 None))
1669 <filteredset
1669 <filteredset
1670 <spanset- 0:37>,
1670 <spanset- 0:37>,
1671 <not
1671 <not
1672 <filteredset
1672 <filteredset
1673 <spanset- 0:37>,
1673 <spanset- 0:37>,
1674 <merge>>>>
1674 <merge>>>>
1675 $ testlog --date '2 0 to 4 0'
1675 $ testlog --date '2 0 to 4 0'
1676 []
1676 []
1677 (func
1677 (func
1678 (symbol 'date')
1678 (symbol 'date')
1679 (string '2 0 to 4 0'))
1679 (string '2 0 to 4 0'))
1680 <filteredset
1680 <filteredset
1681 <spanset- 0:37>,
1681 <spanset- 0:37>,
1682 <date '2 0 to 4 0'>>
1682 <date '2 0 to 4 0'>>
1683 $ hg log -G -d 'brace ) in a date'
1683 $ hg log -G -d 'brace ) in a date'
1684 hg: parse error: invalid date: 'brace ) in a date'
1684 hg: parse error: invalid date: 'brace ) in a date'
1685 [10]
1685 [10]
1686 $ testlog --prune 31 --prune 32
1686 $ testlog --prune 31 --prune 32
1687 []
1687 []
1688 (not
1688 (not
1689 (or
1689 (or
1690 (list
1690 (list
1691 (func
1691 (func
1692 (symbol 'ancestors')
1692 (symbol 'ancestors')
1693 (string '31'))
1693 (string '31'))
1694 (func
1694 (func
1695 (symbol 'ancestors')
1695 (symbol 'ancestors')
1696 (string '32')))))
1696 (string '32')))))
1697 <filteredset
1697 <filteredset
1698 <spanset- 0:37>,
1698 <spanset- 0:37>,
1699 <not
1699 <not
1700 <addset
1700 <addset
1701 <filteredset
1701 <filteredset
1702 <spanset- 0:37>,
1702 <spanset- 0:37>,
1703 <generatorsetdesc+>>,
1703 <generatorsetdesc+>>,
1704 <filteredset
1704 <filteredset
1705 <spanset- 0:37>,
1705 <spanset- 0:37>,
1706 <generatorsetdesc+>>>>>
1706 <generatorsetdesc+>>>>>
1707
1707
1708 Dedicated repo for --follow and paths filtering. The g is crafted to
1708 Dedicated repo for --follow and paths filtering. The g is crafted to
1709 have 2 filelog topological heads in a linear changeset graph.
1709 have 2 filelog topological heads in a linear changeset graph.
1710
1710
1711 $ cd ..
1711 $ cd ..
1712 $ hg init follow
1712 $ hg init follow
1713 $ cd follow
1713 $ cd follow
1714 $ testlog --follow
1714 $ testlog --follow
1715 []
1715 []
1716 []
1716 []
1717 <baseset []>
1717 <baseset []>
1718 $ testlog -rnull
1718 $ testlog -rnull
1719 ['null']
1719 ['null']
1720 []
1720 []
1721 <baseset [-1]>
1721 <baseset [-1]>
1722 $ echo a > a
1722 $ echo a > a
1723 $ echo aa > aa
1723 $ echo aa > aa
1724 $ echo f > f
1724 $ echo f > f
1725 $ hg ci -Am "add a" a aa f
1725 $ hg ci -Am "add a" a aa f
1726 $ hg cp a b
1726 $ hg cp a b
1727 $ hg cp f g
1727 $ hg cp f g
1728 $ hg ci -m "copy a b"
1728 $ hg ci -m "copy a b"
1729 $ mkdir dir
1729 $ mkdir dir
1730 $ hg mv b dir
1730 $ hg mv b dir
1731 $ echo g >> g
1731 $ echo g >> g
1732 $ echo f >> f
1732 $ echo f >> f
1733 $ hg ci -m "mv b dir/b"
1733 $ hg ci -m "mv b dir/b"
1734 $ hg mv a b
1734 $ hg mv a b
1735 $ hg cp -f f g
1735 $ hg cp -f f g
1736 $ echo a > d
1736 $ echo a > d
1737 $ hg add d
1737 $ hg add d
1738 $ hg ci -m "mv a b; add d"
1738 $ hg ci -m "mv a b; add d"
1739 $ hg mv dir/b e
1739 $ hg mv dir/b e
1740 $ hg ci -m "mv dir/b e"
1740 $ hg ci -m "mv dir/b e"
1741 $ hg log -G --template '({rev}) {desc|firstline}\n'
1741 $ hg log -G --template '({rev}) {desc|firstline}\n'
1742 \xe2\x97\x8d (4) mv dir/b e (esc)
1742 \xe2\x97\x8d (4) mv dir/b e (esc)
1743 \xe2\x94\x82 (esc)
1743 \xe2\x94\x82 (esc)
1744 \xe2\x97\x8b (3) mv a b; add d (esc)
1744 \xe2\x97\x8b (3) mv a b; add d (esc)
1745 \xe2\x94\x82 (esc)
1745 \xe2\x94\x82 (esc)
1746 \xe2\x97\x8b (2) mv b dir/b (esc)
1746 \xe2\x97\x8b (2) mv b dir/b (esc)
1747 \xe2\x94\x82 (esc)
1747 \xe2\x94\x82 (esc)
1748 \xe2\x97\x8b (1) copy a b (esc)
1748 \xe2\x97\x8b (1) copy a b (esc)
1749 \xe2\x94\x82 (esc)
1749 \xe2\x94\x82 (esc)
1750 \xe2\x97\x8b (0) add a (esc)
1750 \xe2\x97\x8b (0) add a (esc)
1751
1751
1752
1752
1753 $ testlog a
1753 $ testlog a
1754 []
1754 []
1755 (func
1755 (func
1756 (symbol 'filelog')
1756 (symbol 'filelog')
1757 (string 'a'))
1757 (string 'a'))
1758 <filteredset
1758 <filteredset
1759 <spanset- 0:5>, set([0])>
1759 <spanset- 0:5>, set([0])>
1760 $ testlog a b
1760 $ testlog a b
1761 []
1761 []
1762 (or
1762 (or
1763 (list
1763 (list
1764 (func
1764 (func
1765 (symbol 'filelog')
1765 (symbol 'filelog')
1766 (string 'a'))
1766 (string 'a'))
1767 (func
1767 (func
1768 (symbol 'filelog')
1768 (symbol 'filelog')
1769 (string 'b'))))
1769 (string 'b'))))
1770 <filteredset
1770 <filteredset
1771 <spanset- 0:5>,
1771 <spanset- 0:5>,
1772 <addset
1772 <addset
1773 <baseset+ [0]>,
1773 <baseset+ [0]>,
1774 <baseset+ [1]>>>
1774 <baseset+ [1]>>>
1775
1775
1776 Test falling back to slow path for non-existing files
1776 Test falling back to slow path for non-existing files
1777
1777
1778 $ testlog a c
1778 $ testlog a c
1779 []
1779 []
1780 (func
1780 (func
1781 (symbol '_matchfiles')
1781 (symbol '_matchfiles')
1782 (list
1782 (list
1783 (string 'r:')
1783 (string 'r:')
1784 (string 'd:relpath')
1784 (string 'd:relpath')
1785 (string 'p:a')
1785 (string 'p:a')
1786 (string 'p:c')))
1786 (string 'p:c')))
1787 <filteredset
1787 <filteredset
1788 <spanset- 0:5>,
1788 <spanset- 0:5>,
1789 <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=2147483647>>
1789 <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=2147483647>>
1790
1790
1791 Test multiple --include/--exclude/paths
1791 Test multiple --include/--exclude/paths
1792
1792
1793 $ testlog --include a --include e --exclude b --exclude e a e
1793 $ testlog --include a --include e --exclude b --exclude e a e
1794 []
1794 []
1795 (func
1795 (func
1796 (symbol '_matchfiles')
1796 (symbol '_matchfiles')
1797 (list
1797 (list
1798 (string 'r:')
1798 (string 'r:')
1799 (string 'd:relpath')
1799 (string 'd:relpath')
1800 (string 'p:a')
1800 (string 'p:a')
1801 (string 'p:e')
1801 (string 'p:e')
1802 (string 'i:a')
1802 (string 'i:a')
1803 (string 'i:e')
1803 (string 'i:e')
1804 (string 'x:b')
1804 (string 'x:b')
1805 (string 'x:e')))
1805 (string 'x:e')))
1806 <filteredset
1806 <filteredset
1807 <spanset- 0:5>,
1807 <spanset- 0:5>,
1808 <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=2147483647>>
1808 <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=2147483647>>
1809
1809
1810 Test glob expansion of pats
1810 Test glob expansion of pats
1811
1811
1812 $ expandglobs=`"$PYTHON" -c "import mercurial.util; \
1812 $ expandglobs=`"$PYTHON" -c "import mercurial.util; \
1813 > print(mercurial.util.expandglobs and 'true' or 'false')"`
1813 > print(mercurial.util.expandglobs and 'true' or 'false')"`
1814 $ if [ $expandglobs = "true" ]; then
1814 $ if [ $expandglobs = "true" ]; then
1815 > testlog 'a*';
1815 > testlog 'a*';
1816 > else
1816 > else
1817 > testlog a*;
1817 > testlog a*;
1818 > fi;
1818 > fi;
1819 []
1819 []
1820 (func
1820 (func
1821 (symbol 'filelog')
1821 (symbol 'filelog')
1822 (string 'aa'))
1822 (string 'aa'))
1823 <filteredset
1823 <filteredset
1824 <spanset- 0:5>, set([0])>
1824 <spanset- 0:5>, set([0])>
1825
1825
1826 Test --follow on a non-existent directory
1826 Test --follow on a non-existent directory
1827
1827
1828 $ testlog -f dir
1828 $ testlog -f dir
1829 abort: cannot follow file not in parent revision: "dir"
1829 abort: cannot follow file not in parent revision: "dir"
1830 abort: cannot follow file not in parent revision: "dir"
1830 abort: cannot follow file not in parent revision: "dir"
1831 abort: cannot follow file not in parent revision: "dir"
1831 abort: cannot follow file not in parent revision: "dir"
1832
1832
1833 Test --follow on a directory
1833 Test --follow on a directory
1834
1834
1835 $ hg up -q '.^'
1835 $ hg up -q '.^'
1836 $ testlog -f dir
1836 $ testlog -f dir
1837 []
1837 []
1838 (func
1838 (func
1839 (symbol '_matchfiles')
1839 (symbol '_matchfiles')
1840 (list
1840 (list
1841 (string 'r:')
1841 (string 'r:')
1842 (string 'd:relpath')
1842 (string 'd:relpath')
1843 (string 'p:dir')))
1843 (string 'p:dir')))
1844 <filteredset
1844 <filteredset
1845 <generatorsetdesc->,
1845 <generatorsetdesc->,
1846 <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=2147483647>>
1846 <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=2147483647>>
1847 $ hg up -q tip
1847 $ hg up -q tip
1848
1848
1849 Test --follow on file not in parent revision
1849 Test --follow on file not in parent revision
1850
1850
1851 $ testlog -f a
1851 $ testlog -f a
1852 abort: cannot follow file not in parent revision: "a"
1852 abort: cannot follow file not in parent revision: "a"
1853 abort: cannot follow file not in parent revision: "a"
1853 abort: cannot follow file not in parent revision: "a"
1854 abort: cannot follow file not in parent revision: "a"
1854 abort: cannot follow file not in parent revision: "a"
1855
1855
1856 Test --follow and patterns
1856 Test --follow and patterns
1857
1857
1858 $ testlog -f 'glob:*'
1858 $ testlog -f 'glob:*'
1859 []
1859 []
1860 (func
1860 (func
1861 (symbol '_matchfiles')
1861 (symbol '_matchfiles')
1862 (list
1862 (list
1863 (string 'r:')
1863 (string 'r:')
1864 (string 'd:relpath')
1864 (string 'd:relpath')
1865 (string 'p:glob:*')))
1865 (string 'p:glob:*')))
1866 <filteredset
1866 <filteredset
1867 <generatorsetdesc->,
1867 <generatorsetdesc->,
1868 <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=2147483647>>
1868 <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=2147483647>>
1869
1869
1870 Test --follow on a single rename
1870 Test --follow on a single rename
1871
1871
1872 $ hg up -q 2
1872 $ hg up -q 2
1873 $ testlog -f a
1873 $ testlog -f a
1874 []
1874 []
1875 []
1875 []
1876 <generatorsetdesc->
1876 <generatorsetdesc->
1877
1877
1878 Test --follow and multiple renames
1878 Test --follow and multiple renames
1879
1879
1880 $ hg up -q tip
1880 $ hg up -q tip
1881 $ testlog -f e
1881 $ testlog -f e
1882 []
1882 []
1883 []
1883 []
1884 <generatorsetdesc->
1884 <generatorsetdesc->
1885
1885
1886 Test --follow and multiple filelog heads
1886 Test --follow and multiple filelog heads
1887
1887
1888 $ hg up -q 2
1888 $ hg up -q 2
1889 $ testlog -f g
1889 $ testlog -f g
1890 []
1890 []
1891 []
1891 []
1892 <generatorsetdesc->
1892 <generatorsetdesc->
1893 $ cat log.nodes
1893 $ cat log.nodes
1894 nodetag 2
1894 nodetag 2
1895 nodetag 1
1895 nodetag 1
1896 nodetag 0
1896 nodetag 0
1897 $ hg up -q tip
1897 $ hg up -q tip
1898 $ testlog -f g
1898 $ testlog -f g
1899 []
1899 []
1900 []
1900 []
1901 <generatorsetdesc->
1901 <generatorsetdesc->
1902 $ cat log.nodes
1902 $ cat log.nodes
1903 nodetag 3
1903 nodetag 3
1904 nodetag 2
1904 nodetag 2
1905 nodetag 0
1905 nodetag 0
1906
1906
1907 Test --follow and multiple files
1907 Test --follow and multiple files
1908
1908
1909 $ testlog -f g e
1909 $ testlog -f g e
1910 []
1910 []
1911 []
1911 []
1912 <generatorsetdesc->
1912 <generatorsetdesc->
1913 $ cat log.nodes
1913 $ cat log.nodes
1914 nodetag 4
1914 nodetag 4
1915 nodetag 3
1915 nodetag 3
1916 nodetag 2
1916 nodetag 2
1917 nodetag 1
1917 nodetag 1
1918 nodetag 0
1918 nodetag 0
1919
1919
1920 Test --follow null parent
1920 Test --follow null parent
1921
1921
1922 $ hg up -q null
1922 $ hg up -q null
1923 $ testlog -f
1923 $ testlog -f
1924 []
1924 []
1925 []
1925 []
1926 <baseset []>
1926 <baseset []>
1927
1927
1928 Test --follow-first
1928 Test --follow-first
1929
1929
1930 $ hg up -q 3
1930 $ hg up -q 3
1931 $ echo ee > e
1931 $ echo ee > e
1932 $ hg ci -Am "add another e" e
1932 $ hg ci -Am "add another e" e
1933 created new head
1933 created new head
1934 $ hg merge --tool internal:other 4
1934 $ hg merge --tool internal:other 4
1935 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1935 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1936 (branch merge, don't forget to commit)
1936 (branch merge, don't forget to commit)
1937 $ echo merge > e
1937 $ echo merge > e
1938 $ hg ci -m "merge 5 and 4"
1938 $ hg ci -m "merge 5 and 4"
1939 $ testlog --follow-first
1939 $ testlog --follow-first
1940 []
1940 []
1941 []
1941 []
1942 <generatorsetdesc->
1942 <generatorsetdesc->
1943
1943
1944 Cannot compare with log --follow-first FILE as it never worked
1944 Cannot compare with log --follow-first FILE as it never worked
1945
1945
1946 $ hg log -G --print-revset --follow-first e
1946 $ hg log -G --print-revset --follow-first e
1947 []
1947 []
1948 []
1948 []
1949 <generatorsetdesc->
1949 <generatorsetdesc->
1950 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1950 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1951 \xe2\x97\x8d 6 merge 5 and 4 (esc)
1951 \xe2\x97\x8d 6 merge 5 and 4 (esc)
1952 \xe2\x94\x82\xe2\x95\xb2 (esc)
1952 \xe2\x94\x82\xe2\x95\xb2 (esc)
1953 \xe2\x94\x82 \xe2\x95\xa7 (esc)
1953 \xe2\x94\x82 \xe2\x95\xa7 (esc)
1954 \xe2\x97\x8b 5 add another e (esc)
1954 \xe2\x97\x8b 5 add another e (esc)
1955 \xe2\x94\x82 (esc)
1955 \xe2\x94\x82 (esc)
1956 \xe2\x95\xa7 (esc)
1956 \xe2\x95\xa7 (esc)
1957
1957
1958 Test --copies
1958 Test --copies
1959
1959
1960 $ hg log -G --copies --template "{rev} {desc|firstline} \
1960 $ hg log -G --copies --template "{rev} {desc|firstline} \
1961 > copies: {file_copies_switch}\n"
1961 > copies: {file_copies_switch}\n"
1962 \xe2\x97\x8d 6 merge 5 and 4 copies: (esc)
1962 \xe2\x97\x8d 6 merge 5 and 4 copies: (esc)
1963 \xe2\x94\x82\xe2\x95\xb2 (esc)
1963 \xe2\x94\x82\xe2\x95\xb2 (esc)
1964 \xe2\x94\x82 \xe2\x97\x8b 5 add another e copies: (esc)
1964 \xe2\x94\x82 \xe2\x97\x8b 5 add another e copies: (esc)
1965 \xe2\x94\x82 \xe2\x94\x82 (esc)
1965 \xe2\x94\x82 \xe2\x94\x82 (esc)
1966 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e copies: e (dir/b) (esc)
1966 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e copies: e (dir/b) (esc)
1967 \xe2\x94\x82\xe2\x95\xb1 (esc)
1967 \xe2\x94\x82\xe2\x95\xb1 (esc)
1968 \xe2\x97\x8b 3 mv a b; add d copies: b (a)g (f) (esc)
1968 \xe2\x97\x8b 3 mv a b; add d copies: b (a)g (f) (esc)
1969 \xe2\x94\x82 (esc)
1969 \xe2\x94\x82 (esc)
1970 \xe2\x97\x8b 2 mv b dir/b copies: dir/b (b) (esc)
1970 \xe2\x97\x8b 2 mv b dir/b copies: dir/b (b) (esc)
1971 \xe2\x94\x82 (esc)
1971 \xe2\x94\x82 (esc)
1972 \xe2\x97\x8b 1 copy a b copies: b (a)g (f) (esc)
1972 \xe2\x97\x8b 1 copy a b copies: b (a)g (f) (esc)
1973 \xe2\x94\x82 (esc)
1973 \xe2\x94\x82 (esc)
1974 \xe2\x97\x8b 0 add a copies: (esc)
1974 \xe2\x97\x8b 0 add a copies: (esc)
1975
1975
1976 Test "set:..." and parent revision
1976 Test "set:..." and parent revision
1977
1977
1978 $ hg up -q 4
1978 $ hg up -q 4
1979 $ testlog "set:copied()"
1979 $ testlog "set:copied()"
1980 []
1980 []
1981 (func
1981 (func
1982 (symbol '_matchfiles')
1982 (symbol '_matchfiles')
1983 (list
1983 (list
1984 (string 'r:')
1984 (string 'r:')
1985 (string 'd:relpath')
1985 (string 'd:relpath')
1986 (string 'p:set:copied()')))
1986 (string 'p:set:copied()')))
1987 <filteredset
1987 <filteredset
1988 <spanset- 0:7>,
1988 <spanset- 0:7>,
1989 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=2147483647>>
1989 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=2147483647>>
1990 $ testlog --include "set:copied()"
1990 $ testlog --include "set:copied()"
1991 []
1991 []
1992 (func
1992 (func
1993 (symbol '_matchfiles')
1993 (symbol '_matchfiles')
1994 (list
1994 (list
1995 (string 'r:')
1995 (string 'r:')
1996 (string 'd:relpath')
1996 (string 'd:relpath')
1997 (string 'i:set:copied()')))
1997 (string 'i:set:copied()')))
1998 <filteredset
1998 <filteredset
1999 <spanset- 0:7>,
1999 <spanset- 0:7>,
2000 <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=2147483647>>
2000 <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=2147483647>>
2001 $ testlog -r "sort(file('set:copied()'), -rev)"
2001 $ testlog -r "sort(file('set:copied()'), -rev)"
2002 ['sort(file(\'set:copied()\'), -rev)']
2002 ['sort(file(\'set:copied()\'), -rev)']
2003 []
2003 []
2004 <filteredset
2004 <filteredset
2005 <fullreposet- 0:7>,
2005 <fullreposet- 0:7>,
2006 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='glob', rev=None>>
2006 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='glob', rev=None>>
2007
2007
2008 Test --removed
2008 Test --removed
2009
2009
2010 $ testlog --removed
2010 $ testlog --removed
2011 []
2011 []
2012 []
2012 []
2013 <spanset- 0:7>
2013 <spanset- 0:7>
2014 $ testlog --removed a
2014 $ testlog --removed a
2015 []
2015 []
2016 (func
2016 (func
2017 (symbol '_matchfiles')
2017 (symbol '_matchfiles')
2018 (list
2018 (list
2019 (string 'r:')
2019 (string 'r:')
2020 (string 'd:relpath')
2020 (string 'd:relpath')
2021 (string 'p:a')))
2021 (string 'p:a')))
2022 <filteredset
2022 <filteredset
2023 <spanset- 0:7>,
2023 <spanset- 0:7>,
2024 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
2024 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
2025 $ testlog --removed --follow a
2025 $ testlog --removed --follow a
2026 []
2026 []
2027 (func
2027 (func
2028 (symbol '_matchfiles')
2028 (symbol '_matchfiles')
2029 (list
2029 (list
2030 (string 'r:')
2030 (string 'r:')
2031 (string 'd:relpath')
2031 (string 'd:relpath')
2032 (string 'p:a')))
2032 (string 'p:a')))
2033 <filteredset
2033 <filteredset
2034 <generatorsetdesc->,
2034 <generatorsetdesc->,
2035 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
2035 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
2036
2036
2037 Test --patch and --stat with --follow and --follow-first
2037 Test --patch and --stat with --follow and --follow-first
2038
2038
2039 $ hg up -q 3
2039 $ hg up -q 3
2040 $ hg log -G --git --patch b
2040 $ hg log -G --git --patch b
2041 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2041 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2042 \xe2\x94\x82 user: test (esc)
2042 \xe2\x94\x82 user: test (esc)
2043 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2043 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2044 summary: copy a b
2044 summary: copy a b
2045
2045
2046 diff --git a/a b/b
2046 diff --git a/a b/b
2047 copy from a
2047 copy from a
2048 copy to b
2048 copy to b
2049
2049
2050
2050
2051 $ hg log -G --git --stat b
2051 $ hg log -G --git --stat b
2052 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2052 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2053 \xe2\x94\x82 user: test (esc)
2053 \xe2\x94\x82 user: test (esc)
2054 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2054 \xe2\x95\xa7 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2055 summary: copy a b
2055 summary: copy a b
2056
2056
2057 b | 0
2057 b | 0
2058 1 files changed, 0 insertions(+), 0 deletions(-)
2058 1 files changed, 0 insertions(+), 0 deletions(-)
2059
2059
2060
2060
2061 $ hg log -G --git --patch --follow b
2061 $ hg log -G --git --patch --follow b
2062 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2062 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2063 \xe2\x94\x82 user: test (esc)
2063 \xe2\x94\x82 user: test (esc)
2064 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2064 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2065 \xe2\x94\x82 summary: copy a b (esc)
2065 \xe2\x94\x82 summary: copy a b (esc)
2066 \xe2\x94\x82 (esc)
2066 \xe2\x94\x82 (esc)
2067 \xe2\x94\x82 diff --git a/a b/b (esc)
2067 \xe2\x94\x82 diff --git a/a b/b (esc)
2068 \xe2\x94\x82 copy from a (esc)
2068 \xe2\x94\x82 copy from a (esc)
2069 \xe2\x94\x82 copy to b (esc)
2069 \xe2\x94\x82 copy to b (esc)
2070 \xe2\x94\x82 (esc)
2070 \xe2\x94\x82 (esc)
2071 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2071 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2072 user: test
2072 user: test
2073 date: Thu Jan 01 00:00:00 1970 +0000
2073 date: Thu Jan 01 00:00:00 1970 +0000
2074 summary: add a
2074 summary: add a
2075
2075
2076 diff --git a/a b/a
2076 diff --git a/a b/a
2077 new file mode 100644
2077 new file mode 100644
2078 --- /dev/null
2078 --- /dev/null
2079 +++ b/a
2079 +++ b/a
2080 @@ -0,0 +1,1 @@
2080 @@ -0,0 +1,1 @@
2081 +a
2081 +a
2082
2082
2083
2083
2084 $ hg log -G --git --stat --follow b
2084 $ hg log -G --git --stat --follow b
2085 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2085 \xe2\x97\x8b changeset: 1:216d4c92cf98 (esc)
2086 \xe2\x94\x82 user: test (esc)
2086 \xe2\x94\x82 user: test (esc)
2087 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2087 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2088 \xe2\x94\x82 summary: copy a b (esc)
2088 \xe2\x94\x82 summary: copy a b (esc)
2089 \xe2\x94\x82 (esc)
2089 \xe2\x94\x82 (esc)
2090 \xe2\x94\x82 b | 0 (esc)
2090 \xe2\x94\x82 b | 0 (esc)
2091 \xe2\x94\x82 1 files changed, 0 insertions(+), 0 deletions(-) (esc)
2091 \xe2\x94\x82 1 files changed, 0 insertions(+), 0 deletions(-) (esc)
2092 \xe2\x94\x82 (esc)
2092 \xe2\x94\x82 (esc)
2093 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2093 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2094 user: test
2094 user: test
2095 date: Thu Jan 01 00:00:00 1970 +0000
2095 date: Thu Jan 01 00:00:00 1970 +0000
2096 summary: add a
2096 summary: add a
2097
2097
2098 a | 1 +
2098 a | 1 +
2099 1 files changed, 1 insertions(+), 0 deletions(-)
2099 1 files changed, 1 insertions(+), 0 deletions(-)
2100
2100
2101
2101
2102 $ hg up -q 6
2102 $ hg up -q 6
2103 $ hg log -G --git --patch --follow-first e
2103 $ hg log -G --git --patch --follow-first e
2104 \xe2\x97\x8d changeset: 6:9feeac35a70a (esc)
2104 \xe2\x97\x8d changeset: 6:9feeac35a70a (esc)
2105 \xe2\x94\x82\xe2\x95\xb2 tag: tip (esc)
2105 \xe2\x94\x82\xe2\x95\xb2 tag: tip (esc)
2106 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:99b31f1c2782 (esc)
2106 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:99b31f1c2782 (esc)
2107 \xe2\x94\x82 parent: 4:17d952250a9d (esc)
2107 \xe2\x94\x82 parent: 4:17d952250a9d (esc)
2108 \xe2\x94\x82 user: test (esc)
2108 \xe2\x94\x82 user: test (esc)
2109 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2109 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2110 \xe2\x94\x82 summary: merge 5 and 4 (esc)
2110 \xe2\x94\x82 summary: merge 5 and 4 (esc)
2111 \xe2\x94\x82 (esc)
2111 \xe2\x94\x82 (esc)
2112 \xe2\x94\x82 diff --git a/e b/e (esc)
2112 \xe2\x94\x82 diff --git a/e b/e (esc)
2113 \xe2\x94\x82 --- a/e (esc)
2113 \xe2\x94\x82 --- a/e (esc)
2114 \xe2\x94\x82 +++ b/e (esc)
2114 \xe2\x94\x82 +++ b/e (esc)
2115 \xe2\x94\x82 @@ -1,1 +1,1 @@ (esc)
2115 \xe2\x94\x82 @@ -1,1 +1,1 @@ (esc)
2116 \xe2\x94\x82 -ee (esc)
2116 \xe2\x94\x82 -ee (esc)
2117 \xe2\x94\x82 +merge (esc)
2117 \xe2\x94\x82 +merge (esc)
2118 \xe2\x94\x82 (esc)
2118 \xe2\x94\x82 (esc)
2119 \xe2\x97\x8b changeset: 5:99b31f1c2782 (esc)
2119 \xe2\x97\x8b changeset: 5:99b31f1c2782 (esc)
2120 \xe2\x94\x82 parent: 3:5918b8d165d1 (esc)
2120 \xe2\x94\x82 parent: 3:5918b8d165d1 (esc)
2121 \xe2\x95\xa7 user: test (esc)
2121 \xe2\x95\xa7 user: test (esc)
2122 date: Thu Jan 01 00:00:00 1970 +0000
2122 date: Thu Jan 01 00:00:00 1970 +0000
2123 summary: add another e
2123 summary: add another e
2124
2124
2125 diff --git a/e b/e
2125 diff --git a/e b/e
2126 new file mode 100644
2126 new file mode 100644
2127 --- /dev/null
2127 --- /dev/null
2128 +++ b/e
2128 +++ b/e
2129 @@ -0,0 +1,1 @@
2129 @@ -0,0 +1,1 @@
2130 +ee
2130 +ee
2131
2131
2132
2132
2133 Test old-style --rev
2133 Test old-style --rev
2134
2134
2135 $ hg tag 'foo-bar'
2135 $ hg tag 'foo-bar'
2136 $ testlog -r 'foo-bar'
2136 $ testlog -r 'foo-bar'
2137 ['foo-bar']
2137 ['foo-bar']
2138 []
2138 []
2139 <baseset [6]>
2139 <baseset [6]>
2140
2140
2141 Test --follow and forward --rev
2141 Test --follow and forward --rev
2142
2142
2143 $ hg up -q 6
2143 $ hg up -q 6
2144 $ echo g > g
2144 $ echo g > g
2145 $ hg ci -Am 'add g' g
2145 $ hg ci -Am 'add g' g
2146 created new head
2146 created new head
2147 $ hg up -q 2
2147 $ hg up -q 2
2148 $ hg log -G --template "{rev} {desc|firstline}\n"
2148 $ hg log -G --template "{rev} {desc|firstline}\n"
2149 \xe2\x97\x8b 8 add g (esc)
2149 \xe2\x97\x8b 8 add g (esc)
2150 \xe2\x94\x82 (esc)
2150 \xe2\x94\x82 (esc)
2151 \xe2\x94\x82 \xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
2151 \xe2\x94\x82 \xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
2152 \xe2\x94\x82\xe2\x95\xb1 (esc)
2152 \xe2\x94\x82\xe2\x95\xb1 (esc)
2153 \xe2\x97\x8b 6 merge 5 and 4 (esc)
2153 \xe2\x97\x8b 6 merge 5 and 4 (esc)
2154 \xe2\x94\x82\xe2\x95\xb2 (esc)
2154 \xe2\x94\x82\xe2\x95\xb2 (esc)
2155 \xe2\x94\x82 \xe2\x97\x8b 5 add another e (esc)
2155 \xe2\x94\x82 \xe2\x97\x8b 5 add another e (esc)
2156 \xe2\x94\x82 \xe2\x94\x82 (esc)
2156 \xe2\x94\x82 \xe2\x94\x82 (esc)
2157 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e (esc)
2157 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e (esc)
2158 \xe2\x94\x82\xe2\x95\xb1 (esc)
2158 \xe2\x94\x82\xe2\x95\xb1 (esc)
2159 \xe2\x97\x8b 3 mv a b; add d (esc)
2159 \xe2\x97\x8b 3 mv a b; add d (esc)
2160 \xe2\x94\x82 (esc)
2160 \xe2\x94\x82 (esc)
2161 \xe2\x97\x8d 2 mv b dir/b (esc)
2161 \xe2\x97\x8d 2 mv b dir/b (esc)
2162 \xe2\x94\x82 (esc)
2162 \xe2\x94\x82 (esc)
2163 \xe2\x97\x8b 1 copy a b (esc)
2163 \xe2\x97\x8b 1 copy a b (esc)
2164 \xe2\x94\x82 (esc)
2164 \xe2\x94\x82 (esc)
2165 \xe2\x97\x8b 0 add a (esc)
2165 \xe2\x97\x8b 0 add a (esc)
2166
2166
2167 $ hg archive -r 7 archive
2167 $ hg archive -r 7 archive
2168 $ grep changessincelatesttag archive/.hg_archival.txt
2168 $ grep changessincelatesttag archive/.hg_archival.txt
2169 changessincelatesttag: 1
2169 changessincelatesttag: 1
2170 $ rm -r archive
2170 $ rm -r archive
2171
2171
2172 changessincelatesttag with no prior tag
2172 changessincelatesttag with no prior tag
2173 $ hg archive -r 4 archive
2173 $ hg archive -r 4 archive
2174 $ grep changessincelatesttag archive/.hg_archival.txt
2174 $ grep changessincelatesttag archive/.hg_archival.txt
2175 changessincelatesttag: 5
2175 changessincelatesttag: 5
2176
2176
2177 $ hg export 'all()'
2177 $ hg export 'all()'
2178 # HG changeset patch
2178 # HG changeset patch
2179 # User test
2179 # User test
2180 # Date 0 0
2180 # Date 0 0
2181 # Thu Jan 01 00:00:00 1970 +0000
2181 # Thu Jan 01 00:00:00 1970 +0000
2182 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2182 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2183 # Parent 0000000000000000000000000000000000000000
2183 # Parent 0000000000000000000000000000000000000000
2184 add a
2184 add a
2185
2185
2186 diff -r 000000000000 -r f8035bb17114 a
2186 diff -r 000000000000 -r f8035bb17114 a
2187 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2187 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2188 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2188 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2189 @@ -0,0 +1,1 @@
2189 @@ -0,0 +1,1 @@
2190 +a
2190 +a
2191 diff -r 000000000000 -r f8035bb17114 aa
2191 diff -r 000000000000 -r f8035bb17114 aa
2192 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2192 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2193 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2193 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2194 @@ -0,0 +1,1 @@
2194 @@ -0,0 +1,1 @@
2195 +aa
2195 +aa
2196 diff -r 000000000000 -r f8035bb17114 f
2196 diff -r 000000000000 -r f8035bb17114 f
2197 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2197 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2198 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2198 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2199 @@ -0,0 +1,1 @@
2199 @@ -0,0 +1,1 @@
2200 +f
2200 +f
2201 # HG changeset patch
2201 # HG changeset patch
2202 # User test
2202 # User test
2203 # Date 0 0
2203 # Date 0 0
2204 # Thu Jan 01 00:00:00 1970 +0000
2204 # Thu Jan 01 00:00:00 1970 +0000
2205 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2205 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2206 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2206 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2207 copy a b
2207 copy a b
2208
2208
2209 diff -r f8035bb17114 -r 216d4c92cf98 b
2209 diff -r f8035bb17114 -r 216d4c92cf98 b
2210 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2210 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2211 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2211 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2212 @@ -0,0 +1,1 @@
2212 @@ -0,0 +1,1 @@
2213 +a
2213 +a
2214 diff -r f8035bb17114 -r 216d4c92cf98 g
2214 diff -r f8035bb17114 -r 216d4c92cf98 g
2215 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2215 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2216 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2216 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2217 @@ -0,0 +1,1 @@
2217 @@ -0,0 +1,1 @@
2218 +f
2218 +f
2219 # HG changeset patch
2219 # HG changeset patch
2220 # User test
2220 # User test
2221 # Date 0 0
2221 # Date 0 0
2222 # Thu Jan 01 00:00:00 1970 +0000
2222 # Thu Jan 01 00:00:00 1970 +0000
2223 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2223 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2224 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2224 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2225 mv b dir/b
2225 mv b dir/b
2226
2226
2227 diff -r 216d4c92cf98 -r bb573313a9e8 b
2227 diff -r 216d4c92cf98 -r bb573313a9e8 b
2228 --- a/b Thu Jan 01 00:00:00 1970 +0000
2228 --- a/b Thu Jan 01 00:00:00 1970 +0000
2229 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2229 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2230 @@ -1,1 +0,0 @@
2230 @@ -1,1 +0,0 @@
2231 -a
2231 -a
2232 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2232 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2233 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2233 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2234 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2234 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2235 @@ -0,0 +1,1 @@
2235 @@ -0,0 +1,1 @@
2236 +a
2236 +a
2237 diff -r 216d4c92cf98 -r bb573313a9e8 f
2237 diff -r 216d4c92cf98 -r bb573313a9e8 f
2238 --- a/f Thu Jan 01 00:00:00 1970 +0000
2238 --- a/f Thu Jan 01 00:00:00 1970 +0000
2239 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2239 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2240 @@ -1,1 +1,2 @@
2240 @@ -1,1 +1,2 @@
2241 f
2241 f
2242 +f
2242 +f
2243 diff -r 216d4c92cf98 -r bb573313a9e8 g
2243 diff -r 216d4c92cf98 -r bb573313a9e8 g
2244 --- a/g Thu Jan 01 00:00:00 1970 +0000
2244 --- a/g Thu Jan 01 00:00:00 1970 +0000
2245 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2245 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2246 @@ -1,1 +1,2 @@
2246 @@ -1,1 +1,2 @@
2247 f
2247 f
2248 +g
2248 +g
2249 # HG changeset patch
2249 # HG changeset patch
2250 # User test
2250 # User test
2251 # Date 0 0
2251 # Date 0 0
2252 # Thu Jan 01 00:00:00 1970 +0000
2252 # Thu Jan 01 00:00:00 1970 +0000
2253 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2253 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2254 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2254 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2255 mv a b; add d
2255 mv a b; add d
2256
2256
2257 diff -r bb573313a9e8 -r 5918b8d165d1 a
2257 diff -r bb573313a9e8 -r 5918b8d165d1 a
2258 --- a/a Thu Jan 01 00:00:00 1970 +0000
2258 --- a/a Thu Jan 01 00:00:00 1970 +0000
2259 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2259 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2260 @@ -1,1 +0,0 @@
2260 @@ -1,1 +0,0 @@
2261 -a
2261 -a
2262 diff -r bb573313a9e8 -r 5918b8d165d1 b
2262 diff -r bb573313a9e8 -r 5918b8d165d1 b
2263 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2263 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2264 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2264 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2265 @@ -0,0 +1,1 @@
2265 @@ -0,0 +1,1 @@
2266 +a
2266 +a
2267 diff -r bb573313a9e8 -r 5918b8d165d1 d
2267 diff -r bb573313a9e8 -r 5918b8d165d1 d
2268 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2268 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2269 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2269 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2270 @@ -0,0 +1,1 @@
2270 @@ -0,0 +1,1 @@
2271 +a
2271 +a
2272 diff -r bb573313a9e8 -r 5918b8d165d1 g
2272 diff -r bb573313a9e8 -r 5918b8d165d1 g
2273 --- a/g Thu Jan 01 00:00:00 1970 +0000
2273 --- a/g Thu Jan 01 00:00:00 1970 +0000
2274 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2274 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2275 @@ -1,2 +1,2 @@
2275 @@ -1,2 +1,2 @@
2276 f
2276 f
2277 -g
2277 -g
2278 +f
2278 +f
2279 # HG changeset patch
2279 # HG changeset patch
2280 # User test
2280 # User test
2281 # Date 0 0
2281 # Date 0 0
2282 # Thu Jan 01 00:00:00 1970 +0000
2282 # Thu Jan 01 00:00:00 1970 +0000
2283 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2283 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2284 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2284 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2285 mv dir/b e
2285 mv dir/b e
2286
2286
2287 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2287 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2288 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2288 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2289 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2289 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2290 @@ -1,1 +0,0 @@
2290 @@ -1,1 +0,0 @@
2291 -a
2291 -a
2292 diff -r 5918b8d165d1 -r 17d952250a9d e
2292 diff -r 5918b8d165d1 -r 17d952250a9d e
2293 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2293 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2294 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2294 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2295 @@ -0,0 +1,1 @@
2295 @@ -0,0 +1,1 @@
2296 +a
2296 +a
2297 # HG changeset patch
2297 # HG changeset patch
2298 # User test
2298 # User test
2299 # Date 0 0
2299 # Date 0 0
2300 # Thu Jan 01 00:00:00 1970 +0000
2300 # Thu Jan 01 00:00:00 1970 +0000
2301 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2301 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2302 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2302 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2303 add another e
2303 add another e
2304
2304
2305 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2305 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2306 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2306 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2307 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2307 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2308 @@ -0,0 +1,1 @@
2308 @@ -0,0 +1,1 @@
2309 +ee
2309 +ee
2310 # HG changeset patch
2310 # HG changeset patch
2311 # User test
2311 # User test
2312 # Date 0 0
2312 # Date 0 0
2313 # Thu Jan 01 00:00:00 1970 +0000
2313 # Thu Jan 01 00:00:00 1970 +0000
2314 # Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
2314 # Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
2315 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2315 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2316 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2316 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2317 merge 5 and 4
2317 merge 5 and 4
2318
2318
2319 diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
2319 diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
2320 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2320 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2321 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2321 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2322 @@ -1,1 +0,0 @@
2322 @@ -1,1 +0,0 @@
2323 -a
2323 -a
2324 diff -r 99b31f1c2782 -r 9feeac35a70a e
2324 diff -r 99b31f1c2782 -r 9feeac35a70a e
2325 --- a/e Thu Jan 01 00:00:00 1970 +0000
2325 --- a/e Thu Jan 01 00:00:00 1970 +0000
2326 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2326 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2327 @@ -1,1 +1,1 @@
2327 @@ -1,1 +1,1 @@
2328 -ee
2328 -ee
2329 +merge
2329 +merge
2330 # HG changeset patch
2330 # HG changeset patch
2331 # User test
2331 # User test
2332 # Date 0 0
2332 # Date 0 0
2333 # Thu Jan 01 00:00:00 1970 +0000
2333 # Thu Jan 01 00:00:00 1970 +0000
2334 # Node ID 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
2334 # Node ID 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
2335 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2335 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2336 Added tag foo-bar for changeset 9feeac35a70a
2336 Added tag foo-bar for changeset 9feeac35a70a
2337
2337
2338 diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
2338 diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
2339 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2339 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2340 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2340 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2341 @@ -0,0 +1,1 @@
2341 @@ -0,0 +1,1 @@
2342 +9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
2342 +9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
2343 # HG changeset patch
2343 # HG changeset patch
2344 # User test
2344 # User test
2345 # Date 0 0
2345 # Date 0 0
2346 # Thu Jan 01 00:00:00 1970 +0000
2346 # Thu Jan 01 00:00:00 1970 +0000
2347 # Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
2347 # Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
2348 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2348 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2349 add g
2349 add g
2350
2350
2351 diff -r 9feeac35a70a -r 3bd4551ec3fe g
2351 diff -r 9feeac35a70a -r 3bd4551ec3fe g
2352 --- a/g Thu Jan 01 00:00:00 1970 +0000
2352 --- a/g Thu Jan 01 00:00:00 1970 +0000
2353 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2353 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2354 @@ -1,2 +1,1 @@
2354 @@ -1,2 +1,1 @@
2355 -f
2355 -f
2356 -f
2356 -f
2357 +g
2357 +g
2358 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2358 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2359 ['6', '8', '5', '7', '4']
2359 ['6', '8', '5', '7', '4']
2360 []
2360 []
2361 <generatorsetdesc->
2361 <generatorsetdesc->
2362
2362
2363 Test --follow-first and forward --rev
2363 Test --follow-first and forward --rev
2364
2364
2365 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2365 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2366 ['6', '8', '5', '7', '4']
2366 ['6', '8', '5', '7', '4']
2367 []
2367 []
2368 <generatorsetdesc->
2368 <generatorsetdesc->
2369
2369
2370 Test --follow and backward --rev
2370 Test --follow and backward --rev
2371
2371
2372 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2372 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2373 ['6', '5', '7', '8', '4']
2373 ['6', '5', '7', '8', '4']
2374 []
2374 []
2375 <generatorsetdesc->
2375 <generatorsetdesc->
2376
2376
2377 Test --follow-first and backward --rev
2377 Test --follow-first and backward --rev
2378
2378
2379 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2379 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2380 ['6', '5', '7', '8', '4']
2380 ['6', '5', '7', '8', '4']
2381 []
2381 []
2382 <generatorsetdesc->
2382 <generatorsetdesc->
2383
2383
2384 Test --follow with --rev of graphlog extension
2384 Test --follow with --rev of graphlog extension
2385
2385
2386 $ hg --config extensions.graphlog= glog -qfr1
2386 $ hg --config extensions.graphlog= glog -qfr1
2387 \xe2\x97\x8b 1:216d4c92cf98 (esc)
2387 \xe2\x97\x8b 1:216d4c92cf98 (esc)
2388 \xe2\x94\x82 (esc)
2388 \xe2\x94\x82 (esc)
2389 \xe2\x97\x8b 0:f8035bb17114 (esc)
2389 \xe2\x97\x8b 0:f8035bb17114 (esc)
2390
2390
2391
2391
2392 Test subdir
2392 Test subdir
2393
2393
2394 $ hg up -q 3
2394 $ hg up -q 3
2395 $ cd dir
2395 $ cd dir
2396 $ testlog .
2396 $ testlog .
2397 []
2397 []
2398 (func
2398 (func
2399 (symbol '_matchfiles')
2399 (symbol '_matchfiles')
2400 (list
2400 (list
2401 (string 'r:')
2401 (string 'r:')
2402 (string 'd:relpath')
2402 (string 'd:relpath')
2403 (string 'p:.')))
2403 (string 'p:.')))
2404 <filteredset
2404 <filteredset
2405 <spanset- 0:9>,
2405 <spanset- 0:9>,
2406 <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=2147483647>>
2406 <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=2147483647>>
2407 $ testlog ../b
2407 $ testlog ../b
2408 []
2408 []
2409 (func
2409 (func
2410 (symbol 'filelog')
2410 (symbol 'filelog')
2411 (string '../b'))
2411 (string '../b'))
2412 <filteredset
2412 <filteredset
2413 <spanset- 0:9>, set([1])>
2413 <spanset- 0:9>, set([1])>
2414 $ testlog -f ../b
2414 $ testlog -f ../b
2415 []
2415 []
2416 []
2416 []
2417 <generatorsetdesc->
2417 <generatorsetdesc->
2418 $ cd ..
2418 $ cd ..
2419
2419
2420 Test --hidden
2420 Test --hidden
2421 (enable obsolete)
2421 (enable obsolete)
2422
2422
2423 $ cat >> $HGRCPATH << EOF
2423 $ cat >> $HGRCPATH << EOF
2424 > [experimental]
2424 > [experimental]
2425 > evolution.createmarkers=True
2425 > evolution.createmarkers=True
2426 > EOF
2426 > EOF
2427
2427
2428 $ hg debugobsolete `hg id --debug -i -r 8`
2428 $ hg debugobsolete `hg id --debug -i -r 8`
2429 1 new obsolescence markers
2429 1 new obsolescence markers
2430 obsoleted 1 changesets
2430 obsoleted 1 changesets
2431 $ testlog
2431 $ testlog
2432 []
2432 []
2433 []
2433 []
2434 <spanset- 0:9>
2434 <spanset- 0:9>
2435 $ testlog --hidden
2435 $ testlog --hidden
2436 []
2436 []
2437 []
2437 []
2438 <spanset- 0:9>
2438 <spanset- 0:9>
2439 $ hg log -G --template '{rev} {desc}\n'
2439 $ hg log -G --template '{rev} {desc}\n'
2440 \xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
2440 \xe2\x97\x8b 7 Added tag foo-bar for changeset 9feeac35a70a (esc)
2441 \xe2\x94\x82 (esc)
2441 \xe2\x94\x82 (esc)
2442 \xe2\x97\x8b 6 merge 5 and 4 (esc)
2442 \xe2\x97\x8b 6 merge 5 and 4 (esc)
2443 \xe2\x94\x82\xe2\x95\xb2 (esc)
2443 \xe2\x94\x82\xe2\x95\xb2 (esc)
2444 \xe2\x94\x82 \xe2\x97\x8b 5 add another e (esc)
2444 \xe2\x94\x82 \xe2\x97\x8b 5 add another e (esc)
2445 \xe2\x94\x82 \xe2\x94\x82 (esc)
2445 \xe2\x94\x82 \xe2\x94\x82 (esc)
2446 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e (esc)
2446 \xe2\x97\x8b \xe2\x94\x82 4 mv dir/b e (esc)
2447 \xe2\x94\x82\xe2\x95\xb1 (esc)
2447 \xe2\x94\x82\xe2\x95\xb1 (esc)
2448 \xe2\x97\x8d 3 mv a b; add d (esc)
2448 \xe2\x97\x8d 3 mv a b; add d (esc)
2449 \xe2\x94\x82 (esc)
2449 \xe2\x94\x82 (esc)
2450 \xe2\x97\x8b 2 mv b dir/b (esc)
2450 \xe2\x97\x8b 2 mv b dir/b (esc)
2451 \xe2\x94\x82 (esc)
2451 \xe2\x94\x82 (esc)
2452 \xe2\x97\x8b 1 copy a b (esc)
2452 \xe2\x97\x8b 1 copy a b (esc)
2453 \xe2\x94\x82 (esc)
2453 \xe2\x94\x82 (esc)
2454 \xe2\x97\x8b 0 add a (esc)
2454 \xe2\x97\x8b 0 add a (esc)
2455
2455
2456
2456
2457 A template without trailing newline should do something sane
2457 A template without trailing newline should do something sane
2458
2458
2459 $ hg log -G -r ::2 --template '{rev} {desc}'
2459 $ hg log -G -r ::2 --template '{rev} {desc}'
2460 \xe2\x97\x8b 2 mv b dir/b (esc)
2460 \xe2\x97\x8b 2 mv b dir/b (esc)
2461 \xe2\x94\x82 (esc)
2461 \xe2\x94\x82 (esc)
2462 \xe2\x97\x8b 1 copy a b (esc)
2462 \xe2\x97\x8b 1 copy a b (esc)
2463 \xe2\x94\x82 (esc)
2463 \xe2\x94\x82 (esc)
2464 \xe2\x97\x8b 0 add a (esc)
2464 \xe2\x97\x8b 0 add a (esc)
2465
2465
2466
2466
2467 Extra newlines must be preserved
2467 Extra newlines must be preserved
2468
2468
2469 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2469 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2470 \xe2\x97\x8b (esc)
2470 \xe2\x97\x8b (esc)
2471 \xe2\x94\x82 2 mv b dir/b (esc)
2471 \xe2\x94\x82 2 mv b dir/b (esc)
2472 \xe2\x94\x82 (esc)
2472 \xe2\x94\x82 (esc)
2473 \xe2\x97\x8b (esc)
2473 \xe2\x97\x8b (esc)
2474 \xe2\x94\x82 1 copy a b (esc)
2474 \xe2\x94\x82 1 copy a b (esc)
2475 \xe2\x94\x82 (esc)
2475 \xe2\x94\x82 (esc)
2476 \xe2\x97\x8b (esc)
2476 \xe2\x97\x8b (esc)
2477 0 add a
2477 0 add a
2478
2478
2479
2479
2480 The almost-empty template should do something sane too ...
2480 The almost-empty template should do something sane too ...
2481
2481
2482 $ hg log -G -r ::2 --template '\n'
2482 $ hg log -G -r ::2 --template '\n'
2483 \xe2\x97\x8b (esc)
2483 \xe2\x97\x8b (esc)
2484 \xe2\x94\x82 (esc)
2484 \xe2\x94\x82 (esc)
2485 \xe2\x97\x8b (esc)
2485 \xe2\x97\x8b (esc)
2486 \xe2\x94\x82 (esc)
2486 \xe2\x94\x82 (esc)
2487 \xe2\x97\x8b (esc)
2487 \xe2\x97\x8b (esc)
2488
2488
2489
2489
2490 issue3772
2490 issue3772
2491
2491
2492 $ hg log -G -r :null
2492 $ hg log -G -r :null
2493 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2493 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2494 \xe2\x94\x82 user: test (esc)
2494 \xe2\x94\x82 user: test (esc)
2495 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2495 \xe2\x94\x82 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
2496 \xe2\x94\x82 summary: add a (esc)
2496 \xe2\x94\x82 summary: add a (esc)
2497 \xe2\x94\x82 (esc)
2497 \xe2\x94\x82 (esc)
2498 \xe2\x97\x8b changeset: -1:000000000000 (esc)
2498 \xe2\x97\x8b changeset: -1:000000000000 (esc)
2499 user:
2499 user:
2500 date: Thu Jan 01 00:00:00 1970 +0000
2500 date: Thu Jan 01 00:00:00 1970 +0000
2501
2501
2502 $ hg log -G -r null:null
2502 $ hg log -G -r null:null
2503 \xe2\x97\x8b changeset: -1:000000000000 (esc)
2503 \xe2\x97\x8b changeset: -1:000000000000 (esc)
2504 user:
2504 user:
2505 date: Thu Jan 01 00:00:00 1970 +0000
2505 date: Thu Jan 01 00:00:00 1970 +0000
2506
2506
2507
2507
2508 should not draw line down to null due to the magic of fullreposet
2508 should not draw line down to null due to the magic of fullreposet
2509
2509
2510 $ hg log -G -r 'all()' | tail -6
2510 $ hg log -G -r 'all()' | tail -6
2511 \xe2\x94\x82 (esc)
2511 \xe2\x94\x82 (esc)
2512 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2512 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2513 user: test
2513 user: test
2514 date: Thu Jan 01 00:00:00 1970 +0000
2514 date: Thu Jan 01 00:00:00 1970 +0000
2515 summary: add a
2515 summary: add a
2516
2516
2517
2517
2518 $ hg log -G -r 'branch(default)' | tail -6
2518 $ hg log -G -r 'branch(default)' | tail -6
2519 \xe2\x94\x82 (esc)
2519 \xe2\x94\x82 (esc)
2520 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2520 \xe2\x97\x8b changeset: 0:f8035bb17114 (esc)
2521 user: test
2521 user: test
2522 date: Thu Jan 01 00:00:00 1970 +0000
2522 date: Thu Jan 01 00:00:00 1970 +0000
2523 summary: add a
2523 summary: add a
2524
2524
2525
2525
2526 working-directory revision
2526 working-directory revision
2527
2527
2528 $ hg log -G -qr '. + wdir()'
2528 $ hg log -G -qr '. + wdir()'
2529 \xe2\x97\x8b 2147483647:ffffffffffff (esc)
2529 \xe2\x97\x8b 2147483647:ffffffffffff (esc)
2530 \xe2\x94\x82 (esc)
2530 \xe2\x94\x82 (esc)
2531 \xe2\x97\x8d 3:5918b8d165d1 (esc)
2531 \xe2\x97\x8d 3:5918b8d165d1 (esc)
2532 \xe2\x94\x82 (esc)
2532 \xe2\x94\x82 (esc)
2533 \xe2\x95\xa7 (esc)
2533 \xe2\x95\xa7 (esc)
2534
2534
2535 node template with changesetprinter:
2535 node template with changesetprinter:
2536
2536
2537 $ hg log -Gqr 5:7 --config command-templates.graphnode='"{rev}"'
2537 $ hg log -Gqr 5:7 --config command-templates.graphnode='"{rev}"'
2538 7 7:9febbb9c8b2e
2538 7 7:9febbb9c8b2e
2539 \xe2\x94\x82 (esc)
2539 \xe2\x94\x82 (esc)
2540 6 6:9feeac35a70a
2540 6 6:9feeac35a70a
2541 \xe2\x94\x82\xe2\x95\xb2 (esc)
2541 \xe2\x94\x82\xe2\x95\xb2 (esc)
2542 \xe2\x94\x82 \xe2\x95\xa7 (esc)
2542 \xe2\x94\x82 \xe2\x95\xa7 (esc)
2543 5 5:99b31f1c2782
2543 5 5:99b31f1c2782
2544 \xe2\x94\x82 (esc)
2544 \xe2\x94\x82 (esc)
2545 \xe2\x95\xa7 (esc)
2545 \xe2\x95\xa7 (esc)
2546
2546
2547 node template with changesettemplater (shared cache variable):
2547 node template with changesettemplater (shared cache variable):
2548
2548
2549 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2549 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2550 > --config command-templates.graphnode='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2550 > --config command-templates.graphnode='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2551 \xe2\x97\x8b 7 foo-bar+1 (esc)
2551 \xe2\x97\x8b 7 foo-bar+1 (esc)
2552 \xe2\x94\x82 (esc)
2552 \xe2\x94\x82 (esc)
2553 # 6 foo-bar+0
2553 # 6 foo-bar+0
2554 \xe2\x94\x82\xe2\x95\xb2 (esc)
2554 \xe2\x94\x82\xe2\x95\xb2 (esc)
2555 \xe2\x94\x82 \xe2\x95\xa7 (esc)
2555 \xe2\x94\x82 \xe2\x95\xa7 (esc)
2556 \xe2\x97\x8b 5 null+5 (esc)
2556 \xe2\x97\x8b 5 null+5 (esc)
2557 \xe2\x94\x82 (esc)
2557 \xe2\x94\x82 (esc)
2558 \xe2\x95\xa7 (esc)
2558 \xe2\x95\xa7 (esc)
2559
2559
2560 label() should just work in node template:
2560 label() should just work in node template:
2561
2561
2562 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2562 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2563 > --config command-templates.graphnode='{label("branch.{branch}", rev)}'
2563 > --config command-templates.graphnode='{label("branch.{branch}", rev)}'
2564 [branch.default\xe2\x94\x827] [log.node|7:9febbb9c8b2e] (esc)
2564 [branch.default\xe2\x94\x827] [log.node|7:9febbb9c8b2e] (esc)
2565 \xe2\x94\x82 (esc)
2565 \xe2\x94\x82 (esc)
2566 \xe2\x95\xa7 (esc)
2566 \xe2\x95\xa7 (esc)
2567
2567
2568 $ cd ..
2568 $ cd ..
2569
2569
2570 change graph edge styling
2570 change graph edge styling
2571
2571
2572 $ cd repo
2572 $ cd repo
2573
2573
2574 Setting HGPLAIN ignores graphmod styling:
2574 Setting HGPLAIN ignores graphmod styling:
2575
2575
2576 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2576 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2577 @ changeset: 36:08a19a744424
2577 @ changeset: 36:08a19a744424
2578 | branch: branch
2578 | branch: branch
2579 | tag: tip
2579 | tag: tip
2580 | parent: 35:9159c3644c5e
2580 | parent: 35:9159c3644c5e
2581 | parent: 35:9159c3644c5e
2581 | parent: 35:9159c3644c5e
2582 | user: test
2582 | user: test
2583 | date: Thu Jan 01 00:00:36 1970 +0000
2583 | date: Thu Jan 01 00:00:36 1970 +0000
2584 | summary: (36) buggy merge: identical parents
2584 | summary: (36) buggy merge: identical parents
2585 |
2585 |
2586 o changeset: 32:d06dffa21a31
2586 o changeset: 32:d06dffa21a31
2587 |\ parent: 27:886ed638191b
2587 |\ parent: 27:886ed638191b
2588 | | parent: 31:621d83e11f67
2588 | | parent: 31:621d83e11f67
2589 | | user: test
2589 | | user: test
2590 | | date: Thu Jan 01 00:00:32 1970 +0000
2590 | | date: Thu Jan 01 00:00:32 1970 +0000
2591 | | summary: (32) expand
2591 | | summary: (32) expand
2592 | |
2592 | |
2593 o | changeset: 31:621d83e11f67
2593 o | changeset: 31:621d83e11f67
2594 |\| parent: 21:d42a756af44d
2594 |\| parent: 21:d42a756af44d
2595 | | parent: 30:6e11cd4b648f
2595 | | parent: 30:6e11cd4b648f
2596 | | user: test
2596 | | user: test
2597 | | date: Thu Jan 01 00:00:31 1970 +0000
2597 | | date: Thu Jan 01 00:00:31 1970 +0000
2598 | | summary: (31) expand
2598 | | summary: (31) expand
2599 | |
2599 | |
2600 o | changeset: 30:6e11cd4b648f
2600 o | changeset: 30:6e11cd4b648f
2601 |\ \ parent: 28:44ecd0b9ae99
2601 |\ \ parent: 28:44ecd0b9ae99
2602 | | | parent: 29:cd9bb2be7593
2602 | | | parent: 29:cd9bb2be7593
2603 | | | user: test
2603 | | | user: test
2604 | | | date: Thu Jan 01 00:00:30 1970 +0000
2604 | | | date: Thu Jan 01 00:00:30 1970 +0000
2605 | | | summary: (30) expand
2605 | | | summary: (30) expand
2606 | | |
2606 | | |
2607 o | | changeset: 28:44ecd0b9ae99
2607 o | | changeset: 28:44ecd0b9ae99
2608 |\ \ \ parent: 1:6db2ef61d156
2608 |\ \ \ parent: 1:6db2ef61d156
2609 | | | | parent: 26:7f25b6c2f0b9
2609 | | | | parent: 26:7f25b6c2f0b9
2610 | | | | user: test
2610 | | | | user: test
2611 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2611 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2612 | | | | summary: (28) merge zero known
2612 | | | | summary: (28) merge zero known
2613 | | | |
2613 | | | |
2614 o | | | changeset: 26:7f25b6c2f0b9
2614 o | | | changeset: 26:7f25b6c2f0b9
2615 |\ \ \ \ parent: 18:1aa84d96232a
2615 |\ \ \ \ parent: 18:1aa84d96232a
2616 | | | | | parent: 25:91da8ed57247
2616 | | | | | parent: 25:91da8ed57247
2617 | | | | | user: test
2617 | | | | | user: test
2618 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2618 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2619 | | | | | summary: (26) merge one known; far right
2619 | | | | | summary: (26) merge one known; far right
2620 | | | | |
2620 | | | | |
2621 | o-----+ changeset: 25:91da8ed57247
2621 | o-----+ changeset: 25:91da8ed57247
2622 | | | | | parent: 21:d42a756af44d
2622 | | | | | parent: 21:d42a756af44d
2623 | | | | | parent: 24:a9c19a3d96b7
2623 | | | | | parent: 24:a9c19a3d96b7
2624 | | | | | user: test
2624 | | | | | user: test
2625 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2625 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2626 | | | | | summary: (25) merge one known; far left
2626 | | | | | summary: (25) merge one known; far left
2627 | | | | |
2627 | | | | |
2628 | o | | | changeset: 24:a9c19a3d96b7
2628 | o | | | changeset: 24:a9c19a3d96b7
2629 | |\ \ \ \ parent: 0:e6eb3150255d
2629 | |\ \ \ \ parent: 0:e6eb3150255d
2630 | | | | | | parent: 23:a01cddf0766d
2630 | | | | | | parent: 23:a01cddf0766d
2631 | | | | | | user: test
2631 | | | | | | user: test
2632 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2632 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2633 | | | | | | summary: (24) merge one known; immediate right
2633 | | | | | | summary: (24) merge one known; immediate right
2634 | | | | | |
2634 | | | | | |
2635 | o---+ | | changeset: 23:a01cddf0766d
2635 | o---+ | | changeset: 23:a01cddf0766d
2636 | | | | | | parent: 1:6db2ef61d156
2636 | | | | | | parent: 1:6db2ef61d156
2637 | | | | | | parent: 22:e0d9cccacb5d
2637 | | | | | | parent: 22:e0d9cccacb5d
2638 | | | | | | user: test
2638 | | | | | | user: test
2639 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2639 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2640 | | | | | | summary: (23) merge one known; immediate left
2640 | | | | | | summary: (23) merge one known; immediate left
2641 | | | | | |
2641 | | | | | |
2642 | o-------+ changeset: 22:e0d9cccacb5d
2642 | o-------+ changeset: 22:e0d9cccacb5d
2643 | | | | | | parent: 18:1aa84d96232a
2643 | | | | | | parent: 18:1aa84d96232a
2644 |/ / / / / parent: 21:d42a756af44d
2644 |/ / / / / parent: 21:d42a756af44d
2645 | | | | | user: test
2645 | | | | | user: test
2646 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2646 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2647 | | | | | summary: (22) merge two known; one far left, one far right
2647 | | | | | summary: (22) merge two known; one far left, one far right
2648 | | | | |
2648 | | | | |
2649 | | | | o changeset: 21:d42a756af44d
2649 | | | | o changeset: 21:d42a756af44d
2650 | | | | |\ parent: 19:31ddc2c1573b
2650 | | | | |\ parent: 19:31ddc2c1573b
2651 | | | | | | parent: 20:d30ed6450e32
2651 | | | | | | parent: 20:d30ed6450e32
2652 | | | | | | user: test
2652 | | | | | | user: test
2653 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2653 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2654 | | | | | | summary: (21) expand
2654 | | | | | | summary: (21) expand
2655 | | | | | |
2655 | | | | | |
2656 +-+-------o changeset: 20:d30ed6450e32
2656 +-+-------o changeset: 20:d30ed6450e32
2657 | | | | | parent: 0:e6eb3150255d
2657 | | | | | parent: 0:e6eb3150255d
2658 | | | | | parent: 18:1aa84d96232a
2658 | | | | | parent: 18:1aa84d96232a
2659 | | | | | user: test
2659 | | | | | user: test
2660 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2660 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2661 | | | | | summary: (20) merge two known; two far right
2661 | | | | | summary: (20) merge two known; two far right
2662 | | | | |
2662 | | | | |
2663 | | | | o changeset: 19:31ddc2c1573b
2663 | | | | o changeset: 19:31ddc2c1573b
2664 | | | | |\ parent: 15:1dda3f72782d
2664 | | | | |\ parent: 15:1dda3f72782d
2665 | | | | | | parent: 17:44765d7c06e0
2665 | | | | | | parent: 17:44765d7c06e0
2666 | | | | | | user: test
2666 | | | | | | user: test
2667 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2667 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2668 | | | | | | summary: (19) expand
2668 | | | | | | summary: (19) expand
2669 | | | | | |
2669 | | | | | |
2670 o---+---+ | changeset: 18:1aa84d96232a
2670 o---+---+ | changeset: 18:1aa84d96232a
2671 | | | | | parent: 1:6db2ef61d156
2671 | | | | | parent: 1:6db2ef61d156
2672 / / / / / parent: 15:1dda3f72782d
2672 / / / / / parent: 15:1dda3f72782d
2673 | | | | | user: test
2673 | | | | | user: test
2674 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2674 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2675 | | | | | summary: (18) merge two known; two far left
2675 | | | | | summary: (18) merge two known; two far left
2676 | | | | |
2676 | | | | |
2677 | | | | o changeset: 17:44765d7c06e0
2677 | | | | o changeset: 17:44765d7c06e0
2678 | | | | |\ parent: 12:86b91144a6e9
2678 | | | | |\ parent: 12:86b91144a6e9
2679 | | | | | | parent: 16:3677d192927d
2679 | | | | | | parent: 16:3677d192927d
2680 | | | | | | user: test
2680 | | | | | | user: test
2681 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2681 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2682 | | | | | | summary: (17) expand
2682 | | | | | | summary: (17) expand
2683 | | | | | |
2683 | | | | | |
2684 +-+-------o changeset: 16:3677d192927d
2684 +-+-------o changeset: 16:3677d192927d
2685 | | | | | parent: 0:e6eb3150255d
2685 | | | | | parent: 0:e6eb3150255d
2686 | | | | | parent: 1:6db2ef61d156
2686 | | | | | parent: 1:6db2ef61d156
2687 | | | | | user: test
2687 | | | | | user: test
2688 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2688 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2689 | | | | | summary: (16) merge two known; one immediate right, one near right
2689 | | | | | summary: (16) merge two known; one immediate right, one near right
2690 | | | | |
2690 | | | | |
2691 | | | o | changeset: 15:1dda3f72782d
2691 | | | o | changeset: 15:1dda3f72782d
2692 | | | |\ \ parent: 13:22d8966a97e3
2692 | | | |\ \ parent: 13:22d8966a97e3
2693 | | | | | | parent: 14:8eac370358ef
2693 | | | | | | parent: 14:8eac370358ef
2694 | | | | | | user: test
2694 | | | | | | user: test
2695 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2695 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2696 | | | | | | summary: (15) expand
2696 | | | | | | summary: (15) expand
2697 | | | | | |
2697 | | | | | |
2698 +-------o | changeset: 14:8eac370358ef
2698 +-------o | changeset: 14:8eac370358ef
2699 | | | | |/ parent: 0:e6eb3150255d
2699 | | | | |/ parent: 0:e6eb3150255d
2700 | | | | | parent: 12:86b91144a6e9
2700 | | | | | parent: 12:86b91144a6e9
2701 | | | | | user: test
2701 | | | | | user: test
2702 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2702 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2703 | | | | | summary: (14) merge two known; one immediate right, one far right
2703 | | | | | summary: (14) merge two known; one immediate right, one far right
2704 | | | | |
2704 | | | | |
2705 | | | o | changeset: 13:22d8966a97e3
2705 | | | o | changeset: 13:22d8966a97e3
2706 | | | |\ \ parent: 9:7010c0af0a35
2706 | | | |\ \ parent: 9:7010c0af0a35
2707 | | | | | | parent: 11:832d76e6bdf2
2707 | | | | | | parent: 11:832d76e6bdf2
2708 | | | | | | user: test
2708 | | | | | | user: test
2709 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2709 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2710 | | | | | | summary: (13) expand
2710 | | | | | | summary: (13) expand
2711 | | | | | |
2711 | | | | | |
2712 | +---+---o changeset: 12:86b91144a6e9
2712 | +---+---o changeset: 12:86b91144a6e9
2713 | | | | | parent: 1:6db2ef61d156
2713 | | | | | parent: 1:6db2ef61d156
2714 | | | | | parent: 9:7010c0af0a35
2714 | | | | | parent: 9:7010c0af0a35
2715 | | | | | user: test
2715 | | | | | user: test
2716 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2716 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2717 | | | | | summary: (12) merge two known; one immediate right, one far left
2717 | | | | | summary: (12) merge two known; one immediate right, one far left
2718 | | | | |
2718 | | | | |
2719 | | | | o changeset: 11:832d76e6bdf2
2719 | | | | o changeset: 11:832d76e6bdf2
2720 | | | | |\ parent: 6:b105a072e251
2720 | | | | |\ parent: 6:b105a072e251
2721 | | | | | | parent: 10:74c64d036d72
2721 | | | | | | parent: 10:74c64d036d72
2722 | | | | | | user: test
2722 | | | | | | user: test
2723 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2723 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2724 | | | | | | summary: (11) expand
2724 | | | | | | summary: (11) expand
2725 | | | | | |
2725 | | | | | |
2726 +---------o changeset: 10:74c64d036d72
2726 +---------o changeset: 10:74c64d036d72
2727 | | | | |/ parent: 0:e6eb3150255d
2727 | | | | |/ parent: 0:e6eb3150255d
2728 | | | | | parent: 6:b105a072e251
2728 | | | | | parent: 6:b105a072e251
2729 | | | | | user: test
2729 | | | | | user: test
2730 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2730 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2731 | | | | | summary: (10) merge two known; one immediate left, one near right
2731 | | | | | summary: (10) merge two known; one immediate left, one near right
2732 | | | | |
2732 | | | | |
2733 | | | o | changeset: 9:7010c0af0a35
2733 | | | o | changeset: 9:7010c0af0a35
2734 | | | |\ \ parent: 7:b632bb1b1224
2734 | | | |\ \ parent: 7:b632bb1b1224
2735 | | | | | | parent: 8:7a0b11f71937
2735 | | | | | | parent: 8:7a0b11f71937
2736 | | | | | | user: test
2736 | | | | | | user: test
2737 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2737 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2738 | | | | | | summary: (9) expand
2738 | | | | | | summary: (9) expand
2739 | | | | | |
2739 | | | | | |
2740 +-------o | changeset: 8:7a0b11f71937
2740 +-------o | changeset: 8:7a0b11f71937
2741 | | | |/ / parent: 0:e6eb3150255d
2741 | | | |/ / parent: 0:e6eb3150255d
2742 | | | | | parent: 7:b632bb1b1224
2742 | | | | | parent: 7:b632bb1b1224
2743 | | | | | user: test
2743 | | | | | user: test
2744 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2744 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2745 | | | | | summary: (8) merge two known; one immediate left, one far right
2745 | | | | | summary: (8) merge two known; one immediate left, one far right
2746 | | | | |
2746 | | | | |
2747 | | | o | changeset: 7:b632bb1b1224
2747 | | | o | changeset: 7:b632bb1b1224
2748 | | | |\ \ parent: 2:3d9a33b8d1e1
2748 | | | |\ \ parent: 2:3d9a33b8d1e1
2749 | | | | | | parent: 5:4409d547b708
2749 | | | | | | parent: 5:4409d547b708
2750 | | | | | | user: test
2750 | | | | | | user: test
2751 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2751 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2752 | | | | | | summary: (7) expand
2752 | | | | | | summary: (7) expand
2753 | | | | | |
2753 | | | | | |
2754 | | | +---o changeset: 6:b105a072e251
2754 | | | +---o changeset: 6:b105a072e251
2755 | | | | |/ parent: 2:3d9a33b8d1e1
2755 | | | | |/ parent: 2:3d9a33b8d1e1
2756 | | | | | parent: 5:4409d547b708
2756 | | | | | parent: 5:4409d547b708
2757 | | | | | user: test
2757 | | | | | user: test
2758 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2758 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2759 | | | | | summary: (6) merge two known; one immediate left, one far left
2759 | | | | | summary: (6) merge two known; one immediate left, one far left
2760 | | | | |
2760 | | | | |
2761 | | | o | changeset: 5:4409d547b708
2761 | | | o | changeset: 5:4409d547b708
2762 | | | |\ \ parent: 3:27eef8ed80b4
2762 | | | |\ \ parent: 3:27eef8ed80b4
2763 | | | | | | parent: 4:26a8bac39d9f
2763 | | | | | | parent: 4:26a8bac39d9f
2764 | | | | | | user: test
2764 | | | | | | user: test
2765 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2765 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2766 | | | | | | summary: (5) expand
2766 | | | | | | summary: (5) expand
2767 | | | | | |
2767 | | | | | |
2768 | +---o | | changeset: 4:26a8bac39d9f
2768 | +---o | | changeset: 4:26a8bac39d9f
2769 | | | |/ / parent: 1:6db2ef61d156
2769 | | | |/ / parent: 1:6db2ef61d156
2770 | | | | | parent: 3:27eef8ed80b4
2770 | | | | | parent: 3:27eef8ed80b4
2771 | | | | | user: test
2771 | | | | | user: test
2772 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2772 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2773 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2773 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2774 | | | | |
2774 | | | | |
2775
2775
2776 .. unless HGPLAINEXCEPT=graph is set:
2776 .. unless HGPLAINEXCEPT=graph is set:
2777
2777
2778 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2778 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2779 \xe2\x97\x8d changeset: 36:08a19a744424 (esc)
2779 \xe2\x97\x8d changeset: 36:08a19a744424 (esc)
2780 \xe2\x94\x86 branch: branch (esc)
2780 \xe2\x94\x86 branch: branch (esc)
2781 \xe2\x94\x86 tag: tip (esc)
2781 \xe2\x94\x86 tag: tip (esc)
2782 \xe2\x94\x86 parent: 35:9159c3644c5e (esc)
2782 \xe2\x94\x86 parent: 35:9159c3644c5e (esc)
2783 \xe2\x94\x86 parent: 35:9159c3644c5e (esc)
2783 \xe2\x94\x86 parent: 35:9159c3644c5e (esc)
2784 \xe2\x94\x86 user: test (esc)
2784 \xe2\x94\x86 user: test (esc)
2785 \xe2\x94\x86 date: Thu Jan 01 00:00:36 1970 +0000 (esc)
2785 \xe2\x94\x86 date: Thu Jan 01 00:00:36 1970 +0000 (esc)
2786 \xe2\x94\x86 summary: (36) buggy merge: identical parents (esc)
2786 \xe2\x94\x86 summary: (36) buggy merge: identical parents (esc)
2787 \xe2\x94\x86 (esc)
2787 \xe2\x94\x86 (esc)
2788 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
2788 \xe2\x97\x8b changeset: 32:d06dffa21a31 (esc)
2789 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
2789 \xe2\x94\x82\xe2\x95\xb2 parent: 27:886ed638191b (esc)
2790 \xe2\x94\x82 \xe2\x94\x86 parent: 31:621d83e11f67 (esc)
2790 \xe2\x94\x82 \xe2\x94\x86 parent: 31:621d83e11f67 (esc)
2791 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2791 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2792 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
2792 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:32 1970 +0000 (esc)
2793 \xe2\x94\x82 \xe2\x94\x86 summary: (32) expand (esc)
2793 \xe2\x94\x82 \xe2\x94\x86 summary: (32) expand (esc)
2794 \xe2\x94\x82 \xe2\x94\x86 (esc)
2794 \xe2\x94\x82 \xe2\x94\x86 (esc)
2795 \xe2\x97\x8b \xe2\x94\x86 changeset: 31:621d83e11f67 (esc)
2795 \xe2\x97\x8b \xe2\x94\x86 changeset: 31:621d83e11f67 (esc)
2796 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
2796 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
2797 \xe2\x94\x82 \xe2\x94\x86 parent: 30:6e11cd4b648f (esc)
2797 \xe2\x94\x82 \xe2\x94\x86 parent: 30:6e11cd4b648f (esc)
2798 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2798 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2799 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
2799 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:31 1970 +0000 (esc)
2800 \xe2\x94\x82 \xe2\x94\x86 summary: (31) expand (esc)
2800 \xe2\x94\x82 \xe2\x94\x86 summary: (31) expand (esc)
2801 \xe2\x94\x82 \xe2\x94\x86 (esc)
2801 \xe2\x94\x82 \xe2\x94\x86 (esc)
2802 \xe2\x97\x8b \xe2\x94\x86 changeset: 30:6e11cd4b648f (esc)
2802 \xe2\x97\x8b \xe2\x94\x86 changeset: 30:6e11cd4b648f (esc)
2803 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
2803 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 28:44ecd0b9ae99 (esc)
2804 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 29:cd9bb2be7593 (esc)
2804 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 29:cd9bb2be7593 (esc)
2805 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2805 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2806 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
2806 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:30 1970 +0000 (esc)
2807 \xe2\x94\x82 \xe2\x94\x86 summary: (30) expand (esc)
2807 \xe2\x94\x82 \xe2\x94\x86 summary: (30) expand (esc)
2808 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2808 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2809 \xe2\x97\x8b \xe2\x94\x86 changeset: 28:44ecd0b9ae99 (esc)
2809 \xe2\x97\x8b \xe2\x94\x86 changeset: 28:44ecd0b9ae99 (esc)
2810 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2810 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2811 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 26:7f25b6c2f0b9 (esc)
2811 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 26:7f25b6c2f0b9 (esc)
2812 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2812 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2813 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
2813 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:28 1970 +0000 (esc)
2814 \xe2\x94\x82 \xe2\x94\x86 summary: (28) merge zero known (esc)
2814 \xe2\x94\x82 \xe2\x94\x86 summary: (28) merge zero known (esc)
2815 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2815 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2816 \xe2\x97\x8b \xe2\x94\x86 changeset: 26:7f25b6c2f0b9 (esc)
2816 \xe2\x97\x8b \xe2\x94\x86 changeset: 26:7f25b6c2f0b9 (esc)
2817 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 18:1aa84d96232a (esc)
2817 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 18:1aa84d96232a (esc)
2818 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 25:91da8ed57247 (esc)
2818 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 25:91da8ed57247 (esc)
2819 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2819 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2820 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
2820 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:26 1970 +0000 (esc)
2821 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (26) merge one known; far right (esc)
2821 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (26) merge one known; far right (esc)
2822 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
2822 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
2823 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 25:91da8ed57247 (esc)
2823 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 25:91da8ed57247 (esc)
2824 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
2824 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x86 parent: 21:d42a756af44d (esc)
2825 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 24:a9c19a3d96b7 (esc)
2825 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 parent: 24:a9c19a3d96b7 (esc)
2826 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2826 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2827 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
2827 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:25 1970 +0000 (esc)
2828 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (25) merge one known; far left (esc)
2828 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (25) merge one known; far left (esc)
2829 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
2829 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 (esc)
2830 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 24:a9c19a3d96b7 (esc)
2830 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 24:a9c19a3d96b7 (esc)
2831 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
2831 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
2832 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 23:a01cddf0766d (esc)
2832 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 23:a01cddf0766d (esc)
2833 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2833 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2834 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
2834 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:24 1970 +0000 (esc)
2835 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (24) merge one known; immediate right (esc)
2835 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (24) merge one known; immediate right (esc)
2836 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2836 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2837 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 23:a01cddf0766d (esc)
2837 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 23:a01cddf0766d (esc)
2838 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2838 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2839 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 22:e0d9cccacb5d (esc)
2839 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x86 parent: 22:e0d9cccacb5d (esc)
2840 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2840 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2841 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
2841 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:23 1970 +0000 (esc)
2842 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (23) merge one known; immediate left (esc)
2842 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x86 summary: (23) merge one known; immediate left (esc)
2843 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2843 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2844 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 22:e0d9cccacb5d (esc)
2844 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x86 changeset: 22:e0d9cccacb5d (esc)
2845 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x86\xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
2845 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x86\xe2\x95\xb1 parent: 18:1aa84d96232a (esc)
2846 \xe2\x94\x82 \xe2\x94\x86 parent: 21:d42a756af44d (esc)
2846 \xe2\x94\x82 \xe2\x94\x86 parent: 21:d42a756af44d (esc)
2847 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2847 \xe2\x94\x82 \xe2\x94\x86 user: test (esc)
2848 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
2848 \xe2\x94\x82 \xe2\x94\x86 date: Thu Jan 01 00:00:22 1970 +0000 (esc)
2849 \xe2\x94\x82 \xe2\x94\x86 summary: (22) merge two known; one far left, one far right (esc)
2849 \xe2\x94\x82 \xe2\x94\x86 summary: (22) merge two known; one far left, one far right (esc)
2850 \xe2\x94\x82 \xe2\x94\x86 (esc)
2850 \xe2\x94\x82 \xe2\x94\x86 (esc)
2851 \xe2\x94\x82 \xe2\x97\x8b changeset: 21:d42a756af44d (esc)
2851 \xe2\x94\x82 \xe2\x97\x8b changeset: 21:d42a756af44d (esc)
2852 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
2852 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 19:31ddc2c1573b (esc)
2853 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
2853 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 20:d30ed6450e32 (esc)
2854 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2854 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2855 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
2855 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:21 1970 +0000 (esc)
2856 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
2856 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (21) expand (esc)
2857 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2857 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2858 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 20:d30ed6450e32 (esc)
2858 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 20:d30ed6450e32 (esc)
2859 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2859 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2860 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 18:1aa84d96232a (esc)
2860 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 18:1aa84d96232a (esc)
2861 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2861 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2862 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
2862 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:20 1970 +0000 (esc)
2863 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
2863 \xe2\x94\x82 \xe2\x94\x82 summary: (20) merge two known; two far right (esc)
2864 \xe2\x94\x82 \xe2\x94\x82 (esc)
2864 \xe2\x94\x82 \xe2\x94\x82 (esc)
2865 \xe2\x94\x82 \xe2\x97\x8b changeset: 19:31ddc2c1573b (esc)
2865 \xe2\x94\x82 \xe2\x97\x8b changeset: 19:31ddc2c1573b (esc)
2866 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
2866 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 15:1dda3f72782d (esc)
2867 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
2867 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 17:44765d7c06e0 (esc)
2868 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2868 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2869 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
2869 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:19 1970 +0000 (esc)
2870 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
2870 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (19) expand (esc)
2871 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2871 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2872 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 18:1aa84d96232a (esc)
2872 \xe2\x97\x8b \xe2\x94\x82 \xe2\x94\x82 changeset: 18:1aa84d96232a (esc)
2873 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
2873 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
2874 \xe2\x95\xa7 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
2874 \xe2\x95\xa7 \xe2\x94\x82 \xe2\x94\x82 parent: 15:1dda3f72782d (esc)
2875 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2875 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2876 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
2876 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:18 1970 +0000 (esc)
2877 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
2877 \xe2\x94\x82 \xe2\x94\x82 summary: (18) merge two known; two far left (esc)
2878 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
2878 \xe2\x95\xb1 \xe2\x95\xb1 (esc)
2879 \xe2\x94\x82 \xe2\x97\x8b changeset: 17:44765d7c06e0 (esc)
2879 \xe2\x94\x82 \xe2\x97\x8b changeset: 17:44765d7c06e0 (esc)
2880 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
2880 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 12:86b91144a6e9 (esc)
2881 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
2881 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 16:3677d192927d (esc)
2882 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2882 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2883 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
2883 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:17 1970 +0000 (esc)
2884 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
2884 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (17) expand (esc)
2885 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2885 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2886 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 16:3677d192927d (esc)
2886 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 16:3677d192927d (esc)
2887 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
2887 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 0:e6eb3150255d (esc)
2888 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x95\xa7 parent: 1:6db2ef61d156 (esc)
2888 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x95\xa7 parent: 1:6db2ef61d156 (esc)
2889 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2889 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2890 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
2890 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:16 1970 +0000 (esc)
2891 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
2891 \xe2\x94\x82 \xe2\x94\x82 summary: (16) merge two known; one immediate right, one near right (esc)
2892 \xe2\x94\x82 \xe2\x94\x82 (esc)
2892 \xe2\x94\x82 \xe2\x94\x82 (esc)
2893 \xe2\x97\x8b \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
2893 \xe2\x97\x8b \xe2\x94\x82 changeset: 15:1dda3f72782d (esc)
2894 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
2894 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 13:22d8966a97e3 (esc)
2895 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
2895 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 14:8eac370358ef (esc)
2896 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2896 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2897 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
2897 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:15 1970 +0000 (esc)
2898 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
2898 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (15) expand (esc)
2899 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2899 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2900 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 14:8eac370358ef (esc)
2900 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 14:8eac370358ef (esc)
2901 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2901 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2902 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 12:86b91144a6e9 (esc)
2902 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 12:86b91144a6e9 (esc)
2903 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2903 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2904 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
2904 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:14 1970 +0000 (esc)
2905 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
2905 \xe2\x94\x82 \xe2\x94\x82 summary: (14) merge two known; one immediate right, one far right (esc)
2906 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2906 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2907 \xe2\x97\x8b \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
2907 \xe2\x97\x8b \xe2\x94\x82 changeset: 13:22d8966a97e3 (esc)
2908 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
2908 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 9:7010c0af0a35 (esc)
2909 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
2909 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 11:832d76e6bdf2 (esc)
2910 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2910 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2911 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
2911 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:13 1970 +0000 (esc)
2912 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
2912 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (13) expand (esc)
2913 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2913 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2914 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 12:86b91144a6e9 (esc)
2914 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x97\x8b changeset: 12:86b91144a6e9 (esc)
2915 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
2915 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 1:6db2ef61d156 (esc)
2916 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 9:7010c0af0a35 (esc)
2916 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 9:7010c0af0a35 (esc)
2917 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2917 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2918 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
2918 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:12 1970 +0000 (esc)
2919 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
2919 \xe2\x94\x82 \xe2\x94\x82 summary: (12) merge two known; one immediate right, one far left (esc)
2920 \xe2\x94\x82 \xe2\x94\x82 (esc)
2920 \xe2\x94\x82 \xe2\x94\x82 (esc)
2921 \xe2\x94\x82 \xe2\x97\x8b changeset: 11:832d76e6bdf2 (esc)
2921 \xe2\x94\x82 \xe2\x97\x8b changeset: 11:832d76e6bdf2 (esc)
2922 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 6:b105a072e251 (esc)
2922 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb2 parent: 6:b105a072e251 (esc)
2923 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
2923 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 10:74c64d036d72 (esc)
2924 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2924 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2925 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
2925 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:11 1970 +0000 (esc)
2926 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
2926 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (11) expand (esc)
2927 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2927 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2928 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 10:74c64d036d72 (esc)
2928 \xe2\x94\x82 \xe2\x94\x82 \xe2\x97\x8b changeset: 10:74c64d036d72 (esc)
2929 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2929 \xe2\x94\x82 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2930 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 6:b105a072e251 (esc)
2930 \xe2\x94\x82 \xe2\x94\x82 \xe2\x95\xa7 parent: 6:b105a072e251 (esc)
2931 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2931 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2932 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
2932 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:10 1970 +0000 (esc)
2933 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
2933 \xe2\x94\x82 \xe2\x94\x82 summary: (10) merge two known; one immediate left, one near right (esc)
2934 \xe2\x94\x82 \xe2\x94\x82 (esc)
2934 \xe2\x94\x82 \xe2\x94\x82 (esc)
2935 \xe2\x97\x8b \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
2935 \xe2\x97\x8b \xe2\x94\x82 changeset: 9:7010c0af0a35 (esc)
2936 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
2936 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 7:b632bb1b1224 (esc)
2937 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
2937 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 parent: 8:7a0b11f71937 (esc)
2938 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2938 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2939 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
2939 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:09 1970 +0000 (esc)
2940 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
2940 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 summary: (9) expand (esc)
2941 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2941 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 (esc)
2942 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 8:7a0b11f71937 (esc)
2942 \xe2\x94\x82 \xe2\x97\x8b \xe2\x94\x82 changeset: 8:7a0b11f71937 (esc)
2943 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2943 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 \xe2\x94\x82 parent: 0:e6eb3150255d (esc)
2944 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 7:b632bb1b1224 (esc)
2944 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 7:b632bb1b1224 (esc)
2945 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2945 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2946 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
2946 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:08 1970 +0000 (esc)
2947 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
2947 \xe2\x94\x82 \xe2\x94\x82 summary: (8) merge two known; one immediate left, one far right (esc)
2948 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2948 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2949 \xe2\x97\x8b \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
2949 \xe2\x97\x8b \xe2\x94\x82 changeset: 7:b632bb1b1224 (esc)
2950 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
2950 \xe2\x94\x82\xe2\x95\xb2 \xe2\x95\xb2 parent: 2:3d9a33b8d1e1 (esc)
2951 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
2951 \xe2\x94\x82 \xe2\x95\xa7 \xe2\x94\x82 parent: 5:4409d547b708 (esc)
2952 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2952 \xe2\x94\x82 \xe2\x94\x82 user: test (esc)
2953 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
2953 \xe2\x94\x82 \xe2\x94\x82 date: Thu Jan 01 00:00:07 1970 +0000 (esc)
2954 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
2954 \xe2\x94\x82 \xe2\x94\x82 summary: (7) expand (esc)
2955 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2955 \xe2\x94\x82 \xe2\x95\xb1 (esc)
2956 \xe2\x94\x82 \xe2\x97\x8b changeset: 6:b105a072e251 (esc)
2956 \xe2\x94\x82 \xe2\x97\x8b changeset: 6:b105a072e251 (esc)
2957 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 2:3d9a33b8d1e1 (esc)
2957 \xe2\x94\x82\xe2\x95\xb1\xe2\x94\x82 parent: 2:3d9a33b8d1e1 (esc)
2958 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:4409d547b708 (esc)
2958 \xe2\x94\x82 \xe2\x95\xa7 parent: 5:4409d547b708 (esc)
2959 \xe2\x94\x82 user: test (esc)
2959 \xe2\x94\x82 user: test (esc)
2960 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
2960 \xe2\x94\x82 date: Thu Jan 01 00:00:06 1970 +0000 (esc)
2961 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
2961 \xe2\x94\x82 summary: (6) merge two known; one immediate left, one far left (esc)
2962 \xe2\x94\x82 (esc)
2962 \xe2\x94\x82 (esc)
2963 \xe2\x97\x8b changeset: 5:4409d547b708 (esc)
2963 \xe2\x97\x8b changeset: 5:4409d547b708 (esc)
2964 \xe2\x94\x82\xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
2964 \xe2\x94\x82\xe2\x95\xb2 parent: 3:27eef8ed80b4 (esc)
2965 \xe2\x94\x82 \xe2\x95\xa7 parent: 4:26a8bac39d9f (esc)
2965 \xe2\x94\x82 \xe2\x95\xa7 parent: 4:26a8bac39d9f (esc)
2966 \xe2\x94\x82 user: test (esc)
2966 \xe2\x94\x82 user: test (esc)
2967 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
2967 \xe2\x94\x82 date: Thu Jan 01 00:00:05 1970 +0000 (esc)
2968 \xe2\x94\x82 summary: (5) expand (esc)
2968 \xe2\x94\x82 summary: (5) expand (esc)
2969 \xe2\x94\x82 (esc)
2969 \xe2\x94\x82 (esc)
2970 \xe2\x97\x8b changeset: 4:26a8bac39d9f (esc)
2970 \xe2\x97\x8b changeset: 4:26a8bac39d9f (esc)
2971 \xe2\x94\x82\xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2971 \xe2\x94\x82\xe2\x95\xb2 parent: 1:6db2ef61d156 (esc)
2972 \xe2\x95\xa7 \xe2\x95\xa7 parent: 3:27eef8ed80b4 (esc)
2972 \xe2\x95\xa7 \xe2\x95\xa7 parent: 3:27eef8ed80b4 (esc)
2973 user: test
2973 user: test
2974 date: Thu Jan 01 00:00:04 1970 +0000
2974 date: Thu Jan 01 00:00:04 1970 +0000
2975 summary: (4) merge two known; one immediate left, one immediate right
2975 summary: (4) merge two known; one immediate left, one immediate right
2976
2976
2977 $ cd ..
2977 $ cd ..
2978 $ cd repo
2978 $ cd repo
2979
2979
2980 behavior with newlines
2980 behavior with newlines
2981
2981
2982 $ hg log -G -r ::2 -T '{rev} {desc}'
2982 $ hg log -G -r ::2 -T '{rev} {desc}'
2983 \xe2\x97\x8b 2 (2) collapse (esc)
2983 \xe2\x97\x8b 2 (2) collapse (esc)
2984 \xe2\x94\x82 (esc)
2984 \xe2\x94\x82 (esc)
2985 \xe2\x97\x8b 1 (1) collapse (esc)
2985 \xe2\x97\x8b 1 (1) collapse (esc)
2986 \xe2\x94\x82 (esc)
2986 \xe2\x94\x82 (esc)
2987 \xe2\x97\x8b 0 (0) root (esc)
2987 \xe2\x97\x8b 0 (0) root (esc)
2988
2988
2989
2989
2990 $ hg log -G -r ::2 -T '{rev} {desc}\n'
2990 $ hg log -G -r ::2 -T '{rev} {desc}\n'
2991 \xe2\x97\x8b 2 (2) collapse (esc)
2991 \xe2\x97\x8b 2 (2) collapse (esc)
2992 \xe2\x94\x82 (esc)
2992 \xe2\x94\x82 (esc)
2993 \xe2\x97\x8b 1 (1) collapse (esc)
2993 \xe2\x97\x8b 1 (1) collapse (esc)
2994 \xe2\x94\x82 (esc)
2994 \xe2\x94\x82 (esc)
2995 \xe2\x97\x8b 0 (0) root (esc)
2995 \xe2\x97\x8b 0 (0) root (esc)
2996
2996
2997
2997
2998 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
2998 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
2999 \xe2\x97\x8b 2 (2) collapse (esc)
2999 \xe2\x97\x8b 2 (2) collapse (esc)
3000 \xe2\x94\x82 (esc)
3000 \xe2\x94\x82 (esc)
3001 \xe2\x97\x8b 1 (1) collapse (esc)
3001 \xe2\x97\x8b 1 (1) collapse (esc)
3002 \xe2\x94\x82 (esc)
3002 \xe2\x94\x82 (esc)
3003 \xe2\x97\x8b 0 (0) root (esc)
3003 \xe2\x97\x8b 0 (0) root (esc)
3004
3004
3005
3005
3006 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3006 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3007 \xe2\x97\x8b (esc)
3007 \xe2\x97\x8b (esc)
3008 \xe2\x94\x82 2 (2) collapse (esc)
3008 \xe2\x94\x82 2 (2) collapse (esc)
3009 \xe2\x97\x8b (esc)
3009 \xe2\x97\x8b (esc)
3010 \xe2\x94\x82 1 (1) collapse (esc)
3010 \xe2\x94\x82 1 (1) collapse (esc)
3011 \xe2\x97\x8b (esc)
3011 \xe2\x97\x8b (esc)
3012 0 (0) root
3012 0 (0) root
3013
3013
3014 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3014 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3015 \xe2\x97\x8b 2 (2) collapse (esc)
3015 \xe2\x97\x8b 2 (2) collapse (esc)
3016 \xe2\x94\x82 (esc)
3016 \xe2\x94\x82 (esc)
3017 \xe2\x94\x82 (esc)
3017 \xe2\x94\x82 (esc)
3018 \xe2\x97\x8b 1 (1) collapse (esc)
3018 \xe2\x97\x8b 1 (1) collapse (esc)
3019 \xe2\x94\x82 (esc)
3019 \xe2\x94\x82 (esc)
3020 \xe2\x94\x82 (esc)
3020 \xe2\x94\x82 (esc)
3021 \xe2\x97\x8b 0 (0) root (esc)
3021 \xe2\x97\x8b 0 (0) root (esc)
3022
3022
3023
3023
3024 $ cd ..
3024 $ cd ..
3025
3025
3026 When inserting extra line nodes to handle more than 2 parents, ensure that
3026 When inserting extra line nodes to handle more than 2 parents, ensure that
3027 the right node styles are used (issue5174):
3027 the right node styles are used (issue5174):
3028
3028
3029 $ hg init repo-issue5174
3029 $ hg init repo-issue5174
3030 $ cd repo-issue5174
3030 $ cd repo-issue5174
3031 $ echo a > f0
3031 $ echo a > f0
3032 $ hg ci -Aqm 0
3032 $ hg ci -Aqm 0
3033 $ echo a > f1
3033 $ echo a > f1
3034 $ hg ci -Aqm 1
3034 $ hg ci -Aqm 1
3035 $ echo a > f2
3035 $ echo a > f2
3036 $ hg ci -Aqm 2
3036 $ hg ci -Aqm 2
3037 $ hg co ".^"
3037 $ hg co ".^"
3038 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3038 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3039 $ echo a > f3
3039 $ echo a > f3
3040 $ hg ci -Aqm 3
3040 $ hg ci -Aqm 3
3041 $ hg co ".^^"
3041 $ hg co ".^^"
3042 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3042 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3043 $ echo a > f4
3043 $ echo a > f4
3044 $ hg ci -Aqm 4
3044 $ hg ci -Aqm 4
3045 $ hg merge -r 2
3045 $ hg merge -r 2
3046 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3046 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3047 (branch merge, don't forget to commit)
3047 (branch merge, don't forget to commit)
3048 $ hg ci -qm 5
3048 $ hg ci -qm 5
3049 $ hg merge -r 3
3049 $ hg merge -r 3
3050 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3050 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3051 (branch merge, don't forget to commit)
3051 (branch merge, don't forget to commit)
3052 $ hg ci -qm 6
3052 $ hg ci -qm 6
3053 $ hg log -G -r '0 | 1 | 2 | 6'
3053 $ hg log -G -r '0 | 1 | 2 | 6'
3054 \xe2\x97\x8d changeset: 6:851fe89689ad (esc)
3054 \xe2\x97\x8d changeset: 6:851fe89689ad (esc)
3055 \xe2\x94\x86\xe2\x95\xb2 tag: tip (esc)
3055 \xe2\x94\x86\xe2\x95\xb2 tag: tip (esc)
3056 \xe2\x94\x86 \xe2\x94\x86 parent: 5:4f1e3cf15f5d (esc)
3056 \xe2\x94\x86 \xe2\x94\x86 parent: 5:4f1e3cf15f5d (esc)
3057 \xe2\x94\x86 \xe2\x94\x86 parent: 3:b74ba7084d2d (esc)
3057 \xe2\x94\x86 \xe2\x94\x86 parent: 3:b74ba7084d2d (esc)
3058 \xe2\x94\x86 \xe2\x94\x86 user: test (esc)
3058 \xe2\x94\x86 \xe2\x94\x86 user: test (esc)
3059 \xe2\x94\x86 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3059 \xe2\x94\x86 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3060 \xe2\x94\x86 \xe2\x94\x86 summary: 6 (esc)
3060 \xe2\x94\x86 \xe2\x94\x86 summary: 6 (esc)
3061 \xe2\x94\x86 \xe2\x94\x86 (esc)
3061 \xe2\x94\x86 \xe2\x94\x86 (esc)
3062 \xe2\x94\x86 \xe2\x95\xb2 (esc)
3062 \xe2\x94\x86 \xe2\x95\xb2 (esc)
3063 \xe2\x94\x86 \xe2\x94\x86\xe2\x95\xb2 (esc)
3063 \xe2\x94\x86 \xe2\x94\x86\xe2\x95\xb2 (esc)
3064 \xe2\x94\x86 \xe2\x97\x8b \xe2\x94\x86 changeset: 2:3e6599df4cce (esc)
3064 \xe2\x94\x86 \xe2\x97\x8b \xe2\x94\x86 changeset: 2:3e6599df4cce (esc)
3065 \xe2\x94\x86 \xe2\x94\x86\xe2\x95\xb1 user: test (esc)
3065 \xe2\x94\x86 \xe2\x94\x86\xe2\x95\xb1 user: test (esc)
3066 \xe2\x94\x86 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3066 \xe2\x94\x86 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3067 \xe2\x94\x86 \xe2\x94\x86 summary: 2 (esc)
3067 \xe2\x94\x86 \xe2\x94\x86 summary: 2 (esc)
3068 \xe2\x94\x86 \xe2\x94\x86 (esc)
3068 \xe2\x94\x86 \xe2\x94\x86 (esc)
3069 \xe2\x94\x86 \xe2\x97\x8b changeset: 1:bd9a55143933 (esc)
3069 \xe2\x94\x86 \xe2\x97\x8b changeset: 1:bd9a55143933 (esc)
3070 \xe2\x94\x86\xe2\x95\xb1 user: test (esc)
3070 \xe2\x94\x86\xe2\x95\xb1 user: test (esc)
3071 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3071 \xe2\x94\x86 date: Thu Jan 01 00:00:00 1970 +0000 (esc)
3072 \xe2\x94\x86 summary: 1 (esc)
3072 \xe2\x94\x86 summary: 1 (esc)
3073 \xe2\x94\x86 (esc)
3073 \xe2\x94\x86 (esc)
3074 \xe2\x97\x8b changeset: 0:870a5edc339c (esc)
3074 \xe2\x97\x8b changeset: 0:870a5edc339c (esc)
3075 user: test
3075 user: test
3076 date: Thu Jan 01 00:00:00 1970 +0000
3076 date: Thu Jan 01 00:00:00 1970 +0000
3077 summary: 0
3077 summary: 0
3078
3078
3079
3079
3080 $ cd ..
3080 $ cd ..
3081
3081
3082 Multiple roots (issue5440):
3082 Multiple roots (issue5440):
3083
3083
3084 $ hg init multiroots
3084 $ hg init multiroots
3085 $ cd multiroots
3085 $ cd multiroots
3086 $ cat <<EOF > .hg/hgrc
3086 $ cat <<EOF > .hg/hgrc
3087 > [command-templates]
3087 > [command-templates]
3088 > log = '{rev} {desc}\n\n'
3088 > log = '{rev} {desc}\n\n'
3089 > EOF
3089 > EOF
3090
3090
3091 $ touch foo
3091 $ touch foo
3092 $ hg ci -Aqm foo
3092 $ hg ci -Aqm foo
3093 $ hg co -q null
3093 $ hg co -q null
3094 $ touch bar
3094 $ touch bar
3095 $ hg ci -Aqm bar
3095 $ hg ci -Aqm bar
3096
3096
3097 $ hg log -Gr null:
3097 $ hg log -Gr null:
3098 \xe2\x97\x8d 1 bar (esc)
3098 \xe2\x97\x8d 1 bar (esc)
3099 \xe2\x94\x82 (esc)
3099 \xe2\x94\x82 (esc)
3100 \xe2\x94\x82 \xe2\x97\x8b 0 foo (esc)
3100 \xe2\x94\x82 \xe2\x97\x8b 0 foo (esc)
3101 \xe2\x94\x82\xe2\x95\xb1 (esc)
3101 \xe2\x94\x82\xe2\x95\xb1 (esc)
3102 \xe2\x97\x8b -1 (esc)
3102 \xe2\x97\x8b -1 (esc)
3103
3103
3104 $ hg log -Gr null+0
3104 $ hg log -Gr null+0
3105 \xe2\x97\x8b 0 foo (esc)
3105 \xe2\x97\x8b 0 foo (esc)
3106 \xe2\x94\x82 (esc)
3106 \xe2\x94\x82 (esc)
3107 \xe2\x97\x8b -1 (esc)
3107 \xe2\x97\x8b -1 (esc)
3108
3108
3109 $ hg log -Gr null+1
3109 $ hg log -Gr null+1
3110 \xe2\x97\x8d 1 bar (esc)
3110 \xe2\x97\x8d 1 bar (esc)
3111 \xe2\x94\x82 (esc)
3111 \xe2\x94\x82 (esc)
3112 \xe2\x97\x8b -1 (esc)
3112 \xe2\x97\x8b -1 (esc)
3113
3113
3114
3114
3115 $ cd ..
3115 $ cd ..
@@ -1,3463 +1,3463 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 $ echo "[extensions]" >> $HGRCPATH
84 $ echo "[extensions]" >> $HGRCPATH
85 $ echo "printrevset=$TESTDIR/printrevset.py" >> $HGRCPATH
85 $ echo "printrevset=$TESTDIR/printrevset.py" >> $HGRCPATH
86
86
87 $ hg init repo
87 $ hg init repo
88 $ cd repo
88 $ cd repo
89
89
90 Empty repo:
90 Empty repo:
91
91
92 $ hg log -G
92 $ hg log -G
93
93
94
94
95 Building DAG:
95 Building DAG:
96
96
97 $ commit 0 "root"
97 $ commit 0 "root"
98 $ commit 1 "collapse" 0
98 $ commit 1 "collapse" 0
99 $ commit 2 "collapse" 1
99 $ commit 2 "collapse" 1
100 $ commit 3 "collapse" 2
100 $ commit 3 "collapse" 2
101 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
101 $ commit 4 "merge two known; one immediate left, one immediate right" 1 3
102 $ commit 5 "expand" 3 4
102 $ commit 5 "expand" 3 4
103 $ commit 6 "merge two known; one immediate left, one far left" 2 5
103 $ commit 6 "merge two known; one immediate left, one far left" 2 5
104 $ commit 7 "expand" 2 5
104 $ commit 7 "expand" 2 5
105 $ commit 8 "merge two known; one immediate left, one far right" 0 7
105 $ commit 8 "merge two known; one immediate left, one far right" 0 7
106 $ commit 9 "expand" 7 8
106 $ commit 9 "expand" 7 8
107 $ commit 10 "merge two known; one immediate left, one near right" 0 6
107 $ commit 10 "merge two known; one immediate left, one near right" 0 6
108 $ commit 11 "expand" 6 10
108 $ commit 11 "expand" 6 10
109 $ commit 12 "merge two known; one immediate right, one far left" 1 9
109 $ commit 12 "merge two known; one immediate right, one far left" 1 9
110 $ commit 13 "expand" 9 11
110 $ commit 13 "expand" 9 11
111 $ commit 14 "merge two known; one immediate right, one far right" 0 12
111 $ commit 14 "merge two known; one immediate right, one far right" 0 12
112 $ commit 15 "expand" 13 14
112 $ commit 15 "expand" 13 14
113 $ commit 16 "merge two known; one immediate right, one near right" 0 1
113 $ commit 16 "merge two known; one immediate right, one near right" 0 1
114 $ commit 17 "expand" 12 16
114 $ commit 17 "expand" 12 16
115 $ commit 18 "merge two known; two far left" 1 15
115 $ commit 18 "merge two known; two far left" 1 15
116 $ commit 19 "expand" 15 17
116 $ commit 19 "expand" 15 17
117 $ commit 20 "merge two known; two far right" 0 18
117 $ commit 20 "merge two known; two far right" 0 18
118 $ commit 21 "expand" 19 20
118 $ commit 21 "expand" 19 20
119 $ commit 22 "merge two known; one far left, one far right" 18 21
119 $ commit 22 "merge two known; one far left, one far right" 18 21
120 $ commit 23 "merge one known; immediate left" 1 22
120 $ commit 23 "merge one known; immediate left" 1 22
121 $ commit 24 "merge one known; immediate right" 0 23
121 $ commit 24 "merge one known; immediate right" 0 23
122 $ commit 25 "merge one known; far left" 21 24
122 $ commit 25 "merge one known; far left" 21 24
123 $ commit 26 "merge one known; far right" 18 25
123 $ commit 26 "merge one known; far right" 18 25
124 $ commit 27 "collapse" 21
124 $ commit 27 "collapse" 21
125 $ commit 28 "merge zero known" 1 26
125 $ commit 28 "merge zero known" 1 26
126 $ commit 29 "regular commit" 0
126 $ commit 29 "regular commit" 0
127 $ commit 30 "expand" 28 29
127 $ commit 30 "expand" 28 29
128 $ commit 31 "expand" 21 30
128 $ commit 31 "expand" 21 30
129 $ commit 32 "expand" 27 31
129 $ commit 32 "expand" 27 31
130 $ commit 33 "head" 18
130 $ commit 33 "head" 18
131 $ commit 34 "head" 32
131 $ commit 34 "head" 32
132
132
133
133
134 $ hg log -G -q
134 $ hg log -G -q
135 @ 34:fea3ac5810e0
135 @ 34:fea3ac5810e0
136 |
136 |
137 | o 33:68608f5145f9
137 | o 33:68608f5145f9
138 | |
138 | |
139 o | 32:d06dffa21a31
139 o | 32:d06dffa21a31
140 |\ \
140 |\ \
141 | o \ 31:621d83e11f67
141 | o \ 31:621d83e11f67
142 | |\ \
142 | |\ \
143 | | o \ 30:6e11cd4b648f
143 | | o \ 30:6e11cd4b648f
144 | | |\ \
144 | | |\ \
145 | | | o | 29:cd9bb2be7593
145 | | | o | 29:cd9bb2be7593
146 | | | | |
146 | | | | |
147 | | o | | 28:44ecd0b9ae99
147 | | o | | 28:44ecd0b9ae99
148 | | |\ \ \
148 | | |\ \ \
149 o | | | | | 27:886ed638191b
149 o | | | | | 27:886ed638191b
150 |/ / / / /
150 |/ / / / /
151 | | o---+ 26:7f25b6c2f0b9
151 | | o---+ 26:7f25b6c2f0b9
152 | | | | |
152 | | | | |
153 +---o | | 25:91da8ed57247
153 +---o | | 25:91da8ed57247
154 | | | | |
154 | | | | |
155 | | o | | 24:a9c19a3d96b7
155 | | o | | 24:a9c19a3d96b7
156 | | |\| |
156 | | |\| |
157 | | o | | 23:a01cddf0766d
157 | | o | | 23:a01cddf0766d
158 | |/| | |
158 | |/| | |
159 +---o---+ 22:e0d9cccacb5d
159 +---o---+ 22:e0d9cccacb5d
160 | | / /
160 | | / /
161 o | | | 21:d42a756af44d
161 o | | | 21:d42a756af44d
162 |\ \ \ \
162 |\ \ \ \
163 | o---+-+ 20:d30ed6450e32
163 | o---+-+ 20:d30ed6450e32
164 | / / /
164 | / / /
165 o | | | 19:31ddc2c1573b
165 o | | | 19:31ddc2c1573b
166 |\ \ \ \
166 |\ \ \ \
167 +---+---o 18:1aa84d96232a
167 +---+---o 18:1aa84d96232a
168 | | | |
168 | | | |
169 | o | | 17:44765d7c06e0
169 | o | | 17:44765d7c06e0
170 | |\ \ \
170 | |\ \ \
171 | | o---+ 16:3677d192927d
171 | | o---+ 16:3677d192927d
172 | | |/ /
172 | | |/ /
173 o | | | 15:1dda3f72782d
173 o | | | 15:1dda3f72782d
174 |\ \ \ \
174 |\ \ \ \
175 | o-----+ 14:8eac370358ef
175 | o-----+ 14:8eac370358ef
176 | |/ / /
176 | |/ / /
177 o | | | 13:22d8966a97e3
177 o | | | 13:22d8966a97e3
178 |\ \ \ \
178 |\ \ \ \
179 +---o | | 12:86b91144a6e9
179 +---o | | 12:86b91144a6e9
180 | | |/ /
180 | | |/ /
181 | o | | 11:832d76e6bdf2
181 | o | | 11:832d76e6bdf2
182 | |\ \ \
182 | |\ \ \
183 | | o---+ 10:74c64d036d72
183 | | o---+ 10:74c64d036d72
184 | |/ / /
184 | |/ / /
185 o | | | 9:7010c0af0a35
185 o | | | 9:7010c0af0a35
186 |\ \ \ \
186 |\ \ \ \
187 | o-----+ 8:7a0b11f71937
187 | o-----+ 8:7a0b11f71937
188 |/ / / /
188 |/ / / /
189 o | | | 7:b632bb1b1224
189 o | | | 7:b632bb1b1224
190 |\ \ \ \
190 |\ \ \ \
191 +---o | | 6:b105a072e251
191 +---o | | 6:b105a072e251
192 | |/ / /
192 | |/ / /
193 | o | | 5:4409d547b708
193 | o | | 5:4409d547b708
194 | |\ \ \
194 | |\ \ \
195 | | o | | 4:26a8bac39d9f
195 | | o | | 4:26a8bac39d9f
196 | |/|/ /
196 | |/|/ /
197 | o / / 3:27eef8ed80b4
197 | o / / 3:27eef8ed80b4
198 |/ / /
198 |/ / /
199 o / / 2:3d9a33b8d1e1
199 o / / 2:3d9a33b8d1e1
200 |/ /
200 |/ /
201 o / 1:6db2ef61d156
201 o / 1:6db2ef61d156
202 |/
202 |/
203 o 0:e6eb3150255d
203 o 0:e6eb3150255d
204
204
205
205
206 $ hg log -G
206 $ hg log -G
207 @ changeset: 34:fea3ac5810e0
207 @ changeset: 34:fea3ac5810e0
208 | tag: tip
208 | tag: tip
209 | parent: 32:d06dffa21a31
209 | parent: 32:d06dffa21a31
210 | user: test
210 | user: test
211 | date: Thu Jan 01 00:00:34 1970 +0000
211 | date: Thu Jan 01 00:00:34 1970 +0000
212 | summary: (34) head
212 | summary: (34) head
213 |
213 |
214 | o changeset: 33:68608f5145f9
214 | o changeset: 33:68608f5145f9
215 | | parent: 18:1aa84d96232a
215 | | parent: 18:1aa84d96232a
216 | | user: test
216 | | user: test
217 | | date: Thu Jan 01 00:00:33 1970 +0000
217 | | date: Thu Jan 01 00:00:33 1970 +0000
218 | | summary: (33) head
218 | | summary: (33) head
219 | |
219 | |
220 o | changeset: 32:d06dffa21a31
220 o | changeset: 32:d06dffa21a31
221 |\ \ parent: 27:886ed638191b
221 |\ \ parent: 27:886ed638191b
222 | | | parent: 31:621d83e11f67
222 | | | parent: 31:621d83e11f67
223 | | | user: test
223 | | | user: test
224 | | | date: Thu Jan 01 00:00:32 1970 +0000
224 | | | date: Thu Jan 01 00:00:32 1970 +0000
225 | | | summary: (32) expand
225 | | | summary: (32) expand
226 | | |
226 | | |
227 | o | changeset: 31:621d83e11f67
227 | o | changeset: 31:621d83e11f67
228 | |\ \ parent: 21:d42a756af44d
228 | |\ \ parent: 21:d42a756af44d
229 | | | | parent: 30:6e11cd4b648f
229 | | | | parent: 30:6e11cd4b648f
230 | | | | user: test
230 | | | | user: test
231 | | | | date: Thu Jan 01 00:00:31 1970 +0000
231 | | | | date: Thu Jan 01 00:00:31 1970 +0000
232 | | | | summary: (31) expand
232 | | | | summary: (31) expand
233 | | | |
233 | | | |
234 | | o | changeset: 30:6e11cd4b648f
234 | | o | changeset: 30:6e11cd4b648f
235 | | |\ \ parent: 28:44ecd0b9ae99
235 | | |\ \ parent: 28:44ecd0b9ae99
236 | | | | | parent: 29:cd9bb2be7593
236 | | | | | parent: 29:cd9bb2be7593
237 | | | | | user: test
237 | | | | | user: test
238 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
238 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
239 | | | | | summary: (30) expand
239 | | | | | summary: (30) expand
240 | | | | |
240 | | | | |
241 | | | o | changeset: 29:cd9bb2be7593
241 | | | o | changeset: 29:cd9bb2be7593
242 | | | | | parent: 0:e6eb3150255d
242 | | | | | parent: 0:e6eb3150255d
243 | | | | | user: test
243 | | | | | user: test
244 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
244 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
245 | | | | | summary: (29) regular commit
245 | | | | | summary: (29) regular commit
246 | | | | |
246 | | | | |
247 | | o | | changeset: 28:44ecd0b9ae99
247 | | o | | changeset: 28:44ecd0b9ae99
248 | | |\ \ \ parent: 1:6db2ef61d156
248 | | |\ \ \ parent: 1:6db2ef61d156
249 | | | | | | parent: 26:7f25b6c2f0b9
249 | | | | | | parent: 26:7f25b6c2f0b9
250 | | | | | | user: test
250 | | | | | | user: test
251 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
251 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
252 | | | | | | summary: (28) merge zero known
252 | | | | | | summary: (28) merge zero known
253 | | | | | |
253 | | | | | |
254 o | | | | | changeset: 27:886ed638191b
254 o | | | | | changeset: 27:886ed638191b
255 |/ / / / / parent: 21:d42a756af44d
255 |/ / / / / parent: 21:d42a756af44d
256 | | | | | user: test
256 | | | | | user: test
257 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
257 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
258 | | | | | summary: (27) collapse
258 | | | | | summary: (27) collapse
259 | | | | |
259 | | | | |
260 | | o---+ changeset: 26:7f25b6c2f0b9
260 | | o---+ changeset: 26:7f25b6c2f0b9
261 | | | | | parent: 18:1aa84d96232a
261 | | | | | parent: 18:1aa84d96232a
262 | | | | | parent: 25:91da8ed57247
262 | | | | | parent: 25:91da8ed57247
263 | | | | | user: test
263 | | | | | user: test
264 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
264 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
265 | | | | | summary: (26) merge one known; far right
265 | | | | | summary: (26) merge one known; far right
266 | | | | |
266 | | | | |
267 +---o | | changeset: 25:91da8ed57247
267 +---o | | changeset: 25:91da8ed57247
268 | | | | | parent: 21:d42a756af44d
268 | | | | | parent: 21:d42a756af44d
269 | | | | | parent: 24:a9c19a3d96b7
269 | | | | | parent: 24:a9c19a3d96b7
270 | | | | | user: test
270 | | | | | user: test
271 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
271 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
272 | | | | | summary: (25) merge one known; far left
272 | | | | | summary: (25) merge one known; far left
273 | | | | |
273 | | | | |
274 | | o | | changeset: 24:a9c19a3d96b7
274 | | o | | changeset: 24:a9c19a3d96b7
275 | | |\| | parent: 0:e6eb3150255d
275 | | |\| | parent: 0:e6eb3150255d
276 | | | | | parent: 23:a01cddf0766d
276 | | | | | parent: 23:a01cddf0766d
277 | | | | | user: test
277 | | | | | user: test
278 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
278 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
279 | | | | | summary: (24) merge one known; immediate right
279 | | | | | summary: (24) merge one known; immediate right
280 | | | | |
280 | | | | |
281 | | o | | changeset: 23:a01cddf0766d
281 | | o | | changeset: 23:a01cddf0766d
282 | |/| | | parent: 1:6db2ef61d156
282 | |/| | | parent: 1:6db2ef61d156
283 | | | | | parent: 22:e0d9cccacb5d
283 | | | | | parent: 22:e0d9cccacb5d
284 | | | | | user: test
284 | | | | | user: test
285 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
285 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
286 | | | | | summary: (23) merge one known; immediate left
286 | | | | | summary: (23) merge one known; immediate left
287 | | | | |
287 | | | | |
288 +---o---+ changeset: 22:e0d9cccacb5d
288 +---o---+ changeset: 22:e0d9cccacb5d
289 | | | | parent: 18:1aa84d96232a
289 | | | | parent: 18:1aa84d96232a
290 | | / / parent: 21:d42a756af44d
290 | | / / parent: 21:d42a756af44d
291 | | | | user: test
291 | | | | user: test
292 | | | | date: Thu Jan 01 00:00:22 1970 +0000
292 | | | | date: Thu Jan 01 00:00:22 1970 +0000
293 | | | | summary: (22) merge two known; one far left, one far right
293 | | | | summary: (22) merge two known; one far left, one far right
294 | | | |
294 | | | |
295 o | | | changeset: 21:d42a756af44d
295 o | | | changeset: 21:d42a756af44d
296 |\ \ \ \ parent: 19:31ddc2c1573b
296 |\ \ \ \ parent: 19:31ddc2c1573b
297 | | | | | parent: 20:d30ed6450e32
297 | | | | | parent: 20:d30ed6450e32
298 | | | | | user: test
298 | | | | | user: test
299 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
299 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
300 | | | | | summary: (21) expand
300 | | | | | summary: (21) expand
301 | | | | |
301 | | | | |
302 | o---+-+ changeset: 20:d30ed6450e32
302 | o---+-+ changeset: 20:d30ed6450e32
303 | | | | parent: 0:e6eb3150255d
303 | | | | parent: 0:e6eb3150255d
304 | / / / parent: 18:1aa84d96232a
304 | / / / parent: 18:1aa84d96232a
305 | | | | user: test
305 | | | | user: test
306 | | | | date: Thu Jan 01 00:00:20 1970 +0000
306 | | | | date: Thu Jan 01 00:00:20 1970 +0000
307 | | | | summary: (20) merge two known; two far right
307 | | | | summary: (20) merge two known; two far right
308 | | | |
308 | | | |
309 o | | | changeset: 19:31ddc2c1573b
309 o | | | changeset: 19:31ddc2c1573b
310 |\ \ \ \ parent: 15:1dda3f72782d
310 |\ \ \ \ parent: 15:1dda3f72782d
311 | | | | | parent: 17:44765d7c06e0
311 | | | | | parent: 17:44765d7c06e0
312 | | | | | user: test
312 | | | | | user: test
313 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
313 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
314 | | | | | summary: (19) expand
314 | | | | | summary: (19) expand
315 | | | | |
315 | | | | |
316 +---+---o changeset: 18:1aa84d96232a
316 +---+---o changeset: 18:1aa84d96232a
317 | | | | parent: 1:6db2ef61d156
317 | | | | parent: 1:6db2ef61d156
318 | | | | parent: 15:1dda3f72782d
318 | | | | parent: 15:1dda3f72782d
319 | | | | user: test
319 | | | | user: test
320 | | | | date: Thu Jan 01 00:00:18 1970 +0000
320 | | | | date: Thu Jan 01 00:00:18 1970 +0000
321 | | | | summary: (18) merge two known; two far left
321 | | | | summary: (18) merge two known; two far left
322 | | | |
322 | | | |
323 | o | | changeset: 17:44765d7c06e0
323 | o | | changeset: 17:44765d7c06e0
324 | |\ \ \ parent: 12:86b91144a6e9
324 | |\ \ \ parent: 12:86b91144a6e9
325 | | | | | parent: 16:3677d192927d
325 | | | | | parent: 16:3677d192927d
326 | | | | | user: test
326 | | | | | user: test
327 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
327 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
328 | | | | | summary: (17) expand
328 | | | | | summary: (17) expand
329 | | | | |
329 | | | | |
330 | | o---+ changeset: 16:3677d192927d
330 | | o---+ changeset: 16:3677d192927d
331 | | | | | parent: 0:e6eb3150255d
331 | | | | | parent: 0:e6eb3150255d
332 | | |/ / parent: 1:6db2ef61d156
332 | | |/ / parent: 1:6db2ef61d156
333 | | | | user: test
333 | | | | user: test
334 | | | | date: Thu Jan 01 00:00:16 1970 +0000
334 | | | | date: Thu Jan 01 00:00:16 1970 +0000
335 | | | | summary: (16) merge two known; one immediate right, one near right
335 | | | | summary: (16) merge two known; one immediate right, one near right
336 | | | |
336 | | | |
337 o | | | changeset: 15:1dda3f72782d
337 o | | | changeset: 15:1dda3f72782d
338 |\ \ \ \ parent: 13:22d8966a97e3
338 |\ \ \ \ parent: 13:22d8966a97e3
339 | | | | | parent: 14:8eac370358ef
339 | | | | | parent: 14:8eac370358ef
340 | | | | | user: test
340 | | | | | user: test
341 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
341 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
342 | | | | | summary: (15) expand
342 | | | | | summary: (15) expand
343 | | | | |
343 | | | | |
344 | o-----+ changeset: 14:8eac370358ef
344 | o-----+ changeset: 14:8eac370358ef
345 | | | | | parent: 0:e6eb3150255d
345 | | | | | parent: 0:e6eb3150255d
346 | |/ / / parent: 12:86b91144a6e9
346 | |/ / / parent: 12:86b91144a6e9
347 | | | | user: test
347 | | | | user: test
348 | | | | date: Thu Jan 01 00:00:14 1970 +0000
348 | | | | date: Thu Jan 01 00:00:14 1970 +0000
349 | | | | summary: (14) merge two known; one immediate right, one far right
349 | | | | summary: (14) merge two known; one immediate right, one far right
350 | | | |
350 | | | |
351 o | | | changeset: 13:22d8966a97e3
351 o | | | changeset: 13:22d8966a97e3
352 |\ \ \ \ parent: 9:7010c0af0a35
352 |\ \ \ \ parent: 9:7010c0af0a35
353 | | | | | parent: 11:832d76e6bdf2
353 | | | | | parent: 11:832d76e6bdf2
354 | | | | | user: test
354 | | | | | user: test
355 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
355 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
356 | | | | | summary: (13) expand
356 | | | | | summary: (13) expand
357 | | | | |
357 | | | | |
358 +---o | | changeset: 12:86b91144a6e9
358 +---o | | changeset: 12:86b91144a6e9
359 | | |/ / parent: 1:6db2ef61d156
359 | | |/ / parent: 1:6db2ef61d156
360 | | | | parent: 9:7010c0af0a35
360 | | | | parent: 9:7010c0af0a35
361 | | | | user: test
361 | | | | user: test
362 | | | | date: Thu Jan 01 00:00:12 1970 +0000
362 | | | | date: Thu Jan 01 00:00:12 1970 +0000
363 | | | | summary: (12) merge two known; one immediate right, one far left
363 | | | | summary: (12) merge two known; one immediate right, one far left
364 | | | |
364 | | | |
365 | o | | changeset: 11:832d76e6bdf2
365 | o | | changeset: 11:832d76e6bdf2
366 | |\ \ \ parent: 6:b105a072e251
366 | |\ \ \ parent: 6:b105a072e251
367 | | | | | parent: 10:74c64d036d72
367 | | | | | parent: 10:74c64d036d72
368 | | | | | user: test
368 | | | | | user: test
369 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
369 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
370 | | | | | summary: (11) expand
370 | | | | | summary: (11) expand
371 | | | | |
371 | | | | |
372 | | o---+ changeset: 10:74c64d036d72
372 | | o---+ changeset: 10:74c64d036d72
373 | | | | | parent: 0:e6eb3150255d
373 | | | | | parent: 0:e6eb3150255d
374 | |/ / / parent: 6:b105a072e251
374 | |/ / / parent: 6:b105a072e251
375 | | | | user: test
375 | | | | user: test
376 | | | | date: Thu Jan 01 00:00:10 1970 +0000
376 | | | | date: Thu Jan 01 00:00:10 1970 +0000
377 | | | | summary: (10) merge two known; one immediate left, one near right
377 | | | | summary: (10) merge two known; one immediate left, one near right
378 | | | |
378 | | | |
379 o | | | changeset: 9:7010c0af0a35
379 o | | | changeset: 9:7010c0af0a35
380 |\ \ \ \ parent: 7:b632bb1b1224
380 |\ \ \ \ parent: 7:b632bb1b1224
381 | | | | | parent: 8:7a0b11f71937
381 | | | | | parent: 8:7a0b11f71937
382 | | | | | user: test
382 | | | | | user: test
383 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
383 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
384 | | | | | summary: (9) expand
384 | | | | | summary: (9) expand
385 | | | | |
385 | | | | |
386 | o-----+ changeset: 8:7a0b11f71937
386 | o-----+ changeset: 8:7a0b11f71937
387 | | | | | parent: 0:e6eb3150255d
387 | | | | | parent: 0:e6eb3150255d
388 |/ / / / parent: 7:b632bb1b1224
388 |/ / / / parent: 7:b632bb1b1224
389 | | | | user: test
389 | | | | user: test
390 | | | | date: Thu Jan 01 00:00:08 1970 +0000
390 | | | | date: Thu Jan 01 00:00:08 1970 +0000
391 | | | | summary: (8) merge two known; one immediate left, one far right
391 | | | | summary: (8) merge two known; one immediate left, one far right
392 | | | |
392 | | | |
393 o | | | changeset: 7:b632bb1b1224
393 o | | | changeset: 7:b632bb1b1224
394 |\ \ \ \ parent: 2:3d9a33b8d1e1
394 |\ \ \ \ parent: 2:3d9a33b8d1e1
395 | | | | | parent: 5:4409d547b708
395 | | | | | parent: 5:4409d547b708
396 | | | | | user: test
396 | | | | | user: test
397 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
397 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
398 | | | | | summary: (7) expand
398 | | | | | summary: (7) expand
399 | | | | |
399 | | | | |
400 +---o | | changeset: 6:b105a072e251
400 +---o | | changeset: 6:b105a072e251
401 | |/ / / parent: 2:3d9a33b8d1e1
401 | |/ / / parent: 2:3d9a33b8d1e1
402 | | | | parent: 5:4409d547b708
402 | | | | parent: 5:4409d547b708
403 | | | | user: test
403 | | | | user: test
404 | | | | date: Thu Jan 01 00:00:06 1970 +0000
404 | | | | date: Thu Jan 01 00:00:06 1970 +0000
405 | | | | summary: (6) merge two known; one immediate left, one far left
405 | | | | summary: (6) merge two known; one immediate left, one far left
406 | | | |
406 | | | |
407 | o | | changeset: 5:4409d547b708
407 | o | | changeset: 5:4409d547b708
408 | |\ \ \ parent: 3:27eef8ed80b4
408 | |\ \ \ parent: 3:27eef8ed80b4
409 | | | | | parent: 4:26a8bac39d9f
409 | | | | | parent: 4:26a8bac39d9f
410 | | | | | user: test
410 | | | | | user: test
411 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
411 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
412 | | | | | summary: (5) expand
412 | | | | | summary: (5) expand
413 | | | | |
413 | | | | |
414 | | o | | changeset: 4:26a8bac39d9f
414 | | o | | changeset: 4:26a8bac39d9f
415 | |/|/ / parent: 1:6db2ef61d156
415 | |/|/ / parent: 1:6db2ef61d156
416 | | | | parent: 3:27eef8ed80b4
416 | | | | parent: 3:27eef8ed80b4
417 | | | | user: test
417 | | | | user: test
418 | | | | date: Thu Jan 01 00:00:04 1970 +0000
418 | | | | date: Thu Jan 01 00:00:04 1970 +0000
419 | | | | summary: (4) merge two known; one immediate left, one immediate right
419 | | | | summary: (4) merge two known; one immediate left, one immediate right
420 | | | |
420 | | | |
421 | o | | changeset: 3:27eef8ed80b4
421 | o | | changeset: 3:27eef8ed80b4
422 |/ / / user: test
422 |/ / / user: test
423 | | | date: Thu Jan 01 00:00:03 1970 +0000
423 | | | date: Thu Jan 01 00:00:03 1970 +0000
424 | | | summary: (3) collapse
424 | | | summary: (3) collapse
425 | | |
425 | | |
426 o | | changeset: 2:3d9a33b8d1e1
426 o | | changeset: 2:3d9a33b8d1e1
427 |/ / user: test
427 |/ / user: test
428 | | date: Thu Jan 01 00:00:02 1970 +0000
428 | | date: Thu Jan 01 00:00:02 1970 +0000
429 | | summary: (2) collapse
429 | | summary: (2) collapse
430 | |
430 | |
431 o | changeset: 1:6db2ef61d156
431 o | changeset: 1:6db2ef61d156
432 |/ user: test
432 |/ user: test
433 | date: Thu Jan 01 00:00:01 1970 +0000
433 | date: Thu Jan 01 00:00:01 1970 +0000
434 | summary: (1) collapse
434 | summary: (1) collapse
435 |
435 |
436 o changeset: 0:e6eb3150255d
436 o changeset: 0:e6eb3150255d
437 user: test
437 user: test
438 date: Thu Jan 01 00:00:00 1970 +0000
438 date: Thu Jan 01 00:00:00 1970 +0000
439 summary: (0) root
439 summary: (0) root
440
440
441
441
442 File glog:
442 File glog:
443 $ hg log -G a
443 $ hg log -G a
444 @ changeset: 34:fea3ac5810e0
444 @ changeset: 34:fea3ac5810e0
445 | tag: tip
445 | tag: tip
446 | parent: 32:d06dffa21a31
446 | parent: 32:d06dffa21a31
447 | user: test
447 | user: test
448 | date: Thu Jan 01 00:00:34 1970 +0000
448 | date: Thu Jan 01 00:00:34 1970 +0000
449 | summary: (34) head
449 | summary: (34) head
450 |
450 |
451 | o changeset: 33:68608f5145f9
451 | o changeset: 33:68608f5145f9
452 | | parent: 18:1aa84d96232a
452 | | parent: 18:1aa84d96232a
453 | | user: test
453 | | user: test
454 | | date: Thu Jan 01 00:00:33 1970 +0000
454 | | date: Thu Jan 01 00:00:33 1970 +0000
455 | | summary: (33) head
455 | | summary: (33) head
456 | |
456 | |
457 o | changeset: 32:d06dffa21a31
457 o | changeset: 32:d06dffa21a31
458 |\ \ parent: 27:886ed638191b
458 |\ \ parent: 27:886ed638191b
459 | | | parent: 31:621d83e11f67
459 | | | parent: 31:621d83e11f67
460 | | | user: test
460 | | | user: test
461 | | | date: Thu Jan 01 00:00:32 1970 +0000
461 | | | date: Thu Jan 01 00:00:32 1970 +0000
462 | | | summary: (32) expand
462 | | | summary: (32) expand
463 | | |
463 | | |
464 | o | changeset: 31:621d83e11f67
464 | o | changeset: 31:621d83e11f67
465 | |\ \ parent: 21:d42a756af44d
465 | |\ \ parent: 21:d42a756af44d
466 | | | | parent: 30:6e11cd4b648f
466 | | | | parent: 30:6e11cd4b648f
467 | | | | user: test
467 | | | | user: test
468 | | | | date: Thu Jan 01 00:00:31 1970 +0000
468 | | | | date: Thu Jan 01 00:00:31 1970 +0000
469 | | | | summary: (31) expand
469 | | | | summary: (31) expand
470 | | | |
470 | | | |
471 | | o | changeset: 30:6e11cd4b648f
471 | | o | changeset: 30:6e11cd4b648f
472 | | |\ \ parent: 28:44ecd0b9ae99
472 | | |\ \ parent: 28:44ecd0b9ae99
473 | | | | | parent: 29:cd9bb2be7593
473 | | | | | parent: 29:cd9bb2be7593
474 | | | | | user: test
474 | | | | | user: test
475 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
475 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
476 | | | | | summary: (30) expand
476 | | | | | summary: (30) expand
477 | | | | |
477 | | | | |
478 | | | o | changeset: 29:cd9bb2be7593
478 | | | o | changeset: 29:cd9bb2be7593
479 | | | | | parent: 0:e6eb3150255d
479 | | | | | parent: 0:e6eb3150255d
480 | | | | | user: test
480 | | | | | user: test
481 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
481 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
482 | | | | | summary: (29) regular commit
482 | | | | | summary: (29) regular commit
483 | | | | |
483 | | | | |
484 | | o | | changeset: 28:44ecd0b9ae99
484 | | o | | changeset: 28:44ecd0b9ae99
485 | | |\ \ \ parent: 1:6db2ef61d156
485 | | |\ \ \ parent: 1:6db2ef61d156
486 | | | | | | parent: 26:7f25b6c2f0b9
486 | | | | | | parent: 26:7f25b6c2f0b9
487 | | | | | | user: test
487 | | | | | | user: test
488 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
488 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
489 | | | | | | summary: (28) merge zero known
489 | | | | | | summary: (28) merge zero known
490 | | | | | |
490 | | | | | |
491 o | | | | | changeset: 27:886ed638191b
491 o | | | | | changeset: 27:886ed638191b
492 |/ / / / / parent: 21:d42a756af44d
492 |/ / / / / parent: 21:d42a756af44d
493 | | | | | user: test
493 | | | | | user: test
494 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
494 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
495 | | | | | summary: (27) collapse
495 | | | | | summary: (27) collapse
496 | | | | |
496 | | | | |
497 | | o---+ changeset: 26:7f25b6c2f0b9
497 | | o---+ changeset: 26:7f25b6c2f0b9
498 | | | | | parent: 18:1aa84d96232a
498 | | | | | parent: 18:1aa84d96232a
499 | | | | | parent: 25:91da8ed57247
499 | | | | | parent: 25:91da8ed57247
500 | | | | | user: test
500 | | | | | user: test
501 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
501 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
502 | | | | | summary: (26) merge one known; far right
502 | | | | | summary: (26) merge one known; far right
503 | | | | |
503 | | | | |
504 +---o | | changeset: 25:91da8ed57247
504 +---o | | changeset: 25:91da8ed57247
505 | | | | | parent: 21:d42a756af44d
505 | | | | | parent: 21:d42a756af44d
506 | | | | | parent: 24:a9c19a3d96b7
506 | | | | | parent: 24:a9c19a3d96b7
507 | | | | | user: test
507 | | | | | user: test
508 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
508 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
509 | | | | | summary: (25) merge one known; far left
509 | | | | | summary: (25) merge one known; far left
510 | | | | |
510 | | | | |
511 | | o | | changeset: 24:a9c19a3d96b7
511 | | o | | changeset: 24:a9c19a3d96b7
512 | | |\| | parent: 0:e6eb3150255d
512 | | |\| | parent: 0:e6eb3150255d
513 | | | | | parent: 23:a01cddf0766d
513 | | | | | parent: 23:a01cddf0766d
514 | | | | | user: test
514 | | | | | user: test
515 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
515 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
516 | | | | | summary: (24) merge one known; immediate right
516 | | | | | summary: (24) merge one known; immediate right
517 | | | | |
517 | | | | |
518 | | o | | changeset: 23:a01cddf0766d
518 | | o | | changeset: 23:a01cddf0766d
519 | |/| | | parent: 1:6db2ef61d156
519 | |/| | | parent: 1:6db2ef61d156
520 | | | | | parent: 22:e0d9cccacb5d
520 | | | | | parent: 22:e0d9cccacb5d
521 | | | | | user: test
521 | | | | | user: test
522 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
522 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
523 | | | | | summary: (23) merge one known; immediate left
523 | | | | | summary: (23) merge one known; immediate left
524 | | | | |
524 | | | | |
525 +---o---+ changeset: 22:e0d9cccacb5d
525 +---o---+ changeset: 22:e0d9cccacb5d
526 | | | | parent: 18:1aa84d96232a
526 | | | | parent: 18:1aa84d96232a
527 | | / / parent: 21:d42a756af44d
527 | | / / parent: 21:d42a756af44d
528 | | | | user: test
528 | | | | user: test
529 | | | | date: Thu Jan 01 00:00:22 1970 +0000
529 | | | | date: Thu Jan 01 00:00:22 1970 +0000
530 | | | | summary: (22) merge two known; one far left, one far right
530 | | | | summary: (22) merge two known; one far left, one far right
531 | | | |
531 | | | |
532 o | | | changeset: 21:d42a756af44d
532 o | | | changeset: 21:d42a756af44d
533 |\ \ \ \ parent: 19:31ddc2c1573b
533 |\ \ \ \ parent: 19:31ddc2c1573b
534 | | | | | parent: 20:d30ed6450e32
534 | | | | | parent: 20:d30ed6450e32
535 | | | | | user: test
535 | | | | | user: test
536 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
536 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
537 | | | | | summary: (21) expand
537 | | | | | summary: (21) expand
538 | | | | |
538 | | | | |
539 | o---+-+ changeset: 20:d30ed6450e32
539 | o---+-+ changeset: 20:d30ed6450e32
540 | | | | parent: 0:e6eb3150255d
540 | | | | parent: 0:e6eb3150255d
541 | / / / parent: 18:1aa84d96232a
541 | / / / parent: 18:1aa84d96232a
542 | | | | user: test
542 | | | | user: test
543 | | | | date: Thu Jan 01 00:00:20 1970 +0000
543 | | | | date: Thu Jan 01 00:00:20 1970 +0000
544 | | | | summary: (20) merge two known; two far right
544 | | | | summary: (20) merge two known; two far right
545 | | | |
545 | | | |
546 o | | | changeset: 19:31ddc2c1573b
546 o | | | changeset: 19:31ddc2c1573b
547 |\ \ \ \ parent: 15:1dda3f72782d
547 |\ \ \ \ parent: 15:1dda3f72782d
548 | | | | | parent: 17:44765d7c06e0
548 | | | | | parent: 17:44765d7c06e0
549 | | | | | user: test
549 | | | | | user: test
550 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
550 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
551 | | | | | summary: (19) expand
551 | | | | | summary: (19) expand
552 | | | | |
552 | | | | |
553 +---+---o changeset: 18:1aa84d96232a
553 +---+---o changeset: 18:1aa84d96232a
554 | | | | parent: 1:6db2ef61d156
554 | | | | parent: 1:6db2ef61d156
555 | | | | parent: 15:1dda3f72782d
555 | | | | parent: 15:1dda3f72782d
556 | | | | user: test
556 | | | | user: test
557 | | | | date: Thu Jan 01 00:00:18 1970 +0000
557 | | | | date: Thu Jan 01 00:00:18 1970 +0000
558 | | | | summary: (18) merge two known; two far left
558 | | | | summary: (18) merge two known; two far left
559 | | | |
559 | | | |
560 | o | | changeset: 17:44765d7c06e0
560 | o | | changeset: 17:44765d7c06e0
561 | |\ \ \ parent: 12:86b91144a6e9
561 | |\ \ \ parent: 12:86b91144a6e9
562 | | | | | parent: 16:3677d192927d
562 | | | | | parent: 16:3677d192927d
563 | | | | | user: test
563 | | | | | user: test
564 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
564 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
565 | | | | | summary: (17) expand
565 | | | | | summary: (17) expand
566 | | | | |
566 | | | | |
567 | | o---+ changeset: 16:3677d192927d
567 | | o---+ changeset: 16:3677d192927d
568 | | | | | parent: 0:e6eb3150255d
568 | | | | | parent: 0:e6eb3150255d
569 | | |/ / parent: 1:6db2ef61d156
569 | | |/ / parent: 1:6db2ef61d156
570 | | | | user: test
570 | | | | user: test
571 | | | | date: Thu Jan 01 00:00:16 1970 +0000
571 | | | | date: Thu Jan 01 00:00:16 1970 +0000
572 | | | | summary: (16) merge two known; one immediate right, one near right
572 | | | | summary: (16) merge two known; one immediate right, one near right
573 | | | |
573 | | | |
574 o | | | changeset: 15:1dda3f72782d
574 o | | | changeset: 15:1dda3f72782d
575 |\ \ \ \ parent: 13:22d8966a97e3
575 |\ \ \ \ parent: 13:22d8966a97e3
576 | | | | | parent: 14:8eac370358ef
576 | | | | | parent: 14:8eac370358ef
577 | | | | | user: test
577 | | | | | user: test
578 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
578 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
579 | | | | | summary: (15) expand
579 | | | | | summary: (15) expand
580 | | | | |
580 | | | | |
581 | o-----+ changeset: 14:8eac370358ef
581 | o-----+ changeset: 14:8eac370358ef
582 | | | | | parent: 0:e6eb3150255d
582 | | | | | parent: 0:e6eb3150255d
583 | |/ / / parent: 12:86b91144a6e9
583 | |/ / / parent: 12:86b91144a6e9
584 | | | | user: test
584 | | | | user: test
585 | | | | date: Thu Jan 01 00:00:14 1970 +0000
585 | | | | date: Thu Jan 01 00:00:14 1970 +0000
586 | | | | summary: (14) merge two known; one immediate right, one far right
586 | | | | summary: (14) merge two known; one immediate right, one far right
587 | | | |
587 | | | |
588 o | | | changeset: 13:22d8966a97e3
588 o | | | changeset: 13:22d8966a97e3
589 |\ \ \ \ parent: 9:7010c0af0a35
589 |\ \ \ \ parent: 9:7010c0af0a35
590 | | | | | parent: 11:832d76e6bdf2
590 | | | | | parent: 11:832d76e6bdf2
591 | | | | | user: test
591 | | | | | user: test
592 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
592 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
593 | | | | | summary: (13) expand
593 | | | | | summary: (13) expand
594 | | | | |
594 | | | | |
595 +---o | | changeset: 12:86b91144a6e9
595 +---o | | changeset: 12:86b91144a6e9
596 | | |/ / parent: 1:6db2ef61d156
596 | | |/ / parent: 1:6db2ef61d156
597 | | | | parent: 9:7010c0af0a35
597 | | | | parent: 9:7010c0af0a35
598 | | | | user: test
598 | | | | user: test
599 | | | | date: Thu Jan 01 00:00:12 1970 +0000
599 | | | | date: Thu Jan 01 00:00:12 1970 +0000
600 | | | | summary: (12) merge two known; one immediate right, one far left
600 | | | | summary: (12) merge two known; one immediate right, one far left
601 | | | |
601 | | | |
602 | o | | changeset: 11:832d76e6bdf2
602 | o | | changeset: 11:832d76e6bdf2
603 | |\ \ \ parent: 6:b105a072e251
603 | |\ \ \ parent: 6:b105a072e251
604 | | | | | parent: 10:74c64d036d72
604 | | | | | parent: 10:74c64d036d72
605 | | | | | user: test
605 | | | | | user: test
606 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
606 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
607 | | | | | summary: (11) expand
607 | | | | | summary: (11) expand
608 | | | | |
608 | | | | |
609 | | o---+ changeset: 10:74c64d036d72
609 | | o---+ changeset: 10:74c64d036d72
610 | | | | | parent: 0:e6eb3150255d
610 | | | | | parent: 0:e6eb3150255d
611 | |/ / / parent: 6:b105a072e251
611 | |/ / / parent: 6:b105a072e251
612 | | | | user: test
612 | | | | user: test
613 | | | | date: Thu Jan 01 00:00:10 1970 +0000
613 | | | | date: Thu Jan 01 00:00:10 1970 +0000
614 | | | | summary: (10) merge two known; one immediate left, one near right
614 | | | | summary: (10) merge two known; one immediate left, one near right
615 | | | |
615 | | | |
616 o | | | changeset: 9:7010c0af0a35
616 o | | | changeset: 9:7010c0af0a35
617 |\ \ \ \ parent: 7:b632bb1b1224
617 |\ \ \ \ parent: 7:b632bb1b1224
618 | | | | | parent: 8:7a0b11f71937
618 | | | | | parent: 8:7a0b11f71937
619 | | | | | user: test
619 | | | | | user: test
620 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
620 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
621 | | | | | summary: (9) expand
621 | | | | | summary: (9) expand
622 | | | | |
622 | | | | |
623 | o-----+ changeset: 8:7a0b11f71937
623 | o-----+ changeset: 8:7a0b11f71937
624 | | | | | parent: 0:e6eb3150255d
624 | | | | | parent: 0:e6eb3150255d
625 |/ / / / parent: 7:b632bb1b1224
625 |/ / / / parent: 7:b632bb1b1224
626 | | | | user: test
626 | | | | user: test
627 | | | | date: Thu Jan 01 00:00:08 1970 +0000
627 | | | | date: Thu Jan 01 00:00:08 1970 +0000
628 | | | | summary: (8) merge two known; one immediate left, one far right
628 | | | | summary: (8) merge two known; one immediate left, one far right
629 | | | |
629 | | | |
630 o | | | changeset: 7:b632bb1b1224
630 o | | | changeset: 7:b632bb1b1224
631 |\ \ \ \ parent: 2:3d9a33b8d1e1
631 |\ \ \ \ parent: 2:3d9a33b8d1e1
632 | | | | | parent: 5:4409d547b708
632 | | | | | parent: 5:4409d547b708
633 | | | | | user: test
633 | | | | | user: test
634 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
634 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
635 | | | | | summary: (7) expand
635 | | | | | summary: (7) expand
636 | | | | |
636 | | | | |
637 +---o | | changeset: 6:b105a072e251
637 +---o | | changeset: 6:b105a072e251
638 | |/ / / parent: 2:3d9a33b8d1e1
638 | |/ / / parent: 2:3d9a33b8d1e1
639 | | | | parent: 5:4409d547b708
639 | | | | parent: 5:4409d547b708
640 | | | | user: test
640 | | | | user: test
641 | | | | date: Thu Jan 01 00:00:06 1970 +0000
641 | | | | date: Thu Jan 01 00:00:06 1970 +0000
642 | | | | summary: (6) merge two known; one immediate left, one far left
642 | | | | summary: (6) merge two known; one immediate left, one far left
643 | | | |
643 | | | |
644 | o | | changeset: 5:4409d547b708
644 | o | | changeset: 5:4409d547b708
645 | |\ \ \ parent: 3:27eef8ed80b4
645 | |\ \ \ parent: 3:27eef8ed80b4
646 | | | | | parent: 4:26a8bac39d9f
646 | | | | | parent: 4:26a8bac39d9f
647 | | | | | user: test
647 | | | | | user: test
648 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
648 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
649 | | | | | summary: (5) expand
649 | | | | | summary: (5) expand
650 | | | | |
650 | | | | |
651 | | o | | changeset: 4:26a8bac39d9f
651 | | o | | changeset: 4:26a8bac39d9f
652 | |/|/ / parent: 1:6db2ef61d156
652 | |/|/ / parent: 1:6db2ef61d156
653 | | | | parent: 3:27eef8ed80b4
653 | | | | parent: 3:27eef8ed80b4
654 | | | | user: test
654 | | | | user: test
655 | | | | date: Thu Jan 01 00:00:04 1970 +0000
655 | | | | date: Thu Jan 01 00:00:04 1970 +0000
656 | | | | summary: (4) merge two known; one immediate left, one immediate right
656 | | | | summary: (4) merge two known; one immediate left, one immediate right
657 | | | |
657 | | | |
658 | o | | changeset: 3:27eef8ed80b4
658 | o | | changeset: 3:27eef8ed80b4
659 |/ / / user: test
659 |/ / / user: test
660 | | | date: Thu Jan 01 00:00:03 1970 +0000
660 | | | date: Thu Jan 01 00:00:03 1970 +0000
661 | | | summary: (3) collapse
661 | | | summary: (3) collapse
662 | | |
662 | | |
663 o | | changeset: 2:3d9a33b8d1e1
663 o | | changeset: 2:3d9a33b8d1e1
664 |/ / user: test
664 |/ / user: test
665 | | date: Thu Jan 01 00:00:02 1970 +0000
665 | | date: Thu Jan 01 00:00:02 1970 +0000
666 | | summary: (2) collapse
666 | | summary: (2) collapse
667 | |
667 | |
668 o | changeset: 1:6db2ef61d156
668 o | changeset: 1:6db2ef61d156
669 |/ user: test
669 |/ user: test
670 | date: Thu Jan 01 00:00:01 1970 +0000
670 | date: Thu Jan 01 00:00:01 1970 +0000
671 | summary: (1) collapse
671 | summary: (1) collapse
672 |
672 |
673 o changeset: 0:e6eb3150255d
673 o changeset: 0:e6eb3150255d
674 user: test
674 user: test
675 date: Thu Jan 01 00:00:00 1970 +0000
675 date: Thu Jan 01 00:00:00 1970 +0000
676 summary: (0) root
676 summary: (0) root
677
677
678
678
679 File glog per revset:
679 File glog per revset:
680
680
681 $ hg log -G -r 'file("a")'
681 $ hg log -G -r 'file("a")'
682 @ changeset: 34:fea3ac5810e0
682 @ changeset: 34:fea3ac5810e0
683 | tag: tip
683 | tag: tip
684 | parent: 32:d06dffa21a31
684 | parent: 32:d06dffa21a31
685 | user: test
685 | user: test
686 | date: Thu Jan 01 00:00:34 1970 +0000
686 | date: Thu Jan 01 00:00:34 1970 +0000
687 | summary: (34) head
687 | summary: (34) head
688 |
688 |
689 | o changeset: 33:68608f5145f9
689 | o changeset: 33:68608f5145f9
690 | | parent: 18:1aa84d96232a
690 | | parent: 18:1aa84d96232a
691 | | user: test
691 | | user: test
692 | | date: Thu Jan 01 00:00:33 1970 +0000
692 | | date: Thu Jan 01 00:00:33 1970 +0000
693 | | summary: (33) head
693 | | summary: (33) head
694 | |
694 | |
695 o | changeset: 32:d06dffa21a31
695 o | changeset: 32:d06dffa21a31
696 |\ \ parent: 27:886ed638191b
696 |\ \ parent: 27:886ed638191b
697 | | | parent: 31:621d83e11f67
697 | | | parent: 31:621d83e11f67
698 | | | user: test
698 | | | user: test
699 | | | date: Thu Jan 01 00:00:32 1970 +0000
699 | | | date: Thu Jan 01 00:00:32 1970 +0000
700 | | | summary: (32) expand
700 | | | summary: (32) expand
701 | | |
701 | | |
702 | o | changeset: 31:621d83e11f67
702 | o | changeset: 31:621d83e11f67
703 | |\ \ parent: 21:d42a756af44d
703 | |\ \ parent: 21:d42a756af44d
704 | | | | parent: 30:6e11cd4b648f
704 | | | | parent: 30:6e11cd4b648f
705 | | | | user: test
705 | | | | user: test
706 | | | | date: Thu Jan 01 00:00:31 1970 +0000
706 | | | | date: Thu Jan 01 00:00:31 1970 +0000
707 | | | | summary: (31) expand
707 | | | | summary: (31) expand
708 | | | |
708 | | | |
709 | | o | changeset: 30:6e11cd4b648f
709 | | o | changeset: 30:6e11cd4b648f
710 | | |\ \ parent: 28:44ecd0b9ae99
710 | | |\ \ parent: 28:44ecd0b9ae99
711 | | | | | parent: 29:cd9bb2be7593
711 | | | | | parent: 29:cd9bb2be7593
712 | | | | | user: test
712 | | | | | user: test
713 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
713 | | | | | date: Thu Jan 01 00:00:30 1970 +0000
714 | | | | | summary: (30) expand
714 | | | | | summary: (30) expand
715 | | | | |
715 | | | | |
716 | | | o | changeset: 29:cd9bb2be7593
716 | | | o | changeset: 29:cd9bb2be7593
717 | | | | | parent: 0:e6eb3150255d
717 | | | | | parent: 0:e6eb3150255d
718 | | | | | user: test
718 | | | | | user: test
719 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
719 | | | | | date: Thu Jan 01 00:00:29 1970 +0000
720 | | | | | summary: (29) regular commit
720 | | | | | summary: (29) regular commit
721 | | | | |
721 | | | | |
722 | | o | | changeset: 28:44ecd0b9ae99
722 | | o | | changeset: 28:44ecd0b9ae99
723 | | |\ \ \ parent: 1:6db2ef61d156
723 | | |\ \ \ parent: 1:6db2ef61d156
724 | | | | | | parent: 26:7f25b6c2f0b9
724 | | | | | | parent: 26:7f25b6c2f0b9
725 | | | | | | user: test
725 | | | | | | user: test
726 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
726 | | | | | | date: Thu Jan 01 00:00:28 1970 +0000
727 | | | | | | summary: (28) merge zero known
727 | | | | | | summary: (28) merge zero known
728 | | | | | |
728 | | | | | |
729 o | | | | | changeset: 27:886ed638191b
729 o | | | | | changeset: 27:886ed638191b
730 |/ / / / / parent: 21:d42a756af44d
730 |/ / / / / parent: 21:d42a756af44d
731 | | | | | user: test
731 | | | | | user: test
732 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
732 | | | | | date: Thu Jan 01 00:00:27 1970 +0000
733 | | | | | summary: (27) collapse
733 | | | | | summary: (27) collapse
734 | | | | |
734 | | | | |
735 | | o---+ changeset: 26:7f25b6c2f0b9
735 | | o---+ changeset: 26:7f25b6c2f0b9
736 | | | | | parent: 18:1aa84d96232a
736 | | | | | parent: 18:1aa84d96232a
737 | | | | | parent: 25:91da8ed57247
737 | | | | | parent: 25:91da8ed57247
738 | | | | | user: test
738 | | | | | user: test
739 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
739 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
740 | | | | | summary: (26) merge one known; far right
740 | | | | | summary: (26) merge one known; far right
741 | | | | |
741 | | | | |
742 +---o | | changeset: 25:91da8ed57247
742 +---o | | changeset: 25:91da8ed57247
743 | | | | | parent: 21:d42a756af44d
743 | | | | | parent: 21:d42a756af44d
744 | | | | | parent: 24:a9c19a3d96b7
744 | | | | | parent: 24:a9c19a3d96b7
745 | | | | | user: test
745 | | | | | user: test
746 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
746 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
747 | | | | | summary: (25) merge one known; far left
747 | | | | | summary: (25) merge one known; far left
748 | | | | |
748 | | | | |
749 | | o | | changeset: 24:a9c19a3d96b7
749 | | o | | changeset: 24:a9c19a3d96b7
750 | | |\| | parent: 0:e6eb3150255d
750 | | |\| | parent: 0:e6eb3150255d
751 | | | | | parent: 23:a01cddf0766d
751 | | | | | parent: 23:a01cddf0766d
752 | | | | | user: test
752 | | | | | user: test
753 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
753 | | | | | date: Thu Jan 01 00:00:24 1970 +0000
754 | | | | | summary: (24) merge one known; immediate right
754 | | | | | summary: (24) merge one known; immediate right
755 | | | | |
755 | | | | |
756 | | o | | changeset: 23:a01cddf0766d
756 | | o | | changeset: 23:a01cddf0766d
757 | |/| | | parent: 1:6db2ef61d156
757 | |/| | | parent: 1:6db2ef61d156
758 | | | | | parent: 22:e0d9cccacb5d
758 | | | | | parent: 22:e0d9cccacb5d
759 | | | | | user: test
759 | | | | | user: test
760 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
760 | | | | | date: Thu Jan 01 00:00:23 1970 +0000
761 | | | | | summary: (23) merge one known; immediate left
761 | | | | | summary: (23) merge one known; immediate left
762 | | | | |
762 | | | | |
763 +---o---+ changeset: 22:e0d9cccacb5d
763 +---o---+ changeset: 22:e0d9cccacb5d
764 | | | | parent: 18:1aa84d96232a
764 | | | | parent: 18:1aa84d96232a
765 | | / / parent: 21:d42a756af44d
765 | | / / parent: 21:d42a756af44d
766 | | | | user: test
766 | | | | user: test
767 | | | | date: Thu Jan 01 00:00:22 1970 +0000
767 | | | | date: Thu Jan 01 00:00:22 1970 +0000
768 | | | | summary: (22) merge two known; one far left, one far right
768 | | | | summary: (22) merge two known; one far left, one far right
769 | | | |
769 | | | |
770 o | | | changeset: 21:d42a756af44d
770 o | | | changeset: 21:d42a756af44d
771 |\ \ \ \ parent: 19:31ddc2c1573b
771 |\ \ \ \ parent: 19:31ddc2c1573b
772 | | | | | parent: 20:d30ed6450e32
772 | | | | | parent: 20:d30ed6450e32
773 | | | | | user: test
773 | | | | | user: test
774 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
774 | | | | | date: Thu Jan 01 00:00:21 1970 +0000
775 | | | | | summary: (21) expand
775 | | | | | summary: (21) expand
776 | | | | |
776 | | | | |
777 | o---+-+ changeset: 20:d30ed6450e32
777 | o---+-+ changeset: 20:d30ed6450e32
778 | | | | parent: 0:e6eb3150255d
778 | | | | parent: 0:e6eb3150255d
779 | / / / parent: 18:1aa84d96232a
779 | / / / parent: 18:1aa84d96232a
780 | | | | user: test
780 | | | | user: test
781 | | | | date: Thu Jan 01 00:00:20 1970 +0000
781 | | | | date: Thu Jan 01 00:00:20 1970 +0000
782 | | | | summary: (20) merge two known; two far right
782 | | | | summary: (20) merge two known; two far right
783 | | | |
783 | | | |
784 o | | | changeset: 19:31ddc2c1573b
784 o | | | changeset: 19:31ddc2c1573b
785 |\ \ \ \ parent: 15:1dda3f72782d
785 |\ \ \ \ parent: 15:1dda3f72782d
786 | | | | | parent: 17:44765d7c06e0
786 | | | | | parent: 17:44765d7c06e0
787 | | | | | user: test
787 | | | | | user: test
788 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
788 | | | | | date: Thu Jan 01 00:00:19 1970 +0000
789 | | | | | summary: (19) expand
789 | | | | | summary: (19) expand
790 | | | | |
790 | | | | |
791 +---+---o changeset: 18:1aa84d96232a
791 +---+---o changeset: 18:1aa84d96232a
792 | | | | parent: 1:6db2ef61d156
792 | | | | parent: 1:6db2ef61d156
793 | | | | parent: 15:1dda3f72782d
793 | | | | parent: 15:1dda3f72782d
794 | | | | user: test
794 | | | | user: test
795 | | | | date: Thu Jan 01 00:00:18 1970 +0000
795 | | | | date: Thu Jan 01 00:00:18 1970 +0000
796 | | | | summary: (18) merge two known; two far left
796 | | | | summary: (18) merge two known; two far left
797 | | | |
797 | | | |
798 | o | | changeset: 17:44765d7c06e0
798 | o | | changeset: 17:44765d7c06e0
799 | |\ \ \ parent: 12:86b91144a6e9
799 | |\ \ \ parent: 12:86b91144a6e9
800 | | | | | parent: 16:3677d192927d
800 | | | | | parent: 16:3677d192927d
801 | | | | | user: test
801 | | | | | user: test
802 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
802 | | | | | date: Thu Jan 01 00:00:17 1970 +0000
803 | | | | | summary: (17) expand
803 | | | | | summary: (17) expand
804 | | | | |
804 | | | | |
805 | | o---+ changeset: 16:3677d192927d
805 | | o---+ changeset: 16:3677d192927d
806 | | | | | parent: 0:e6eb3150255d
806 | | | | | parent: 0:e6eb3150255d
807 | | |/ / parent: 1:6db2ef61d156
807 | | |/ / parent: 1:6db2ef61d156
808 | | | | user: test
808 | | | | user: test
809 | | | | date: Thu Jan 01 00:00:16 1970 +0000
809 | | | | date: Thu Jan 01 00:00:16 1970 +0000
810 | | | | summary: (16) merge two known; one immediate right, one near right
810 | | | | summary: (16) merge two known; one immediate right, one near right
811 | | | |
811 | | | |
812 o | | | changeset: 15:1dda3f72782d
812 o | | | changeset: 15:1dda3f72782d
813 |\ \ \ \ parent: 13:22d8966a97e3
813 |\ \ \ \ parent: 13:22d8966a97e3
814 | | | | | parent: 14:8eac370358ef
814 | | | | | parent: 14:8eac370358ef
815 | | | | | user: test
815 | | | | | user: test
816 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
816 | | | | | date: Thu Jan 01 00:00:15 1970 +0000
817 | | | | | summary: (15) expand
817 | | | | | summary: (15) expand
818 | | | | |
818 | | | | |
819 | o-----+ changeset: 14:8eac370358ef
819 | o-----+ changeset: 14:8eac370358ef
820 | | | | | parent: 0:e6eb3150255d
820 | | | | | parent: 0:e6eb3150255d
821 | |/ / / parent: 12:86b91144a6e9
821 | |/ / / parent: 12:86b91144a6e9
822 | | | | user: test
822 | | | | user: test
823 | | | | date: Thu Jan 01 00:00:14 1970 +0000
823 | | | | date: Thu Jan 01 00:00:14 1970 +0000
824 | | | | summary: (14) merge two known; one immediate right, one far right
824 | | | | summary: (14) merge two known; one immediate right, one far right
825 | | | |
825 | | | |
826 o | | | changeset: 13:22d8966a97e3
826 o | | | changeset: 13:22d8966a97e3
827 |\ \ \ \ parent: 9:7010c0af0a35
827 |\ \ \ \ parent: 9:7010c0af0a35
828 | | | | | parent: 11:832d76e6bdf2
828 | | | | | parent: 11:832d76e6bdf2
829 | | | | | user: test
829 | | | | | user: test
830 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
830 | | | | | date: Thu Jan 01 00:00:13 1970 +0000
831 | | | | | summary: (13) expand
831 | | | | | summary: (13) expand
832 | | | | |
832 | | | | |
833 +---o | | changeset: 12:86b91144a6e9
833 +---o | | changeset: 12:86b91144a6e9
834 | | |/ / parent: 1:6db2ef61d156
834 | | |/ / parent: 1:6db2ef61d156
835 | | | | parent: 9:7010c0af0a35
835 | | | | parent: 9:7010c0af0a35
836 | | | | user: test
836 | | | | user: test
837 | | | | date: Thu Jan 01 00:00:12 1970 +0000
837 | | | | date: Thu Jan 01 00:00:12 1970 +0000
838 | | | | summary: (12) merge two known; one immediate right, one far left
838 | | | | summary: (12) merge two known; one immediate right, one far left
839 | | | |
839 | | | |
840 | o | | changeset: 11:832d76e6bdf2
840 | o | | changeset: 11:832d76e6bdf2
841 | |\ \ \ parent: 6:b105a072e251
841 | |\ \ \ parent: 6:b105a072e251
842 | | | | | parent: 10:74c64d036d72
842 | | | | | parent: 10:74c64d036d72
843 | | | | | user: test
843 | | | | | user: test
844 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
844 | | | | | date: Thu Jan 01 00:00:11 1970 +0000
845 | | | | | summary: (11) expand
845 | | | | | summary: (11) expand
846 | | | | |
846 | | | | |
847 | | o---+ changeset: 10:74c64d036d72
847 | | o---+ changeset: 10:74c64d036d72
848 | | | | | parent: 0:e6eb3150255d
848 | | | | | parent: 0:e6eb3150255d
849 | |/ / / parent: 6:b105a072e251
849 | |/ / / parent: 6:b105a072e251
850 | | | | user: test
850 | | | | user: test
851 | | | | date: Thu Jan 01 00:00:10 1970 +0000
851 | | | | date: Thu Jan 01 00:00:10 1970 +0000
852 | | | | summary: (10) merge two known; one immediate left, one near right
852 | | | | summary: (10) merge two known; one immediate left, one near right
853 | | | |
853 | | | |
854 o | | | changeset: 9:7010c0af0a35
854 o | | | changeset: 9:7010c0af0a35
855 |\ \ \ \ parent: 7:b632bb1b1224
855 |\ \ \ \ parent: 7:b632bb1b1224
856 | | | | | parent: 8:7a0b11f71937
856 | | | | | parent: 8:7a0b11f71937
857 | | | | | user: test
857 | | | | | user: test
858 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
858 | | | | | date: Thu Jan 01 00:00:09 1970 +0000
859 | | | | | summary: (9) expand
859 | | | | | summary: (9) expand
860 | | | | |
860 | | | | |
861 | o-----+ changeset: 8:7a0b11f71937
861 | o-----+ changeset: 8:7a0b11f71937
862 | | | | | parent: 0:e6eb3150255d
862 | | | | | parent: 0:e6eb3150255d
863 |/ / / / parent: 7:b632bb1b1224
863 |/ / / / parent: 7:b632bb1b1224
864 | | | | user: test
864 | | | | user: test
865 | | | | date: Thu Jan 01 00:00:08 1970 +0000
865 | | | | date: Thu Jan 01 00:00:08 1970 +0000
866 | | | | summary: (8) merge two known; one immediate left, one far right
866 | | | | summary: (8) merge two known; one immediate left, one far right
867 | | | |
867 | | | |
868 o | | | changeset: 7:b632bb1b1224
868 o | | | changeset: 7:b632bb1b1224
869 |\ \ \ \ parent: 2:3d9a33b8d1e1
869 |\ \ \ \ parent: 2:3d9a33b8d1e1
870 | | | | | parent: 5:4409d547b708
870 | | | | | parent: 5:4409d547b708
871 | | | | | user: test
871 | | | | | user: test
872 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
872 | | | | | date: Thu Jan 01 00:00:07 1970 +0000
873 | | | | | summary: (7) expand
873 | | | | | summary: (7) expand
874 | | | | |
874 | | | | |
875 +---o | | changeset: 6:b105a072e251
875 +---o | | changeset: 6:b105a072e251
876 | |/ / / parent: 2:3d9a33b8d1e1
876 | |/ / / parent: 2:3d9a33b8d1e1
877 | | | | parent: 5:4409d547b708
877 | | | | parent: 5:4409d547b708
878 | | | | user: test
878 | | | | user: test
879 | | | | date: Thu Jan 01 00:00:06 1970 +0000
879 | | | | date: Thu Jan 01 00:00:06 1970 +0000
880 | | | | summary: (6) merge two known; one immediate left, one far left
880 | | | | summary: (6) merge two known; one immediate left, one far left
881 | | | |
881 | | | |
882 | o | | changeset: 5:4409d547b708
882 | o | | changeset: 5:4409d547b708
883 | |\ \ \ parent: 3:27eef8ed80b4
883 | |\ \ \ parent: 3:27eef8ed80b4
884 | | | | | parent: 4:26a8bac39d9f
884 | | | | | parent: 4:26a8bac39d9f
885 | | | | | user: test
885 | | | | | user: test
886 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
886 | | | | | date: Thu Jan 01 00:00:05 1970 +0000
887 | | | | | summary: (5) expand
887 | | | | | summary: (5) expand
888 | | | | |
888 | | | | |
889 | | o | | changeset: 4:26a8bac39d9f
889 | | o | | changeset: 4:26a8bac39d9f
890 | |/|/ / parent: 1:6db2ef61d156
890 | |/|/ / parent: 1:6db2ef61d156
891 | | | | parent: 3:27eef8ed80b4
891 | | | | parent: 3:27eef8ed80b4
892 | | | | user: test
892 | | | | user: test
893 | | | | date: Thu Jan 01 00:00:04 1970 +0000
893 | | | | date: Thu Jan 01 00:00:04 1970 +0000
894 | | | | summary: (4) merge two known; one immediate left, one immediate right
894 | | | | summary: (4) merge two known; one immediate left, one immediate right
895 | | | |
895 | | | |
896 | o | | changeset: 3:27eef8ed80b4
896 | o | | changeset: 3:27eef8ed80b4
897 |/ / / user: test
897 |/ / / user: test
898 | | | date: Thu Jan 01 00:00:03 1970 +0000
898 | | | date: Thu Jan 01 00:00:03 1970 +0000
899 | | | summary: (3) collapse
899 | | | summary: (3) collapse
900 | | |
900 | | |
901 o | | changeset: 2:3d9a33b8d1e1
901 o | | changeset: 2:3d9a33b8d1e1
902 |/ / user: test
902 |/ / user: test
903 | | date: Thu Jan 01 00:00:02 1970 +0000
903 | | date: Thu Jan 01 00:00:02 1970 +0000
904 | | summary: (2) collapse
904 | | summary: (2) collapse
905 | |
905 | |
906 o | changeset: 1:6db2ef61d156
906 o | changeset: 1:6db2ef61d156
907 |/ user: test
907 |/ user: test
908 | date: Thu Jan 01 00:00:01 1970 +0000
908 | date: Thu Jan 01 00:00:01 1970 +0000
909 | summary: (1) collapse
909 | summary: (1) collapse
910 |
910 |
911 o changeset: 0:e6eb3150255d
911 o changeset: 0:e6eb3150255d
912 user: test
912 user: test
913 date: Thu Jan 01 00:00:00 1970 +0000
913 date: Thu Jan 01 00:00:00 1970 +0000
914 summary: (0) root
914 summary: (0) root
915
915
916
916
917
917
918 File glog per revset (only merges):
918 File glog per revset (only merges):
919
919
920 $ hg log -G -r 'file("a")' -m
920 $ hg log -G -r 'file("a")' -m
921 o changeset: 32:d06dffa21a31
921 o changeset: 32:d06dffa21a31
922 |\ parent: 27:886ed638191b
922 |\ parent: 27:886ed638191b
923 | : parent: 31:621d83e11f67
923 | : parent: 31:621d83e11f67
924 | : user: test
924 | : user: test
925 | : date: Thu Jan 01 00:00:32 1970 +0000
925 | : date: Thu Jan 01 00:00:32 1970 +0000
926 | : summary: (32) expand
926 | : summary: (32) expand
927 | :
927 | :
928 o : changeset: 31:621d83e11f67
928 o : changeset: 31:621d83e11f67
929 |\: parent: 21:d42a756af44d
929 |\: parent: 21:d42a756af44d
930 | : parent: 30:6e11cd4b648f
930 | : parent: 30:6e11cd4b648f
931 | : user: test
931 | : user: test
932 | : date: Thu Jan 01 00:00:31 1970 +0000
932 | : date: Thu Jan 01 00:00:31 1970 +0000
933 | : summary: (31) expand
933 | : summary: (31) expand
934 | :
934 | :
935 o : changeset: 30:6e11cd4b648f
935 o : changeset: 30:6e11cd4b648f
936 |\ \ parent: 28:44ecd0b9ae99
936 |\ \ parent: 28:44ecd0b9ae99
937 | ~ : parent: 29:cd9bb2be7593
937 | ~ : parent: 29:cd9bb2be7593
938 | : user: test
938 | : user: test
939 | : date: Thu Jan 01 00:00:30 1970 +0000
939 | : date: Thu Jan 01 00:00:30 1970 +0000
940 | : summary: (30) expand
940 | : summary: (30) expand
941 | /
941 | /
942 o : changeset: 28:44ecd0b9ae99
942 o : changeset: 28:44ecd0b9ae99
943 |\ \ parent: 1:6db2ef61d156
943 |\ \ parent: 1:6db2ef61d156
944 | ~ : parent: 26:7f25b6c2f0b9
944 | ~ : parent: 26:7f25b6c2f0b9
945 | : user: test
945 | : user: test
946 | : date: Thu Jan 01 00:00:28 1970 +0000
946 | : date: Thu Jan 01 00:00:28 1970 +0000
947 | : summary: (28) merge zero known
947 | : summary: (28) merge zero known
948 | /
948 | /
949 o : changeset: 26:7f25b6c2f0b9
949 o : changeset: 26:7f25b6c2f0b9
950 |\ \ parent: 18:1aa84d96232a
950 |\ \ parent: 18:1aa84d96232a
951 | | : parent: 25:91da8ed57247
951 | | : parent: 25:91da8ed57247
952 | | : user: test
952 | | : user: test
953 | | : date: Thu Jan 01 00:00:26 1970 +0000
953 | | : date: Thu Jan 01 00:00:26 1970 +0000
954 | | : summary: (26) merge one known; far right
954 | | : summary: (26) merge one known; far right
955 | | :
955 | | :
956 | o : changeset: 25:91da8ed57247
956 | o : changeset: 25:91da8ed57247
957 | |\: parent: 21:d42a756af44d
957 | |\: parent: 21:d42a756af44d
958 | | : parent: 24:a9c19a3d96b7
958 | | : parent: 24:a9c19a3d96b7
959 | | : user: test
959 | | : user: test
960 | | : date: Thu Jan 01 00:00:25 1970 +0000
960 | | : date: Thu Jan 01 00:00:25 1970 +0000
961 | | : summary: (25) merge one known; far left
961 | | : summary: (25) merge one known; far left
962 | | :
962 | | :
963 | o : changeset: 24:a9c19a3d96b7
963 | o : changeset: 24:a9c19a3d96b7
964 | |\ \ parent: 0:e6eb3150255d
964 | |\ \ parent: 0:e6eb3150255d
965 | | ~ : parent: 23:a01cddf0766d
965 | | ~ : parent: 23:a01cddf0766d
966 | | : user: test
966 | | : user: test
967 | | : date: Thu Jan 01 00:00:24 1970 +0000
967 | | : date: Thu Jan 01 00:00:24 1970 +0000
968 | | : summary: (24) merge one known; immediate right
968 | | : summary: (24) merge one known; immediate right
969 | | /
969 | | /
970 | o : changeset: 23:a01cddf0766d
970 | o : changeset: 23:a01cddf0766d
971 | |\ \ parent: 1:6db2ef61d156
971 | |\ \ parent: 1:6db2ef61d156
972 | | ~ : parent: 22:e0d9cccacb5d
972 | | ~ : parent: 22:e0d9cccacb5d
973 | | : user: test
973 | | : user: test
974 | | : date: Thu Jan 01 00:00:23 1970 +0000
974 | | : date: Thu Jan 01 00:00:23 1970 +0000
975 | | : summary: (23) merge one known; immediate left
975 | | : summary: (23) merge one known; immediate left
976 | | /
976 | | /
977 | o : changeset: 22:e0d9cccacb5d
977 | o : changeset: 22:e0d9cccacb5d
978 |/:/ parent: 18:1aa84d96232a
978 |/:/ parent: 18:1aa84d96232a
979 | : parent: 21:d42a756af44d
979 | : parent: 21:d42a756af44d
980 | : user: test
980 | : user: test
981 | : date: Thu Jan 01 00:00:22 1970 +0000
981 | : date: Thu Jan 01 00:00:22 1970 +0000
982 | : summary: (22) merge two known; one far left, one far right
982 | : summary: (22) merge two known; one far left, one far right
983 | :
983 | :
984 | o changeset: 21:d42a756af44d
984 | o changeset: 21:d42a756af44d
985 | |\ parent: 19:31ddc2c1573b
985 | |\ parent: 19:31ddc2c1573b
986 | | | parent: 20:d30ed6450e32
986 | | | parent: 20:d30ed6450e32
987 | | | user: test
987 | | | user: test
988 | | | date: Thu Jan 01 00:00:21 1970 +0000
988 | | | date: Thu Jan 01 00:00:21 1970 +0000
989 | | | summary: (21) expand
989 | | | summary: (21) expand
990 | | |
990 | | |
991 +---o changeset: 20:d30ed6450e32
991 +---o changeset: 20:d30ed6450e32
992 | | | parent: 0:e6eb3150255d
992 | | | parent: 0:e6eb3150255d
993 | | ~ parent: 18:1aa84d96232a
993 | | ~ parent: 18:1aa84d96232a
994 | | user: test
994 | | user: test
995 | | date: Thu Jan 01 00:00:20 1970 +0000
995 | | date: Thu Jan 01 00:00:20 1970 +0000
996 | | summary: (20) merge two known; two far right
996 | | summary: (20) merge two known; two far right
997 | |
997 | |
998 | o changeset: 19:31ddc2c1573b
998 | o changeset: 19:31ddc2c1573b
999 | |\ parent: 15:1dda3f72782d
999 | |\ parent: 15:1dda3f72782d
1000 | | | parent: 17:44765d7c06e0
1000 | | | parent: 17:44765d7c06e0
1001 | | | user: test
1001 | | | user: test
1002 | | | date: Thu Jan 01 00:00:19 1970 +0000
1002 | | | date: Thu Jan 01 00:00:19 1970 +0000
1003 | | | summary: (19) expand
1003 | | | summary: (19) expand
1004 | | |
1004 | | |
1005 o | | changeset: 18:1aa84d96232a
1005 o | | changeset: 18:1aa84d96232a
1006 |\| | parent: 1:6db2ef61d156
1006 |\| | parent: 1:6db2ef61d156
1007 ~ | | parent: 15:1dda3f72782d
1007 ~ | | parent: 15:1dda3f72782d
1008 | | user: test
1008 | | user: test
1009 | | date: Thu Jan 01 00:00:18 1970 +0000
1009 | | date: Thu Jan 01 00:00:18 1970 +0000
1010 | | summary: (18) merge two known; two far left
1010 | | summary: (18) merge two known; two far left
1011 / /
1011 / /
1012 | o changeset: 17:44765d7c06e0
1012 | o changeset: 17:44765d7c06e0
1013 | |\ parent: 12:86b91144a6e9
1013 | |\ parent: 12:86b91144a6e9
1014 | | | parent: 16:3677d192927d
1014 | | | parent: 16:3677d192927d
1015 | | | user: test
1015 | | | user: test
1016 | | | date: Thu Jan 01 00:00:17 1970 +0000
1016 | | | date: Thu Jan 01 00:00:17 1970 +0000
1017 | | | summary: (17) expand
1017 | | | summary: (17) expand
1018 | | |
1018 | | |
1019 | | o changeset: 16:3677d192927d
1019 | | o changeset: 16:3677d192927d
1020 | | |\ parent: 0:e6eb3150255d
1020 | | |\ parent: 0:e6eb3150255d
1021 | | ~ ~ parent: 1:6db2ef61d156
1021 | | ~ ~ parent: 1:6db2ef61d156
1022 | | user: test
1022 | | user: test
1023 | | date: Thu Jan 01 00:00:16 1970 +0000
1023 | | date: Thu Jan 01 00:00:16 1970 +0000
1024 | | summary: (16) merge two known; one immediate right, one near right
1024 | | summary: (16) merge two known; one immediate right, one near right
1025 | |
1025 | |
1026 o | changeset: 15:1dda3f72782d
1026 o | changeset: 15:1dda3f72782d
1027 |\ \ parent: 13:22d8966a97e3
1027 |\ \ parent: 13:22d8966a97e3
1028 | | | parent: 14:8eac370358ef
1028 | | | parent: 14:8eac370358ef
1029 | | | user: test
1029 | | | user: test
1030 | | | date: Thu Jan 01 00:00:15 1970 +0000
1030 | | | date: Thu Jan 01 00:00:15 1970 +0000
1031 | | | summary: (15) expand
1031 | | | summary: (15) expand
1032 | | |
1032 | | |
1033 | o | changeset: 14:8eac370358ef
1033 | o | changeset: 14:8eac370358ef
1034 | |\| parent: 0:e6eb3150255d
1034 | |\| parent: 0:e6eb3150255d
1035 | ~ | parent: 12:86b91144a6e9
1035 | ~ | parent: 12:86b91144a6e9
1036 | | user: test
1036 | | user: test
1037 | | date: Thu Jan 01 00:00:14 1970 +0000
1037 | | date: Thu Jan 01 00:00:14 1970 +0000
1038 | | summary: (14) merge two known; one immediate right, one far right
1038 | | summary: (14) merge two known; one immediate right, one far right
1039 | /
1039 | /
1040 o | changeset: 13:22d8966a97e3
1040 o | changeset: 13:22d8966a97e3
1041 |\ \ parent: 9:7010c0af0a35
1041 |\ \ parent: 9:7010c0af0a35
1042 | | | parent: 11:832d76e6bdf2
1042 | | | parent: 11:832d76e6bdf2
1043 | | | user: test
1043 | | | user: test
1044 | | | date: Thu Jan 01 00:00:13 1970 +0000
1044 | | | date: Thu Jan 01 00:00:13 1970 +0000
1045 | | | summary: (13) expand
1045 | | | summary: (13) expand
1046 | | |
1046 | | |
1047 +---o changeset: 12:86b91144a6e9
1047 +---o changeset: 12:86b91144a6e9
1048 | | | parent: 1:6db2ef61d156
1048 | | | parent: 1:6db2ef61d156
1049 | | ~ parent: 9:7010c0af0a35
1049 | | ~ parent: 9:7010c0af0a35
1050 | | user: test
1050 | | user: test
1051 | | date: Thu Jan 01 00:00:12 1970 +0000
1051 | | date: Thu Jan 01 00:00:12 1970 +0000
1052 | | summary: (12) merge two known; one immediate right, one far left
1052 | | summary: (12) merge two known; one immediate right, one far left
1053 | |
1053 | |
1054 | o changeset: 11:832d76e6bdf2
1054 | o changeset: 11:832d76e6bdf2
1055 | |\ parent: 6:b105a072e251
1055 | |\ parent: 6:b105a072e251
1056 | | | parent: 10:74c64d036d72
1056 | | | parent: 10:74c64d036d72
1057 | | | user: test
1057 | | | user: test
1058 | | | date: Thu Jan 01 00:00:11 1970 +0000
1058 | | | date: Thu Jan 01 00:00:11 1970 +0000
1059 | | | summary: (11) expand
1059 | | | summary: (11) expand
1060 | | |
1060 | | |
1061 | | o changeset: 10:74c64d036d72
1061 | | o changeset: 10:74c64d036d72
1062 | |/| parent: 0:e6eb3150255d
1062 | |/| parent: 0:e6eb3150255d
1063 | | ~ parent: 6:b105a072e251
1063 | | ~ parent: 6:b105a072e251
1064 | | user: test
1064 | | user: test
1065 | | date: Thu Jan 01 00:00:10 1970 +0000
1065 | | date: Thu Jan 01 00:00:10 1970 +0000
1066 | | summary: (10) merge two known; one immediate left, one near right
1066 | | summary: (10) merge two known; one immediate left, one near right
1067 | |
1067 | |
1068 o | changeset: 9:7010c0af0a35
1068 o | changeset: 9:7010c0af0a35
1069 |\ \ parent: 7:b632bb1b1224
1069 |\ \ parent: 7:b632bb1b1224
1070 | | | parent: 8:7a0b11f71937
1070 | | | parent: 8:7a0b11f71937
1071 | | | user: test
1071 | | | user: test
1072 | | | date: Thu Jan 01 00:00:09 1970 +0000
1072 | | | date: Thu Jan 01 00:00:09 1970 +0000
1073 | | | summary: (9) expand
1073 | | | summary: (9) expand
1074 | | |
1074 | | |
1075 | o | changeset: 8:7a0b11f71937
1075 | o | changeset: 8:7a0b11f71937
1076 |/| | parent: 0:e6eb3150255d
1076 |/| | parent: 0:e6eb3150255d
1077 | ~ | parent: 7:b632bb1b1224
1077 | ~ | parent: 7:b632bb1b1224
1078 | | user: test
1078 | | user: test
1079 | | date: Thu Jan 01 00:00:08 1970 +0000
1079 | | date: Thu Jan 01 00:00:08 1970 +0000
1080 | | summary: (8) merge two known; one immediate left, one far right
1080 | | summary: (8) merge two known; one immediate left, one far right
1081 | /
1081 | /
1082 o | changeset: 7:b632bb1b1224
1082 o | changeset: 7:b632bb1b1224
1083 |\ \ parent: 2:3d9a33b8d1e1
1083 |\ \ parent: 2:3d9a33b8d1e1
1084 | ~ | parent: 5:4409d547b708
1084 | ~ | parent: 5:4409d547b708
1085 | | user: test
1085 | | user: test
1086 | | date: Thu Jan 01 00:00:07 1970 +0000
1086 | | date: Thu Jan 01 00:00:07 1970 +0000
1087 | | summary: (7) expand
1087 | | summary: (7) expand
1088 | /
1088 | /
1089 | o changeset: 6:b105a072e251
1089 | o changeset: 6:b105a072e251
1090 |/| parent: 2:3d9a33b8d1e1
1090 |/| parent: 2:3d9a33b8d1e1
1091 | ~ parent: 5:4409d547b708
1091 | ~ parent: 5:4409d547b708
1092 | user: test
1092 | user: test
1093 | date: Thu Jan 01 00:00:06 1970 +0000
1093 | date: Thu Jan 01 00:00:06 1970 +0000
1094 | summary: (6) merge two known; one immediate left, one far left
1094 | summary: (6) merge two known; one immediate left, one far left
1095 |
1095 |
1096 o changeset: 5:4409d547b708
1096 o changeset: 5:4409d547b708
1097 |\ parent: 3:27eef8ed80b4
1097 |\ parent: 3:27eef8ed80b4
1098 | ~ parent: 4:26a8bac39d9f
1098 | ~ parent: 4:26a8bac39d9f
1099 | user: test
1099 | user: test
1100 | date: Thu Jan 01 00:00:05 1970 +0000
1100 | date: Thu Jan 01 00:00:05 1970 +0000
1101 | summary: (5) expand
1101 | summary: (5) expand
1102 |
1102 |
1103 o changeset: 4:26a8bac39d9f
1103 o changeset: 4:26a8bac39d9f
1104 |\ parent: 1:6db2ef61d156
1104 |\ parent: 1:6db2ef61d156
1105 ~ ~ parent: 3:27eef8ed80b4
1105 ~ ~ parent: 3:27eef8ed80b4
1106 user: test
1106 user: test
1107 date: Thu Jan 01 00:00:04 1970 +0000
1107 date: Thu Jan 01 00:00:04 1970 +0000
1108 summary: (4) merge two known; one immediate left, one immediate right
1108 summary: (4) merge two known; one immediate left, one immediate right
1109
1109
1110
1110
1111
1111
1112 Empty revision range - display nothing:
1112 Empty revision range - display nothing:
1113 $ hg log -G -r 1..0
1113 $ hg log -G -r 1..0
1114
1114
1115 $ cd ..
1115 $ cd ..
1116
1116
1117 #if no-outer-repo
1117 #if no-outer-repo
1118
1118
1119 From outer space:
1119 From outer space:
1120 $ hg log -G -l1 repo
1120 $ hg log -G -l1 repo
1121 @ changeset: 34:fea3ac5810e0
1121 @ changeset: 34:fea3ac5810e0
1122 | tag: tip
1122 | tag: tip
1123 ~ parent: 32:d06dffa21a31
1123 ~ parent: 32:d06dffa21a31
1124 user: test
1124 user: test
1125 date: Thu Jan 01 00:00:34 1970 +0000
1125 date: Thu Jan 01 00:00:34 1970 +0000
1126 summary: (34) head
1126 summary: (34) head
1127
1127
1128 $ hg log -G -l1 repo/a
1128 $ hg log -G -l1 repo/a
1129 @ changeset: 34:fea3ac5810e0
1129 @ changeset: 34:fea3ac5810e0
1130 | tag: tip
1130 | tag: tip
1131 ~ parent: 32:d06dffa21a31
1131 ~ parent: 32:d06dffa21a31
1132 user: test
1132 user: test
1133 date: Thu Jan 01 00:00:34 1970 +0000
1133 date: Thu Jan 01 00:00:34 1970 +0000
1134 summary: (34) head
1134 summary: (34) head
1135
1135
1136 $ hg log -G -l1 repo/missing
1136 $ hg log -G -l1 repo/missing
1137
1137
1138 #endif
1138 #endif
1139
1139
1140 File log with revs != cset revs:
1140 File log with revs != cset revs:
1141 $ hg init flog
1141 $ hg init flog
1142 $ cd flog
1142 $ cd flog
1143 $ echo one >one
1143 $ echo one >one
1144 $ hg add one
1144 $ hg add one
1145 $ hg commit -mone
1145 $ hg commit -mone
1146 $ echo two >two
1146 $ echo two >two
1147 $ hg add two
1147 $ hg add two
1148 $ hg commit -mtwo
1148 $ hg commit -mtwo
1149 $ echo more >two
1149 $ echo more >two
1150 $ hg commit -mmore
1150 $ hg commit -mmore
1151 $ hg log -G two
1151 $ hg log -G two
1152 @ changeset: 2:12c28321755b
1152 @ changeset: 2:12c28321755b
1153 | tag: tip
1153 | tag: tip
1154 | user: test
1154 | user: test
1155 | date: Thu Jan 01 00:00:00 1970 +0000
1155 | date: Thu Jan 01 00:00:00 1970 +0000
1156 | summary: more
1156 | summary: more
1157 |
1157 |
1158 o changeset: 1:5ac72c0599bf
1158 o changeset: 1:5ac72c0599bf
1159 | user: test
1159 | user: test
1160 ~ date: Thu Jan 01 00:00:00 1970 +0000
1160 ~ date: Thu Jan 01 00:00:00 1970 +0000
1161 summary: two
1161 summary: two
1162
1162
1163
1163
1164 Issue1896: File log with explicit style
1164 Issue1896: File log with explicit style
1165 $ hg log -G --style=default one
1165 $ hg log -G --style=default one
1166 o changeset: 0:3d578b4a1f53
1166 o changeset: 0:3d578b4a1f53
1167 user: test
1167 user: test
1168 date: Thu Jan 01 00:00:00 1970 +0000
1168 date: Thu Jan 01 00:00:00 1970 +0000
1169 summary: one
1169 summary: one
1170
1170
1171 Issue2395: glog --style header and footer
1171 Issue2395: glog --style header and footer
1172 $ hg log -G --style=xml one
1172 $ hg log -G --style=xml one
1173 <?xml version="1.0"?>
1173 <?xml version="1.0"?>
1174 <log>
1174 <log>
1175 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1175 o <logentry revision="0" node="3d578b4a1f537d5fcf7301bfa9c0b97adfaa6fb1">
1176 <author email="test">test</author>
1176 <author email="test">test</author>
1177 <date>1970-01-01T00:00:00+00:00</date>
1177 <date>1970-01-01T00:00:00+00:00</date>
1178 <msg xml:space="preserve">one</msg>
1178 <msg xml:space="preserve">one</msg>
1179 </logentry>
1179 </logentry>
1180 </log>
1180 </log>
1181
1181
1182 $ cd ..
1182 $ cd ..
1183
1183
1184 Incoming and outgoing:
1184 Incoming and outgoing:
1185
1185
1186 $ hg clone -U -r31 repo repo2
1186 $ hg clone -U -r31 repo repo2
1187 adding changesets
1187 adding changesets
1188 adding manifests
1188 adding manifests
1189 adding file changes
1189 adding file changes
1190 added 31 changesets with 31 changes to 1 files
1190 added 31 changesets with 31 changes to 1 files
1191 new changesets e6eb3150255d:621d83e11f67
1191 new changesets e6eb3150255d:621d83e11f67
1192 $ cd repo2
1192 $ cd repo2
1193
1193
1194 $ hg incoming --graph ../repo
1194 $ hg incoming --graph ../repo
1195 comparing with ../repo
1195 comparing with ../repo
1196 searching for changes
1196 searching for changes
1197 o changeset: 34:fea3ac5810e0
1197 o changeset: 34:fea3ac5810e0
1198 | tag: tip
1198 | tag: tip
1199 | parent: 32:d06dffa21a31
1199 | parent: 32:d06dffa21a31
1200 | user: test
1200 | user: test
1201 | date: Thu Jan 01 00:00:34 1970 +0000
1201 | date: Thu Jan 01 00:00:34 1970 +0000
1202 | summary: (34) head
1202 | summary: (34) head
1203 |
1203 |
1204 | o changeset: 33:68608f5145f9
1204 | o changeset: 33:68608f5145f9
1205 | parent: 18:1aa84d96232a
1205 | parent: 18:1aa84d96232a
1206 | user: test
1206 | user: test
1207 | date: Thu Jan 01 00:00:33 1970 +0000
1207 | date: Thu Jan 01 00:00:33 1970 +0000
1208 | summary: (33) head
1208 | summary: (33) head
1209 |
1209 |
1210 o changeset: 32:d06dffa21a31
1210 o changeset: 32:d06dffa21a31
1211 | parent: 27:886ed638191b
1211 | parent: 27:886ed638191b
1212 | parent: 31:621d83e11f67
1212 | parent: 31:621d83e11f67
1213 | user: test
1213 | user: test
1214 | date: Thu Jan 01 00:00:32 1970 +0000
1214 | date: Thu Jan 01 00:00:32 1970 +0000
1215 | summary: (32) expand
1215 | summary: (32) expand
1216 |
1216 |
1217 o changeset: 27:886ed638191b
1217 o changeset: 27:886ed638191b
1218 parent: 21:d42a756af44d
1218 parent: 21:d42a756af44d
1219 user: test
1219 user: test
1220 date: Thu Jan 01 00:00:27 1970 +0000
1220 date: Thu Jan 01 00:00:27 1970 +0000
1221 summary: (27) collapse
1221 summary: (27) collapse
1222
1222
1223 $ cd ..
1223 $ cd ..
1224
1224
1225 $ hg -R repo outgoing --graph repo2
1225 $ hg -R repo outgoing --graph repo2
1226 comparing with repo2
1226 comparing with repo2
1227 searching for changes
1227 searching for changes
1228 @ changeset: 34:fea3ac5810e0
1228 @ changeset: 34:fea3ac5810e0
1229 | tag: tip
1229 | tag: tip
1230 | parent: 32:d06dffa21a31
1230 | parent: 32:d06dffa21a31
1231 | user: test
1231 | user: test
1232 | date: Thu Jan 01 00:00:34 1970 +0000
1232 | date: Thu Jan 01 00:00:34 1970 +0000
1233 | summary: (34) head
1233 | summary: (34) head
1234 |
1234 |
1235 | o changeset: 33:68608f5145f9
1235 | o changeset: 33:68608f5145f9
1236 | parent: 18:1aa84d96232a
1236 | parent: 18:1aa84d96232a
1237 | user: test
1237 | user: test
1238 | date: Thu Jan 01 00:00:33 1970 +0000
1238 | date: Thu Jan 01 00:00:33 1970 +0000
1239 | summary: (33) head
1239 | summary: (33) head
1240 |
1240 |
1241 o changeset: 32:d06dffa21a31
1241 o changeset: 32:d06dffa21a31
1242 | parent: 27:886ed638191b
1242 | parent: 27:886ed638191b
1243 | parent: 31:621d83e11f67
1243 | parent: 31:621d83e11f67
1244 | user: test
1244 | user: test
1245 | date: Thu Jan 01 00:00:32 1970 +0000
1245 | date: Thu Jan 01 00:00:32 1970 +0000
1246 | summary: (32) expand
1246 | summary: (32) expand
1247 |
1247 |
1248 o changeset: 27:886ed638191b
1248 o changeset: 27:886ed638191b
1249 parent: 21:d42a756af44d
1249 parent: 21:d42a756af44d
1250 user: test
1250 user: test
1251 date: Thu Jan 01 00:00:27 1970 +0000
1251 date: Thu Jan 01 00:00:27 1970 +0000
1252 summary: (27) collapse
1252 summary: (27) collapse
1253
1253
1254
1254
1255 File + limit with revs != cset revs:
1255 File + limit with revs != cset revs:
1256 $ cd repo
1256 $ cd repo
1257 $ touch b
1257 $ touch b
1258 $ hg ci -Aqm0
1258 $ hg ci -Aqm0
1259 $ hg log -G -l2 a
1259 $ hg log -G -l2 a
1260 o changeset: 34:fea3ac5810e0
1260 o changeset: 34:fea3ac5810e0
1261 | parent: 32:d06dffa21a31
1261 | parent: 32:d06dffa21a31
1262 ~ user: test
1262 ~ user: test
1263 date: Thu Jan 01 00:00:34 1970 +0000
1263 date: Thu Jan 01 00:00:34 1970 +0000
1264 summary: (34) head
1264 summary: (34) head
1265
1265
1266 o changeset: 33:68608f5145f9
1266 o changeset: 33:68608f5145f9
1267 | parent: 18:1aa84d96232a
1267 | parent: 18:1aa84d96232a
1268 ~ user: test
1268 ~ user: test
1269 date: Thu Jan 01 00:00:33 1970 +0000
1269 date: Thu Jan 01 00:00:33 1970 +0000
1270 summary: (33) head
1270 summary: (33) head
1271
1271
1272
1272
1273 File + limit + -ra:b, (b - a) < limit:
1273 File + limit + -ra:b, (b - a) < limit:
1274 $ hg log -G -l3000 -r32:tip a
1274 $ hg log -G -l3000 -r32:tip a
1275 o changeset: 34:fea3ac5810e0
1275 o changeset: 34:fea3ac5810e0
1276 | parent: 32:d06dffa21a31
1276 | parent: 32:d06dffa21a31
1277 | user: test
1277 | user: test
1278 | date: Thu Jan 01 00:00:34 1970 +0000
1278 | date: Thu Jan 01 00:00:34 1970 +0000
1279 | summary: (34) head
1279 | summary: (34) head
1280 |
1280 |
1281 | o changeset: 33:68608f5145f9
1281 | o changeset: 33:68608f5145f9
1282 | | parent: 18:1aa84d96232a
1282 | | parent: 18:1aa84d96232a
1283 | ~ user: test
1283 | ~ user: test
1284 | date: Thu Jan 01 00:00:33 1970 +0000
1284 | date: Thu Jan 01 00:00:33 1970 +0000
1285 | summary: (33) head
1285 | summary: (33) head
1286 |
1286 |
1287 o changeset: 32:d06dffa21a31
1287 o changeset: 32:d06dffa21a31
1288 |\ parent: 27:886ed638191b
1288 |\ parent: 27:886ed638191b
1289 ~ ~ parent: 31:621d83e11f67
1289 ~ ~ parent: 31:621d83e11f67
1290 user: test
1290 user: test
1291 date: Thu Jan 01 00:00:32 1970 +0000
1291 date: Thu Jan 01 00:00:32 1970 +0000
1292 summary: (32) expand
1292 summary: (32) expand
1293
1293
1294
1294
1295 Point out a common and an uncommon unshown parent
1295 Point out a common and an uncommon unshown parent
1296
1296
1297 $ hg log -G -r 'rev(8) or rev(9)'
1297 $ hg log -G -r 'rev(8) or rev(9)'
1298 o changeset: 9:7010c0af0a35
1298 o changeset: 9:7010c0af0a35
1299 |\ parent: 7:b632bb1b1224
1299 |\ parent: 7:b632bb1b1224
1300 | ~ parent: 8:7a0b11f71937
1300 | ~ parent: 8:7a0b11f71937
1301 | user: test
1301 | user: test
1302 | date: Thu Jan 01 00:00:09 1970 +0000
1302 | date: Thu Jan 01 00:00:09 1970 +0000
1303 | summary: (9) expand
1303 | summary: (9) expand
1304 |
1304 |
1305 o changeset: 8:7a0b11f71937
1305 o changeset: 8:7a0b11f71937
1306 |\ parent: 0:e6eb3150255d
1306 |\ parent: 0:e6eb3150255d
1307 ~ ~ parent: 7:b632bb1b1224
1307 ~ ~ parent: 7:b632bb1b1224
1308 user: test
1308 user: test
1309 date: Thu Jan 01 00:00:08 1970 +0000
1309 date: Thu Jan 01 00:00:08 1970 +0000
1310 summary: (8) merge two known; one immediate left, one far right
1310 summary: (8) merge two known; one immediate left, one far right
1311
1311
1312
1312
1313 File + limit + -ra:b, b < tip:
1313 File + limit + -ra:b, b < tip:
1314
1314
1315 $ hg log -G -l1 -r32:34 a
1315 $ hg log -G -l1 -r32:34 a
1316 o changeset: 34:fea3ac5810e0
1316 o changeset: 34:fea3ac5810e0
1317 | parent: 32:d06dffa21a31
1317 | parent: 32:d06dffa21a31
1318 ~ user: test
1318 ~ user: test
1319 date: Thu Jan 01 00:00:34 1970 +0000
1319 date: Thu Jan 01 00:00:34 1970 +0000
1320 summary: (34) head
1320 summary: (34) head
1321
1321
1322
1322
1323 file(File) + limit + -ra:b, b < tip:
1323 file(File) + limit + -ra:b, b < tip:
1324
1324
1325 $ hg log -G -l1 -r32:34 -r 'file("a")'
1325 $ hg log -G -l1 -r32:34 -r 'file("a")'
1326 o changeset: 34:fea3ac5810e0
1326 o changeset: 34:fea3ac5810e0
1327 | parent: 32:d06dffa21a31
1327 | parent: 32:d06dffa21a31
1328 ~ user: test
1328 ~ user: test
1329 date: Thu Jan 01 00:00:34 1970 +0000
1329 date: Thu Jan 01 00:00:34 1970 +0000
1330 summary: (34) head
1330 summary: (34) head
1331
1331
1332
1332
1333 limit(file(File) and a::b), b < tip:
1333 limit(file(File) and a::b), b < tip:
1334
1334
1335 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1335 $ hg log -G -r 'limit(file("a") and 32::34, 1)'
1336 o changeset: 32:d06dffa21a31
1336 o changeset: 32:d06dffa21a31
1337 |\ parent: 27:886ed638191b
1337 |\ parent: 27:886ed638191b
1338 ~ ~ parent: 31:621d83e11f67
1338 ~ ~ parent: 31:621d83e11f67
1339 user: test
1339 user: test
1340 date: Thu Jan 01 00:00:32 1970 +0000
1340 date: Thu Jan 01 00:00:32 1970 +0000
1341 summary: (32) expand
1341 summary: (32) expand
1342
1342
1343
1343
1344 File + limit + -ra:b, b < tip:
1344 File + limit + -ra:b, b < tip:
1345
1345
1346 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1346 $ hg log -G -r 'limit(file("a") and 34::32, 1)'
1347
1347
1348 File + limit + -ra:b, b < tip, (b - a) < limit:
1348 File + limit + -ra:b, b < tip, (b - a) < limit:
1349
1349
1350 $ hg log -G -l10 -r33:34 a
1350 $ hg log -G -l10 -r33:34 a
1351 o changeset: 34:fea3ac5810e0
1351 o changeset: 34:fea3ac5810e0
1352 | parent: 32:d06dffa21a31
1352 | parent: 32:d06dffa21a31
1353 ~ user: test
1353 ~ user: test
1354 date: Thu Jan 01 00:00:34 1970 +0000
1354 date: Thu Jan 01 00:00:34 1970 +0000
1355 summary: (34) head
1355 summary: (34) head
1356
1356
1357 o changeset: 33:68608f5145f9
1357 o changeset: 33:68608f5145f9
1358 | parent: 18:1aa84d96232a
1358 | parent: 18:1aa84d96232a
1359 ~ user: test
1359 ~ user: test
1360 date: Thu Jan 01 00:00:33 1970 +0000
1360 date: Thu Jan 01 00:00:33 1970 +0000
1361 summary: (33) head
1361 summary: (33) head
1362
1362
1363
1363
1364 Do not crash or produce strange graphs if history is buggy
1364 Do not crash or produce strange graphs if history is buggy
1365
1365
1366 $ hg branch branch
1366 $ hg branch branch
1367 marked working directory as branch branch
1367 marked working directory as branch branch
1368 (branches are permanent and global, did you want a bookmark?)
1368 (branches are permanent and global, did you want a bookmark?)
1369 $ commit 36 "buggy merge: identical parents" 35 35
1369 $ commit 36 "buggy merge: identical parents" 35 35
1370 $ hg log -G -l5
1370 $ hg log -G -l5
1371 @ changeset: 36:08a19a744424
1371 @ changeset: 36:08a19a744424
1372 | branch: branch
1372 | branch: branch
1373 | tag: tip
1373 | tag: tip
1374 | parent: 35:9159c3644c5e
1374 | parent: 35:9159c3644c5e
1375 | parent: 35:9159c3644c5e
1375 | parent: 35:9159c3644c5e
1376 | user: test
1376 | user: test
1377 | date: Thu Jan 01 00:00:36 1970 +0000
1377 | date: Thu Jan 01 00:00:36 1970 +0000
1378 | summary: (36) buggy merge: identical parents
1378 | summary: (36) buggy merge: identical parents
1379 |
1379 |
1380 o changeset: 35:9159c3644c5e
1380 o changeset: 35:9159c3644c5e
1381 | user: test
1381 | user: test
1382 | date: Thu Jan 01 00:00:00 1970 +0000
1382 | date: Thu Jan 01 00:00:00 1970 +0000
1383 | summary: 0
1383 | summary: 0
1384 |
1384 |
1385 o changeset: 34:fea3ac5810e0
1385 o changeset: 34:fea3ac5810e0
1386 | parent: 32:d06dffa21a31
1386 | parent: 32:d06dffa21a31
1387 | user: test
1387 | user: test
1388 | date: Thu Jan 01 00:00:34 1970 +0000
1388 | date: Thu Jan 01 00:00:34 1970 +0000
1389 | summary: (34) head
1389 | summary: (34) head
1390 |
1390 |
1391 | o changeset: 33:68608f5145f9
1391 | o changeset: 33:68608f5145f9
1392 | | parent: 18:1aa84d96232a
1392 | | parent: 18:1aa84d96232a
1393 | ~ user: test
1393 | ~ user: test
1394 | date: Thu Jan 01 00:00:33 1970 +0000
1394 | date: Thu Jan 01 00:00:33 1970 +0000
1395 | summary: (33) head
1395 | summary: (33) head
1396 |
1396 |
1397 o changeset: 32:d06dffa21a31
1397 o changeset: 32:d06dffa21a31
1398 |\ parent: 27:886ed638191b
1398 |\ parent: 27:886ed638191b
1399 ~ ~ parent: 31:621d83e11f67
1399 ~ ~ parent: 31:621d83e11f67
1400 user: test
1400 user: test
1401 date: Thu Jan 01 00:00:32 1970 +0000
1401 date: Thu Jan 01 00:00:32 1970 +0000
1402 summary: (32) expand
1402 summary: (32) expand
1403
1403
1404
1404
1405 Test log -G options
1405 Test log -G options
1406
1406
1407 $ testlog() {
1407 $ testlog() {
1408 > hg log -G --print-revset "$@"
1408 > hg log -G --print-revset "$@"
1409 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1409 > hg log --template 'nodetag {rev}\n' "$@" | grep nodetag \
1410 > | sed 's/.*nodetag/nodetag/' > log.nodes
1410 > | sed 's/.*nodetag/nodetag/' > log.nodes
1411 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1411 > hg log -G --template 'nodetag {rev}\n' "$@" | grep nodetag \
1412 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1412 > | sed 's/.*nodetag/nodetag/' > glog.nodes
1413 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1413 > (cmp log.nodes glog.nodes || diff -u log.nodes glog.nodes) \
1414 > | grep '^[-+@ ]' || :
1414 > | grep '^[-+@ ]' || :
1415 > }
1415 > }
1416
1416
1417 glog always reorders nodes which explains the difference with log
1417 glog always reorders nodes which explains the difference with log
1418
1418
1419 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1419 $ testlog -r 27 -r 25 -r 21 -r 34 -r 32 -r 31
1420 ['27', '25', '21', '34', '32', '31']
1420 ['27', '25', '21', '34', '32', '31']
1421 []
1421 []
1422 <baseset- [21, 25, 27, 31, 32, 34]>
1422 <baseset- [21, 25, 27, 31, 32, 34]>
1423 --- log.nodes * (glob)
1423 --- log.nodes * (glob)
1424 +++ glog.nodes * (glob)
1424 +++ glog.nodes * (glob)
1425 @@ -1,6 +1,6 @@
1425 @@ -1,6 +1,6 @@
1426 -nodetag 27
1426 -nodetag 27
1427 -nodetag 25
1427 -nodetag 25
1428 -nodetag 21
1428 -nodetag 21
1429 nodetag 34
1429 nodetag 34
1430 nodetag 32
1430 nodetag 32
1431 nodetag 31
1431 nodetag 31
1432 +nodetag 27
1432 +nodetag 27
1433 +nodetag 25
1433 +nodetag 25
1434 +nodetag 21
1434 +nodetag 21
1435 $ testlog -u test -u not-a-user
1435 $ testlog -u test -u not-a-user
1436 []
1436 []
1437 (or
1437 (or
1438 (list
1438 (list
1439 (func
1439 (func
1440 (symbol 'user')
1440 (symbol 'user')
1441 (string 'test'))
1441 (string 'literal:test'))
1442 (func
1442 (func
1443 (symbol 'user')
1443 (symbol 'user')
1444 (string 'not-a-user'))))
1444 (string 'literal:not-a-user'))))
1445 <filteredset
1445 <filteredset
1446 <spanset- 0:37>,
1446 <spanset- 0:37>,
1447 <addset
1447 <addset
1448 <filteredset
1448 <filteredset
1449 <fullreposet+ 0:37>,
1449 <fullreposet+ 0:37>,
1450 <user 'test'>>,
1450 <user 'literal:test'>>,
1451 <filteredset
1451 <filteredset
1452 <fullreposet+ 0:37>,
1452 <fullreposet+ 0:37>,
1453 <user 'not-a-user'>>>>
1453 <user 'literal:not-a-user'>>>>
1454 $ testlog -b not-a-branch
1454 $ testlog -b not-a-branch
1455 abort: unknown revision 'not-a-branch'
1455 abort: unknown revision 'not-a-branch'
1456 abort: unknown revision 'not-a-branch'
1456 abort: unknown revision 'not-a-branch'
1457 abort: unknown revision 'not-a-branch'
1457 abort: unknown revision 'not-a-branch'
1458 $ testlog -b 35 -b 36 --only-branch branch
1458 $ testlog -b 35 -b 36 --only-branch branch
1459 []
1459 []
1460 (or
1460 (or
1461 (list
1461 (list
1462 (func
1462 (func
1463 (symbol 'branch')
1463 (symbol 'branch')
1464 (string 'default'))
1464 (string 'literal:default'))
1465 (or
1465 (or
1466 (list
1466 (list
1467 (func
1467 (func
1468 (symbol 'branch')
1468 (symbol 'branch')
1469 (string 'branch'))
1469 (string 'literal:branch'))
1470 (func
1470 (func
1471 (symbol 'branch')
1471 (symbol 'branch')
1472 (string 'branch'))))))
1472 (string 'literal:branch'))))))
1473 <filteredset
1473 <filteredset
1474 <spanset- 0:37>,
1474 <spanset- 0:37>,
1475 <addset
1475 <addset
1476 <filteredset
1476 <filteredset
1477 <fullreposet+ 0:37>,
1477 <fullreposet+ 0:37>,
1478 <branch 'default'>>,
1478 <branch 'literal:default'>>,
1479 <addset
1479 <addset
1480 <filteredset
1480 <filteredset
1481 <fullreposet+ 0:37>,
1481 <fullreposet+ 0:37>,
1482 <branch 'branch'>>,
1482 <branch 'literal:branch'>>,
1483 <filteredset
1483 <filteredset
1484 <fullreposet+ 0:37>,
1484 <fullreposet+ 0:37>,
1485 <branch 'branch'>>>>>
1485 <branch 'literal:branch'>>>>>
1486 $ testlog -k expand -k merge
1486 $ testlog -k expand -k merge
1487 []
1487 []
1488 (or
1488 (or
1489 (list
1489 (list
1490 (func
1490 (func
1491 (symbol 'keyword')
1491 (symbol 'keyword')
1492 (string 'expand'))
1492 (string 'expand'))
1493 (func
1493 (func
1494 (symbol 'keyword')
1494 (symbol 'keyword')
1495 (string 'merge'))))
1495 (string 'merge'))))
1496 <filteredset
1496 <filteredset
1497 <spanset- 0:37>,
1497 <spanset- 0:37>,
1498 <addset
1498 <addset
1499 <filteredset
1499 <filteredset
1500 <fullreposet+ 0:37>,
1500 <fullreposet+ 0:37>,
1501 <keyword 'expand'>>,
1501 <keyword 'expand'>>,
1502 <filteredset
1502 <filteredset
1503 <fullreposet+ 0:37>,
1503 <fullreposet+ 0:37>,
1504 <keyword 'merge'>>>>
1504 <keyword 'merge'>>>>
1505 $ testlog --only-merges
1505 $ testlog --only-merges
1506 []
1506 []
1507 (func
1507 (func
1508 (symbol 'merge')
1508 (symbol 'merge')
1509 None)
1509 None)
1510 <filteredset
1510 <filteredset
1511 <spanset- 0:37>,
1511 <spanset- 0:37>,
1512 <merge>>
1512 <merge>>
1513 $ testlog --no-merges
1513 $ testlog --no-merges
1514 []
1514 []
1515 (not
1515 (not
1516 (func
1516 (func
1517 (symbol 'merge')
1517 (symbol 'merge')
1518 None))
1518 None))
1519 <filteredset
1519 <filteredset
1520 <spanset- 0:37>,
1520 <spanset- 0:37>,
1521 <not
1521 <not
1522 <filteredset
1522 <filteredset
1523 <spanset- 0:37>,
1523 <spanset- 0:37>,
1524 <merge>>>>
1524 <merge>>>>
1525 $ testlog --date '2 0 to 4 0'
1525 $ testlog --date '2 0 to 4 0'
1526 []
1526 []
1527 (func
1527 (func
1528 (symbol 'date')
1528 (symbol 'date')
1529 (string '2 0 to 4 0'))
1529 (string '2 0 to 4 0'))
1530 <filteredset
1530 <filteredset
1531 <spanset- 0:37>,
1531 <spanset- 0:37>,
1532 <date '2 0 to 4 0'>>
1532 <date '2 0 to 4 0'>>
1533 $ hg log -G -d 'brace ) in a date'
1533 $ hg log -G -d 'brace ) in a date'
1534 hg: parse error: invalid date: 'brace ) in a date'
1534 hg: parse error: invalid date: 'brace ) in a date'
1535 [10]
1535 [10]
1536 $ testlog --prune 31 --prune 32
1536 $ testlog --prune 31 --prune 32
1537 []
1537 []
1538 (not
1538 (not
1539 (or
1539 (or
1540 (list
1540 (list
1541 (func
1541 (func
1542 (symbol 'ancestors')
1542 (symbol 'ancestors')
1543 (string '31'))
1543 (string '31'))
1544 (func
1544 (func
1545 (symbol 'ancestors')
1545 (symbol 'ancestors')
1546 (string '32')))))
1546 (string '32')))))
1547 <filteredset
1547 <filteredset
1548 <spanset- 0:37>,
1548 <spanset- 0:37>,
1549 <not
1549 <not
1550 <addset
1550 <addset
1551 <filteredset
1551 <filteredset
1552 <spanset- 0:37>,
1552 <spanset- 0:37>,
1553 <generatorsetdesc+>>,
1553 <generatorsetdesc+>>,
1554 <filteredset
1554 <filteredset
1555 <spanset- 0:37>,
1555 <spanset- 0:37>,
1556 <generatorsetdesc+>>>>>
1556 <generatorsetdesc+>>>>>
1557
1557
1558 Dedicated repo for --follow and paths filtering. The g is crafted to
1558 Dedicated repo for --follow and paths filtering. The g is crafted to
1559 have 2 filelog topological heads in a linear changeset graph.
1559 have 2 filelog topological heads in a linear changeset graph.
1560
1560
1561 $ cd ..
1561 $ cd ..
1562 $ hg init follow
1562 $ hg init follow
1563 $ cd follow
1563 $ cd follow
1564 $ testlog --follow
1564 $ testlog --follow
1565 []
1565 []
1566 []
1566 []
1567 <baseset []>
1567 <baseset []>
1568 $ testlog -rnull
1568 $ testlog -rnull
1569 ['null']
1569 ['null']
1570 []
1570 []
1571 <baseset [-1]>
1571 <baseset [-1]>
1572 $ echo a > a
1572 $ echo a > a
1573 $ echo aa > aa
1573 $ echo aa > aa
1574 $ echo f > f
1574 $ echo f > f
1575 $ hg ci -Am "add a" a aa f
1575 $ hg ci -Am "add a" a aa f
1576 $ hg cp a b
1576 $ hg cp a b
1577 $ hg cp f g
1577 $ hg cp f g
1578 $ hg ci -m "copy a b"
1578 $ hg ci -m "copy a b"
1579 $ mkdir dir
1579 $ mkdir dir
1580 $ hg mv b dir
1580 $ hg mv b dir
1581 $ echo g >> g
1581 $ echo g >> g
1582 $ echo f >> f
1582 $ echo f >> f
1583 $ hg ci -m "mv b dir/b"
1583 $ hg ci -m "mv b dir/b"
1584 $ hg mv a b
1584 $ hg mv a b
1585 $ hg cp -f f g
1585 $ hg cp -f f g
1586 $ echo a > d
1586 $ echo a > d
1587 $ hg add d
1587 $ hg add d
1588 $ hg ci -m "mv a b; add d"
1588 $ hg ci -m "mv a b; add d"
1589 $ hg mv dir/b e
1589 $ hg mv dir/b e
1590 $ hg ci -m "mv dir/b e"
1590 $ hg ci -m "mv dir/b e"
1591 $ hg log -G --template '({rev}) {desc|firstline}\n'
1591 $ hg log -G --template '({rev}) {desc|firstline}\n'
1592 @ (4) mv dir/b e
1592 @ (4) mv dir/b e
1593 |
1593 |
1594 o (3) mv a b; add d
1594 o (3) mv a b; add d
1595 |
1595 |
1596 o (2) mv b dir/b
1596 o (2) mv b dir/b
1597 |
1597 |
1598 o (1) copy a b
1598 o (1) copy a b
1599 |
1599 |
1600 o (0) add a
1600 o (0) add a
1601
1601
1602
1602
1603 $ testlog a
1603 $ testlog a
1604 []
1604 []
1605 (func
1605 (func
1606 (symbol 'filelog')
1606 (symbol 'filelog')
1607 (string 'a'))
1607 (string 'a'))
1608 <filteredset
1608 <filteredset
1609 <spanset- 0:5>, set([0])>
1609 <spanset- 0:5>, set([0])>
1610 $ testlog a b
1610 $ testlog a b
1611 []
1611 []
1612 (or
1612 (or
1613 (list
1613 (list
1614 (func
1614 (func
1615 (symbol 'filelog')
1615 (symbol 'filelog')
1616 (string 'a'))
1616 (string 'a'))
1617 (func
1617 (func
1618 (symbol 'filelog')
1618 (symbol 'filelog')
1619 (string 'b'))))
1619 (string 'b'))))
1620 <filteredset
1620 <filteredset
1621 <spanset- 0:5>,
1621 <spanset- 0:5>,
1622 <addset
1622 <addset
1623 <baseset+ [0]>,
1623 <baseset+ [0]>,
1624 <baseset+ [1]>>>
1624 <baseset+ [1]>>>
1625
1625
1626 Test falling back to slow path for non-existing files
1626 Test falling back to slow path for non-existing files
1627
1627
1628 $ testlog a c
1628 $ testlog a c
1629 []
1629 []
1630 (func
1630 (func
1631 (symbol '_matchfiles')
1631 (symbol '_matchfiles')
1632 (list
1632 (list
1633 (string 'r:')
1633 (string 'r:')
1634 (string 'd:relpath')
1634 (string 'd:relpath')
1635 (string 'p:a')
1635 (string 'p:a')
1636 (string 'p:c')))
1636 (string 'p:c')))
1637 <filteredset
1637 <filteredset
1638 <spanset- 0:5>,
1638 <spanset- 0:5>,
1639 <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=2147483647>>
1639 <matchfiles patterns=['a', 'c'], include=[] exclude=[], default='relpath', rev=2147483647>>
1640
1640
1641 Test multiple --include/--exclude/paths
1641 Test multiple --include/--exclude/paths
1642
1642
1643 $ testlog --include a --include e --exclude b --exclude e a e
1643 $ testlog --include a --include e --exclude b --exclude e a e
1644 []
1644 []
1645 (func
1645 (func
1646 (symbol '_matchfiles')
1646 (symbol '_matchfiles')
1647 (list
1647 (list
1648 (string 'r:')
1648 (string 'r:')
1649 (string 'd:relpath')
1649 (string 'd:relpath')
1650 (string 'p:a')
1650 (string 'p:a')
1651 (string 'p:e')
1651 (string 'p:e')
1652 (string 'i:a')
1652 (string 'i:a')
1653 (string 'i:e')
1653 (string 'i:e')
1654 (string 'x:b')
1654 (string 'x:b')
1655 (string 'x:e')))
1655 (string 'x:e')))
1656 <filteredset
1656 <filteredset
1657 <spanset- 0:5>,
1657 <spanset- 0:5>,
1658 <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=2147483647>>
1658 <matchfiles patterns=['a', 'e'], include=['a', 'e'] exclude=['b', 'e'], default='relpath', rev=2147483647>>
1659
1659
1660 Test glob expansion of pats
1660 Test glob expansion of pats
1661
1661
1662 $ expandglobs=`"$PYTHON" -c "import mercurial.util; \
1662 $ expandglobs=`"$PYTHON" -c "import mercurial.util; \
1663 > print(mercurial.util.expandglobs and 'true' or 'false')"`
1663 > print(mercurial.util.expandglobs and 'true' or 'false')"`
1664 $ if [ $expandglobs = "true" ]; then
1664 $ if [ $expandglobs = "true" ]; then
1665 > testlog 'a*';
1665 > testlog 'a*';
1666 > else
1666 > else
1667 > testlog a*;
1667 > testlog a*;
1668 > fi;
1668 > fi;
1669 []
1669 []
1670 (func
1670 (func
1671 (symbol 'filelog')
1671 (symbol 'filelog')
1672 (string 'aa'))
1672 (string 'aa'))
1673 <filteredset
1673 <filteredset
1674 <spanset- 0:5>, set([0])>
1674 <spanset- 0:5>, set([0])>
1675
1675
1676 Test --follow on a non-existent directory
1676 Test --follow on a non-existent directory
1677
1677
1678 $ testlog -f dir
1678 $ testlog -f dir
1679 abort: cannot follow file not in parent revision: "dir"
1679 abort: cannot follow file not in parent revision: "dir"
1680 abort: cannot follow file not in parent revision: "dir"
1680 abort: cannot follow file not in parent revision: "dir"
1681 abort: cannot follow file not in parent revision: "dir"
1681 abort: cannot follow file not in parent revision: "dir"
1682
1682
1683 Test --follow on a directory
1683 Test --follow on a directory
1684
1684
1685 $ hg up -q '.^'
1685 $ hg up -q '.^'
1686 $ testlog -f dir
1686 $ testlog -f dir
1687 []
1687 []
1688 (func
1688 (func
1689 (symbol '_matchfiles')
1689 (symbol '_matchfiles')
1690 (list
1690 (list
1691 (string 'r:')
1691 (string 'r:')
1692 (string 'd:relpath')
1692 (string 'd:relpath')
1693 (string 'p:dir')))
1693 (string 'p:dir')))
1694 <filteredset
1694 <filteredset
1695 <generatorsetdesc->,
1695 <generatorsetdesc->,
1696 <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=2147483647>>
1696 <matchfiles patterns=['dir'], include=[] exclude=[], default='relpath', rev=2147483647>>
1697 $ hg up -q tip
1697 $ hg up -q tip
1698
1698
1699 Test --follow on file not in parent revision
1699 Test --follow on file not in parent revision
1700
1700
1701 $ testlog -f a
1701 $ testlog -f a
1702 abort: cannot follow file not in parent revision: "a"
1702 abort: cannot follow file not in parent revision: "a"
1703 abort: cannot follow file not in parent revision: "a"
1703 abort: cannot follow file not in parent revision: "a"
1704 abort: cannot follow file not in parent revision: "a"
1704 abort: cannot follow file not in parent revision: "a"
1705
1705
1706 Test --follow and patterns
1706 Test --follow and patterns
1707
1707
1708 $ testlog -f 'glob:*'
1708 $ testlog -f 'glob:*'
1709 []
1709 []
1710 (func
1710 (func
1711 (symbol '_matchfiles')
1711 (symbol '_matchfiles')
1712 (list
1712 (list
1713 (string 'r:')
1713 (string 'r:')
1714 (string 'd:relpath')
1714 (string 'd:relpath')
1715 (string 'p:glob:*')))
1715 (string 'p:glob:*')))
1716 <filteredset
1716 <filteredset
1717 <generatorsetdesc->,
1717 <generatorsetdesc->,
1718 <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=2147483647>>
1718 <matchfiles patterns=['glob:*'], include=[] exclude=[], default='relpath', rev=2147483647>>
1719
1719
1720 Test --follow on a single rename
1720 Test --follow on a single rename
1721
1721
1722 $ hg up -q 2
1722 $ hg up -q 2
1723 $ testlog -f a
1723 $ testlog -f a
1724 []
1724 []
1725 []
1725 []
1726 <generatorsetdesc->
1726 <generatorsetdesc->
1727
1727
1728 Test --follow and multiple renames
1728 Test --follow and multiple renames
1729
1729
1730 $ hg up -q tip
1730 $ hg up -q tip
1731 $ testlog -f e
1731 $ testlog -f e
1732 []
1732 []
1733 []
1733 []
1734 <generatorsetdesc->
1734 <generatorsetdesc->
1735
1735
1736 Test --follow and multiple filelog heads
1736 Test --follow and multiple filelog heads
1737
1737
1738 $ hg up -q 2
1738 $ hg up -q 2
1739 $ testlog -f g
1739 $ testlog -f g
1740 []
1740 []
1741 []
1741 []
1742 <generatorsetdesc->
1742 <generatorsetdesc->
1743 $ cat log.nodes
1743 $ cat log.nodes
1744 nodetag 2
1744 nodetag 2
1745 nodetag 1
1745 nodetag 1
1746 nodetag 0
1746 nodetag 0
1747 $ hg up -q tip
1747 $ hg up -q tip
1748 $ testlog -f g
1748 $ testlog -f g
1749 []
1749 []
1750 []
1750 []
1751 <generatorsetdesc->
1751 <generatorsetdesc->
1752 $ cat log.nodes
1752 $ cat log.nodes
1753 nodetag 3
1753 nodetag 3
1754 nodetag 2
1754 nodetag 2
1755 nodetag 0
1755 nodetag 0
1756
1756
1757 Test --follow and multiple files
1757 Test --follow and multiple files
1758
1758
1759 $ testlog -f g e
1759 $ testlog -f g e
1760 []
1760 []
1761 []
1761 []
1762 <generatorsetdesc->
1762 <generatorsetdesc->
1763 $ cat log.nodes
1763 $ cat log.nodes
1764 nodetag 4
1764 nodetag 4
1765 nodetag 3
1765 nodetag 3
1766 nodetag 2
1766 nodetag 2
1767 nodetag 1
1767 nodetag 1
1768 nodetag 0
1768 nodetag 0
1769
1769
1770 Test --follow null parent
1770 Test --follow null parent
1771
1771
1772 $ hg up -q null
1772 $ hg up -q null
1773 $ testlog -f
1773 $ testlog -f
1774 []
1774 []
1775 []
1775 []
1776 <baseset []>
1776 <baseset []>
1777
1777
1778 Test --follow-first
1778 Test --follow-first
1779
1779
1780 $ hg up -q 3
1780 $ hg up -q 3
1781 $ echo ee > e
1781 $ echo ee > e
1782 $ hg ci -Am "add another e" e
1782 $ hg ci -Am "add another e" e
1783 created new head
1783 created new head
1784 $ hg merge --tool internal:other 4
1784 $ hg merge --tool internal:other 4
1785 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1785 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
1786 (branch merge, don't forget to commit)
1786 (branch merge, don't forget to commit)
1787 $ echo merge > e
1787 $ echo merge > e
1788 $ hg ci -m "merge 5 and 4"
1788 $ hg ci -m "merge 5 and 4"
1789 $ testlog --follow-first
1789 $ testlog --follow-first
1790 []
1790 []
1791 []
1791 []
1792 <generatorsetdesc->
1792 <generatorsetdesc->
1793
1793
1794 Cannot compare with log --follow-first FILE as it never worked
1794 Cannot compare with log --follow-first FILE as it never worked
1795
1795
1796 $ hg log -G --print-revset --follow-first e
1796 $ hg log -G --print-revset --follow-first e
1797 []
1797 []
1798 []
1798 []
1799 <generatorsetdesc->
1799 <generatorsetdesc->
1800 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1800 $ hg log -G --follow-first e --template '{rev} {desc|firstline}\n'
1801 @ 6 merge 5 and 4
1801 @ 6 merge 5 and 4
1802 |\
1802 |\
1803 | ~
1803 | ~
1804 o 5 add another e
1804 o 5 add another e
1805 |
1805 |
1806 ~
1806 ~
1807
1807
1808 Test --copies
1808 Test --copies
1809
1809
1810 $ hg log -G --copies --template "{rev} {desc|firstline} \
1810 $ hg log -G --copies --template "{rev} {desc|firstline} \
1811 > copies: {file_copies_switch}\n"
1811 > copies: {file_copies_switch}\n"
1812 @ 6 merge 5 and 4 copies:
1812 @ 6 merge 5 and 4 copies:
1813 |\
1813 |\
1814 | o 5 add another e copies:
1814 | o 5 add another e copies:
1815 | |
1815 | |
1816 o | 4 mv dir/b e copies: e (dir/b)
1816 o | 4 mv dir/b e copies: e (dir/b)
1817 |/
1817 |/
1818 o 3 mv a b; add d copies: b (a)g (f)
1818 o 3 mv a b; add d copies: b (a)g (f)
1819 |
1819 |
1820 o 2 mv b dir/b copies: dir/b (b)
1820 o 2 mv b dir/b copies: dir/b (b)
1821 |
1821 |
1822 o 1 copy a b copies: b (a)g (f)
1822 o 1 copy a b copies: b (a)g (f)
1823 |
1823 |
1824 o 0 add a copies:
1824 o 0 add a copies:
1825
1825
1826 Test "set:..." and parent revision
1826 Test "set:..." and parent revision
1827
1827
1828 $ hg up -q 4
1828 $ hg up -q 4
1829 $ testlog "set:copied()"
1829 $ testlog "set:copied()"
1830 []
1830 []
1831 (func
1831 (func
1832 (symbol '_matchfiles')
1832 (symbol '_matchfiles')
1833 (list
1833 (list
1834 (string 'r:')
1834 (string 'r:')
1835 (string 'd:relpath')
1835 (string 'd:relpath')
1836 (string 'p:set:copied()')))
1836 (string 'p:set:copied()')))
1837 <filteredset
1837 <filteredset
1838 <spanset- 0:7>,
1838 <spanset- 0:7>,
1839 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=2147483647>>
1839 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='relpath', rev=2147483647>>
1840 $ testlog --include "set:copied()"
1840 $ testlog --include "set:copied()"
1841 []
1841 []
1842 (func
1842 (func
1843 (symbol '_matchfiles')
1843 (symbol '_matchfiles')
1844 (list
1844 (list
1845 (string 'r:')
1845 (string 'r:')
1846 (string 'd:relpath')
1846 (string 'd:relpath')
1847 (string 'i:set:copied()')))
1847 (string 'i:set:copied()')))
1848 <filteredset
1848 <filteredset
1849 <spanset- 0:7>,
1849 <spanset- 0:7>,
1850 <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=2147483647>>
1850 <matchfiles patterns=[], include=['set:copied()'] exclude=[], default='relpath', rev=2147483647>>
1851 $ testlog -r "sort(file('set:copied()'), -rev)"
1851 $ testlog -r "sort(file('set:copied()'), -rev)"
1852 ['sort(file(\'set:copied()\'), -rev)']
1852 ['sort(file(\'set:copied()\'), -rev)']
1853 []
1853 []
1854 <filteredset
1854 <filteredset
1855 <fullreposet- 0:7>,
1855 <fullreposet- 0:7>,
1856 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='glob', rev=None>>
1856 <matchfiles patterns=['set:copied()'], include=[] exclude=[], default='glob', rev=None>>
1857
1857
1858 Test --removed
1858 Test --removed
1859
1859
1860 $ testlog --removed
1860 $ testlog --removed
1861 []
1861 []
1862 []
1862 []
1863 <spanset- 0:7>
1863 <spanset- 0:7>
1864 $ testlog --removed a
1864 $ testlog --removed a
1865 []
1865 []
1866 (func
1866 (func
1867 (symbol '_matchfiles')
1867 (symbol '_matchfiles')
1868 (list
1868 (list
1869 (string 'r:')
1869 (string 'r:')
1870 (string 'd:relpath')
1870 (string 'd:relpath')
1871 (string 'p:a')))
1871 (string 'p:a')))
1872 <filteredset
1872 <filteredset
1873 <spanset- 0:7>,
1873 <spanset- 0:7>,
1874 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
1874 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
1875 $ testlog --removed --follow a
1875 $ testlog --removed --follow a
1876 []
1876 []
1877 (func
1877 (func
1878 (symbol '_matchfiles')
1878 (symbol '_matchfiles')
1879 (list
1879 (list
1880 (string 'r:')
1880 (string 'r:')
1881 (string 'd:relpath')
1881 (string 'd:relpath')
1882 (string 'p:a')))
1882 (string 'p:a')))
1883 <filteredset
1883 <filteredset
1884 <generatorsetdesc->,
1884 <generatorsetdesc->,
1885 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
1885 <matchfiles patterns=['a'], include=[] exclude=[], default='relpath', rev=2147483647>>
1886
1886
1887 Test --patch and --stat with --follow and --follow-first
1887 Test --patch and --stat with --follow and --follow-first
1888
1888
1889 $ hg up -q 3
1889 $ hg up -q 3
1890 $ hg log -G --git --patch b
1890 $ hg log -G --git --patch b
1891 o changeset: 1:216d4c92cf98
1891 o changeset: 1:216d4c92cf98
1892 | user: test
1892 | user: test
1893 ~ date: Thu Jan 01 00:00:00 1970 +0000
1893 ~ date: Thu Jan 01 00:00:00 1970 +0000
1894 summary: copy a b
1894 summary: copy a b
1895
1895
1896 diff --git a/a b/b
1896 diff --git a/a b/b
1897 copy from a
1897 copy from a
1898 copy to b
1898 copy to b
1899
1899
1900
1900
1901 $ hg log -G --git --stat b
1901 $ hg log -G --git --stat b
1902 o changeset: 1:216d4c92cf98
1902 o changeset: 1:216d4c92cf98
1903 | user: test
1903 | user: test
1904 ~ date: Thu Jan 01 00:00:00 1970 +0000
1904 ~ date: Thu Jan 01 00:00:00 1970 +0000
1905 summary: copy a b
1905 summary: copy a b
1906
1906
1907 b | 0
1907 b | 0
1908 1 files changed, 0 insertions(+), 0 deletions(-)
1908 1 files changed, 0 insertions(+), 0 deletions(-)
1909
1909
1910
1910
1911 $ hg log -G --git --patch --follow b
1911 $ hg log -G --git --patch --follow b
1912 o changeset: 1:216d4c92cf98
1912 o changeset: 1:216d4c92cf98
1913 | user: test
1913 | user: test
1914 | date: Thu Jan 01 00:00:00 1970 +0000
1914 | date: Thu Jan 01 00:00:00 1970 +0000
1915 | summary: copy a b
1915 | summary: copy a b
1916 |
1916 |
1917 | diff --git a/a b/b
1917 | diff --git a/a b/b
1918 | copy from a
1918 | copy from a
1919 | copy to b
1919 | copy to b
1920 |
1920 |
1921 o changeset: 0:f8035bb17114
1921 o changeset: 0:f8035bb17114
1922 user: test
1922 user: test
1923 date: Thu Jan 01 00:00:00 1970 +0000
1923 date: Thu Jan 01 00:00:00 1970 +0000
1924 summary: add a
1924 summary: add a
1925
1925
1926 diff --git a/a b/a
1926 diff --git a/a b/a
1927 new file mode 100644
1927 new file mode 100644
1928 --- /dev/null
1928 --- /dev/null
1929 +++ b/a
1929 +++ b/a
1930 @@ -0,0 +1,1 @@
1930 @@ -0,0 +1,1 @@
1931 +a
1931 +a
1932
1932
1933
1933
1934 $ hg log -G --git --stat --follow b
1934 $ hg log -G --git --stat --follow b
1935 o changeset: 1:216d4c92cf98
1935 o changeset: 1:216d4c92cf98
1936 | user: test
1936 | user: test
1937 | date: Thu Jan 01 00:00:00 1970 +0000
1937 | date: Thu Jan 01 00:00:00 1970 +0000
1938 | summary: copy a b
1938 | summary: copy a b
1939 |
1939 |
1940 | b | 0
1940 | b | 0
1941 | 1 files changed, 0 insertions(+), 0 deletions(-)
1941 | 1 files changed, 0 insertions(+), 0 deletions(-)
1942 |
1942 |
1943 o changeset: 0:f8035bb17114
1943 o changeset: 0:f8035bb17114
1944 user: test
1944 user: test
1945 date: Thu Jan 01 00:00:00 1970 +0000
1945 date: Thu Jan 01 00:00:00 1970 +0000
1946 summary: add a
1946 summary: add a
1947
1947
1948 a | 1 +
1948 a | 1 +
1949 1 files changed, 1 insertions(+), 0 deletions(-)
1949 1 files changed, 1 insertions(+), 0 deletions(-)
1950
1950
1951
1951
1952 $ hg up -q 6
1952 $ hg up -q 6
1953 $ hg log -G --git --patch --follow-first e
1953 $ hg log -G --git --patch --follow-first e
1954 @ changeset: 6:9feeac35a70a
1954 @ changeset: 6:9feeac35a70a
1955 |\ tag: tip
1955 |\ tag: tip
1956 | ~ parent: 5:99b31f1c2782
1956 | ~ parent: 5:99b31f1c2782
1957 | parent: 4:17d952250a9d
1957 | parent: 4:17d952250a9d
1958 | user: test
1958 | user: test
1959 | date: Thu Jan 01 00:00:00 1970 +0000
1959 | date: Thu Jan 01 00:00:00 1970 +0000
1960 | summary: merge 5 and 4
1960 | summary: merge 5 and 4
1961 |
1961 |
1962 | diff --git a/e b/e
1962 | diff --git a/e b/e
1963 | --- a/e
1963 | --- a/e
1964 | +++ b/e
1964 | +++ b/e
1965 | @@ -1,1 +1,1 @@
1965 | @@ -1,1 +1,1 @@
1966 | -ee
1966 | -ee
1967 | +merge
1967 | +merge
1968 |
1968 |
1969 o changeset: 5:99b31f1c2782
1969 o changeset: 5:99b31f1c2782
1970 | parent: 3:5918b8d165d1
1970 | parent: 3:5918b8d165d1
1971 ~ user: test
1971 ~ user: test
1972 date: Thu Jan 01 00:00:00 1970 +0000
1972 date: Thu Jan 01 00:00:00 1970 +0000
1973 summary: add another e
1973 summary: add another e
1974
1974
1975 diff --git a/e b/e
1975 diff --git a/e b/e
1976 new file mode 100644
1976 new file mode 100644
1977 --- /dev/null
1977 --- /dev/null
1978 +++ b/e
1978 +++ b/e
1979 @@ -0,0 +1,1 @@
1979 @@ -0,0 +1,1 @@
1980 +ee
1980 +ee
1981
1981
1982
1982
1983 Test old-style --rev
1983 Test old-style --rev
1984
1984
1985 $ hg tag 'foo-bar'
1985 $ hg tag 'foo-bar'
1986 $ testlog -r 'foo-bar'
1986 $ testlog -r 'foo-bar'
1987 ['foo-bar']
1987 ['foo-bar']
1988 []
1988 []
1989 <baseset [6]>
1989 <baseset [6]>
1990
1990
1991 Test --follow and forward --rev
1991 Test --follow and forward --rev
1992
1992
1993 $ hg up -q 6
1993 $ hg up -q 6
1994 $ echo g > g
1994 $ echo g > g
1995 $ hg ci -Am 'add g' g
1995 $ hg ci -Am 'add g' g
1996 created new head
1996 created new head
1997 $ hg up -q 2
1997 $ hg up -q 2
1998 $ hg log -G --template "{rev} {desc|firstline}\n"
1998 $ hg log -G --template "{rev} {desc|firstline}\n"
1999 o 8 add g
1999 o 8 add g
2000 |
2000 |
2001 | o 7 Added tag foo-bar for changeset 9feeac35a70a
2001 | o 7 Added tag foo-bar for changeset 9feeac35a70a
2002 |/
2002 |/
2003 o 6 merge 5 and 4
2003 o 6 merge 5 and 4
2004 |\
2004 |\
2005 | o 5 add another e
2005 | o 5 add another e
2006 | |
2006 | |
2007 o | 4 mv dir/b e
2007 o | 4 mv dir/b e
2008 |/
2008 |/
2009 o 3 mv a b; add d
2009 o 3 mv a b; add d
2010 |
2010 |
2011 @ 2 mv b dir/b
2011 @ 2 mv b dir/b
2012 |
2012 |
2013 o 1 copy a b
2013 o 1 copy a b
2014 |
2014 |
2015 o 0 add a
2015 o 0 add a
2016
2016
2017 $ hg archive -r 7 archive
2017 $ hg archive -r 7 archive
2018 $ grep changessincelatesttag archive/.hg_archival.txt
2018 $ grep changessincelatesttag archive/.hg_archival.txt
2019 changessincelatesttag: 1
2019 changessincelatesttag: 1
2020 $ rm -r archive
2020 $ rm -r archive
2021
2021
2022 changessincelatesttag with no prior tag
2022 changessincelatesttag with no prior tag
2023 $ hg archive -r 4 archive
2023 $ hg archive -r 4 archive
2024 $ grep changessincelatesttag archive/.hg_archival.txt
2024 $ grep changessincelatesttag archive/.hg_archival.txt
2025 changessincelatesttag: 5
2025 changessincelatesttag: 5
2026
2026
2027 $ hg export 'all()'
2027 $ hg export 'all()'
2028 # HG changeset patch
2028 # HG changeset patch
2029 # User test
2029 # User test
2030 # Date 0 0
2030 # Date 0 0
2031 # Thu Jan 01 00:00:00 1970 +0000
2031 # Thu Jan 01 00:00:00 1970 +0000
2032 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2032 # Node ID f8035bb17114da16215af3436ec5222428ace8ee
2033 # Parent 0000000000000000000000000000000000000000
2033 # Parent 0000000000000000000000000000000000000000
2034 add a
2034 add a
2035
2035
2036 diff -r 000000000000 -r f8035bb17114 a
2036 diff -r 000000000000 -r f8035bb17114 a
2037 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2037 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2038 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2038 +++ b/a Thu Jan 01 00:00:00 1970 +0000
2039 @@ -0,0 +1,1 @@
2039 @@ -0,0 +1,1 @@
2040 +a
2040 +a
2041 diff -r 000000000000 -r f8035bb17114 aa
2041 diff -r 000000000000 -r f8035bb17114 aa
2042 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2042 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2043 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2043 +++ b/aa Thu Jan 01 00:00:00 1970 +0000
2044 @@ -0,0 +1,1 @@
2044 @@ -0,0 +1,1 @@
2045 +aa
2045 +aa
2046 diff -r 000000000000 -r f8035bb17114 f
2046 diff -r 000000000000 -r f8035bb17114 f
2047 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2047 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2048 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2048 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2049 @@ -0,0 +1,1 @@
2049 @@ -0,0 +1,1 @@
2050 +f
2050 +f
2051 # HG changeset patch
2051 # HG changeset patch
2052 # User test
2052 # User test
2053 # Date 0 0
2053 # Date 0 0
2054 # Thu Jan 01 00:00:00 1970 +0000
2054 # Thu Jan 01 00:00:00 1970 +0000
2055 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2055 # Node ID 216d4c92cf98ff2b4641d508b76b529f3d424c92
2056 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2056 # Parent f8035bb17114da16215af3436ec5222428ace8ee
2057 copy a b
2057 copy a b
2058
2058
2059 diff -r f8035bb17114 -r 216d4c92cf98 b
2059 diff -r f8035bb17114 -r 216d4c92cf98 b
2060 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2060 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2061 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2061 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2062 @@ -0,0 +1,1 @@
2062 @@ -0,0 +1,1 @@
2063 +a
2063 +a
2064 diff -r f8035bb17114 -r 216d4c92cf98 g
2064 diff -r f8035bb17114 -r 216d4c92cf98 g
2065 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2065 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2066 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2066 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2067 @@ -0,0 +1,1 @@
2067 @@ -0,0 +1,1 @@
2068 +f
2068 +f
2069 # HG changeset patch
2069 # HG changeset patch
2070 # User test
2070 # User test
2071 # Date 0 0
2071 # Date 0 0
2072 # Thu Jan 01 00:00:00 1970 +0000
2072 # Thu Jan 01 00:00:00 1970 +0000
2073 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2073 # Node ID bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2074 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2074 # Parent 216d4c92cf98ff2b4641d508b76b529f3d424c92
2075 mv b dir/b
2075 mv b dir/b
2076
2076
2077 diff -r 216d4c92cf98 -r bb573313a9e8 b
2077 diff -r 216d4c92cf98 -r bb573313a9e8 b
2078 --- a/b Thu Jan 01 00:00:00 1970 +0000
2078 --- a/b Thu Jan 01 00:00:00 1970 +0000
2079 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2079 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2080 @@ -1,1 +0,0 @@
2080 @@ -1,1 +0,0 @@
2081 -a
2081 -a
2082 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2082 diff -r 216d4c92cf98 -r bb573313a9e8 dir/b
2083 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2083 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2084 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2084 +++ b/dir/b Thu Jan 01 00:00:00 1970 +0000
2085 @@ -0,0 +1,1 @@
2085 @@ -0,0 +1,1 @@
2086 +a
2086 +a
2087 diff -r 216d4c92cf98 -r bb573313a9e8 f
2087 diff -r 216d4c92cf98 -r bb573313a9e8 f
2088 --- a/f Thu Jan 01 00:00:00 1970 +0000
2088 --- a/f Thu Jan 01 00:00:00 1970 +0000
2089 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2089 +++ b/f Thu Jan 01 00:00:00 1970 +0000
2090 @@ -1,1 +1,2 @@
2090 @@ -1,1 +1,2 @@
2091 f
2091 f
2092 +f
2092 +f
2093 diff -r 216d4c92cf98 -r bb573313a9e8 g
2093 diff -r 216d4c92cf98 -r bb573313a9e8 g
2094 --- a/g Thu Jan 01 00:00:00 1970 +0000
2094 --- a/g Thu Jan 01 00:00:00 1970 +0000
2095 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2095 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2096 @@ -1,1 +1,2 @@
2096 @@ -1,1 +1,2 @@
2097 f
2097 f
2098 +g
2098 +g
2099 # HG changeset patch
2099 # HG changeset patch
2100 # User test
2100 # User test
2101 # Date 0 0
2101 # Date 0 0
2102 # Thu Jan 01 00:00:00 1970 +0000
2102 # Thu Jan 01 00:00:00 1970 +0000
2103 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2103 # Node ID 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2104 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2104 # Parent bb573313a9e8349099b6ea2b2fb1fc7f424446f3
2105 mv a b; add d
2105 mv a b; add d
2106
2106
2107 diff -r bb573313a9e8 -r 5918b8d165d1 a
2107 diff -r bb573313a9e8 -r 5918b8d165d1 a
2108 --- a/a Thu Jan 01 00:00:00 1970 +0000
2108 --- a/a Thu Jan 01 00:00:00 1970 +0000
2109 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2109 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2110 @@ -1,1 +0,0 @@
2110 @@ -1,1 +0,0 @@
2111 -a
2111 -a
2112 diff -r bb573313a9e8 -r 5918b8d165d1 b
2112 diff -r bb573313a9e8 -r 5918b8d165d1 b
2113 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2113 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2114 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2114 +++ b/b Thu Jan 01 00:00:00 1970 +0000
2115 @@ -0,0 +1,1 @@
2115 @@ -0,0 +1,1 @@
2116 +a
2116 +a
2117 diff -r bb573313a9e8 -r 5918b8d165d1 d
2117 diff -r bb573313a9e8 -r 5918b8d165d1 d
2118 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2118 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2119 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2119 +++ b/d Thu Jan 01 00:00:00 1970 +0000
2120 @@ -0,0 +1,1 @@
2120 @@ -0,0 +1,1 @@
2121 +a
2121 +a
2122 diff -r bb573313a9e8 -r 5918b8d165d1 g
2122 diff -r bb573313a9e8 -r 5918b8d165d1 g
2123 --- a/g Thu Jan 01 00:00:00 1970 +0000
2123 --- a/g Thu Jan 01 00:00:00 1970 +0000
2124 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2124 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2125 @@ -1,2 +1,2 @@
2125 @@ -1,2 +1,2 @@
2126 f
2126 f
2127 -g
2127 -g
2128 +f
2128 +f
2129 # HG changeset patch
2129 # HG changeset patch
2130 # User test
2130 # User test
2131 # Date 0 0
2131 # Date 0 0
2132 # Thu Jan 01 00:00:00 1970 +0000
2132 # Thu Jan 01 00:00:00 1970 +0000
2133 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2133 # Node ID 17d952250a9d03cc3dc77b199ab60e959b9b0260
2134 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2134 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2135 mv dir/b e
2135 mv dir/b e
2136
2136
2137 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2137 diff -r 5918b8d165d1 -r 17d952250a9d dir/b
2138 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2138 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2139 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2139 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2140 @@ -1,1 +0,0 @@
2140 @@ -1,1 +0,0 @@
2141 -a
2141 -a
2142 diff -r 5918b8d165d1 -r 17d952250a9d e
2142 diff -r 5918b8d165d1 -r 17d952250a9d 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 +a
2146 +a
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 99b31f1c2782e2deb1723cef08930f70fc84b37b
2151 # Node ID 99b31f1c2782e2deb1723cef08930f70fc84b37b
2152 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2152 # Parent 5918b8d165d1364e78a66d02e66caa0133c5d1ed
2153 add another e
2153 add another e
2154
2154
2155 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2155 diff -r 5918b8d165d1 -r 99b31f1c2782 e
2156 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2156 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2157 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2157 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2158 @@ -0,0 +1,1 @@
2158 @@ -0,0 +1,1 @@
2159 +ee
2159 +ee
2160 # HG changeset patch
2160 # HG changeset patch
2161 # User test
2161 # User test
2162 # Date 0 0
2162 # Date 0 0
2163 # Thu Jan 01 00:00:00 1970 +0000
2163 # Thu Jan 01 00:00:00 1970 +0000
2164 # Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
2164 # Node ID 9feeac35a70aa325519bbf3178683271113f2b8f
2165 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2165 # Parent 99b31f1c2782e2deb1723cef08930f70fc84b37b
2166 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2166 # Parent 17d952250a9d03cc3dc77b199ab60e959b9b0260
2167 merge 5 and 4
2167 merge 5 and 4
2168
2168
2169 diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
2169 diff -r 99b31f1c2782 -r 9feeac35a70a dir/b
2170 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2170 --- a/dir/b Thu Jan 01 00:00:00 1970 +0000
2171 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2171 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2172 @@ -1,1 +0,0 @@
2172 @@ -1,1 +0,0 @@
2173 -a
2173 -a
2174 diff -r 99b31f1c2782 -r 9feeac35a70a e
2174 diff -r 99b31f1c2782 -r 9feeac35a70a e
2175 --- a/e Thu Jan 01 00:00:00 1970 +0000
2175 --- a/e Thu Jan 01 00:00:00 1970 +0000
2176 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2176 +++ b/e Thu Jan 01 00:00:00 1970 +0000
2177 @@ -1,1 +1,1 @@
2177 @@ -1,1 +1,1 @@
2178 -ee
2178 -ee
2179 +merge
2179 +merge
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 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
2184 # Node ID 9febbb9c8b2e09670a2fb550cb1e4e01a2c7e9fd
2185 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2185 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2186 Added tag foo-bar for changeset 9feeac35a70a
2186 Added tag foo-bar for changeset 9feeac35a70a
2187
2187
2188 diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
2188 diff -r 9feeac35a70a -r 9febbb9c8b2e .hgtags
2189 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2189 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2190 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2190 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2191 @@ -0,0 +1,1 @@
2191 @@ -0,0 +1,1 @@
2192 +9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
2192 +9feeac35a70aa325519bbf3178683271113f2b8f foo-bar
2193 # HG changeset patch
2193 # HG changeset patch
2194 # User test
2194 # User test
2195 # Date 0 0
2195 # Date 0 0
2196 # Thu Jan 01 00:00:00 1970 +0000
2196 # Thu Jan 01 00:00:00 1970 +0000
2197 # Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
2197 # Node ID 3bd4551ec3fe1c0696241f236abe857a53c6d6e7
2198 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2198 # Parent 9feeac35a70aa325519bbf3178683271113f2b8f
2199 add g
2199 add g
2200
2200
2201 diff -r 9feeac35a70a -r 3bd4551ec3fe g
2201 diff -r 9feeac35a70a -r 3bd4551ec3fe g
2202 --- a/g Thu Jan 01 00:00:00 1970 +0000
2202 --- a/g Thu Jan 01 00:00:00 1970 +0000
2203 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2203 +++ b/g Thu Jan 01 00:00:00 1970 +0000
2204 @@ -1,2 +1,1 @@
2204 @@ -1,2 +1,1 @@
2205 -f
2205 -f
2206 -f
2206 -f
2207 +g
2207 +g
2208 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2208 $ testlog --follow -r6 -r8 -r5 -r7 -r4
2209 ['6', '8', '5', '7', '4']
2209 ['6', '8', '5', '7', '4']
2210 []
2210 []
2211 <generatorsetdesc->
2211 <generatorsetdesc->
2212
2212
2213 Test --follow-first and forward --rev
2213 Test --follow-first and forward --rev
2214
2214
2215 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2215 $ testlog --follow-first -r6 -r8 -r5 -r7 -r4
2216 ['6', '8', '5', '7', '4']
2216 ['6', '8', '5', '7', '4']
2217 []
2217 []
2218 <generatorsetdesc->
2218 <generatorsetdesc->
2219
2219
2220 Test --follow and backward --rev
2220 Test --follow and backward --rev
2221
2221
2222 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2222 $ testlog --follow -r6 -r5 -r7 -r8 -r4
2223 ['6', '5', '7', '8', '4']
2223 ['6', '5', '7', '8', '4']
2224 []
2224 []
2225 <generatorsetdesc->
2225 <generatorsetdesc->
2226
2226
2227 Test --follow-first and backward --rev
2227 Test --follow-first and backward --rev
2228
2228
2229 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2229 $ testlog --follow-first -r6 -r5 -r7 -r8 -r4
2230 ['6', '5', '7', '8', '4']
2230 ['6', '5', '7', '8', '4']
2231 []
2231 []
2232 <generatorsetdesc->
2232 <generatorsetdesc->
2233
2233
2234 Test --follow with --rev of graphlog extension
2234 Test --follow with --rev of graphlog extension
2235
2235
2236 $ hg --config extensions.graphlog= glog -qfr1
2236 $ hg --config extensions.graphlog= glog -qfr1
2237 o 1:216d4c92cf98
2237 o 1:216d4c92cf98
2238 |
2238 |
2239 o 0:f8035bb17114
2239 o 0:f8035bb17114
2240
2240
2241
2241
2242 Test subdir
2242 Test subdir
2243
2243
2244 $ hg up -q 3
2244 $ hg up -q 3
2245 $ cd dir
2245 $ cd dir
2246 $ testlog .
2246 $ testlog .
2247 []
2247 []
2248 (func
2248 (func
2249 (symbol '_matchfiles')
2249 (symbol '_matchfiles')
2250 (list
2250 (list
2251 (string 'r:')
2251 (string 'r:')
2252 (string 'd:relpath')
2252 (string 'd:relpath')
2253 (string 'p:.')))
2253 (string 'p:.')))
2254 <filteredset
2254 <filteredset
2255 <spanset- 0:9>,
2255 <spanset- 0:9>,
2256 <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=2147483647>>
2256 <matchfiles patterns=['.'], include=[] exclude=[], default='relpath', rev=2147483647>>
2257 $ testlog ../b
2257 $ testlog ../b
2258 []
2258 []
2259 (func
2259 (func
2260 (symbol 'filelog')
2260 (symbol 'filelog')
2261 (string '../b'))
2261 (string '../b'))
2262 <filteredset
2262 <filteredset
2263 <spanset- 0:9>, set([1])>
2263 <spanset- 0:9>, set([1])>
2264 $ testlog -f ../b
2264 $ testlog -f ../b
2265 []
2265 []
2266 []
2266 []
2267 <generatorsetdesc->
2267 <generatorsetdesc->
2268 $ cd ..
2268 $ cd ..
2269
2269
2270 Test --hidden
2270 Test --hidden
2271 (enable obsolete)
2271 (enable obsolete)
2272
2272
2273 $ cat >> $HGRCPATH << EOF
2273 $ cat >> $HGRCPATH << EOF
2274 > [experimental]
2274 > [experimental]
2275 > evolution.createmarkers=True
2275 > evolution.createmarkers=True
2276 > EOF
2276 > EOF
2277
2277
2278 $ hg debugobsolete `hg id --debug -i -r 8`
2278 $ hg debugobsolete `hg id --debug -i -r 8`
2279 1 new obsolescence markers
2279 1 new obsolescence markers
2280 obsoleted 1 changesets
2280 obsoleted 1 changesets
2281 $ testlog
2281 $ testlog
2282 []
2282 []
2283 []
2283 []
2284 <spanset- 0:9>
2284 <spanset- 0:9>
2285 $ testlog --hidden
2285 $ testlog --hidden
2286 []
2286 []
2287 []
2287 []
2288 <spanset- 0:9>
2288 <spanset- 0:9>
2289 $ hg log -G --template '{rev} {desc}\n'
2289 $ hg log -G --template '{rev} {desc}\n'
2290 o 7 Added tag foo-bar for changeset 9feeac35a70a
2290 o 7 Added tag foo-bar for changeset 9feeac35a70a
2291 |
2291 |
2292 o 6 merge 5 and 4
2292 o 6 merge 5 and 4
2293 |\
2293 |\
2294 | o 5 add another e
2294 | o 5 add another e
2295 | |
2295 | |
2296 o | 4 mv dir/b e
2296 o | 4 mv dir/b e
2297 |/
2297 |/
2298 @ 3 mv a b; add d
2298 @ 3 mv a b; add d
2299 |
2299 |
2300 o 2 mv b dir/b
2300 o 2 mv b dir/b
2301 |
2301 |
2302 o 1 copy a b
2302 o 1 copy a b
2303 |
2303 |
2304 o 0 add a
2304 o 0 add a
2305
2305
2306
2306
2307 A template without trailing newline should do something sane
2307 A template without trailing newline should do something sane
2308
2308
2309 $ hg log -G -r ::2 --template '{rev} {desc}'
2309 $ hg log -G -r ::2 --template '{rev} {desc}'
2310 o 2 mv b dir/b
2310 o 2 mv b dir/b
2311 |
2311 |
2312 o 1 copy a b
2312 o 1 copy a b
2313 |
2313 |
2314 o 0 add a
2314 o 0 add a
2315
2315
2316
2316
2317 Extra newlines must be preserved
2317 Extra newlines must be preserved
2318
2318
2319 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2319 $ hg log -G -r ::2 --template '\n{rev} {desc}\n\n'
2320 o
2320 o
2321 | 2 mv b dir/b
2321 | 2 mv b dir/b
2322 |
2322 |
2323 o
2323 o
2324 | 1 copy a b
2324 | 1 copy a b
2325 |
2325 |
2326 o
2326 o
2327 0 add a
2327 0 add a
2328
2328
2329
2329
2330 The almost-empty template should do something sane too ...
2330 The almost-empty template should do something sane too ...
2331
2331
2332 $ hg log -G -r ::2 --template '\n'
2332 $ hg log -G -r ::2 --template '\n'
2333 o
2333 o
2334 |
2334 |
2335 o
2335 o
2336 |
2336 |
2337 o
2337 o
2338
2338
2339
2339
2340 issue3772
2340 issue3772
2341
2341
2342 $ hg log -G -r :null
2342 $ hg log -G -r :null
2343 o changeset: 0:f8035bb17114
2343 o changeset: 0:f8035bb17114
2344 | user: test
2344 | user: test
2345 | date: Thu Jan 01 00:00:00 1970 +0000
2345 | date: Thu Jan 01 00:00:00 1970 +0000
2346 | summary: add a
2346 | summary: add a
2347 |
2347 |
2348 o changeset: -1:000000000000
2348 o changeset: -1:000000000000
2349 user:
2349 user:
2350 date: Thu Jan 01 00:00:00 1970 +0000
2350 date: Thu Jan 01 00:00:00 1970 +0000
2351
2351
2352 $ hg log -G -r null:null
2352 $ hg log -G -r null:null
2353 o changeset: -1:000000000000
2353 o changeset: -1:000000000000
2354 user:
2354 user:
2355 date: Thu Jan 01 00:00:00 1970 +0000
2355 date: Thu Jan 01 00:00:00 1970 +0000
2356
2356
2357
2357
2358 should not draw line down to null due to the magic of fullreposet
2358 should not draw line down to null due to the magic of fullreposet
2359
2359
2360 $ hg log -G -r 'all()' | tail -6
2360 $ hg log -G -r 'all()' | tail -6
2361 |
2361 |
2362 o changeset: 0:f8035bb17114
2362 o changeset: 0:f8035bb17114
2363 user: test
2363 user: test
2364 date: Thu Jan 01 00:00:00 1970 +0000
2364 date: Thu Jan 01 00:00:00 1970 +0000
2365 summary: add a
2365 summary: add a
2366
2366
2367
2367
2368 $ hg log -G -r 'branch(default)' | tail -6
2368 $ hg log -G -r 'branch(default)' | tail -6
2369 |
2369 |
2370 o changeset: 0:f8035bb17114
2370 o changeset: 0:f8035bb17114
2371 user: test
2371 user: test
2372 date: Thu Jan 01 00:00:00 1970 +0000
2372 date: Thu Jan 01 00:00:00 1970 +0000
2373 summary: add a
2373 summary: add a
2374
2374
2375
2375
2376 working-directory revision
2376 working-directory revision
2377
2377
2378 $ hg log -G -qr '. + wdir()'
2378 $ hg log -G -qr '. + wdir()'
2379 o 2147483647:ffffffffffff
2379 o 2147483647:ffffffffffff
2380 |
2380 |
2381 @ 3:5918b8d165d1
2381 @ 3:5918b8d165d1
2382 |
2382 |
2383 ~
2383 ~
2384
2384
2385 node template with changesetprinter:
2385 node template with changesetprinter:
2386
2386
2387 $ hg log -Gqr 5:7 --config command-templates.graphnode='"{rev}"'
2387 $ hg log -Gqr 5:7 --config command-templates.graphnode='"{rev}"'
2388 7 7:9febbb9c8b2e
2388 7 7:9febbb9c8b2e
2389 |
2389 |
2390 6 6:9feeac35a70a
2390 6 6:9feeac35a70a
2391 |\
2391 |\
2392 | ~
2392 | ~
2393 5 5:99b31f1c2782
2393 5 5:99b31f1c2782
2394 |
2394 |
2395 ~
2395 ~
2396
2396
2397 node template with changesetprinter (legacy config):
2397 node template with changesetprinter (legacy config):
2398
2398
2399 $ hg log -Gqr 5:7 --config ui.graphnodetemplate='"{rev}"'
2399 $ hg log -Gqr 5:7 --config ui.graphnodetemplate='"{rev}"'
2400 7 7:9febbb9c8b2e
2400 7 7:9febbb9c8b2e
2401 |
2401 |
2402 6 6:9feeac35a70a
2402 6 6:9feeac35a70a
2403 |\
2403 |\
2404 | ~
2404 | ~
2405 5 5:99b31f1c2782
2405 5 5:99b31f1c2782
2406 |
2406 |
2407 ~
2407 ~
2408
2408
2409 node template with changesettemplater (shared cache variable):
2409 node template with changesettemplater (shared cache variable):
2410
2410
2411 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2411 $ hg log -Gr 5:7 -T '{latesttag % "{rev} {tag}+{distance}"}\n' \
2412 > --config command-templates.graphnode='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2412 > --config command-templates.graphnode='{ifeq(latesttagdistance, 0, "#", graphnode)}'
2413 o 7 foo-bar+1
2413 o 7 foo-bar+1
2414 |
2414 |
2415 # 6 foo-bar+0
2415 # 6 foo-bar+0
2416 |\
2416 |\
2417 | ~
2417 | ~
2418 o 5 null+5
2418 o 5 null+5
2419 |
2419 |
2420 ~
2420 ~
2421
2421
2422 label() should just work in node template:
2422 label() should just work in node template:
2423
2423
2424 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2424 $ hg log -Gqr 7 --config extensions.color= --color=debug \
2425 > --config command-templates.graphnode='{label("branch.{branch}", rev)}'
2425 > --config command-templates.graphnode='{label("branch.{branch}", rev)}'
2426 [branch.default|7] [log.node|7:9febbb9c8b2e]
2426 [branch.default|7] [log.node|7:9febbb9c8b2e]
2427 |
2427 |
2428 ~
2428 ~
2429
2429
2430 $ cd ..
2430 $ cd ..
2431
2431
2432 change graph edge styling
2432 change graph edge styling
2433
2433
2434 $ cd repo
2434 $ cd repo
2435 $ cat << EOF >> $HGRCPATH
2435 $ cat << EOF >> $HGRCPATH
2436 > [experimental]
2436 > [experimental]
2437 > graphstyle.parent = |
2437 > graphstyle.parent = |
2438 > graphstyle.grandparent = :
2438 > graphstyle.grandparent = :
2439 > graphstyle.missing =
2439 > graphstyle.missing =
2440 > EOF
2440 > EOF
2441 $ hg log -G -r 'file("a")' -m
2441 $ hg log -G -r 'file("a")' -m
2442 @ changeset: 36:08a19a744424
2442 @ changeset: 36:08a19a744424
2443 : branch: branch
2443 : branch: branch
2444 : tag: tip
2444 : tag: tip
2445 : parent: 35:9159c3644c5e
2445 : parent: 35:9159c3644c5e
2446 : parent: 35:9159c3644c5e
2446 : parent: 35:9159c3644c5e
2447 : user: test
2447 : user: test
2448 : date: Thu Jan 01 00:00:36 1970 +0000
2448 : date: Thu Jan 01 00:00:36 1970 +0000
2449 : summary: (36) buggy merge: identical parents
2449 : summary: (36) buggy merge: identical parents
2450 :
2450 :
2451 o changeset: 32:d06dffa21a31
2451 o changeset: 32:d06dffa21a31
2452 |\ parent: 27:886ed638191b
2452 |\ parent: 27:886ed638191b
2453 | : parent: 31:621d83e11f67
2453 | : parent: 31:621d83e11f67
2454 | : user: test
2454 | : user: test
2455 | : date: Thu Jan 01 00:00:32 1970 +0000
2455 | : date: Thu Jan 01 00:00:32 1970 +0000
2456 | : summary: (32) expand
2456 | : summary: (32) expand
2457 | :
2457 | :
2458 o : changeset: 31:621d83e11f67
2458 o : changeset: 31:621d83e11f67
2459 |\: parent: 21:d42a756af44d
2459 |\: parent: 21:d42a756af44d
2460 | : parent: 30:6e11cd4b648f
2460 | : parent: 30:6e11cd4b648f
2461 | : user: test
2461 | : user: test
2462 | : date: Thu Jan 01 00:00:31 1970 +0000
2462 | : date: Thu Jan 01 00:00:31 1970 +0000
2463 | : summary: (31) expand
2463 | : summary: (31) expand
2464 | :
2464 | :
2465 o : changeset: 30:6e11cd4b648f
2465 o : changeset: 30:6e11cd4b648f
2466 |\ \ parent: 28:44ecd0b9ae99
2466 |\ \ parent: 28:44ecd0b9ae99
2467 | ~ : parent: 29:cd9bb2be7593
2467 | ~ : parent: 29:cd9bb2be7593
2468 | : user: test
2468 | : user: test
2469 | : date: Thu Jan 01 00:00:30 1970 +0000
2469 | : date: Thu Jan 01 00:00:30 1970 +0000
2470 | : summary: (30) expand
2470 | : summary: (30) expand
2471 | /
2471 | /
2472 o : changeset: 28:44ecd0b9ae99
2472 o : changeset: 28:44ecd0b9ae99
2473 |\ \ parent: 1:6db2ef61d156
2473 |\ \ parent: 1:6db2ef61d156
2474 | ~ : parent: 26:7f25b6c2f0b9
2474 | ~ : parent: 26:7f25b6c2f0b9
2475 | : user: test
2475 | : user: test
2476 | : date: Thu Jan 01 00:00:28 1970 +0000
2476 | : date: Thu Jan 01 00:00:28 1970 +0000
2477 | : summary: (28) merge zero known
2477 | : summary: (28) merge zero known
2478 | /
2478 | /
2479 o : changeset: 26:7f25b6c2f0b9
2479 o : changeset: 26:7f25b6c2f0b9
2480 |\ \ parent: 18:1aa84d96232a
2480 |\ \ parent: 18:1aa84d96232a
2481 | | : parent: 25:91da8ed57247
2481 | | : parent: 25:91da8ed57247
2482 | | : user: test
2482 | | : user: test
2483 | | : date: Thu Jan 01 00:00:26 1970 +0000
2483 | | : date: Thu Jan 01 00:00:26 1970 +0000
2484 | | : summary: (26) merge one known; far right
2484 | | : summary: (26) merge one known; far right
2485 | | :
2485 | | :
2486 | o : changeset: 25:91da8ed57247
2486 | o : changeset: 25:91da8ed57247
2487 | |\: parent: 21:d42a756af44d
2487 | |\: parent: 21:d42a756af44d
2488 | | : parent: 24:a9c19a3d96b7
2488 | | : parent: 24:a9c19a3d96b7
2489 | | : user: test
2489 | | : user: test
2490 | | : date: Thu Jan 01 00:00:25 1970 +0000
2490 | | : date: Thu Jan 01 00:00:25 1970 +0000
2491 | | : summary: (25) merge one known; far left
2491 | | : summary: (25) merge one known; far left
2492 | | :
2492 | | :
2493 | o : changeset: 24:a9c19a3d96b7
2493 | o : changeset: 24:a9c19a3d96b7
2494 | |\ \ parent: 0:e6eb3150255d
2494 | |\ \ parent: 0:e6eb3150255d
2495 | | ~ : parent: 23:a01cddf0766d
2495 | | ~ : parent: 23:a01cddf0766d
2496 | | : user: test
2496 | | : user: test
2497 | | : date: Thu Jan 01 00:00:24 1970 +0000
2497 | | : date: Thu Jan 01 00:00:24 1970 +0000
2498 | | : summary: (24) merge one known; immediate right
2498 | | : summary: (24) merge one known; immediate right
2499 | | /
2499 | | /
2500 | o : changeset: 23:a01cddf0766d
2500 | o : changeset: 23:a01cddf0766d
2501 | |\ \ parent: 1:6db2ef61d156
2501 | |\ \ parent: 1:6db2ef61d156
2502 | | ~ : parent: 22:e0d9cccacb5d
2502 | | ~ : parent: 22:e0d9cccacb5d
2503 | | : user: test
2503 | | : user: test
2504 | | : date: Thu Jan 01 00:00:23 1970 +0000
2504 | | : date: Thu Jan 01 00:00:23 1970 +0000
2505 | | : summary: (23) merge one known; immediate left
2505 | | : summary: (23) merge one known; immediate left
2506 | | /
2506 | | /
2507 | o : changeset: 22:e0d9cccacb5d
2507 | o : changeset: 22:e0d9cccacb5d
2508 |/:/ parent: 18:1aa84d96232a
2508 |/:/ parent: 18:1aa84d96232a
2509 | : parent: 21:d42a756af44d
2509 | : parent: 21:d42a756af44d
2510 | : user: test
2510 | : user: test
2511 | : date: Thu Jan 01 00:00:22 1970 +0000
2511 | : date: Thu Jan 01 00:00:22 1970 +0000
2512 | : summary: (22) merge two known; one far left, one far right
2512 | : summary: (22) merge two known; one far left, one far right
2513 | :
2513 | :
2514 | o changeset: 21:d42a756af44d
2514 | o changeset: 21:d42a756af44d
2515 | |\ parent: 19:31ddc2c1573b
2515 | |\ parent: 19:31ddc2c1573b
2516 | | | parent: 20:d30ed6450e32
2516 | | | parent: 20:d30ed6450e32
2517 | | | user: test
2517 | | | user: test
2518 | | | date: Thu Jan 01 00:00:21 1970 +0000
2518 | | | date: Thu Jan 01 00:00:21 1970 +0000
2519 | | | summary: (21) expand
2519 | | | summary: (21) expand
2520 | | |
2520 | | |
2521 +---o changeset: 20:d30ed6450e32
2521 +---o changeset: 20:d30ed6450e32
2522 | | | parent: 0:e6eb3150255d
2522 | | | parent: 0:e6eb3150255d
2523 | | ~ parent: 18:1aa84d96232a
2523 | | ~ parent: 18:1aa84d96232a
2524 | | user: test
2524 | | user: test
2525 | | date: Thu Jan 01 00:00:20 1970 +0000
2525 | | date: Thu Jan 01 00:00:20 1970 +0000
2526 | | summary: (20) merge two known; two far right
2526 | | summary: (20) merge two known; two far right
2527 | |
2527 | |
2528 | o changeset: 19:31ddc2c1573b
2528 | o changeset: 19:31ddc2c1573b
2529 | |\ parent: 15:1dda3f72782d
2529 | |\ parent: 15:1dda3f72782d
2530 | | | parent: 17:44765d7c06e0
2530 | | | parent: 17:44765d7c06e0
2531 | | | user: test
2531 | | | user: test
2532 | | | date: Thu Jan 01 00:00:19 1970 +0000
2532 | | | date: Thu Jan 01 00:00:19 1970 +0000
2533 | | | summary: (19) expand
2533 | | | summary: (19) expand
2534 | | |
2534 | | |
2535 o | | changeset: 18:1aa84d96232a
2535 o | | changeset: 18:1aa84d96232a
2536 |\| | parent: 1:6db2ef61d156
2536 |\| | parent: 1:6db2ef61d156
2537 ~ | | parent: 15:1dda3f72782d
2537 ~ | | parent: 15:1dda3f72782d
2538 | | user: test
2538 | | user: test
2539 | | date: Thu Jan 01 00:00:18 1970 +0000
2539 | | date: Thu Jan 01 00:00:18 1970 +0000
2540 | | summary: (18) merge two known; two far left
2540 | | summary: (18) merge two known; two far left
2541 / /
2541 / /
2542 | o changeset: 17:44765d7c06e0
2542 | o changeset: 17:44765d7c06e0
2543 | |\ parent: 12:86b91144a6e9
2543 | |\ parent: 12:86b91144a6e9
2544 | | | parent: 16:3677d192927d
2544 | | | parent: 16:3677d192927d
2545 | | | user: test
2545 | | | user: test
2546 | | | date: Thu Jan 01 00:00:17 1970 +0000
2546 | | | date: Thu Jan 01 00:00:17 1970 +0000
2547 | | | summary: (17) expand
2547 | | | summary: (17) expand
2548 | | |
2548 | | |
2549 | | o changeset: 16:3677d192927d
2549 | | o changeset: 16:3677d192927d
2550 | | |\ parent: 0:e6eb3150255d
2550 | | |\ parent: 0:e6eb3150255d
2551 | | ~ ~ parent: 1:6db2ef61d156
2551 | | ~ ~ parent: 1:6db2ef61d156
2552 | | user: test
2552 | | user: test
2553 | | date: Thu Jan 01 00:00:16 1970 +0000
2553 | | date: Thu Jan 01 00:00:16 1970 +0000
2554 | | summary: (16) merge two known; one immediate right, one near right
2554 | | summary: (16) merge two known; one immediate right, one near right
2555 | |
2555 | |
2556 o | changeset: 15:1dda3f72782d
2556 o | changeset: 15:1dda3f72782d
2557 |\ \ parent: 13:22d8966a97e3
2557 |\ \ parent: 13:22d8966a97e3
2558 | | | parent: 14:8eac370358ef
2558 | | | parent: 14:8eac370358ef
2559 | | | user: test
2559 | | | user: test
2560 | | | date: Thu Jan 01 00:00:15 1970 +0000
2560 | | | date: Thu Jan 01 00:00:15 1970 +0000
2561 | | | summary: (15) expand
2561 | | | summary: (15) expand
2562 | | |
2562 | | |
2563 | o | changeset: 14:8eac370358ef
2563 | o | changeset: 14:8eac370358ef
2564 | |\| parent: 0:e6eb3150255d
2564 | |\| parent: 0:e6eb3150255d
2565 | ~ | parent: 12:86b91144a6e9
2565 | ~ | parent: 12:86b91144a6e9
2566 | | user: test
2566 | | user: test
2567 | | date: Thu Jan 01 00:00:14 1970 +0000
2567 | | date: Thu Jan 01 00:00:14 1970 +0000
2568 | | summary: (14) merge two known; one immediate right, one far right
2568 | | summary: (14) merge two known; one immediate right, one far right
2569 | /
2569 | /
2570 o | changeset: 13:22d8966a97e3
2570 o | changeset: 13:22d8966a97e3
2571 |\ \ parent: 9:7010c0af0a35
2571 |\ \ parent: 9:7010c0af0a35
2572 | | | parent: 11:832d76e6bdf2
2572 | | | parent: 11:832d76e6bdf2
2573 | | | user: test
2573 | | | user: test
2574 | | | date: Thu Jan 01 00:00:13 1970 +0000
2574 | | | date: Thu Jan 01 00:00:13 1970 +0000
2575 | | | summary: (13) expand
2575 | | | summary: (13) expand
2576 | | |
2576 | | |
2577 +---o changeset: 12:86b91144a6e9
2577 +---o changeset: 12:86b91144a6e9
2578 | | | parent: 1:6db2ef61d156
2578 | | | parent: 1:6db2ef61d156
2579 | | ~ parent: 9:7010c0af0a35
2579 | | ~ parent: 9:7010c0af0a35
2580 | | user: test
2580 | | user: test
2581 | | date: Thu Jan 01 00:00:12 1970 +0000
2581 | | date: Thu Jan 01 00:00:12 1970 +0000
2582 | | summary: (12) merge two known; one immediate right, one far left
2582 | | summary: (12) merge two known; one immediate right, one far left
2583 | |
2583 | |
2584 | o changeset: 11:832d76e6bdf2
2584 | o changeset: 11:832d76e6bdf2
2585 | |\ parent: 6:b105a072e251
2585 | |\ parent: 6:b105a072e251
2586 | | | parent: 10:74c64d036d72
2586 | | | parent: 10:74c64d036d72
2587 | | | user: test
2587 | | | user: test
2588 | | | date: Thu Jan 01 00:00:11 1970 +0000
2588 | | | date: Thu Jan 01 00:00:11 1970 +0000
2589 | | | summary: (11) expand
2589 | | | summary: (11) expand
2590 | | |
2590 | | |
2591 | | o changeset: 10:74c64d036d72
2591 | | o changeset: 10:74c64d036d72
2592 | |/| parent: 0:e6eb3150255d
2592 | |/| parent: 0:e6eb3150255d
2593 | | ~ parent: 6:b105a072e251
2593 | | ~ parent: 6:b105a072e251
2594 | | user: test
2594 | | user: test
2595 | | date: Thu Jan 01 00:00:10 1970 +0000
2595 | | date: Thu Jan 01 00:00:10 1970 +0000
2596 | | summary: (10) merge two known; one immediate left, one near right
2596 | | summary: (10) merge two known; one immediate left, one near right
2597 | |
2597 | |
2598 o | changeset: 9:7010c0af0a35
2598 o | changeset: 9:7010c0af0a35
2599 |\ \ parent: 7:b632bb1b1224
2599 |\ \ parent: 7:b632bb1b1224
2600 | | | parent: 8:7a0b11f71937
2600 | | | parent: 8:7a0b11f71937
2601 | | | user: test
2601 | | | user: test
2602 | | | date: Thu Jan 01 00:00:09 1970 +0000
2602 | | | date: Thu Jan 01 00:00:09 1970 +0000
2603 | | | summary: (9) expand
2603 | | | summary: (9) expand
2604 | | |
2604 | | |
2605 | o | changeset: 8:7a0b11f71937
2605 | o | changeset: 8:7a0b11f71937
2606 |/| | parent: 0:e6eb3150255d
2606 |/| | parent: 0:e6eb3150255d
2607 | ~ | parent: 7:b632bb1b1224
2607 | ~ | parent: 7:b632bb1b1224
2608 | | user: test
2608 | | user: test
2609 | | date: Thu Jan 01 00:00:08 1970 +0000
2609 | | date: Thu Jan 01 00:00:08 1970 +0000
2610 | | summary: (8) merge two known; one immediate left, one far right
2610 | | summary: (8) merge two known; one immediate left, one far right
2611 | /
2611 | /
2612 o | changeset: 7:b632bb1b1224
2612 o | changeset: 7:b632bb1b1224
2613 |\ \ parent: 2:3d9a33b8d1e1
2613 |\ \ parent: 2:3d9a33b8d1e1
2614 | ~ | parent: 5:4409d547b708
2614 | ~ | parent: 5:4409d547b708
2615 | | user: test
2615 | | user: test
2616 | | date: Thu Jan 01 00:00:07 1970 +0000
2616 | | date: Thu Jan 01 00:00:07 1970 +0000
2617 | | summary: (7) expand
2617 | | summary: (7) expand
2618 | /
2618 | /
2619 | o changeset: 6:b105a072e251
2619 | o changeset: 6:b105a072e251
2620 |/| parent: 2:3d9a33b8d1e1
2620 |/| parent: 2:3d9a33b8d1e1
2621 | ~ parent: 5:4409d547b708
2621 | ~ parent: 5:4409d547b708
2622 | user: test
2622 | user: test
2623 | date: Thu Jan 01 00:00:06 1970 +0000
2623 | date: Thu Jan 01 00:00:06 1970 +0000
2624 | summary: (6) merge two known; one immediate left, one far left
2624 | summary: (6) merge two known; one immediate left, one far left
2625 |
2625 |
2626 o changeset: 5:4409d547b708
2626 o changeset: 5:4409d547b708
2627 |\ parent: 3:27eef8ed80b4
2627 |\ parent: 3:27eef8ed80b4
2628 | ~ parent: 4:26a8bac39d9f
2628 | ~ parent: 4:26a8bac39d9f
2629 | user: test
2629 | user: test
2630 | date: Thu Jan 01 00:00:05 1970 +0000
2630 | date: Thu Jan 01 00:00:05 1970 +0000
2631 | summary: (5) expand
2631 | summary: (5) expand
2632 |
2632 |
2633 o changeset: 4:26a8bac39d9f
2633 o changeset: 4:26a8bac39d9f
2634 |\ parent: 1:6db2ef61d156
2634 |\ parent: 1:6db2ef61d156
2635 ~ ~ parent: 3:27eef8ed80b4
2635 ~ ~ parent: 3:27eef8ed80b4
2636 user: test
2636 user: test
2637 date: Thu Jan 01 00:00:04 1970 +0000
2637 date: Thu Jan 01 00:00:04 1970 +0000
2638 summary: (4) merge two known; one immediate left, one immediate right
2638 summary: (4) merge two known; one immediate left, one immediate right
2639
2639
2640
2640
2641 Setting HGPLAIN ignores graphmod styling:
2641 Setting HGPLAIN ignores graphmod styling:
2642
2642
2643 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2643 $ HGPLAIN=1 hg log -G -r 'file("a")' -m
2644 @ changeset: 36:08a19a744424
2644 @ changeset: 36:08a19a744424
2645 | branch: branch
2645 | branch: branch
2646 | tag: tip
2646 | tag: tip
2647 | parent: 35:9159c3644c5e
2647 | parent: 35:9159c3644c5e
2648 | parent: 35:9159c3644c5e
2648 | parent: 35:9159c3644c5e
2649 | user: test
2649 | user: test
2650 | date: Thu Jan 01 00:00:36 1970 +0000
2650 | date: Thu Jan 01 00:00:36 1970 +0000
2651 | summary: (36) buggy merge: identical parents
2651 | summary: (36) buggy merge: identical parents
2652 |
2652 |
2653 o changeset: 32:d06dffa21a31
2653 o changeset: 32:d06dffa21a31
2654 |\ parent: 27:886ed638191b
2654 |\ parent: 27:886ed638191b
2655 | | parent: 31:621d83e11f67
2655 | | parent: 31:621d83e11f67
2656 | | user: test
2656 | | user: test
2657 | | date: Thu Jan 01 00:00:32 1970 +0000
2657 | | date: Thu Jan 01 00:00:32 1970 +0000
2658 | | summary: (32) expand
2658 | | summary: (32) expand
2659 | |
2659 | |
2660 o | changeset: 31:621d83e11f67
2660 o | changeset: 31:621d83e11f67
2661 |\| parent: 21:d42a756af44d
2661 |\| parent: 21:d42a756af44d
2662 | | parent: 30:6e11cd4b648f
2662 | | parent: 30:6e11cd4b648f
2663 | | user: test
2663 | | user: test
2664 | | date: Thu Jan 01 00:00:31 1970 +0000
2664 | | date: Thu Jan 01 00:00:31 1970 +0000
2665 | | summary: (31) expand
2665 | | summary: (31) expand
2666 | |
2666 | |
2667 o | changeset: 30:6e11cd4b648f
2667 o | changeset: 30:6e11cd4b648f
2668 |\ \ parent: 28:44ecd0b9ae99
2668 |\ \ parent: 28:44ecd0b9ae99
2669 | | | parent: 29:cd9bb2be7593
2669 | | | parent: 29:cd9bb2be7593
2670 | | | user: test
2670 | | | user: test
2671 | | | date: Thu Jan 01 00:00:30 1970 +0000
2671 | | | date: Thu Jan 01 00:00:30 1970 +0000
2672 | | | summary: (30) expand
2672 | | | summary: (30) expand
2673 | | |
2673 | | |
2674 o | | changeset: 28:44ecd0b9ae99
2674 o | | changeset: 28:44ecd0b9ae99
2675 |\ \ \ parent: 1:6db2ef61d156
2675 |\ \ \ parent: 1:6db2ef61d156
2676 | | | | parent: 26:7f25b6c2f0b9
2676 | | | | parent: 26:7f25b6c2f0b9
2677 | | | | user: test
2677 | | | | user: test
2678 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2678 | | | | date: Thu Jan 01 00:00:28 1970 +0000
2679 | | | | summary: (28) merge zero known
2679 | | | | summary: (28) merge zero known
2680 | | | |
2680 | | | |
2681 o | | | changeset: 26:7f25b6c2f0b9
2681 o | | | changeset: 26:7f25b6c2f0b9
2682 |\ \ \ \ parent: 18:1aa84d96232a
2682 |\ \ \ \ parent: 18:1aa84d96232a
2683 | | | | | parent: 25:91da8ed57247
2683 | | | | | parent: 25:91da8ed57247
2684 | | | | | user: test
2684 | | | | | user: test
2685 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2685 | | | | | date: Thu Jan 01 00:00:26 1970 +0000
2686 | | | | | summary: (26) merge one known; far right
2686 | | | | | summary: (26) merge one known; far right
2687 | | | | |
2687 | | | | |
2688 | o-----+ changeset: 25:91da8ed57247
2688 | o-----+ changeset: 25:91da8ed57247
2689 | | | | | parent: 21:d42a756af44d
2689 | | | | | parent: 21:d42a756af44d
2690 | | | | | parent: 24:a9c19a3d96b7
2690 | | | | | parent: 24:a9c19a3d96b7
2691 | | | | | user: test
2691 | | | | | user: test
2692 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2692 | | | | | date: Thu Jan 01 00:00:25 1970 +0000
2693 | | | | | summary: (25) merge one known; far left
2693 | | | | | summary: (25) merge one known; far left
2694 | | | | |
2694 | | | | |
2695 | o | | | changeset: 24:a9c19a3d96b7
2695 | o | | | changeset: 24:a9c19a3d96b7
2696 | |\ \ \ \ parent: 0:e6eb3150255d
2696 | |\ \ \ \ parent: 0:e6eb3150255d
2697 | | | | | | parent: 23:a01cddf0766d
2697 | | | | | | parent: 23:a01cddf0766d
2698 | | | | | | user: test
2698 | | | | | | user: test
2699 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2699 | | | | | | date: Thu Jan 01 00:00:24 1970 +0000
2700 | | | | | | summary: (24) merge one known; immediate right
2700 | | | | | | summary: (24) merge one known; immediate right
2701 | | | | | |
2701 | | | | | |
2702 | o---+ | | changeset: 23:a01cddf0766d
2702 | o---+ | | changeset: 23:a01cddf0766d
2703 | | | | | | parent: 1:6db2ef61d156
2703 | | | | | | parent: 1:6db2ef61d156
2704 | | | | | | parent: 22:e0d9cccacb5d
2704 | | | | | | parent: 22:e0d9cccacb5d
2705 | | | | | | user: test
2705 | | | | | | user: test
2706 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2706 | | | | | | date: Thu Jan 01 00:00:23 1970 +0000
2707 | | | | | | summary: (23) merge one known; immediate left
2707 | | | | | | summary: (23) merge one known; immediate left
2708 | | | | | |
2708 | | | | | |
2709 | o-------+ changeset: 22:e0d9cccacb5d
2709 | o-------+ changeset: 22:e0d9cccacb5d
2710 | | | | | | parent: 18:1aa84d96232a
2710 | | | | | | parent: 18:1aa84d96232a
2711 |/ / / / / parent: 21:d42a756af44d
2711 |/ / / / / parent: 21:d42a756af44d
2712 | | | | | user: test
2712 | | | | | user: test
2713 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2713 | | | | | date: Thu Jan 01 00:00:22 1970 +0000
2714 | | | | | summary: (22) merge two known; one far left, one far right
2714 | | | | | summary: (22) merge two known; one far left, one far right
2715 | | | | |
2715 | | | | |
2716 | | | | o changeset: 21:d42a756af44d
2716 | | | | o changeset: 21:d42a756af44d
2717 | | | | |\ parent: 19:31ddc2c1573b
2717 | | | | |\ parent: 19:31ddc2c1573b
2718 | | | | | | parent: 20:d30ed6450e32
2718 | | | | | | parent: 20:d30ed6450e32
2719 | | | | | | user: test
2719 | | | | | | user: test
2720 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2720 | | | | | | date: Thu Jan 01 00:00:21 1970 +0000
2721 | | | | | | summary: (21) expand
2721 | | | | | | summary: (21) expand
2722 | | | | | |
2722 | | | | | |
2723 +-+-------o changeset: 20:d30ed6450e32
2723 +-+-------o changeset: 20:d30ed6450e32
2724 | | | | | parent: 0:e6eb3150255d
2724 | | | | | parent: 0:e6eb3150255d
2725 | | | | | parent: 18:1aa84d96232a
2725 | | | | | parent: 18:1aa84d96232a
2726 | | | | | user: test
2726 | | | | | user: test
2727 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2727 | | | | | date: Thu Jan 01 00:00:20 1970 +0000
2728 | | | | | summary: (20) merge two known; two far right
2728 | | | | | summary: (20) merge two known; two far right
2729 | | | | |
2729 | | | | |
2730 | | | | o changeset: 19:31ddc2c1573b
2730 | | | | o changeset: 19:31ddc2c1573b
2731 | | | | |\ parent: 15:1dda3f72782d
2731 | | | | |\ parent: 15:1dda3f72782d
2732 | | | | | | parent: 17:44765d7c06e0
2732 | | | | | | parent: 17:44765d7c06e0
2733 | | | | | | user: test
2733 | | | | | | user: test
2734 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2734 | | | | | | date: Thu Jan 01 00:00:19 1970 +0000
2735 | | | | | | summary: (19) expand
2735 | | | | | | summary: (19) expand
2736 | | | | | |
2736 | | | | | |
2737 o---+---+ | changeset: 18:1aa84d96232a
2737 o---+---+ | changeset: 18:1aa84d96232a
2738 | | | | | parent: 1:6db2ef61d156
2738 | | | | | parent: 1:6db2ef61d156
2739 / / / / / parent: 15:1dda3f72782d
2739 / / / / / parent: 15:1dda3f72782d
2740 | | | | | user: test
2740 | | | | | user: test
2741 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2741 | | | | | date: Thu Jan 01 00:00:18 1970 +0000
2742 | | | | | summary: (18) merge two known; two far left
2742 | | | | | summary: (18) merge two known; two far left
2743 | | | | |
2743 | | | | |
2744 | | | | o changeset: 17:44765d7c06e0
2744 | | | | o changeset: 17:44765d7c06e0
2745 | | | | |\ parent: 12:86b91144a6e9
2745 | | | | |\ parent: 12:86b91144a6e9
2746 | | | | | | parent: 16:3677d192927d
2746 | | | | | | parent: 16:3677d192927d
2747 | | | | | | user: test
2747 | | | | | | user: test
2748 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2748 | | | | | | date: Thu Jan 01 00:00:17 1970 +0000
2749 | | | | | | summary: (17) expand
2749 | | | | | | summary: (17) expand
2750 | | | | | |
2750 | | | | | |
2751 +-+-------o changeset: 16:3677d192927d
2751 +-+-------o changeset: 16:3677d192927d
2752 | | | | | parent: 0:e6eb3150255d
2752 | | | | | parent: 0:e6eb3150255d
2753 | | | | | parent: 1:6db2ef61d156
2753 | | | | | parent: 1:6db2ef61d156
2754 | | | | | user: test
2754 | | | | | user: test
2755 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2755 | | | | | date: Thu Jan 01 00:00:16 1970 +0000
2756 | | | | | summary: (16) merge two known; one immediate right, one near right
2756 | | | | | summary: (16) merge two known; one immediate right, one near right
2757 | | | | |
2757 | | | | |
2758 | | | o | changeset: 15:1dda3f72782d
2758 | | | o | changeset: 15:1dda3f72782d
2759 | | | |\ \ parent: 13:22d8966a97e3
2759 | | | |\ \ parent: 13:22d8966a97e3
2760 | | | | | | parent: 14:8eac370358ef
2760 | | | | | | parent: 14:8eac370358ef
2761 | | | | | | user: test
2761 | | | | | | user: test
2762 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2762 | | | | | | date: Thu Jan 01 00:00:15 1970 +0000
2763 | | | | | | summary: (15) expand
2763 | | | | | | summary: (15) expand
2764 | | | | | |
2764 | | | | | |
2765 +-------o | changeset: 14:8eac370358ef
2765 +-------o | changeset: 14:8eac370358ef
2766 | | | | |/ parent: 0:e6eb3150255d
2766 | | | | |/ parent: 0:e6eb3150255d
2767 | | | | | parent: 12:86b91144a6e9
2767 | | | | | parent: 12:86b91144a6e9
2768 | | | | | user: test
2768 | | | | | user: test
2769 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2769 | | | | | date: Thu Jan 01 00:00:14 1970 +0000
2770 | | | | | summary: (14) merge two known; one immediate right, one far right
2770 | | | | | summary: (14) merge two known; one immediate right, one far right
2771 | | | | |
2771 | | | | |
2772 | | | o | changeset: 13:22d8966a97e3
2772 | | | o | changeset: 13:22d8966a97e3
2773 | | | |\ \ parent: 9:7010c0af0a35
2773 | | | |\ \ parent: 9:7010c0af0a35
2774 | | | | | | parent: 11:832d76e6bdf2
2774 | | | | | | parent: 11:832d76e6bdf2
2775 | | | | | | user: test
2775 | | | | | | user: test
2776 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2776 | | | | | | date: Thu Jan 01 00:00:13 1970 +0000
2777 | | | | | | summary: (13) expand
2777 | | | | | | summary: (13) expand
2778 | | | | | |
2778 | | | | | |
2779 | +---+---o changeset: 12:86b91144a6e9
2779 | +---+---o changeset: 12:86b91144a6e9
2780 | | | | | parent: 1:6db2ef61d156
2780 | | | | | parent: 1:6db2ef61d156
2781 | | | | | parent: 9:7010c0af0a35
2781 | | | | | parent: 9:7010c0af0a35
2782 | | | | | user: test
2782 | | | | | user: test
2783 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2783 | | | | | date: Thu Jan 01 00:00:12 1970 +0000
2784 | | | | | summary: (12) merge two known; one immediate right, one far left
2784 | | | | | summary: (12) merge two known; one immediate right, one far left
2785 | | | | |
2785 | | | | |
2786 | | | | o changeset: 11:832d76e6bdf2
2786 | | | | o changeset: 11:832d76e6bdf2
2787 | | | | |\ parent: 6:b105a072e251
2787 | | | | |\ parent: 6:b105a072e251
2788 | | | | | | parent: 10:74c64d036d72
2788 | | | | | | parent: 10:74c64d036d72
2789 | | | | | | user: test
2789 | | | | | | user: test
2790 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2790 | | | | | | date: Thu Jan 01 00:00:11 1970 +0000
2791 | | | | | | summary: (11) expand
2791 | | | | | | summary: (11) expand
2792 | | | | | |
2792 | | | | | |
2793 +---------o changeset: 10:74c64d036d72
2793 +---------o changeset: 10:74c64d036d72
2794 | | | | |/ parent: 0:e6eb3150255d
2794 | | | | |/ parent: 0:e6eb3150255d
2795 | | | | | parent: 6:b105a072e251
2795 | | | | | parent: 6:b105a072e251
2796 | | | | | user: test
2796 | | | | | user: test
2797 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2797 | | | | | date: Thu Jan 01 00:00:10 1970 +0000
2798 | | | | | summary: (10) merge two known; one immediate left, one near right
2798 | | | | | summary: (10) merge two known; one immediate left, one near right
2799 | | | | |
2799 | | | | |
2800 | | | o | changeset: 9:7010c0af0a35
2800 | | | o | changeset: 9:7010c0af0a35
2801 | | | |\ \ parent: 7:b632bb1b1224
2801 | | | |\ \ parent: 7:b632bb1b1224
2802 | | | | | | parent: 8:7a0b11f71937
2802 | | | | | | parent: 8:7a0b11f71937
2803 | | | | | | user: test
2803 | | | | | | user: test
2804 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2804 | | | | | | date: Thu Jan 01 00:00:09 1970 +0000
2805 | | | | | | summary: (9) expand
2805 | | | | | | summary: (9) expand
2806 | | | | | |
2806 | | | | | |
2807 +-------o | changeset: 8:7a0b11f71937
2807 +-------o | changeset: 8:7a0b11f71937
2808 | | | |/ / parent: 0:e6eb3150255d
2808 | | | |/ / parent: 0:e6eb3150255d
2809 | | | | | parent: 7:b632bb1b1224
2809 | | | | | parent: 7:b632bb1b1224
2810 | | | | | user: test
2810 | | | | | user: test
2811 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2811 | | | | | date: Thu Jan 01 00:00:08 1970 +0000
2812 | | | | | summary: (8) merge two known; one immediate left, one far right
2812 | | | | | summary: (8) merge two known; one immediate left, one far right
2813 | | | | |
2813 | | | | |
2814 | | | o | changeset: 7:b632bb1b1224
2814 | | | o | changeset: 7:b632bb1b1224
2815 | | | |\ \ parent: 2:3d9a33b8d1e1
2815 | | | |\ \ parent: 2:3d9a33b8d1e1
2816 | | | | | | parent: 5:4409d547b708
2816 | | | | | | parent: 5:4409d547b708
2817 | | | | | | user: test
2817 | | | | | | user: test
2818 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2818 | | | | | | date: Thu Jan 01 00:00:07 1970 +0000
2819 | | | | | | summary: (7) expand
2819 | | | | | | summary: (7) expand
2820 | | | | | |
2820 | | | | | |
2821 | | | +---o changeset: 6:b105a072e251
2821 | | | +---o changeset: 6:b105a072e251
2822 | | | | |/ parent: 2:3d9a33b8d1e1
2822 | | | | |/ parent: 2:3d9a33b8d1e1
2823 | | | | | parent: 5:4409d547b708
2823 | | | | | parent: 5:4409d547b708
2824 | | | | | user: test
2824 | | | | | user: test
2825 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2825 | | | | | date: Thu Jan 01 00:00:06 1970 +0000
2826 | | | | | summary: (6) merge two known; one immediate left, one far left
2826 | | | | | summary: (6) merge two known; one immediate left, one far left
2827 | | | | |
2827 | | | | |
2828 | | | o | changeset: 5:4409d547b708
2828 | | | o | changeset: 5:4409d547b708
2829 | | | |\ \ parent: 3:27eef8ed80b4
2829 | | | |\ \ parent: 3:27eef8ed80b4
2830 | | | | | | parent: 4:26a8bac39d9f
2830 | | | | | | parent: 4:26a8bac39d9f
2831 | | | | | | user: test
2831 | | | | | | user: test
2832 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2832 | | | | | | date: Thu Jan 01 00:00:05 1970 +0000
2833 | | | | | | summary: (5) expand
2833 | | | | | | summary: (5) expand
2834 | | | | | |
2834 | | | | | |
2835 | +---o | | changeset: 4:26a8bac39d9f
2835 | +---o | | changeset: 4:26a8bac39d9f
2836 | | | |/ / parent: 1:6db2ef61d156
2836 | | | |/ / parent: 1:6db2ef61d156
2837 | | | | | parent: 3:27eef8ed80b4
2837 | | | | | parent: 3:27eef8ed80b4
2838 | | | | | user: test
2838 | | | | | user: test
2839 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2839 | | | | | date: Thu Jan 01 00:00:04 1970 +0000
2840 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2840 | | | | | summary: (4) merge two known; one immediate left, one immediate right
2841 | | | | |
2841 | | | | |
2842
2842
2843 .. unless HGPLAINEXCEPT=graph is set:
2843 .. unless HGPLAINEXCEPT=graph is set:
2844
2844
2845 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2845 $ HGPLAIN=1 HGPLAINEXCEPT=graph hg log -G -r 'file("a")' -m
2846 @ changeset: 36:08a19a744424
2846 @ changeset: 36:08a19a744424
2847 : branch: branch
2847 : branch: branch
2848 : tag: tip
2848 : tag: tip
2849 : parent: 35:9159c3644c5e
2849 : parent: 35:9159c3644c5e
2850 : parent: 35:9159c3644c5e
2850 : parent: 35:9159c3644c5e
2851 : user: test
2851 : user: test
2852 : date: Thu Jan 01 00:00:36 1970 +0000
2852 : date: Thu Jan 01 00:00:36 1970 +0000
2853 : summary: (36) buggy merge: identical parents
2853 : summary: (36) buggy merge: identical parents
2854 :
2854 :
2855 o changeset: 32:d06dffa21a31
2855 o changeset: 32:d06dffa21a31
2856 |\ parent: 27:886ed638191b
2856 |\ parent: 27:886ed638191b
2857 | : parent: 31:621d83e11f67
2857 | : parent: 31:621d83e11f67
2858 | : user: test
2858 | : user: test
2859 | : date: Thu Jan 01 00:00:32 1970 +0000
2859 | : date: Thu Jan 01 00:00:32 1970 +0000
2860 | : summary: (32) expand
2860 | : summary: (32) expand
2861 | :
2861 | :
2862 o : changeset: 31:621d83e11f67
2862 o : changeset: 31:621d83e11f67
2863 |\: parent: 21:d42a756af44d
2863 |\: parent: 21:d42a756af44d
2864 | : parent: 30:6e11cd4b648f
2864 | : parent: 30:6e11cd4b648f
2865 | : user: test
2865 | : user: test
2866 | : date: Thu Jan 01 00:00:31 1970 +0000
2866 | : date: Thu Jan 01 00:00:31 1970 +0000
2867 | : summary: (31) expand
2867 | : summary: (31) expand
2868 | :
2868 | :
2869 o : changeset: 30:6e11cd4b648f
2869 o : changeset: 30:6e11cd4b648f
2870 |\ \ parent: 28:44ecd0b9ae99
2870 |\ \ parent: 28:44ecd0b9ae99
2871 | ~ : parent: 29:cd9bb2be7593
2871 | ~ : parent: 29:cd9bb2be7593
2872 | : user: test
2872 | : user: test
2873 | : date: Thu Jan 01 00:00:30 1970 +0000
2873 | : date: Thu Jan 01 00:00:30 1970 +0000
2874 | : summary: (30) expand
2874 | : summary: (30) expand
2875 | /
2875 | /
2876 o : changeset: 28:44ecd0b9ae99
2876 o : changeset: 28:44ecd0b9ae99
2877 |\ \ parent: 1:6db2ef61d156
2877 |\ \ parent: 1:6db2ef61d156
2878 | ~ : parent: 26:7f25b6c2f0b9
2878 | ~ : parent: 26:7f25b6c2f0b9
2879 | : user: test
2879 | : user: test
2880 | : date: Thu Jan 01 00:00:28 1970 +0000
2880 | : date: Thu Jan 01 00:00:28 1970 +0000
2881 | : summary: (28) merge zero known
2881 | : summary: (28) merge zero known
2882 | /
2882 | /
2883 o : changeset: 26:7f25b6c2f0b9
2883 o : changeset: 26:7f25b6c2f0b9
2884 |\ \ parent: 18:1aa84d96232a
2884 |\ \ parent: 18:1aa84d96232a
2885 | | : parent: 25:91da8ed57247
2885 | | : parent: 25:91da8ed57247
2886 | | : user: test
2886 | | : user: test
2887 | | : date: Thu Jan 01 00:00:26 1970 +0000
2887 | | : date: Thu Jan 01 00:00:26 1970 +0000
2888 | | : summary: (26) merge one known; far right
2888 | | : summary: (26) merge one known; far right
2889 | | :
2889 | | :
2890 | o : changeset: 25:91da8ed57247
2890 | o : changeset: 25:91da8ed57247
2891 | |\: parent: 21:d42a756af44d
2891 | |\: parent: 21:d42a756af44d
2892 | | : parent: 24:a9c19a3d96b7
2892 | | : parent: 24:a9c19a3d96b7
2893 | | : user: test
2893 | | : user: test
2894 | | : date: Thu Jan 01 00:00:25 1970 +0000
2894 | | : date: Thu Jan 01 00:00:25 1970 +0000
2895 | | : summary: (25) merge one known; far left
2895 | | : summary: (25) merge one known; far left
2896 | | :
2896 | | :
2897 | o : changeset: 24:a9c19a3d96b7
2897 | o : changeset: 24:a9c19a3d96b7
2898 | |\ \ parent: 0:e6eb3150255d
2898 | |\ \ parent: 0:e6eb3150255d
2899 | | ~ : parent: 23:a01cddf0766d
2899 | | ~ : parent: 23:a01cddf0766d
2900 | | : user: test
2900 | | : user: test
2901 | | : date: Thu Jan 01 00:00:24 1970 +0000
2901 | | : date: Thu Jan 01 00:00:24 1970 +0000
2902 | | : summary: (24) merge one known; immediate right
2902 | | : summary: (24) merge one known; immediate right
2903 | | /
2903 | | /
2904 | o : changeset: 23:a01cddf0766d
2904 | o : changeset: 23:a01cddf0766d
2905 | |\ \ parent: 1:6db2ef61d156
2905 | |\ \ parent: 1:6db2ef61d156
2906 | | ~ : parent: 22:e0d9cccacb5d
2906 | | ~ : parent: 22:e0d9cccacb5d
2907 | | : user: test
2907 | | : user: test
2908 | | : date: Thu Jan 01 00:00:23 1970 +0000
2908 | | : date: Thu Jan 01 00:00:23 1970 +0000
2909 | | : summary: (23) merge one known; immediate left
2909 | | : summary: (23) merge one known; immediate left
2910 | | /
2910 | | /
2911 | o : changeset: 22:e0d9cccacb5d
2911 | o : changeset: 22:e0d9cccacb5d
2912 |/:/ parent: 18:1aa84d96232a
2912 |/:/ parent: 18:1aa84d96232a
2913 | : parent: 21:d42a756af44d
2913 | : parent: 21:d42a756af44d
2914 | : user: test
2914 | : user: test
2915 | : date: Thu Jan 01 00:00:22 1970 +0000
2915 | : date: Thu Jan 01 00:00:22 1970 +0000
2916 | : summary: (22) merge two known; one far left, one far right
2916 | : summary: (22) merge two known; one far left, one far right
2917 | :
2917 | :
2918 | o changeset: 21:d42a756af44d
2918 | o changeset: 21:d42a756af44d
2919 | |\ parent: 19:31ddc2c1573b
2919 | |\ parent: 19:31ddc2c1573b
2920 | | | parent: 20:d30ed6450e32
2920 | | | parent: 20:d30ed6450e32
2921 | | | user: test
2921 | | | user: test
2922 | | | date: Thu Jan 01 00:00:21 1970 +0000
2922 | | | date: Thu Jan 01 00:00:21 1970 +0000
2923 | | | summary: (21) expand
2923 | | | summary: (21) expand
2924 | | |
2924 | | |
2925 +---o changeset: 20:d30ed6450e32
2925 +---o changeset: 20:d30ed6450e32
2926 | | | parent: 0:e6eb3150255d
2926 | | | parent: 0:e6eb3150255d
2927 | | ~ parent: 18:1aa84d96232a
2927 | | ~ parent: 18:1aa84d96232a
2928 | | user: test
2928 | | user: test
2929 | | date: Thu Jan 01 00:00:20 1970 +0000
2929 | | date: Thu Jan 01 00:00:20 1970 +0000
2930 | | summary: (20) merge two known; two far right
2930 | | summary: (20) merge two known; two far right
2931 | |
2931 | |
2932 | o changeset: 19:31ddc2c1573b
2932 | o changeset: 19:31ddc2c1573b
2933 | |\ parent: 15:1dda3f72782d
2933 | |\ parent: 15:1dda3f72782d
2934 | | | parent: 17:44765d7c06e0
2934 | | | parent: 17:44765d7c06e0
2935 | | | user: test
2935 | | | user: test
2936 | | | date: Thu Jan 01 00:00:19 1970 +0000
2936 | | | date: Thu Jan 01 00:00:19 1970 +0000
2937 | | | summary: (19) expand
2937 | | | summary: (19) expand
2938 | | |
2938 | | |
2939 o | | changeset: 18:1aa84d96232a
2939 o | | changeset: 18:1aa84d96232a
2940 |\| | parent: 1:6db2ef61d156
2940 |\| | parent: 1:6db2ef61d156
2941 ~ | | parent: 15:1dda3f72782d
2941 ~ | | parent: 15:1dda3f72782d
2942 | | user: test
2942 | | user: test
2943 | | date: Thu Jan 01 00:00:18 1970 +0000
2943 | | date: Thu Jan 01 00:00:18 1970 +0000
2944 | | summary: (18) merge two known; two far left
2944 | | summary: (18) merge two known; two far left
2945 / /
2945 / /
2946 | o changeset: 17:44765d7c06e0
2946 | o changeset: 17:44765d7c06e0
2947 | |\ parent: 12:86b91144a6e9
2947 | |\ parent: 12:86b91144a6e9
2948 | | | parent: 16:3677d192927d
2948 | | | parent: 16:3677d192927d
2949 | | | user: test
2949 | | | user: test
2950 | | | date: Thu Jan 01 00:00:17 1970 +0000
2950 | | | date: Thu Jan 01 00:00:17 1970 +0000
2951 | | | summary: (17) expand
2951 | | | summary: (17) expand
2952 | | |
2952 | | |
2953 | | o changeset: 16:3677d192927d
2953 | | o changeset: 16:3677d192927d
2954 | | |\ parent: 0:e6eb3150255d
2954 | | |\ parent: 0:e6eb3150255d
2955 | | ~ ~ parent: 1:6db2ef61d156
2955 | | ~ ~ parent: 1:6db2ef61d156
2956 | | user: test
2956 | | user: test
2957 | | date: Thu Jan 01 00:00:16 1970 +0000
2957 | | date: Thu Jan 01 00:00:16 1970 +0000
2958 | | summary: (16) merge two known; one immediate right, one near right
2958 | | summary: (16) merge two known; one immediate right, one near right
2959 | |
2959 | |
2960 o | changeset: 15:1dda3f72782d
2960 o | changeset: 15:1dda3f72782d
2961 |\ \ parent: 13:22d8966a97e3
2961 |\ \ parent: 13:22d8966a97e3
2962 | | | parent: 14:8eac370358ef
2962 | | | parent: 14:8eac370358ef
2963 | | | user: test
2963 | | | user: test
2964 | | | date: Thu Jan 01 00:00:15 1970 +0000
2964 | | | date: Thu Jan 01 00:00:15 1970 +0000
2965 | | | summary: (15) expand
2965 | | | summary: (15) expand
2966 | | |
2966 | | |
2967 | o | changeset: 14:8eac370358ef
2967 | o | changeset: 14:8eac370358ef
2968 | |\| parent: 0:e6eb3150255d
2968 | |\| parent: 0:e6eb3150255d
2969 | ~ | parent: 12:86b91144a6e9
2969 | ~ | parent: 12:86b91144a6e9
2970 | | user: test
2970 | | user: test
2971 | | date: Thu Jan 01 00:00:14 1970 +0000
2971 | | date: Thu Jan 01 00:00:14 1970 +0000
2972 | | summary: (14) merge two known; one immediate right, one far right
2972 | | summary: (14) merge two known; one immediate right, one far right
2973 | /
2973 | /
2974 o | changeset: 13:22d8966a97e3
2974 o | changeset: 13:22d8966a97e3
2975 |\ \ parent: 9:7010c0af0a35
2975 |\ \ parent: 9:7010c0af0a35
2976 | | | parent: 11:832d76e6bdf2
2976 | | | parent: 11:832d76e6bdf2
2977 | | | user: test
2977 | | | user: test
2978 | | | date: Thu Jan 01 00:00:13 1970 +0000
2978 | | | date: Thu Jan 01 00:00:13 1970 +0000
2979 | | | summary: (13) expand
2979 | | | summary: (13) expand
2980 | | |
2980 | | |
2981 +---o changeset: 12:86b91144a6e9
2981 +---o changeset: 12:86b91144a6e9
2982 | | | parent: 1:6db2ef61d156
2982 | | | parent: 1:6db2ef61d156
2983 | | ~ parent: 9:7010c0af0a35
2983 | | ~ parent: 9:7010c0af0a35
2984 | | user: test
2984 | | user: test
2985 | | date: Thu Jan 01 00:00:12 1970 +0000
2985 | | date: Thu Jan 01 00:00:12 1970 +0000
2986 | | summary: (12) merge two known; one immediate right, one far left
2986 | | summary: (12) merge two known; one immediate right, one far left
2987 | |
2987 | |
2988 | o changeset: 11:832d76e6bdf2
2988 | o changeset: 11:832d76e6bdf2
2989 | |\ parent: 6:b105a072e251
2989 | |\ parent: 6:b105a072e251
2990 | | | parent: 10:74c64d036d72
2990 | | | parent: 10:74c64d036d72
2991 | | | user: test
2991 | | | user: test
2992 | | | date: Thu Jan 01 00:00:11 1970 +0000
2992 | | | date: Thu Jan 01 00:00:11 1970 +0000
2993 | | | summary: (11) expand
2993 | | | summary: (11) expand
2994 | | |
2994 | | |
2995 | | o changeset: 10:74c64d036d72
2995 | | o changeset: 10:74c64d036d72
2996 | |/| parent: 0:e6eb3150255d
2996 | |/| parent: 0:e6eb3150255d
2997 | | ~ parent: 6:b105a072e251
2997 | | ~ parent: 6:b105a072e251
2998 | | user: test
2998 | | user: test
2999 | | date: Thu Jan 01 00:00:10 1970 +0000
2999 | | date: Thu Jan 01 00:00:10 1970 +0000
3000 | | summary: (10) merge two known; one immediate left, one near right
3000 | | summary: (10) merge two known; one immediate left, one near right
3001 | |
3001 | |
3002 o | changeset: 9:7010c0af0a35
3002 o | changeset: 9:7010c0af0a35
3003 |\ \ parent: 7:b632bb1b1224
3003 |\ \ parent: 7:b632bb1b1224
3004 | | | parent: 8:7a0b11f71937
3004 | | | parent: 8:7a0b11f71937
3005 | | | user: test
3005 | | | user: test
3006 | | | date: Thu Jan 01 00:00:09 1970 +0000
3006 | | | date: Thu Jan 01 00:00:09 1970 +0000
3007 | | | summary: (9) expand
3007 | | | summary: (9) expand
3008 | | |
3008 | | |
3009 | o | changeset: 8:7a0b11f71937
3009 | o | changeset: 8:7a0b11f71937
3010 |/| | parent: 0:e6eb3150255d
3010 |/| | parent: 0:e6eb3150255d
3011 | ~ | parent: 7:b632bb1b1224
3011 | ~ | parent: 7:b632bb1b1224
3012 | | user: test
3012 | | user: test
3013 | | date: Thu Jan 01 00:00:08 1970 +0000
3013 | | date: Thu Jan 01 00:00:08 1970 +0000
3014 | | summary: (8) merge two known; one immediate left, one far right
3014 | | summary: (8) merge two known; one immediate left, one far right
3015 | /
3015 | /
3016 o | changeset: 7:b632bb1b1224
3016 o | changeset: 7:b632bb1b1224
3017 |\ \ parent: 2:3d9a33b8d1e1
3017 |\ \ parent: 2:3d9a33b8d1e1
3018 | ~ | parent: 5:4409d547b708
3018 | ~ | parent: 5:4409d547b708
3019 | | user: test
3019 | | user: test
3020 | | date: Thu Jan 01 00:00:07 1970 +0000
3020 | | date: Thu Jan 01 00:00:07 1970 +0000
3021 | | summary: (7) expand
3021 | | summary: (7) expand
3022 | /
3022 | /
3023 | o changeset: 6:b105a072e251
3023 | o changeset: 6:b105a072e251
3024 |/| parent: 2:3d9a33b8d1e1
3024 |/| parent: 2:3d9a33b8d1e1
3025 | ~ parent: 5:4409d547b708
3025 | ~ parent: 5:4409d547b708
3026 | user: test
3026 | user: test
3027 | date: Thu Jan 01 00:00:06 1970 +0000
3027 | date: Thu Jan 01 00:00:06 1970 +0000
3028 | summary: (6) merge two known; one immediate left, one far left
3028 | summary: (6) merge two known; one immediate left, one far left
3029 |
3029 |
3030 o changeset: 5:4409d547b708
3030 o changeset: 5:4409d547b708
3031 |\ parent: 3:27eef8ed80b4
3031 |\ parent: 3:27eef8ed80b4
3032 | ~ parent: 4:26a8bac39d9f
3032 | ~ parent: 4:26a8bac39d9f
3033 | user: test
3033 | user: test
3034 | date: Thu Jan 01 00:00:05 1970 +0000
3034 | date: Thu Jan 01 00:00:05 1970 +0000
3035 | summary: (5) expand
3035 | summary: (5) expand
3036 |
3036 |
3037 o changeset: 4:26a8bac39d9f
3037 o changeset: 4:26a8bac39d9f
3038 |\ parent: 1:6db2ef61d156
3038 |\ parent: 1:6db2ef61d156
3039 ~ ~ parent: 3:27eef8ed80b4
3039 ~ ~ parent: 3:27eef8ed80b4
3040 user: test
3040 user: test
3041 date: Thu Jan 01 00:00:04 1970 +0000
3041 date: Thu Jan 01 00:00:04 1970 +0000
3042 summary: (4) merge two known; one immediate left, one immediate right
3042 summary: (4) merge two known; one immediate left, one immediate right
3043
3043
3044 Previously, one could specify graphstyle.grandparent = <N><char> to draw <char>
3044 Previously, one could specify graphstyle.grandparent = <N><char> to draw <char>
3045 on only the last N lines (for positive N) or everything but the first N lines
3045 on only the last N lines (for positive N) or everything but the first N lines
3046 (for negative N), with the rest of the edge using the parent edge styling.
3046 (for negative N), with the rest of the edge using the parent edge styling.
3047
3047
3048 This was removed, and this test now shows that muliple characters being
3048 This was removed, and this test now shows that muliple characters being
3049 specified in graphstyle.grandparent aren't treated specially (including in width
3049 specified in graphstyle.grandparent aren't treated specially (including in width
3050 calculations; there's no specific reason to *avoid* handling the width
3050 calculations; there's no specific reason to *avoid* handling the width
3051 calculations, but it's difficult to do correctly and efficiently).
3051 calculations, but it's difficult to do correctly and efficiently).
3052
3052
3053 $ cat << EOF >> $HGRCPATH
3053 $ cat << EOF >> $HGRCPATH
3054 > [experimental]
3054 > [experimental]
3055 > graphstyle.parent = !
3055 > graphstyle.parent = !
3056 > graphstyle.grandparent = 3.
3056 > graphstyle.grandparent = 3.
3057 > graphstyle.missing =
3057 > graphstyle.missing =
3058 > EOF
3058 > EOF
3059 $ hg log -G -r '36:18 & file("a")' -m
3059 $ hg log -G -r '36:18 & file("a")' -m
3060 @ changeset: 36:08a19a744424
3060 @ changeset: 36:08a19a744424
3061 3. branch: branch
3061 3. branch: branch
3062 3. tag: tip
3062 3. tag: tip
3063 3. parent: 35:9159c3644c5e
3063 3. parent: 35:9159c3644c5e
3064 3. parent: 35:9159c3644c5e
3064 3. parent: 35:9159c3644c5e
3065 3. user: test
3065 3. user: test
3066 3. date: Thu Jan 01 00:00:36 1970 +0000
3066 3. date: Thu Jan 01 00:00:36 1970 +0000
3067 3. summary: (36) buggy merge: identical parents
3067 3. summary: (36) buggy merge: identical parents
3068 3.
3068 3.
3069 o changeset: 32:d06dffa21a31
3069 o changeset: 32:d06dffa21a31
3070 !\ parent: 27:886ed638191b
3070 !\ parent: 27:886ed638191b
3071 ! 3. parent: 31:621d83e11f67
3071 ! 3. parent: 31:621d83e11f67
3072 ! 3. user: test
3072 ! 3. user: test
3073 ! 3. date: Thu Jan 01 00:00:32 1970 +0000
3073 ! 3. date: Thu Jan 01 00:00:32 1970 +0000
3074 ! 3. summary: (32) expand
3074 ! 3. summary: (32) expand
3075 ! 3.
3075 ! 3.
3076 o 3. changeset: 31:621d83e11f67
3076 o 3. changeset: 31:621d83e11f67
3077 !\3. parent: 21:d42a756af44d
3077 !\3. parent: 21:d42a756af44d
3078 ! 3. parent: 30:6e11cd4b648f
3078 ! 3. parent: 30:6e11cd4b648f
3079 ! 3. user: test
3079 ! 3. user: test
3080 ! 3. date: Thu Jan 01 00:00:31 1970 +0000
3080 ! 3. date: Thu Jan 01 00:00:31 1970 +0000
3081 ! 3. summary: (31) expand
3081 ! 3. summary: (31) expand
3082 ! 3.
3082 ! 3.
3083 o 3. changeset: 30:6e11cd4b648f
3083 o 3. changeset: 30:6e11cd4b648f
3084 !\ \ parent: 28:44ecd0b9ae99
3084 !\ \ parent: 28:44ecd0b9ae99
3085 ! ~ 3. parent: 29:cd9bb2be7593
3085 ! ~ 3. parent: 29:cd9bb2be7593
3086 ! 3. user: test
3086 ! 3. user: test
3087 ! 3. date: Thu Jan 01 00:00:30 1970 +0000
3087 ! 3. date: Thu Jan 01 00:00:30 1970 +0000
3088 ! 3. summary: (30) expand
3088 ! 3. summary: (30) expand
3089 ! /
3089 ! /
3090 o 3. changeset: 28:44ecd0b9ae99
3090 o 3. changeset: 28:44ecd0b9ae99
3091 !\ \ parent: 1:6db2ef61d156
3091 !\ \ parent: 1:6db2ef61d156
3092 ! ~ 3. parent: 26:7f25b6c2f0b9
3092 ! ~ 3. parent: 26:7f25b6c2f0b9
3093 ! 3. user: test
3093 ! 3. user: test
3094 ! 3. date: Thu Jan 01 00:00:28 1970 +0000
3094 ! 3. date: Thu Jan 01 00:00:28 1970 +0000
3095 ! 3. summary: (28) merge zero known
3095 ! 3. summary: (28) merge zero known
3096 ! /
3096 ! /
3097 o 3. changeset: 26:7f25b6c2f0b9
3097 o 3. changeset: 26:7f25b6c2f0b9
3098 !\ \ parent: 18:1aa84d96232a
3098 !\ \ parent: 18:1aa84d96232a
3099 ! ! 3. parent: 25:91da8ed57247
3099 ! ! 3. parent: 25:91da8ed57247
3100 ! ! 3. user: test
3100 ! ! 3. user: test
3101 ! ! 3. date: Thu Jan 01 00:00:26 1970 +0000
3101 ! ! 3. date: Thu Jan 01 00:00:26 1970 +0000
3102 ! ! 3. summary: (26) merge one known; far right
3102 ! ! 3. summary: (26) merge one known; far right
3103 ! ! 3.
3103 ! ! 3.
3104 ! o 3. changeset: 25:91da8ed57247
3104 ! o 3. changeset: 25:91da8ed57247
3105 ! !\3. parent: 21:d42a756af44d
3105 ! !\3. parent: 21:d42a756af44d
3106 ! ! 3. parent: 24:a9c19a3d96b7
3106 ! ! 3. parent: 24:a9c19a3d96b7
3107 ! ! 3. user: test
3107 ! ! 3. user: test
3108 ! ! 3. date: Thu Jan 01 00:00:25 1970 +0000
3108 ! ! 3. date: Thu Jan 01 00:00:25 1970 +0000
3109 ! ! 3. summary: (25) merge one known; far left
3109 ! ! 3. summary: (25) merge one known; far left
3110 ! ! 3.
3110 ! ! 3.
3111 ! o 3. changeset: 24:a9c19a3d96b7
3111 ! o 3. changeset: 24:a9c19a3d96b7
3112 ! !\ \ parent: 0:e6eb3150255d
3112 ! !\ \ parent: 0:e6eb3150255d
3113 ! ! ~ 3. parent: 23:a01cddf0766d
3113 ! ! ~ 3. parent: 23:a01cddf0766d
3114 ! ! 3. user: test
3114 ! ! 3. user: test
3115 ! ! 3. date: Thu Jan 01 00:00:24 1970 +0000
3115 ! ! 3. date: Thu Jan 01 00:00:24 1970 +0000
3116 ! ! 3. summary: (24) merge one known; immediate right
3116 ! ! 3. summary: (24) merge one known; immediate right
3117 ! ! /
3117 ! ! /
3118 ! o 3. changeset: 23:a01cddf0766d
3118 ! o 3. changeset: 23:a01cddf0766d
3119 ! !\ \ parent: 1:6db2ef61d156
3119 ! !\ \ parent: 1:6db2ef61d156
3120 ! ! ~ 3. parent: 22:e0d9cccacb5d
3120 ! ! ~ 3. parent: 22:e0d9cccacb5d
3121 ! ! 3. user: test
3121 ! ! 3. user: test
3122 ! ! 3. date: Thu Jan 01 00:00:23 1970 +0000
3122 ! ! 3. date: Thu Jan 01 00:00:23 1970 +0000
3123 ! ! 3. summary: (23) merge one known; immediate left
3123 ! ! 3. summary: (23) merge one known; immediate left
3124 ! ! /
3124 ! ! /
3125 ! o 3. changeset: 22:e0d9cccacb5d
3125 ! o 3. changeset: 22:e0d9cccacb5d
3126 !/3./ parent: 18:1aa84d96232a
3126 !/3./ parent: 18:1aa84d96232a
3127 ! 3. parent: 21:d42a756af44d
3127 ! 3. parent: 21:d42a756af44d
3128 ! 3. user: test
3128 ! 3. user: test
3129 ! 3. date: Thu Jan 01 00:00:22 1970 +0000
3129 ! 3. date: Thu Jan 01 00:00:22 1970 +0000
3130 ! 3. summary: (22) merge two known; one far left, one far right
3130 ! 3. summary: (22) merge two known; one far left, one far right
3131 ! 3.
3131 ! 3.
3132 ! o changeset: 21:d42a756af44d
3132 ! o changeset: 21:d42a756af44d
3133 ! !\ parent: 19:31ddc2c1573b
3133 ! !\ parent: 19:31ddc2c1573b
3134 ! ! ! parent: 20:d30ed6450e32
3134 ! ! ! parent: 20:d30ed6450e32
3135 ! ! ! user: test
3135 ! ! ! user: test
3136 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3136 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3137 ! ! ! summary: (21) expand
3137 ! ! ! summary: (21) expand
3138 ! ! !
3138 ! ! !
3139 +---o changeset: 20:d30ed6450e32
3139 +---o changeset: 20:d30ed6450e32
3140 ! ! | parent: 0:e6eb3150255d
3140 ! ! | parent: 0:e6eb3150255d
3141 ! ! ~ parent: 18:1aa84d96232a
3141 ! ! ~ parent: 18:1aa84d96232a
3142 ! ! user: test
3142 ! ! user: test
3143 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3143 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3144 ! ! summary: (20) merge two known; two far right
3144 ! ! summary: (20) merge two known; two far right
3145 ! !
3145 ! !
3146 ! o changeset: 19:31ddc2c1573b
3146 ! o changeset: 19:31ddc2c1573b
3147 ! |\ parent: 15:1dda3f72782d
3147 ! |\ parent: 15:1dda3f72782d
3148 ! ~ ~ parent: 17:44765d7c06e0
3148 ! ~ ~ parent: 17:44765d7c06e0
3149 ! user: test
3149 ! user: test
3150 ! date: Thu Jan 01 00:00:19 1970 +0000
3150 ! date: Thu Jan 01 00:00:19 1970 +0000
3151 ! summary: (19) expand
3151 ! summary: (19) expand
3152 !
3152 !
3153 o changeset: 18:1aa84d96232a
3153 o changeset: 18:1aa84d96232a
3154 |\ parent: 1:6db2ef61d156
3154 |\ parent: 1:6db2ef61d156
3155 ~ ~ parent: 15:1dda3f72782d
3155 ~ ~ parent: 15:1dda3f72782d
3156 user: test
3156 user: test
3157 date: Thu Jan 01 00:00:18 1970 +0000
3157 date: Thu Jan 01 00:00:18 1970 +0000
3158 summary: (18) merge two known; two far left
3158 summary: (18) merge two known; two far left
3159
3159
3160 (This formerly tested "All but the first 3 lines", but is now showing that it's
3160 (This formerly tested "All but the first 3 lines", but is now showing that it's
3161 still not treated any differently):
3161 still not treated any differently):
3162
3162
3163 $ cat << EOF >> $HGRCPATH
3163 $ cat << EOF >> $HGRCPATH
3164 > [experimental]
3164 > [experimental]
3165 > graphstyle.parent = !
3165 > graphstyle.parent = !
3166 > graphstyle.grandparent = -3.
3166 > graphstyle.grandparent = -3.
3167 > graphstyle.missing =
3167 > graphstyle.missing =
3168 > EOF
3168 > EOF
3169 $ hg log -G -r '36:18 & file("a")' -m
3169 $ hg log -G -r '36:18 & file("a")' -m
3170 @ changeset: 36:08a19a744424
3170 @ changeset: 36:08a19a744424
3171 -3. branch: branch
3171 -3. branch: branch
3172 -3. tag: tip
3172 -3. tag: tip
3173 -3. parent: 35:9159c3644c5e
3173 -3. parent: 35:9159c3644c5e
3174 -3. parent: 35:9159c3644c5e
3174 -3. parent: 35:9159c3644c5e
3175 -3. user: test
3175 -3. user: test
3176 -3. date: Thu Jan 01 00:00:36 1970 +0000
3176 -3. date: Thu Jan 01 00:00:36 1970 +0000
3177 -3. summary: (36) buggy merge: identical parents
3177 -3. summary: (36) buggy merge: identical parents
3178 -3.
3178 -3.
3179 o changeset: 32:d06dffa21a31
3179 o changeset: 32:d06dffa21a31
3180 !\ parent: 27:886ed638191b
3180 !\ parent: 27:886ed638191b
3181 ! -3. parent: 31:621d83e11f67
3181 ! -3. parent: 31:621d83e11f67
3182 ! -3. user: test
3182 ! -3. user: test
3183 ! -3. date: Thu Jan 01 00:00:32 1970 +0000
3183 ! -3. date: Thu Jan 01 00:00:32 1970 +0000
3184 ! -3. summary: (32) expand
3184 ! -3. summary: (32) expand
3185 ! -3.
3185 ! -3.
3186 o -3. changeset: 31:621d83e11f67
3186 o -3. changeset: 31:621d83e11f67
3187 !\-3. parent: 21:d42a756af44d
3187 !\-3. parent: 21:d42a756af44d
3188 ! -3. parent: 30:6e11cd4b648f
3188 ! -3. parent: 30:6e11cd4b648f
3189 ! -3. user: test
3189 ! -3. user: test
3190 ! -3. date: Thu Jan 01 00:00:31 1970 +0000
3190 ! -3. date: Thu Jan 01 00:00:31 1970 +0000
3191 ! -3. summary: (31) expand
3191 ! -3. summary: (31) expand
3192 ! -3.
3192 ! -3.
3193 o -3. changeset: 30:6e11cd4b648f
3193 o -3. changeset: 30:6e11cd4b648f
3194 !\ \ parent: 28:44ecd0b9ae99
3194 !\ \ parent: 28:44ecd0b9ae99
3195 ! ~ -3. parent: 29:cd9bb2be7593
3195 ! ~ -3. parent: 29:cd9bb2be7593
3196 ! -3. user: test
3196 ! -3. user: test
3197 ! -3. date: Thu Jan 01 00:00:30 1970 +0000
3197 ! -3. date: Thu Jan 01 00:00:30 1970 +0000
3198 ! -3. summary: (30) expand
3198 ! -3. summary: (30) expand
3199 ! /
3199 ! /
3200 o -3. changeset: 28:44ecd0b9ae99
3200 o -3. changeset: 28:44ecd0b9ae99
3201 !\ \ parent: 1:6db2ef61d156
3201 !\ \ parent: 1:6db2ef61d156
3202 ! ~ -3. parent: 26:7f25b6c2f0b9
3202 ! ~ -3. parent: 26:7f25b6c2f0b9
3203 ! -3. user: test
3203 ! -3. user: test
3204 ! -3. date: Thu Jan 01 00:00:28 1970 +0000
3204 ! -3. date: Thu Jan 01 00:00:28 1970 +0000
3205 ! -3. summary: (28) merge zero known
3205 ! -3. summary: (28) merge zero known
3206 ! /
3206 ! /
3207 o -3. changeset: 26:7f25b6c2f0b9
3207 o -3. changeset: 26:7f25b6c2f0b9
3208 !\ \ parent: 18:1aa84d96232a
3208 !\ \ parent: 18:1aa84d96232a
3209 ! ! -3. parent: 25:91da8ed57247
3209 ! ! -3. parent: 25:91da8ed57247
3210 ! ! -3. user: test
3210 ! ! -3. user: test
3211 ! ! -3. date: Thu Jan 01 00:00:26 1970 +0000
3211 ! ! -3. date: Thu Jan 01 00:00:26 1970 +0000
3212 ! ! -3. summary: (26) merge one known; far right
3212 ! ! -3. summary: (26) merge one known; far right
3213 ! ! -3.
3213 ! ! -3.
3214 ! o -3. changeset: 25:91da8ed57247
3214 ! o -3. changeset: 25:91da8ed57247
3215 ! !\-3. parent: 21:d42a756af44d
3215 ! !\-3. parent: 21:d42a756af44d
3216 ! ! -3. parent: 24:a9c19a3d96b7
3216 ! ! -3. parent: 24:a9c19a3d96b7
3217 ! ! -3. user: test
3217 ! ! -3. user: test
3218 ! ! -3. date: Thu Jan 01 00:00:25 1970 +0000
3218 ! ! -3. date: Thu Jan 01 00:00:25 1970 +0000
3219 ! ! -3. summary: (25) merge one known; far left
3219 ! ! -3. summary: (25) merge one known; far left
3220 ! ! -3.
3220 ! ! -3.
3221 ! o -3. changeset: 24:a9c19a3d96b7
3221 ! o -3. changeset: 24:a9c19a3d96b7
3222 ! !\ \ parent: 0:e6eb3150255d
3222 ! !\ \ parent: 0:e6eb3150255d
3223 ! ! ~ -3. parent: 23:a01cddf0766d
3223 ! ! ~ -3. parent: 23:a01cddf0766d
3224 ! ! -3. user: test
3224 ! ! -3. user: test
3225 ! ! -3. date: Thu Jan 01 00:00:24 1970 +0000
3225 ! ! -3. date: Thu Jan 01 00:00:24 1970 +0000
3226 ! ! -3. summary: (24) merge one known; immediate right
3226 ! ! -3. summary: (24) merge one known; immediate right
3227 ! ! /
3227 ! ! /
3228 ! o -3. changeset: 23:a01cddf0766d
3228 ! o -3. changeset: 23:a01cddf0766d
3229 ! !\ \ parent: 1:6db2ef61d156
3229 ! !\ \ parent: 1:6db2ef61d156
3230 ! ! ~ -3. parent: 22:e0d9cccacb5d
3230 ! ! ~ -3. parent: 22:e0d9cccacb5d
3231 ! ! -3. user: test
3231 ! ! -3. user: test
3232 ! ! -3. date: Thu Jan 01 00:00:23 1970 +0000
3232 ! ! -3. date: Thu Jan 01 00:00:23 1970 +0000
3233 ! ! -3. summary: (23) merge one known; immediate left
3233 ! ! -3. summary: (23) merge one known; immediate left
3234 ! ! /
3234 ! ! /
3235 ! o -3. changeset: 22:e0d9cccacb5d
3235 ! o -3. changeset: 22:e0d9cccacb5d
3236 !/-3./ parent: 18:1aa84d96232a
3236 !/-3./ parent: 18:1aa84d96232a
3237 ! -3. parent: 21:d42a756af44d
3237 ! -3. parent: 21:d42a756af44d
3238 ! -3. user: test
3238 ! -3. user: test
3239 ! -3. date: Thu Jan 01 00:00:22 1970 +0000
3239 ! -3. date: Thu Jan 01 00:00:22 1970 +0000
3240 ! -3. summary: (22) merge two known; one far left, one far right
3240 ! -3. summary: (22) merge two known; one far left, one far right
3241 ! -3.
3241 ! -3.
3242 ! o changeset: 21:d42a756af44d
3242 ! o changeset: 21:d42a756af44d
3243 ! !\ parent: 19:31ddc2c1573b
3243 ! !\ parent: 19:31ddc2c1573b
3244 ! ! ! parent: 20:d30ed6450e32
3244 ! ! ! parent: 20:d30ed6450e32
3245 ! ! ! user: test
3245 ! ! ! user: test
3246 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3246 ! ! ! date: Thu Jan 01 00:00:21 1970 +0000
3247 ! ! ! summary: (21) expand
3247 ! ! ! summary: (21) expand
3248 ! ! !
3248 ! ! !
3249 +---o changeset: 20:d30ed6450e32
3249 +---o changeset: 20:d30ed6450e32
3250 ! ! | parent: 0:e6eb3150255d
3250 ! ! | parent: 0:e6eb3150255d
3251 ! ! ~ parent: 18:1aa84d96232a
3251 ! ! ~ parent: 18:1aa84d96232a
3252 ! ! user: test
3252 ! ! user: test
3253 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3253 ! ! date: Thu Jan 01 00:00:20 1970 +0000
3254 ! ! summary: (20) merge two known; two far right
3254 ! ! summary: (20) merge two known; two far right
3255 ! !
3255 ! !
3256 ! o changeset: 19:31ddc2c1573b
3256 ! o changeset: 19:31ddc2c1573b
3257 ! |\ parent: 15:1dda3f72782d
3257 ! |\ parent: 15:1dda3f72782d
3258 ! ~ ~ parent: 17:44765d7c06e0
3258 ! ~ ~ parent: 17:44765d7c06e0
3259 ! user: test
3259 ! user: test
3260 ! date: Thu Jan 01 00:00:19 1970 +0000
3260 ! date: Thu Jan 01 00:00:19 1970 +0000
3261 ! summary: (19) expand
3261 ! summary: (19) expand
3262 !
3262 !
3263 o changeset: 18:1aa84d96232a
3263 o changeset: 18:1aa84d96232a
3264 |\ parent: 1:6db2ef61d156
3264 |\ parent: 1:6db2ef61d156
3265 ~ ~ parent: 15:1dda3f72782d
3265 ~ ~ parent: 15:1dda3f72782d
3266 user: test
3266 user: test
3267 date: Thu Jan 01 00:00:18 1970 +0000
3267 date: Thu Jan 01 00:00:18 1970 +0000
3268 summary: (18) merge two known; two far left
3268 summary: (18) merge two known; two far left
3269
3269
3270 $ cd ..
3270 $ cd ..
3271
3271
3272 Change graph shorten, test better with graphstyle.missing not none
3272 Change graph shorten, test better with graphstyle.missing not none
3273
3273
3274 $ cd repo
3274 $ cd repo
3275 $ cat << EOF >> $HGRCPATH
3275 $ cat << EOF >> $HGRCPATH
3276 > [experimental]
3276 > [experimental]
3277 > graphstyle.parent = |
3277 > graphstyle.parent = |
3278 > graphstyle.grandparent = :
3278 > graphstyle.grandparent = :
3279 > graphstyle.missing = '
3279 > graphstyle.missing = '
3280 > graphshorten = true
3280 > graphshorten = true
3281 > EOF
3281 > EOF
3282 $ hg log -G -r 'file("a")' -m -T '{rev} {desc}'
3282 $ hg log -G -r 'file("a")' -m -T '{rev} {desc}'
3283 @ 36 (36) buggy merge: identical parents
3283 @ 36 (36) buggy merge: identical parents
3284 o 32 (32) expand
3284 o 32 (32) expand
3285 |\
3285 |\
3286 o : 31 (31) expand
3286 o : 31 (31) expand
3287 |\:
3287 |\:
3288 o : 30 (30) expand
3288 o : 30 (30) expand
3289 |\ \
3289 |\ \
3290 o \ \ 28 (28) merge zero known
3290 o \ \ 28 (28) merge zero known
3291 |\ \ \
3291 |\ \ \
3292 o \ \ \ 26 (26) merge one known; far right
3292 o \ \ \ 26 (26) merge one known; far right
3293 |\ \ \ \
3293 |\ \ \ \
3294 | o-----+ 25 (25) merge one known; far left
3294 | o-----+ 25 (25) merge one known; far left
3295 | o ' ' : 24 (24) merge one known; immediate right
3295 | o ' ' : 24 (24) merge one known; immediate right
3296 | |\ \ \ \
3296 | |\ \ \ \
3297 | o---+ ' : 23 (23) merge one known; immediate left
3297 | o---+ ' : 23 (23) merge one known; immediate left
3298 | o-------+ 22 (22) merge two known; one far left, one far right
3298 | o-------+ 22 (22) merge two known; one far left, one far right
3299 |/ / / / /
3299 |/ / / / /
3300 | ' ' ' o 21 (21) expand
3300 | ' ' ' o 21 (21) expand
3301 | ' ' ' |\
3301 | ' ' ' |\
3302 +-+-------o 20 (20) merge two known; two far right
3302 +-+-------o 20 (20) merge two known; two far right
3303 | ' ' ' o 19 (19) expand
3303 | ' ' ' o 19 (19) expand
3304 | ' ' ' |\
3304 | ' ' ' |\
3305 o---+---+ | 18 (18) merge two known; two far left
3305 o---+---+ | 18 (18) merge two known; two far left
3306 / / / / /
3306 / / / / /
3307 ' ' ' | o 17 (17) expand
3307 ' ' ' | o 17 (17) expand
3308 ' ' ' | |\
3308 ' ' ' | |\
3309 +-+-------o 16 (16) merge two known; one immediate right, one near right
3309 +-+-------o 16 (16) merge two known; one immediate right, one near right
3310 ' ' ' o | 15 (15) expand
3310 ' ' ' o | 15 (15) expand
3311 ' ' ' |\ \
3311 ' ' ' |\ \
3312 +-------o | 14 (14) merge two known; one immediate right, one far right
3312 +-------o | 14 (14) merge two known; one immediate right, one far right
3313 ' ' ' | |/
3313 ' ' ' | |/
3314 ' ' ' o | 13 (13) expand
3314 ' ' ' o | 13 (13) expand
3315 ' ' ' |\ \
3315 ' ' ' |\ \
3316 ' +---+---o 12 (12) merge two known; one immediate right, one far left
3316 ' +---+---o 12 (12) merge two known; one immediate right, one far left
3317 ' ' ' | o 11 (11) expand
3317 ' ' ' | o 11 (11) expand
3318 ' ' ' | |\
3318 ' ' ' | |\
3319 +---------o 10 (10) merge two known; one immediate left, one near right
3319 +---------o 10 (10) merge two known; one immediate left, one near right
3320 ' ' ' | |/
3320 ' ' ' | |/
3321 ' ' ' o | 9 (9) expand
3321 ' ' ' o | 9 (9) expand
3322 ' ' ' |\ \
3322 ' ' ' |\ \
3323 +-------o | 8 (8) merge two known; one immediate left, one far right
3323 +-------o | 8 (8) merge two known; one immediate left, one far right
3324 ' ' ' |/ /
3324 ' ' ' |/ /
3325 ' ' ' o | 7 (7) expand
3325 ' ' ' o | 7 (7) expand
3326 ' ' ' |\ \
3326 ' ' ' |\ \
3327 ' ' ' +---o 6 (6) merge two known; one immediate left, one far left
3327 ' ' ' +---o 6 (6) merge two known; one immediate left, one far left
3328 ' ' ' | '/
3328 ' ' ' | '/
3329 ' ' ' o ' 5 (5) expand
3329 ' ' ' o ' 5 (5) expand
3330 ' ' ' |\ \
3330 ' ' ' |\ \
3331 ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right
3331 ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right
3332 ' ' ' '/ /
3332 ' ' ' '/ /
3333
3333
3334 behavior with newlines
3334 behavior with newlines
3335
3335
3336 $ hg log -G -r ::2 -T '{rev} {desc}'
3336 $ hg log -G -r ::2 -T '{rev} {desc}'
3337 o 2 (2) collapse
3337 o 2 (2) collapse
3338 o 1 (1) collapse
3338 o 1 (1) collapse
3339 o 0 (0) root
3339 o 0 (0) root
3340
3340
3341 $ hg log -G -r ::2 -T '{rev} {desc}\n'
3341 $ hg log -G -r ::2 -T '{rev} {desc}\n'
3342 o 2 (2) collapse
3342 o 2 (2) collapse
3343 o 1 (1) collapse
3343 o 1 (1) collapse
3344 o 0 (0) root
3344 o 0 (0) root
3345
3345
3346 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
3346 $ hg log -G -r ::2 -T '{rev} {desc}\n\n'
3347 o 2 (2) collapse
3347 o 2 (2) collapse
3348 |
3348 |
3349 o 1 (1) collapse
3349 o 1 (1) collapse
3350 |
3350 |
3351 o 0 (0) root
3351 o 0 (0) root
3352
3352
3353
3353
3354 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3354 $ hg log -G -r ::2 -T '\n{rev} {desc}'
3355 o
3355 o
3356 | 2 (2) collapse
3356 | 2 (2) collapse
3357 o
3357 o
3358 | 1 (1) collapse
3358 | 1 (1) collapse
3359 o
3359 o
3360 0 (0) root
3360 0 (0) root
3361
3361
3362 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3362 $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n'
3363 o 2 (2) collapse
3363 o 2 (2) collapse
3364 |
3364 |
3365 |
3365 |
3366 o 1 (1) collapse
3366 o 1 (1) collapse
3367 |
3367 |
3368 |
3368 |
3369 o 0 (0) root
3369 o 0 (0) root
3370
3370
3371
3371
3372 $ cd ..
3372 $ cd ..
3373
3373
3374 When inserting extra line nodes to handle more than 2 parents, ensure that
3374 When inserting extra line nodes to handle more than 2 parents, ensure that
3375 the right node styles are used (issue5174):
3375 the right node styles are used (issue5174):
3376
3376
3377 $ hg init repo-issue5174
3377 $ hg init repo-issue5174
3378 $ cd repo-issue5174
3378 $ cd repo-issue5174
3379 $ echo a > f0
3379 $ echo a > f0
3380 $ hg ci -Aqm 0
3380 $ hg ci -Aqm 0
3381 $ echo a > f1
3381 $ echo a > f1
3382 $ hg ci -Aqm 1
3382 $ hg ci -Aqm 1
3383 $ echo a > f2
3383 $ echo a > f2
3384 $ hg ci -Aqm 2
3384 $ hg ci -Aqm 2
3385 $ hg co ".^"
3385 $ hg co ".^"
3386 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3386 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
3387 $ echo a > f3
3387 $ echo a > f3
3388 $ hg ci -Aqm 3
3388 $ hg ci -Aqm 3
3389 $ hg co ".^^"
3389 $ hg co ".^^"
3390 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3390 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3391 $ echo a > f4
3391 $ echo a > f4
3392 $ hg ci -Aqm 4
3392 $ hg ci -Aqm 4
3393 $ hg merge -r 2
3393 $ hg merge -r 2
3394 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3394 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3395 (branch merge, don't forget to commit)
3395 (branch merge, don't forget to commit)
3396 $ hg ci -qm 5
3396 $ hg ci -qm 5
3397 $ hg merge -r 3
3397 $ hg merge -r 3
3398 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3398 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3399 (branch merge, don't forget to commit)
3399 (branch merge, don't forget to commit)
3400 $ hg ci -qm 6
3400 $ hg ci -qm 6
3401 $ hg log -G -r '0 | 1 | 2 | 6'
3401 $ hg log -G -r '0 | 1 | 2 | 6'
3402 @ changeset: 6:851fe89689ad
3402 @ changeset: 6:851fe89689ad
3403 :\ tag: tip
3403 :\ tag: tip
3404 : : parent: 5:4f1e3cf15f5d
3404 : : parent: 5:4f1e3cf15f5d
3405 : : parent: 3:b74ba7084d2d
3405 : : parent: 3:b74ba7084d2d
3406 : : user: test
3406 : : user: test
3407 : : date: Thu Jan 01 00:00:00 1970 +0000
3407 : : date: Thu Jan 01 00:00:00 1970 +0000
3408 : : summary: 6
3408 : : summary: 6
3409 : :
3409 : :
3410 : \
3410 : \
3411 : :\
3411 : :\
3412 : o : changeset: 2:3e6599df4cce
3412 : o : changeset: 2:3e6599df4cce
3413 : :/ user: test
3413 : :/ user: test
3414 : : date: Thu Jan 01 00:00:00 1970 +0000
3414 : : date: Thu Jan 01 00:00:00 1970 +0000
3415 : : summary: 2
3415 : : summary: 2
3416 : :
3416 : :
3417 : o changeset: 1:bd9a55143933
3417 : o changeset: 1:bd9a55143933
3418 :/ user: test
3418 :/ user: test
3419 : date: Thu Jan 01 00:00:00 1970 +0000
3419 : date: Thu Jan 01 00:00:00 1970 +0000
3420 : summary: 1
3420 : summary: 1
3421 :
3421 :
3422 o changeset: 0:870a5edc339c
3422 o changeset: 0:870a5edc339c
3423 user: test
3423 user: test
3424 date: Thu Jan 01 00:00:00 1970 +0000
3424 date: Thu Jan 01 00:00:00 1970 +0000
3425 summary: 0
3425 summary: 0
3426
3426
3427
3427
3428 $ cd ..
3428 $ cd ..
3429
3429
3430 Multiple roots (issue5440):
3430 Multiple roots (issue5440):
3431
3431
3432 $ hg init multiroots
3432 $ hg init multiroots
3433 $ cd multiroots
3433 $ cd multiroots
3434 $ cat <<EOF > .hg/hgrc
3434 $ cat <<EOF > .hg/hgrc
3435 > [command-templates]
3435 > [command-templates]
3436 > log = '{rev} {desc}\n\n'
3436 > log = '{rev} {desc}\n\n'
3437 > EOF
3437 > EOF
3438
3438
3439 $ touch foo
3439 $ touch foo
3440 $ hg ci -Aqm foo
3440 $ hg ci -Aqm foo
3441 $ hg co -q null
3441 $ hg co -q null
3442 $ touch bar
3442 $ touch bar
3443 $ hg ci -Aqm bar
3443 $ hg ci -Aqm bar
3444
3444
3445 $ hg log -Gr null:
3445 $ hg log -Gr null:
3446 @ 1 bar
3446 @ 1 bar
3447 |
3447 |
3448 | o 0 foo
3448 | o 0 foo
3449 |/
3449 |/
3450 o -1
3450 o -1
3451
3451
3452 $ hg log -Gr null+0
3452 $ hg log -Gr null+0
3453 o 0 foo
3453 o 0 foo
3454 |
3454 |
3455 o -1
3455 o -1
3456
3456
3457 $ hg log -Gr null+1
3457 $ hg log -Gr null+1
3458 @ 1 bar
3458 @ 1 bar
3459 |
3459 |
3460 o -1
3460 o -1
3461
3461
3462
3462
3463 $ cd ..
3463 $ cd ..
@@ -1,192 +1,198 b''
1 Test 'hg log' with a bookmark
1 Test 'hg log' with a bookmark
2
2
3
3
4 Create the repository
4 Create the repository
5
5
6 $ hg init Test-D8973
6 $ hg init Test-D8973
7 $ cd Test-D8973
7 $ cd Test-D8973
8 $ echo "bar" > foo.txt
8 $ echo "bar" > foo.txt
9 $ hg add foo.txt
9 $ hg add foo.txt
10 $ hg commit -m "Add foo in 'default'"
10 $ hg commit -m "Add foo in 'default'"
11
11
12
12
13 Add a bookmark for topic X
13 Add a bookmark for topic X
14
14
15 $ hg branch -f sebhtml
15 $ hg branch -f sebhtml
16 marked working directory as branch sebhtml
16 marked working directory as branch sebhtml
17 (branches are permanent and global, did you want a bookmark?)
17 (branches are permanent and global, did you want a bookmark?)
18
18
19 $ hg bookmark sebhtml/99991-topic-X
19 $ hg bookmark sebhtml/99991-topic-X
20 $ hg up sebhtml/99991-topic-X
20 $ hg up sebhtml/99991-topic-X
21 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
21 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
22
22
23 $ echo "X" > x.txt
23 $ echo "X" > x.txt
24 $ hg add x.txt
24 $ hg add x.txt
25 $ hg commit -m "Add x.txt in 'sebhtml/99991-topic-X'"
25 $ hg commit -m "Add x.txt in 'sebhtml/99991-topic-X'"
26
26
27 $ hg log -B sebhtml/99991-topic-X
27 $ hg log -B sebhtml/99991-topic-X
28 changeset: 1:29f39dea9bf9
28 changeset: 1:29f39dea9bf9
29 branch: sebhtml
29 branch: sebhtml
30 bookmark: sebhtml/99991-topic-X
30 bookmark: sebhtml/99991-topic-X
31 tag: tip
31 tag: tip
32 user: test
32 user: test
33 date: Thu Jan 01 00:00:00 1970 +0000
33 date: Thu Jan 01 00:00:00 1970 +0000
34 summary: Add x.txt in 'sebhtml/99991-topic-X'
34 summary: Add x.txt in 'sebhtml/99991-topic-X'
35
35
36
36
37 Add a bookmark for topic Y
37 Add a bookmark for topic Y
38
38
39 $ hg update default
39 $ hg update default
40 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
40 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
41 (leaving bookmark sebhtml/99991-topic-X)
41 (leaving bookmark sebhtml/99991-topic-X)
42
42
43 $ echo "Y" > y.txt
43 $ echo "Y" > y.txt
44 $ hg add y.txt
44 $ hg add y.txt
45 $ hg branch -f sebhtml
45 $ hg branch -f sebhtml
46 marked working directory as branch sebhtml
46 marked working directory as branch sebhtml
47 $ hg bookmark sebhtml/99992-topic-Y
47 $ hg bookmark sebhtml/99992-topic-Y
48 $ hg up sebhtml/99992-topic-Y
48 $ hg up sebhtml/99992-topic-Y
49 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
49 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
50 $ hg commit -m "Add y.txt in 'sebhtml/99992-topic-Y'"
50 $ hg commit -m "Add y.txt in 'sebhtml/99992-topic-Y'"
51 created new head
51 created new head
52
52
53 $ hg log -B sebhtml/99992-topic-Y
53 $ hg log -B sebhtml/99992-topic-Y
54 changeset: 2:11df7969cf8d
54 changeset: 2:11df7969cf8d
55 branch: sebhtml
55 branch: sebhtml
56 bookmark: sebhtml/99992-topic-Y
56 bookmark: sebhtml/99992-topic-Y
57 tag: tip
57 tag: tip
58 parent: 0:eaea25376a59
58 parent: 0:eaea25376a59
59 user: test
59 user: test
60 date: Thu Jan 01 00:00:00 1970 +0000
60 date: Thu Jan 01 00:00:00 1970 +0000
61 summary: Add y.txt in 'sebhtml/99992-topic-Y'
61 summary: Add y.txt in 'sebhtml/99992-topic-Y'
62
62
63
63
64 The log of topic Y does not interfere with the log of topic X
64 The log of topic Y does not interfere with the log of topic X
65
65
66 $ hg log -B sebhtml/99991-topic-X
66 $ hg log -B sebhtml/99991-topic-X
67 changeset: 1:29f39dea9bf9
67 changeset: 1:29f39dea9bf9
68 branch: sebhtml
68 branch: sebhtml
69 bookmark: sebhtml/99991-topic-X
69 bookmark: sebhtml/99991-topic-X
70 user: test
70 user: test
71 date: Thu Jan 01 00:00:00 1970 +0000
71 date: Thu Jan 01 00:00:00 1970 +0000
72 summary: Add x.txt in 'sebhtml/99991-topic-X'
72 summary: Add x.txt in 'sebhtml/99991-topic-X'
73
73
74
74
75 Merge topics Y and X in the default branch
75 Merge topics Y and X in the default branch
76
76
77 $ hg update default
77 $ hg update default
78 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
78 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
79 (leaving bookmark sebhtml/99992-topic-Y)
79 (leaving bookmark sebhtml/99992-topic-Y)
80
80
81 $ hg bookmark
81 $ hg bookmark
82 sebhtml/99991-topic-X 1:29f39dea9bf9
82 sebhtml/99991-topic-X 1:29f39dea9bf9
83 sebhtml/99992-topic-Y 2:11df7969cf8d
83 sebhtml/99992-topic-Y 2:11df7969cf8d
84
84
85 $ hg merge sebhtml/99992-topic-Y
85 $ hg merge sebhtml/99992-topic-Y
86 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
87 (branch merge, don't forget to commit)
87 (branch merge, don't forget to commit)
88
88
89 $ hg commit -m "Merge branch 'sebhtml/99992-topic-Y' into 'default'"
89 $ hg commit -m "Merge branch 'sebhtml/99992-topic-Y' into 'default'"
90
90
91 $ hg update default
91 $ hg update default
92 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
92 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
93
93
94 $ hg merge sebhtml/99991-topic-X
94 $ hg merge sebhtml/99991-topic-X
95 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
95 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
96 (branch merge, don't forget to commit)
96 (branch merge, don't forget to commit)
97
97
98 $ hg commit -m "Merge branch 'sebhtml/99991-topic-X' into 'default'"
98 $ hg commit -m "Merge branch 'sebhtml/99991-topic-X' into 'default'"
99
99
100
100
101 Check the log of topic X, topic Y, and default branch
101 Check the log of topic X, topic Y, and default branch
102
102
103 $ hg log -B sebhtml/99992-topic-Y
103 $ hg log -B sebhtml/99992-topic-Y
104
104
105 $ hg log -B sebhtml/99991-topic-X
105 $ hg log -B sebhtml/99991-topic-X
106
106
107 $ hg log -b default
107 $ hg log -b default
108 changeset: 4:c26ba8c1e1cb
108 changeset: 4:c26ba8c1e1cb
109 tag: tip
109 tag: tip
110 parent: 3:2189f3fb90d6
110 parent: 3:2189f3fb90d6
111 parent: 1:29f39dea9bf9
111 parent: 1:29f39dea9bf9
112 user: test
112 user: test
113 date: Thu Jan 01 00:00:00 1970 +0000
113 date: Thu Jan 01 00:00:00 1970 +0000
114 summary: Merge branch 'sebhtml/99991-topic-X' into 'default'
114 summary: Merge branch 'sebhtml/99991-topic-X' into 'default'
115
115
116 changeset: 3:2189f3fb90d6
116 changeset: 3:2189f3fb90d6
117 parent: 0:eaea25376a59
117 parent: 0:eaea25376a59
118 parent: 2:11df7969cf8d
118 parent: 2:11df7969cf8d
119 user: test
119 user: test
120 date: Thu Jan 01 00:00:00 1970 +0000
120 date: Thu Jan 01 00:00:00 1970 +0000
121 summary: Merge branch 'sebhtml/99992-topic-Y' into 'default'
121 summary: Merge branch 'sebhtml/99992-topic-Y' into 'default'
122
122
123 changeset: 0:eaea25376a59
123 changeset: 0:eaea25376a59
124 user: test
124 user: test
125 date: Thu Jan 01 00:00:00 1970 +0000
125 date: Thu Jan 01 00:00:00 1970 +0000
126 summary: Add foo in 'default'
126 summary: Add foo in 'default'
127
127
128
128
129 Set up multiple bookmarked heads:
129 Set up multiple bookmarked heads:
130
130
131 $ hg bookmark merged-head
131 $ hg bookmark merged-head
132 $ hg up 1
132 $ hg up 1
133 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
133 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
134 (leaving bookmark merged-head)
134 (leaving bookmark merged-head)
135 $ echo "Z" > z.txt
135 $ echo "Z" > z.txt
136 $ hg ci -Am 'Add Z'
136 $ hg ci -Am 'Add Z'
137 adding z.txt
137 adding z.txt
138 $ hg bookmark topic-Z
138 $ hg bookmark topic-Z
139
139
140 $ hg log -GT '{rev}: {branch}, {bookmarks}\n'
140 $ hg log -GT '{rev}: {branch}, {bookmarks}\n'
141 @ 5: sebhtml, topic-Z
141 @ 5: sebhtml, topic-Z
142 |
142 |
143 | o 4: default, merged-head
143 | o 4: default, merged-head
144 |/|
144 |/|
145 | o 3: default,
145 | o 3: default,
146 | |\
146 | |\
147 | | o 2: sebhtml, sebhtml/99992-topic-Y
147 | | o 2: sebhtml, sebhtml/99992-topic-Y
148 | |/
148 | |/
149 o | 1: sebhtml, sebhtml/99991-topic-X
149 o | 1: sebhtml, sebhtml/99991-topic-X
150 |/
150 |/
151 o 0: default,
151 o 0: default,
152
152
153
153
154 Multiple revisions under bookmarked head:
154 Multiple revisions under bookmarked head:
155
155
156 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head
156 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head
157 o 4: default, merged-head
157 o 4: default, merged-head
158 |\
158 |\
159 | ~
159 | ~
160 o 3: default,
160 o 3: default,
161 |\
161 |\
162 ~ ~
162 ~ ~
163
163
164 Follows multiple bookmarks:
164 Follows multiple bookmarks:
165
165
166 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head -B topic-Z
166 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head -B topic-Z
167 @ 5: sebhtml, topic-Z
167 @ 5: sebhtml, topic-Z
168 |
168 |
169 ~
169 ~
170 o 4: default, merged-head
170 o 4: default, merged-head
171 |\
171 |\
172 | ~
172 | ~
173 o 3: default,
173 o 3: default,
174 |\
174 |\
175 ~ ~
175 ~ ~
176
176
177 Filter by bookmark and branch:
177 Filter by bookmark and branch:
178
178
179 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head -B topic-Z -b default
179 $ hg log -GT '{rev}: {branch}, {bookmarks}\n' -B merged-head -B topic-Z -b default
180 o 4: default, merged-head
180 o 4: default, merged-head
181 |\
181 |\
182 | ~
182 | ~
183 o 3: default,
183 o 3: default,
184 |\
184 |\
185 ~ ~
185 ~ ~
186
186
187
187
188 Unknown bookmark:
188 Unknown bookmark:
189
189
190 $ hg log -B unknown
190 $ hg log -B unknown
191 abort: bookmark 'unknown' does not exist
191 abort: bookmark 'unknown' does not exist
192 [255]
192 [255]
193
194 Shouldn't accept string-matcher syntax:
195
196 $ hg log -B 're:.*'
197 abort: bookmark 're:.*' does not exist
198 [255]
@@ -1,2909 +1,2917 b''
1 Log on empty repository: checking consistency
1 Log on empty repository: checking consistency
2
2
3 $ hg init empty
3 $ hg init empty
4 $ cd empty
4 $ cd empty
5 $ hg log
5 $ hg log
6 $ hg log -r 1
6 $ hg log -r 1
7 abort: unknown revision '1'
7 abort: unknown revision '1'
8 [255]
8 [255]
9 $ hg log -r -1:0
9 $ hg log -r -1:0
10 abort: unknown revision '-1'
10 abort: unknown revision '-1'
11 [255]
11 [255]
12 $ hg log -r 'branch(name)'
12 $ hg log -r 'branch(name)'
13 abort: unknown revision 'name'
13 abort: unknown revision 'name'
14 [255]
14 [255]
15 $ hg log -r null -q
15 $ hg log -r null -q
16 -1:000000000000
16 -1:000000000000
17
17
18 $ cd ..
18 $ cd ..
19
19
20 The g is crafted to have 2 filelog topological heads in a linear
20 The g is crafted to have 2 filelog topological heads in a linear
21 changeset graph
21 changeset graph
22
22
23 $ hg init a
23 $ hg init a
24 $ cd a
24 $ cd a
25 $ echo a > a
25 $ echo a > a
26 $ echo f > f
26 $ echo f > f
27 $ hg ci -Ama -d '1 0'
27 $ hg ci -Ama -d '1 0'
28 adding a
28 adding a
29 adding f
29 adding f
30
30
31 $ hg cp a b
31 $ hg cp a b
32 $ hg cp f g
32 $ hg cp f g
33 $ hg ci -mb -d '2 0'
33 $ hg ci -mb -d '2 0'
34
34
35 $ mkdir dir
35 $ mkdir dir
36 $ hg mv b dir
36 $ hg mv b dir
37 $ echo g >> g
37 $ echo g >> g
38 $ echo f >> f
38 $ echo f >> f
39 $ hg ci -mc -d '3 0'
39 $ hg ci -mc -d '3 0'
40
40
41 $ hg mv a b
41 $ hg mv a b
42 $ hg cp -f f g
42 $ hg cp -f f g
43 $ echo a > d
43 $ echo a > d
44 $ hg add d
44 $ hg add d
45 $ hg ci -md -d '4 0'
45 $ hg ci -md -d '4 0'
46
46
47 $ hg mv dir/b e
47 $ hg mv dir/b e
48 $ hg ci -me -d '5 0'
48 $ hg ci -me -d '5 0'
49
49
50 Make sure largefiles doesn't interfere with logging a regular file
50 Make sure largefiles doesn't interfere with logging a regular file
51 $ hg --debug log a -T '{rev}: {desc}\n' --config extensions.largefiles=
51 $ hg --debug log a -T '{rev}: {desc}\n' --config extensions.largefiles=
52 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
52 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
53 updated patterns: .hglf/a, a
53 updated patterns: .hglf/a, a
54 0: a
54 0: a
55 $ hg log a
55 $ hg log a
56 changeset: 0:9161b9aeaf16
56 changeset: 0:9161b9aeaf16
57 user: test
57 user: test
58 date: Thu Jan 01 00:00:01 1970 +0000
58 date: Thu Jan 01 00:00:01 1970 +0000
59 summary: a
59 summary: a
60
60
61 $ hg log glob:a*
61 $ hg log glob:a*
62 changeset: 3:2ca5ba701980
62 changeset: 3:2ca5ba701980
63 user: test
63 user: test
64 date: Thu Jan 01 00:00:04 1970 +0000
64 date: Thu Jan 01 00:00:04 1970 +0000
65 summary: d
65 summary: d
66
66
67 changeset: 0:9161b9aeaf16
67 changeset: 0:9161b9aeaf16
68 user: test
68 user: test
69 date: Thu Jan 01 00:00:01 1970 +0000
69 date: Thu Jan 01 00:00:01 1970 +0000
70 summary: a
70 summary: a
71
71
72 $ hg --debug log glob:a* -T '{rev}: {desc}\n' --config extensions.largefiles=
72 $ hg --debug log glob:a* -T '{rev}: {desc}\n' --config extensions.largefiles=
73 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
73 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
74 updated patterns: glob:.hglf/a*, glob:a*
74 updated patterns: glob:.hglf/a*, glob:a*
75 3: d
75 3: d
76 0: a
76 0: a
77
77
78 log on directory
78 log on directory
79
79
80 $ hg log dir
80 $ hg log dir
81 changeset: 4:7e4639b4691b
81 changeset: 4:7e4639b4691b
82 tag: tip
82 tag: tip
83 user: test
83 user: test
84 date: Thu Jan 01 00:00:05 1970 +0000
84 date: Thu Jan 01 00:00:05 1970 +0000
85 summary: e
85 summary: e
86
86
87 changeset: 2:f8954cd4dc1f
87 changeset: 2:f8954cd4dc1f
88 user: test
88 user: test
89 date: Thu Jan 01 00:00:03 1970 +0000
89 date: Thu Jan 01 00:00:03 1970 +0000
90 summary: c
90 summary: c
91
91
92 $ hg log somethingthatdoesntexist dir
92 $ hg log somethingthatdoesntexist dir
93 changeset: 4:7e4639b4691b
93 changeset: 4:7e4639b4691b
94 tag: tip
94 tag: tip
95 user: test
95 user: test
96 date: Thu Jan 01 00:00:05 1970 +0000
96 date: Thu Jan 01 00:00:05 1970 +0000
97 summary: e
97 summary: e
98
98
99 changeset: 2:f8954cd4dc1f
99 changeset: 2:f8954cd4dc1f
100 user: test
100 user: test
101 date: Thu Jan 01 00:00:03 1970 +0000
101 date: Thu Jan 01 00:00:03 1970 +0000
102 summary: c
102 summary: c
103
103
104
104
105 -X, with explicit path
105 -X, with explicit path
106
106
107 $ hg log a -X a
107 $ hg log a -X a
108
108
109 -f, non-existent directory
109 -f, non-existent directory
110
110
111 $ hg log -f dir
111 $ hg log -f dir
112 abort: cannot follow file not in parent revision: "dir"
112 abort: cannot follow file not in parent revision: "dir"
113 [255]
113 [255]
114
114
115 -f, directory
115 -f, directory
116
116
117 $ hg up -q 3
117 $ hg up -q 3
118 $ hg log -f dir
118 $ hg log -f dir
119 changeset: 2:f8954cd4dc1f
119 changeset: 2:f8954cd4dc1f
120 user: test
120 user: test
121 date: Thu Jan 01 00:00:03 1970 +0000
121 date: Thu Jan 01 00:00:03 1970 +0000
122 summary: c
122 summary: c
123
123
124 -f, directory with --patch
124 -f, directory with --patch
125
125
126 $ hg log -f dir -p
126 $ hg log -f dir -p
127 changeset: 2:f8954cd4dc1f
127 changeset: 2:f8954cd4dc1f
128 user: test
128 user: test
129 date: Thu Jan 01 00:00:03 1970 +0000
129 date: Thu Jan 01 00:00:03 1970 +0000
130 summary: c
130 summary: c
131
131
132 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
132 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
133 --- /dev/null* (glob)
133 --- /dev/null* (glob)
134 +++ b/dir/b* (glob)
134 +++ b/dir/b* (glob)
135 @@ -0,0 +1,1 @@
135 @@ -0,0 +1,1 @@
136 +a
136 +a
137
137
138
138
139 -f, pattern
139 -f, pattern
140
140
141 $ hg log -f -I 'dir**' -p
141 $ hg log -f -I 'dir**' -p
142 changeset: 2:f8954cd4dc1f
142 changeset: 2:f8954cd4dc1f
143 user: test
143 user: test
144 date: Thu Jan 01 00:00:03 1970 +0000
144 date: Thu Jan 01 00:00:03 1970 +0000
145 summary: c
145 summary: c
146
146
147 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
147 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
148 --- /dev/null* (glob)
148 --- /dev/null* (glob)
149 +++ b/dir/b* (glob)
149 +++ b/dir/b* (glob)
150 @@ -0,0 +1,1 @@
150 @@ -0,0 +1,1 @@
151 +a
151 +a
152
152
153 $ hg up -q 4
153 $ hg up -q 4
154
154
155 -f, a wrong style
155 -f, a wrong style
156
156
157 $ hg log -f -l1 --style something
157 $ hg log -f -l1 --style something
158 abort: style 'something' not found
158 abort: style 'something' not found
159 (available styles: bisect, changelog, compact, default, phases, show, status, xml)
159 (available styles: bisect, changelog, compact, default, phases, show, status, xml)
160 [255]
160 [255]
161
161
162 -f, phases style
162 -f, phases style
163
163
164
164
165 $ hg log -f -l1 --style phases
165 $ hg log -f -l1 --style phases
166 changeset: 4:7e4639b4691b
166 changeset: 4:7e4639b4691b
167 tag: tip
167 tag: tip
168 phase: draft
168 phase: draft
169 user: test
169 user: test
170 date: Thu Jan 01 00:00:05 1970 +0000
170 date: Thu Jan 01 00:00:05 1970 +0000
171 summary: e
171 summary: e
172
172
173
173
174 $ hg log -f -l1 --style phases -q
174 $ hg log -f -l1 --style phases -q
175 4:7e4639b4691b
175 4:7e4639b4691b
176
176
177 -f, but no args
177 -f, but no args
178
178
179 $ hg log -f
179 $ hg log -f
180 changeset: 4:7e4639b4691b
180 changeset: 4:7e4639b4691b
181 tag: tip
181 tag: tip
182 user: test
182 user: test
183 date: Thu Jan 01 00:00:05 1970 +0000
183 date: Thu Jan 01 00:00:05 1970 +0000
184 summary: e
184 summary: e
185
185
186 changeset: 3:2ca5ba701980
186 changeset: 3:2ca5ba701980
187 user: test
187 user: test
188 date: Thu Jan 01 00:00:04 1970 +0000
188 date: Thu Jan 01 00:00:04 1970 +0000
189 summary: d
189 summary: d
190
190
191 changeset: 2:f8954cd4dc1f
191 changeset: 2:f8954cd4dc1f
192 user: test
192 user: test
193 date: Thu Jan 01 00:00:03 1970 +0000
193 date: Thu Jan 01 00:00:03 1970 +0000
194 summary: c
194 summary: c
195
195
196 changeset: 1:d89b0a12d229
196 changeset: 1:d89b0a12d229
197 user: test
197 user: test
198 date: Thu Jan 01 00:00:02 1970 +0000
198 date: Thu Jan 01 00:00:02 1970 +0000
199 summary: b
199 summary: b
200
200
201 changeset: 0:9161b9aeaf16
201 changeset: 0:9161b9aeaf16
202 user: test
202 user: test
203 date: Thu Jan 01 00:00:01 1970 +0000
203 date: Thu Jan 01 00:00:01 1970 +0000
204 summary: a
204 summary: a
205
205
206
206
207 one rename
207 one rename
208
208
209 $ hg up -q 2
209 $ hg up -q 2
210 $ hg log -vf a
210 $ hg log -vf a
211 changeset: 0:9161b9aeaf16
211 changeset: 0:9161b9aeaf16
212 user: test
212 user: test
213 date: Thu Jan 01 00:00:01 1970 +0000
213 date: Thu Jan 01 00:00:01 1970 +0000
214 files: a f
214 files: a f
215 description:
215 description:
216 a
216 a
217
217
218
218
219
219
220 many renames
220 many renames
221
221
222 $ hg up -q tip
222 $ hg up -q tip
223 $ hg log -vf e
223 $ hg log -vf e
224 changeset: 4:7e4639b4691b
224 changeset: 4:7e4639b4691b
225 tag: tip
225 tag: tip
226 user: test
226 user: test
227 date: Thu Jan 01 00:00:05 1970 +0000
227 date: Thu Jan 01 00:00:05 1970 +0000
228 files: dir/b e
228 files: dir/b e
229 description:
229 description:
230 e
230 e
231
231
232
232
233 changeset: 2:f8954cd4dc1f
233 changeset: 2:f8954cd4dc1f
234 user: test
234 user: test
235 date: Thu Jan 01 00:00:03 1970 +0000
235 date: Thu Jan 01 00:00:03 1970 +0000
236 files: b dir/b f g
236 files: b dir/b f g
237 description:
237 description:
238 c
238 c
239
239
240
240
241 changeset: 1:d89b0a12d229
241 changeset: 1:d89b0a12d229
242 user: test
242 user: test
243 date: Thu Jan 01 00:00:02 1970 +0000
243 date: Thu Jan 01 00:00:02 1970 +0000
244 files: b g
244 files: b g
245 description:
245 description:
246 b
246 b
247
247
248
248
249 changeset: 0:9161b9aeaf16
249 changeset: 0:9161b9aeaf16
250 user: test
250 user: test
251 date: Thu Jan 01 00:00:01 1970 +0000
251 date: Thu Jan 01 00:00:01 1970 +0000
252 files: a f
252 files: a f
253 description:
253 description:
254 a
254 a
255
255
256
256
257
257
258
258
259 log -pf dir/b
259 log -pf dir/b
260
260
261 $ hg up -q 3
261 $ hg up -q 3
262 $ hg log -pf dir/b
262 $ hg log -pf dir/b
263 changeset: 2:f8954cd4dc1f
263 changeset: 2:f8954cd4dc1f
264 user: test
264 user: test
265 date: Thu Jan 01 00:00:03 1970 +0000
265 date: Thu Jan 01 00:00:03 1970 +0000
266 summary: c
266 summary: c
267
267
268 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
268 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
269 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
269 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
270 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
270 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
271 @@ -0,0 +1,1 @@
271 @@ -0,0 +1,1 @@
272 +a
272 +a
273
273
274 changeset: 1:d89b0a12d229
274 changeset: 1:d89b0a12d229
275 user: test
275 user: test
276 date: Thu Jan 01 00:00:02 1970 +0000
276 date: Thu Jan 01 00:00:02 1970 +0000
277 summary: b
277 summary: b
278
278
279 diff -r 9161b9aeaf16 -r d89b0a12d229 b
279 diff -r 9161b9aeaf16 -r d89b0a12d229 b
280 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
280 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
281 +++ b/b Thu Jan 01 00:00:02 1970 +0000
281 +++ b/b Thu Jan 01 00:00:02 1970 +0000
282 @@ -0,0 +1,1 @@
282 @@ -0,0 +1,1 @@
283 +a
283 +a
284
284
285 changeset: 0:9161b9aeaf16
285 changeset: 0:9161b9aeaf16
286 user: test
286 user: test
287 date: Thu Jan 01 00:00:01 1970 +0000
287 date: Thu Jan 01 00:00:01 1970 +0000
288 summary: a
288 summary: a
289
289
290 diff -r 000000000000 -r 9161b9aeaf16 a
290 diff -r 000000000000 -r 9161b9aeaf16 a
291 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
291 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
292 +++ b/a Thu Jan 01 00:00:01 1970 +0000
292 +++ b/a Thu Jan 01 00:00:01 1970 +0000
293 @@ -0,0 +1,1 @@
293 @@ -0,0 +1,1 @@
294 +a
294 +a
295
295
296
296
297 log -pf b inside dir
297 log -pf b inside dir
298
298
299 $ hg --cwd=dir log -pf b
299 $ hg --cwd=dir log -pf b
300 changeset: 2:f8954cd4dc1f
300 changeset: 2:f8954cd4dc1f
301 user: test
301 user: test
302 date: Thu Jan 01 00:00:03 1970 +0000
302 date: Thu Jan 01 00:00:03 1970 +0000
303 summary: c
303 summary: c
304
304
305 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
305 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
306 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
306 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
307 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
307 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
308 @@ -0,0 +1,1 @@
308 @@ -0,0 +1,1 @@
309 +a
309 +a
310
310
311 changeset: 1:d89b0a12d229
311 changeset: 1:d89b0a12d229
312 user: test
312 user: test
313 date: Thu Jan 01 00:00:02 1970 +0000
313 date: Thu Jan 01 00:00:02 1970 +0000
314 summary: b
314 summary: b
315
315
316 diff -r 9161b9aeaf16 -r d89b0a12d229 b
316 diff -r 9161b9aeaf16 -r d89b0a12d229 b
317 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
317 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
318 +++ b/b Thu Jan 01 00:00:02 1970 +0000
318 +++ b/b Thu Jan 01 00:00:02 1970 +0000
319 @@ -0,0 +1,1 @@
319 @@ -0,0 +1,1 @@
320 +a
320 +a
321
321
322 changeset: 0:9161b9aeaf16
322 changeset: 0:9161b9aeaf16
323 user: test
323 user: test
324 date: Thu Jan 01 00:00:01 1970 +0000
324 date: Thu Jan 01 00:00:01 1970 +0000
325 summary: a
325 summary: a
326
326
327 diff -r 000000000000 -r 9161b9aeaf16 a
327 diff -r 000000000000 -r 9161b9aeaf16 a
328 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
328 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
329 +++ b/a Thu Jan 01 00:00:01 1970 +0000
329 +++ b/a Thu Jan 01 00:00:01 1970 +0000
330 @@ -0,0 +1,1 @@
330 @@ -0,0 +1,1 @@
331 +a
331 +a
332
332
333
333
334 log -pf, but no args
334 log -pf, but no args
335
335
336 $ hg log -pf
336 $ hg log -pf
337 changeset: 3:2ca5ba701980
337 changeset: 3:2ca5ba701980
338 user: test
338 user: test
339 date: Thu Jan 01 00:00:04 1970 +0000
339 date: Thu Jan 01 00:00:04 1970 +0000
340 summary: d
340 summary: d
341
341
342 diff -r f8954cd4dc1f -r 2ca5ba701980 a
342 diff -r f8954cd4dc1f -r 2ca5ba701980 a
343 --- a/a Thu Jan 01 00:00:03 1970 +0000
343 --- a/a Thu Jan 01 00:00:03 1970 +0000
344 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
344 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
345 @@ -1,1 +0,0 @@
345 @@ -1,1 +0,0 @@
346 -a
346 -a
347 diff -r f8954cd4dc1f -r 2ca5ba701980 b
347 diff -r f8954cd4dc1f -r 2ca5ba701980 b
348 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
348 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
349 +++ b/b Thu Jan 01 00:00:04 1970 +0000
349 +++ b/b Thu Jan 01 00:00:04 1970 +0000
350 @@ -0,0 +1,1 @@
350 @@ -0,0 +1,1 @@
351 +a
351 +a
352 diff -r f8954cd4dc1f -r 2ca5ba701980 d
352 diff -r f8954cd4dc1f -r 2ca5ba701980 d
353 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
353 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
354 +++ b/d Thu Jan 01 00:00:04 1970 +0000
354 +++ b/d Thu Jan 01 00:00:04 1970 +0000
355 @@ -0,0 +1,1 @@
355 @@ -0,0 +1,1 @@
356 +a
356 +a
357 diff -r f8954cd4dc1f -r 2ca5ba701980 g
357 diff -r f8954cd4dc1f -r 2ca5ba701980 g
358 --- a/g Thu Jan 01 00:00:03 1970 +0000
358 --- a/g Thu Jan 01 00:00:03 1970 +0000
359 +++ b/g Thu Jan 01 00:00:04 1970 +0000
359 +++ b/g Thu Jan 01 00:00:04 1970 +0000
360 @@ -1,2 +1,2 @@
360 @@ -1,2 +1,2 @@
361 f
361 f
362 -g
362 -g
363 +f
363 +f
364
364
365 changeset: 2:f8954cd4dc1f
365 changeset: 2:f8954cd4dc1f
366 user: test
366 user: test
367 date: Thu Jan 01 00:00:03 1970 +0000
367 date: Thu Jan 01 00:00:03 1970 +0000
368 summary: c
368 summary: c
369
369
370 diff -r d89b0a12d229 -r f8954cd4dc1f b
370 diff -r d89b0a12d229 -r f8954cd4dc1f b
371 --- a/b Thu Jan 01 00:00:02 1970 +0000
371 --- a/b Thu Jan 01 00:00:02 1970 +0000
372 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
372 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
373 @@ -1,1 +0,0 @@
373 @@ -1,1 +0,0 @@
374 -a
374 -a
375 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
375 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
376 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
376 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
377 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
377 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
378 @@ -0,0 +1,1 @@
378 @@ -0,0 +1,1 @@
379 +a
379 +a
380 diff -r d89b0a12d229 -r f8954cd4dc1f f
380 diff -r d89b0a12d229 -r f8954cd4dc1f f
381 --- a/f Thu Jan 01 00:00:02 1970 +0000
381 --- a/f Thu Jan 01 00:00:02 1970 +0000
382 +++ b/f Thu Jan 01 00:00:03 1970 +0000
382 +++ b/f Thu Jan 01 00:00:03 1970 +0000
383 @@ -1,1 +1,2 @@
383 @@ -1,1 +1,2 @@
384 f
384 f
385 +f
385 +f
386 diff -r d89b0a12d229 -r f8954cd4dc1f g
386 diff -r d89b0a12d229 -r f8954cd4dc1f g
387 --- a/g Thu Jan 01 00:00:02 1970 +0000
387 --- a/g Thu Jan 01 00:00:02 1970 +0000
388 +++ b/g Thu Jan 01 00:00:03 1970 +0000
388 +++ b/g Thu Jan 01 00:00:03 1970 +0000
389 @@ -1,1 +1,2 @@
389 @@ -1,1 +1,2 @@
390 f
390 f
391 +g
391 +g
392
392
393 changeset: 1:d89b0a12d229
393 changeset: 1:d89b0a12d229
394 user: test
394 user: test
395 date: Thu Jan 01 00:00:02 1970 +0000
395 date: Thu Jan 01 00:00:02 1970 +0000
396 summary: b
396 summary: b
397
397
398 diff -r 9161b9aeaf16 -r d89b0a12d229 b
398 diff -r 9161b9aeaf16 -r d89b0a12d229 b
399 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
399 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
400 +++ b/b Thu Jan 01 00:00:02 1970 +0000
400 +++ b/b Thu Jan 01 00:00:02 1970 +0000
401 @@ -0,0 +1,1 @@
401 @@ -0,0 +1,1 @@
402 +a
402 +a
403 diff -r 9161b9aeaf16 -r d89b0a12d229 g
403 diff -r 9161b9aeaf16 -r d89b0a12d229 g
404 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
404 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
405 +++ b/g Thu Jan 01 00:00:02 1970 +0000
405 +++ b/g Thu Jan 01 00:00:02 1970 +0000
406 @@ -0,0 +1,1 @@
406 @@ -0,0 +1,1 @@
407 +f
407 +f
408
408
409 changeset: 0:9161b9aeaf16
409 changeset: 0:9161b9aeaf16
410 user: test
410 user: test
411 date: Thu Jan 01 00:00:01 1970 +0000
411 date: Thu Jan 01 00:00:01 1970 +0000
412 summary: a
412 summary: a
413
413
414 diff -r 000000000000 -r 9161b9aeaf16 a
414 diff -r 000000000000 -r 9161b9aeaf16 a
415 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
415 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
416 +++ b/a Thu Jan 01 00:00:01 1970 +0000
416 +++ b/a Thu Jan 01 00:00:01 1970 +0000
417 @@ -0,0 +1,1 @@
417 @@ -0,0 +1,1 @@
418 +a
418 +a
419 diff -r 000000000000 -r 9161b9aeaf16 f
419 diff -r 000000000000 -r 9161b9aeaf16 f
420 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
420 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
421 +++ b/f Thu Jan 01 00:00:01 1970 +0000
421 +++ b/f Thu Jan 01 00:00:01 1970 +0000
422 @@ -0,0 +1,1 @@
422 @@ -0,0 +1,1 @@
423 +f
423 +f
424
424
425
425
426 log -vf dir/b
426 log -vf dir/b
427
427
428 $ hg log -vf dir/b
428 $ hg log -vf dir/b
429 changeset: 2:f8954cd4dc1f
429 changeset: 2:f8954cd4dc1f
430 user: test
430 user: test
431 date: Thu Jan 01 00:00:03 1970 +0000
431 date: Thu Jan 01 00:00:03 1970 +0000
432 files: b dir/b f g
432 files: b dir/b f g
433 description:
433 description:
434 c
434 c
435
435
436
436
437 changeset: 1:d89b0a12d229
437 changeset: 1:d89b0a12d229
438 user: test
438 user: test
439 date: Thu Jan 01 00:00:02 1970 +0000
439 date: Thu Jan 01 00:00:02 1970 +0000
440 files: b g
440 files: b g
441 description:
441 description:
442 b
442 b
443
443
444
444
445 changeset: 0:9161b9aeaf16
445 changeset: 0:9161b9aeaf16
446 user: test
446 user: test
447 date: Thu Jan 01 00:00:01 1970 +0000
447 date: Thu Jan 01 00:00:01 1970 +0000
448 files: a f
448 files: a f
449 description:
449 description:
450 a
450 a
451
451
452
452
453 Respects ui.logtemplate and command-templates.log configs (the latter takes
453 Respects ui.logtemplate and command-templates.log configs (the latter takes
454 precedence)
454 precedence)
455
455
456 $ hg log -r 0 --config ui.logtemplate="foo {rev}\n"
456 $ hg log -r 0 --config ui.logtemplate="foo {rev}\n"
457 foo 0
457 foo 0
458 $ hg log -r 0 --config command-templates.log="bar {rev}\n"
458 $ hg log -r 0 --config command-templates.log="bar {rev}\n"
459 bar 0
459 bar 0
460 $ hg log -r 0 --config ui.logtemplate="foo {rev}\n" \
460 $ hg log -r 0 --config ui.logtemplate="foo {rev}\n" \
461 > --config command-templates.log="bar {rev}\n"
461 > --config command-templates.log="bar {rev}\n"
462 bar 0
462 bar 0
463
463
464
464
465 -f and multiple filelog heads
465 -f and multiple filelog heads
466
466
467 $ hg up -q 2
467 $ hg up -q 2
468 $ hg log -f g --template '{rev}\n'
468 $ hg log -f g --template '{rev}\n'
469 2
469 2
470 1
470 1
471 0
471 0
472 $ hg up -q tip
472 $ hg up -q tip
473 $ hg log -f g --template '{rev}\n'
473 $ hg log -f g --template '{rev}\n'
474 3
474 3
475 2
475 2
476 0
476 0
477
477
478 follow files from the specified revisions (issue4959)
478 follow files from the specified revisions (issue4959)
479
479
480 $ hg log -G -T '{rev} {files},{file_copies % " {source}->{name}"}\n'
480 $ hg log -G -T '{rev} {files},{file_copies % " {source}->{name}"}\n'
481 @ 4 dir/b e, dir/b->e
481 @ 4 dir/b e, dir/b->e
482 |
482 |
483 o 3 a b d g, a->b f->g
483 o 3 a b d g, a->b f->g
484 |
484 |
485 o 2 b dir/b f g, b->dir/b
485 o 2 b dir/b f g, b->dir/b
486 |
486 |
487 o 1 b g, a->b f->g
487 o 1 b g, a->b f->g
488 |
488 |
489 o 0 a f,
489 o 0 a f,
490
490
491
491
492 $ hg log -T '{rev}\n' -fr 4 e
492 $ hg log -T '{rev}\n' -fr 4 e
493 4
493 4
494 2
494 2
495 1
495 1
496 0
496 0
497 $ hg log -T '{rev}\n' -fr 2 g
497 $ hg log -T '{rev}\n' -fr 2 g
498 2
498 2
499 1
499 1
500 0
500 0
501 $ hg log -T '{rev}\n' -fr '2+3' g
501 $ hg log -T '{rev}\n' -fr '2+3' g
502 3
502 3
503 2
503 2
504 1
504 1
505 0
505 0
506
506
507 follow files from the specified revisions with glob patterns (issue5053)
507 follow files from the specified revisions with glob patterns (issue5053)
508 (BROKEN: should follow copies from e@4)
508 (BROKEN: should follow copies from e@4)
509
509
510 $ hg log -T '{rev}\n' -fr4 e -X '[abcdfg]'
510 $ hg log -T '{rev}\n' -fr4 e -X '[abcdfg]'
511 4
511 4
512 2 (false !)
512 2 (false !)
513 1 (false !)
513 1 (false !)
514 0 (false !)
514 0 (false !)
515
515
516 follow files from the specified revisions with missing patterns
516 follow files from the specified revisions with missing patterns
517
517
518 $ hg log -T '{rev}\n' -fr4 e x
518 $ hg log -T '{rev}\n' -fr4 e x
519 abort: cannot follow file not in any of the specified revisions: "x"
519 abort: cannot follow file not in any of the specified revisions: "x"
520 [255]
520 [255]
521
521
522 follow files from the specified revisions with directory patterns
522 follow files from the specified revisions with directory patterns
523 (BROKEN: should follow copies from dir/b@2)
523 (BROKEN: should follow copies from dir/b@2)
524
524
525 $ hg log -T '{rev}\n' -fr2 dir/b dir
525 $ hg log -T '{rev}\n' -fr2 dir/b dir
526 2
526 2
527 1 (false !)
527 1 (false !)
528 0 (false !)
528 0 (false !)
529
529
530 follow files from multiple revisions, but the pattern is missing in
530 follow files from multiple revisions, but the pattern is missing in
531 one of the specified revisions
531 one of the specified revisions
532
532
533 $ hg log -T '{rev}\n' -fr'2+4' dir/b e
533 $ hg log -T '{rev}\n' -fr'2+4' dir/b e
534 e: no such file in rev f8954cd4dc1f
534 e: no such file in rev f8954cd4dc1f
535 dir/b: no such file in rev 7e4639b4691b
535 dir/b: no such file in rev 7e4639b4691b
536 4
536 4
537 2
537 2
538 1
538 1
539 0
539 0
540
540
541 follow files from multiple revisions, and the pattern matches a file in
541 follow files from multiple revisions, and the pattern matches a file in
542 one revision but matches a directory in another:
542 one revision but matches a directory in another:
543 (BROKEN: should follow copies from dir/b@2 and dir/b/g@5)
543 (BROKEN: should follow copies from dir/b@2 and dir/b/g@5)
544 (BROKEN: the revision 4 should not be included since dir/b/g@5 is unchanged)
544 (BROKEN: the revision 4 should not be included since dir/b/g@5 is unchanged)
545
545
546 $ mkdir -p dir/b
546 $ mkdir -p dir/b
547 $ hg mv g dir/b
547 $ hg mv g dir/b
548 $ hg ci -m 'make dir/b a directory'
548 $ hg ci -m 'make dir/b a directory'
549
549
550 $ hg log -T '{rev}\n' -fr'2+5' dir/b
550 $ hg log -T '{rev}\n' -fr'2+5' dir/b
551 5
551 5
552 4
552 4
553 3 (false !)
553 3 (false !)
554 2
554 2
555 1 (false !)
555 1 (false !)
556 0 (false !)
556 0 (false !)
557
557
558 $ hg --config extensions.strip= strip -r. --no-backup
558 $ hg --config extensions.strip= strip -r. --no-backup
559 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
559 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
560
560
561 follow files from the specified revisions across copies with -p/--patch
561 follow files from the specified revisions across copies with -p/--patch
562
562
563 $ hg log -T '== rev: {rev},{file_copies % " {source}->{name}"} ==\n' -fpr 4 e g
563 $ hg log -T '== rev: {rev},{file_copies % " {source}->{name}"} ==\n' -fpr 4 e g
564 == rev: 4, dir/b->e ==
564 == rev: 4, dir/b->e ==
565 diff -r 2ca5ba701980 -r 7e4639b4691b e
565 diff -r 2ca5ba701980 -r 7e4639b4691b e
566 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
566 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
567 +++ b/e Thu Jan 01 00:00:05 1970 +0000
567 +++ b/e Thu Jan 01 00:00:05 1970 +0000
568 @@ -0,0 +1,1 @@
568 @@ -0,0 +1,1 @@
569 +a
569 +a
570
570
571 == rev: 3, a->b f->g ==
571 == rev: 3, a->b f->g ==
572 diff -r f8954cd4dc1f -r 2ca5ba701980 g
572 diff -r f8954cd4dc1f -r 2ca5ba701980 g
573 --- a/g Thu Jan 01 00:00:03 1970 +0000
573 --- a/g Thu Jan 01 00:00:03 1970 +0000
574 +++ b/g Thu Jan 01 00:00:04 1970 +0000
574 +++ b/g Thu Jan 01 00:00:04 1970 +0000
575 @@ -1,2 +1,2 @@
575 @@ -1,2 +1,2 @@
576 f
576 f
577 -g
577 -g
578 +f
578 +f
579
579
580 == rev: 2, b->dir/b ==
580 == rev: 2, b->dir/b ==
581 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
581 diff -r d89b0a12d229 -r f8954cd4dc1f dir/b
582 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
582 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
583 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
583 +++ b/dir/b Thu Jan 01 00:00:03 1970 +0000
584 @@ -0,0 +1,1 @@
584 @@ -0,0 +1,1 @@
585 +a
585 +a
586 diff -r d89b0a12d229 -r f8954cd4dc1f f
586 diff -r d89b0a12d229 -r f8954cd4dc1f f
587 --- a/f Thu Jan 01 00:00:02 1970 +0000
587 --- a/f Thu Jan 01 00:00:02 1970 +0000
588 +++ b/f Thu Jan 01 00:00:03 1970 +0000
588 +++ b/f Thu Jan 01 00:00:03 1970 +0000
589 @@ -1,1 +1,2 @@
589 @@ -1,1 +1,2 @@
590 f
590 f
591 +f
591 +f
592
592
593 == rev: 1, a->b f->g ==
593 == rev: 1, a->b f->g ==
594 diff -r 9161b9aeaf16 -r d89b0a12d229 b
594 diff -r 9161b9aeaf16 -r d89b0a12d229 b
595 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
595 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
596 +++ b/b Thu Jan 01 00:00:02 1970 +0000
596 +++ b/b Thu Jan 01 00:00:02 1970 +0000
597 @@ -0,0 +1,1 @@
597 @@ -0,0 +1,1 @@
598 +a
598 +a
599
599
600 == rev: 0, ==
600 == rev: 0, ==
601 diff -r 000000000000 -r 9161b9aeaf16 a
601 diff -r 000000000000 -r 9161b9aeaf16 a
602 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
602 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
603 +++ b/a Thu Jan 01 00:00:01 1970 +0000
603 +++ b/a Thu Jan 01 00:00:01 1970 +0000
604 @@ -0,0 +1,1 @@
604 @@ -0,0 +1,1 @@
605 +a
605 +a
606 diff -r 000000000000 -r 9161b9aeaf16 f
606 diff -r 000000000000 -r 9161b9aeaf16 f
607 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
607 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
608 +++ b/f Thu Jan 01 00:00:01 1970 +0000
608 +++ b/f Thu Jan 01 00:00:01 1970 +0000
609 @@ -0,0 +1,1 @@
609 @@ -0,0 +1,1 @@
610 +f
610 +f
611
611
612
612
613 log copies with --copies
613 log copies with --copies
614
614
615 $ hg log -vC --template '{rev} {file_copies}\n'
615 $ hg log -vC --template '{rev} {file_copies}\n'
616 4 e (dir/b)
616 4 e (dir/b)
617 3 b (a)g (f)
617 3 b (a)g (f)
618 2 dir/b (b)
618 2 dir/b (b)
619 1 b (a)g (f)
619 1 b (a)g (f)
620 0
620 0
621
621
622 log copies switch without --copies, with old filecopy template
622 log copies switch without --copies, with old filecopy template
623
623
624 $ hg log -v --template '{rev} {file_copies_switch%filecopy}\n'
624 $ hg log -v --template '{rev} {file_copies_switch%filecopy}\n'
625 4
625 4
626 3
626 3
627 2
627 2
628 1
628 1
629 0
629 0
630
630
631 log copies switch with --copies
631 log copies switch with --copies
632
632
633 $ hg log -vC --template '{rev} {file_copies_switch}\n'
633 $ hg log -vC --template '{rev} {file_copies_switch}\n'
634 4 e (dir/b)
634 4 e (dir/b)
635 3 b (a)g (f)
635 3 b (a)g (f)
636 2 dir/b (b)
636 2 dir/b (b)
637 1 b (a)g (f)
637 1 b (a)g (f)
638 0
638 0
639
639
640
640
641 log copies with hardcoded style and with --style=default
641 log copies with hardcoded style and with --style=default
642
642
643 $ hg log -vC -r4
643 $ hg log -vC -r4
644 changeset: 4:7e4639b4691b
644 changeset: 4:7e4639b4691b
645 tag: tip
645 tag: tip
646 user: test
646 user: test
647 date: Thu Jan 01 00:00:05 1970 +0000
647 date: Thu Jan 01 00:00:05 1970 +0000
648 files: dir/b e
648 files: dir/b e
649 copies: e (dir/b)
649 copies: e (dir/b)
650 description:
650 description:
651 e
651 e
652
652
653
653
654 $ hg log -vC -r4 --style=default
654 $ hg log -vC -r4 --style=default
655 changeset: 4:7e4639b4691b
655 changeset: 4:7e4639b4691b
656 tag: tip
656 tag: tip
657 user: test
657 user: test
658 date: Thu Jan 01 00:00:05 1970 +0000
658 date: Thu Jan 01 00:00:05 1970 +0000
659 files: dir/b e
659 files: dir/b e
660 copies: e (dir/b)
660 copies: e (dir/b)
661 description:
661 description:
662 e
662 e
663
663
664
664
665 $ hg log -vC -r4 -Tjson
665 $ hg log -vC -r4 -Tjson
666 [
666 [
667 {
667 {
668 "bookmarks": [],
668 "bookmarks": [],
669 "branch": "default",
669 "branch": "default",
670 "copies": {"e": "dir/b"},
670 "copies": {"e": "dir/b"},
671 "date": [5, 0],
671 "date": [5, 0],
672 "desc": "e",
672 "desc": "e",
673 "files": ["dir/b", "e"],
673 "files": ["dir/b", "e"],
674 "node": "7e4639b4691b9f84b81036a8d4fb218ce3c5e3a3",
674 "node": "7e4639b4691b9f84b81036a8d4fb218ce3c5e3a3",
675 "parents": ["2ca5ba7019804f1f597249caddf22a64d34df0ba"],
675 "parents": ["2ca5ba7019804f1f597249caddf22a64d34df0ba"],
676 "phase": "draft",
676 "phase": "draft",
677 "rev": 4,
677 "rev": 4,
678 "tags": ["tip"],
678 "tags": ["tip"],
679 "user": "test"
679 "user": "test"
680 }
680 }
681 ]
681 ]
682
682
683 log copies, non-linear manifest
683 log copies, non-linear manifest
684
684
685 $ hg up -C 3
685 $ hg up -C 3
686 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
686 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
687 $ hg mv dir/b e
687 $ hg mv dir/b e
688 $ echo foo > foo
688 $ echo foo > foo
689 $ hg ci -Ame2 -d '6 0'
689 $ hg ci -Ame2 -d '6 0'
690 adding foo
690 adding foo
691 created new head
691 created new head
692 $ hg log -v --template '{rev} {file_copies}\n' -r 5
692 $ hg log -v --template '{rev} {file_copies}\n' -r 5
693 5 e (dir/b)
693 5 e (dir/b)
694
694
695
695
696 log copies, execute bit set
696 log copies, execute bit set
697
697
698 #if execbit
698 #if execbit
699 $ chmod +x e
699 $ chmod +x e
700 $ hg ci -me3 -d '7 0'
700 $ hg ci -me3 -d '7 0'
701 $ hg log -v --template '{rev} {file_copies}\n' -r 6
701 $ hg log -v --template '{rev} {file_copies}\n' -r 6
702 6
702 6
703 #endif
703 #endif
704
704
705 log copies, empty set
705 log copies, empty set
706
706
707 $ hg log --copies -r '0 and not 0'
707 $ hg log --copies -r '0 and not 0'
708
708
709 log -p d
709 log -p d
710
710
711 $ hg log -pv d
711 $ hg log -pv d
712 changeset: 3:2ca5ba701980
712 changeset: 3:2ca5ba701980
713 user: test
713 user: test
714 date: Thu Jan 01 00:00:04 1970 +0000
714 date: Thu Jan 01 00:00:04 1970 +0000
715 files: a b d g
715 files: a b d g
716 description:
716 description:
717 d
717 d
718
718
719
719
720 diff -r f8954cd4dc1f -r 2ca5ba701980 d
720 diff -r f8954cd4dc1f -r 2ca5ba701980 d
721 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
721 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
722 +++ b/d Thu Jan 01 00:00:04 1970 +0000
722 +++ b/d Thu Jan 01 00:00:04 1970 +0000
723 @@ -0,0 +1,1 @@
723 @@ -0,0 +1,1 @@
724 +a
724 +a
725
725
726
726
727
727
728 log --removed file
728 log --removed file
729
729
730 $ hg log --removed -v a
730 $ hg log --removed -v a
731 changeset: 3:2ca5ba701980
731 changeset: 3:2ca5ba701980
732 user: test
732 user: test
733 date: Thu Jan 01 00:00:04 1970 +0000
733 date: Thu Jan 01 00:00:04 1970 +0000
734 files: a b d g
734 files: a b d g
735 description:
735 description:
736 d
736 d
737
737
738
738
739 changeset: 0:9161b9aeaf16
739 changeset: 0:9161b9aeaf16
740 user: test
740 user: test
741 date: Thu Jan 01 00:00:01 1970 +0000
741 date: Thu Jan 01 00:00:01 1970 +0000
742 files: a f
742 files: a f
743 description:
743 description:
744 a
744 a
745
745
746
746
747
747
748 log --removed revrange file
748 log --removed revrange file
749
749
750 $ hg log --removed -v -r0:2 a
750 $ hg log --removed -v -r0:2 a
751 changeset: 0:9161b9aeaf16
751 changeset: 0:9161b9aeaf16
752 user: test
752 user: test
753 date: Thu Jan 01 00:00:01 1970 +0000
753 date: Thu Jan 01 00:00:01 1970 +0000
754 files: a f
754 files: a f
755 description:
755 description:
756 a
756 a
757
757
758
758
759 $ cd ..
759 $ cd ..
760
760
761 log --follow tests
761 log --follow tests
762
762
763 $ hg init follow
763 $ hg init follow
764 $ cd follow
764 $ cd follow
765
765
766 $ echo base > base
766 $ echo base > base
767 $ hg ci -Ambase -d '1 0'
767 $ hg ci -Ambase -d '1 0'
768 adding base
768 adding base
769
769
770 $ echo r1 >> base
770 $ echo r1 >> base
771 $ hg ci -Amr1 -d '1 0'
771 $ hg ci -Amr1 -d '1 0'
772 $ echo r2 >> base
772 $ echo r2 >> base
773 $ hg ci -Amr2 -d '1 0'
773 $ hg ci -Amr2 -d '1 0'
774
774
775 $ hg up -C 1
775 $ hg up -C 1
776 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
776 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
777 $ echo b1 > b1
777 $ echo b1 > b1
778
778
779 log -r "follow('set:clean()')"
779 log -r "follow('set:clean()')"
780
780
781 $ hg log -r "follow('set:clean()')"
781 $ hg log -r "follow('set:clean()')"
782 changeset: 0:67e992f2c4f3
782 changeset: 0:67e992f2c4f3
783 user: test
783 user: test
784 date: Thu Jan 01 00:00:01 1970 +0000
784 date: Thu Jan 01 00:00:01 1970 +0000
785 summary: base
785 summary: base
786
786
787 changeset: 1:3d5bf5654eda
787 changeset: 1:3d5bf5654eda
788 user: test
788 user: test
789 date: Thu Jan 01 00:00:01 1970 +0000
789 date: Thu Jan 01 00:00:01 1970 +0000
790 summary: r1
790 summary: r1
791
791
792
792
793 $ hg ci -Amb1 -d '1 0'
793 $ hg ci -Amb1 -d '1 0'
794 adding b1
794 adding b1
795 created new head
795 created new head
796
796
797
797
798 log -f
798 log -f
799
799
800 $ hg log -f
800 $ hg log -f
801 changeset: 3:e62f78d544b4
801 changeset: 3:e62f78d544b4
802 tag: tip
802 tag: tip
803 parent: 1:3d5bf5654eda
803 parent: 1:3d5bf5654eda
804 user: test
804 user: test
805 date: Thu Jan 01 00:00:01 1970 +0000
805 date: Thu Jan 01 00:00:01 1970 +0000
806 summary: b1
806 summary: b1
807
807
808 changeset: 1:3d5bf5654eda
808 changeset: 1:3d5bf5654eda
809 user: test
809 user: test
810 date: Thu Jan 01 00:00:01 1970 +0000
810 date: Thu Jan 01 00:00:01 1970 +0000
811 summary: r1
811 summary: r1
812
812
813 changeset: 0:67e992f2c4f3
813 changeset: 0:67e992f2c4f3
814 user: test
814 user: test
815 date: Thu Jan 01 00:00:01 1970 +0000
815 date: Thu Jan 01 00:00:01 1970 +0000
816 summary: base
816 summary: base
817
817
818
818
819 log -r follow('glob:b*')
819 log -r follow('glob:b*')
820
820
821 $ hg log -r "follow('glob:b*')"
821 $ hg log -r "follow('glob:b*')"
822 changeset: 0:67e992f2c4f3
822 changeset: 0:67e992f2c4f3
823 user: test
823 user: test
824 date: Thu Jan 01 00:00:01 1970 +0000
824 date: Thu Jan 01 00:00:01 1970 +0000
825 summary: base
825 summary: base
826
826
827 changeset: 1:3d5bf5654eda
827 changeset: 1:3d5bf5654eda
828 user: test
828 user: test
829 date: Thu Jan 01 00:00:01 1970 +0000
829 date: Thu Jan 01 00:00:01 1970 +0000
830 summary: r1
830 summary: r1
831
831
832 changeset: 3:e62f78d544b4
832 changeset: 3:e62f78d544b4
833 tag: tip
833 tag: tip
834 parent: 1:3d5bf5654eda
834 parent: 1:3d5bf5654eda
835 user: test
835 user: test
836 date: Thu Jan 01 00:00:01 1970 +0000
836 date: Thu Jan 01 00:00:01 1970 +0000
837 summary: b1
837 summary: b1
838
838
839 log -f -r '1 + 4'
839 log -f -r '1 + 4'
840
840
841 $ hg up -C 0
841 $ hg up -C 0
842 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
842 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
843 $ echo b2 > b2
843 $ echo b2 > b2
844 $ hg ci -Amb2 -d '1 0'
844 $ hg ci -Amb2 -d '1 0'
845 adding b2
845 adding b2
846 created new head
846 created new head
847 $ hg log -f -r '1 + 4'
847 $ hg log -f -r '1 + 4'
848 changeset: 4:ddb82e70d1a1
848 changeset: 4:ddb82e70d1a1
849 tag: tip
849 tag: tip
850 parent: 0:67e992f2c4f3
850 parent: 0:67e992f2c4f3
851 user: test
851 user: test
852 date: Thu Jan 01 00:00:01 1970 +0000
852 date: Thu Jan 01 00:00:01 1970 +0000
853 summary: b2
853 summary: b2
854
854
855 changeset: 1:3d5bf5654eda
855 changeset: 1:3d5bf5654eda
856 user: test
856 user: test
857 date: Thu Jan 01 00:00:01 1970 +0000
857 date: Thu Jan 01 00:00:01 1970 +0000
858 summary: r1
858 summary: r1
859
859
860 changeset: 0:67e992f2c4f3
860 changeset: 0:67e992f2c4f3
861 user: test
861 user: test
862 date: Thu Jan 01 00:00:01 1970 +0000
862 date: Thu Jan 01 00:00:01 1970 +0000
863 summary: base
863 summary: base
864
864
865
865
866 log -fr with aliases: 'A' should be expanded, but 'reverse()' should have no
866 log -fr with aliases: 'A' should be expanded, but 'reverse()' should have no
867 effect
867 effect
868
868
869 $ hg log --config 'revsetalias.reverse(x)=x' --config 'revsetalias.A=1+4' -qfrA
869 $ hg log --config 'revsetalias.reverse(x)=x' --config 'revsetalias.A=1+4' -qfrA
870 4:ddb82e70d1a1
870 4:ddb82e70d1a1
871 1:3d5bf5654eda
871 1:3d5bf5654eda
872 0:67e992f2c4f3
872 0:67e992f2c4f3
873
873
874 log -r "follow('set:grep(b2)')"
874 log -r "follow('set:grep(b2)')"
875
875
876 $ hg log -r "follow('set:grep(b2)')"
876 $ hg log -r "follow('set:grep(b2)')"
877 changeset: 4:ddb82e70d1a1
877 changeset: 4:ddb82e70d1a1
878 tag: tip
878 tag: tip
879 parent: 0:67e992f2c4f3
879 parent: 0:67e992f2c4f3
880 user: test
880 user: test
881 date: Thu Jan 01 00:00:01 1970 +0000
881 date: Thu Jan 01 00:00:01 1970 +0000
882 summary: b2
882 summary: b2
883
883
884 log -r "follow('set:grep(b2)', 4)"
884 log -r "follow('set:grep(b2)', 4)"
885
885
886 $ hg up -qC 0
886 $ hg up -qC 0
887 $ hg log -r "follow('set:grep(b2)', 4)"
887 $ hg log -r "follow('set:grep(b2)', 4)"
888 changeset: 4:ddb82e70d1a1
888 changeset: 4:ddb82e70d1a1
889 tag: tip
889 tag: tip
890 parent: 0:67e992f2c4f3
890 parent: 0:67e992f2c4f3
891 user: test
891 user: test
892 date: Thu Jan 01 00:00:01 1970 +0000
892 date: Thu Jan 01 00:00:01 1970 +0000
893 summary: b2
893 summary: b2
894
894
895
895
896 follow files starting from multiple revisions:
896 follow files starting from multiple revisions:
897
897
898 $ hg log -T '{rev}: {files}\n' -r "follow('glob:b?', startrev=2+3+4)"
898 $ hg log -T '{rev}: {files}\n' -r "follow('glob:b?', startrev=2+3+4)"
899 3: b1
899 3: b1
900 4: b2
900 4: b2
901
901
902 follow files starting from empty revision:
902 follow files starting from empty revision:
903
903
904 $ hg log -T '{rev}: {files}\n' -r "follow('glob:*', startrev=.-.)"
904 $ hg log -T '{rev}: {files}\n' -r "follow('glob:*', startrev=.-.)"
905
905
906 follow starting from revisions:
906 follow starting from revisions:
907
907
908 $ hg log -Gq -r "follow(startrev=2+4)"
908 $ hg log -Gq -r "follow(startrev=2+4)"
909 o 4:ddb82e70d1a1
909 o 4:ddb82e70d1a1
910 |
910 |
911 | o 2:60c670bf5b30
911 | o 2:60c670bf5b30
912 | |
912 | |
913 | o 1:3d5bf5654eda
913 | o 1:3d5bf5654eda
914 |/
914 |/
915 @ 0:67e992f2c4f3
915 @ 0:67e992f2c4f3
916
916
917
917
918 follow the current revision:
918 follow the current revision:
919
919
920 $ hg log -Gq -r "follow()"
920 $ hg log -Gq -r "follow()"
921 @ 0:67e992f2c4f3
921 @ 0:67e992f2c4f3
922
922
923
923
924 $ hg up -qC 4
924 $ hg up -qC 4
925
925
926 log -f -r null
926 log -f -r null
927
927
928 $ hg log -f -r null
928 $ hg log -f -r null
929 changeset: -1:000000000000
929 changeset: -1:000000000000
930 user:
930 user:
931 date: Thu Jan 01 00:00:00 1970 +0000
931 date: Thu Jan 01 00:00:00 1970 +0000
932
932
933 $ hg log -f -r null -G
933 $ hg log -f -r null -G
934 o changeset: -1:000000000000
934 o changeset: -1:000000000000
935 user:
935 user:
936 date: Thu Jan 01 00:00:00 1970 +0000
936 date: Thu Jan 01 00:00:00 1970 +0000
937
937
938
938
939
939
940 log -f with null parent
940 log -f with null parent
941
941
942 $ hg up -C null
942 $ hg up -C null
943 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
943 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
944 $ hg log -f
944 $ hg log -f
945
945
946
946
947 log -r . with two parents
947 log -r . with two parents
948
948
949 $ hg up -C 3
949 $ hg up -C 3
950 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
950 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
951 $ hg merge tip
951 $ hg merge tip
952 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
952 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
953 (branch merge, don't forget to commit)
953 (branch merge, don't forget to commit)
954 $ hg log -r .
954 $ hg log -r .
955 changeset: 3:e62f78d544b4
955 changeset: 3:e62f78d544b4
956 parent: 1:3d5bf5654eda
956 parent: 1:3d5bf5654eda
957 user: test
957 user: test
958 date: Thu Jan 01 00:00:01 1970 +0000
958 date: Thu Jan 01 00:00:01 1970 +0000
959 summary: b1
959 summary: b1
960
960
961
961
962
962
963 log -r . with one parent
963 log -r . with one parent
964
964
965 $ hg ci -mm12 -d '1 0'
965 $ hg ci -mm12 -d '1 0'
966 $ hg log -r .
966 $ hg log -r .
967 changeset: 5:302e9dd6890d
967 changeset: 5:302e9dd6890d
968 tag: tip
968 tag: tip
969 parent: 3:e62f78d544b4
969 parent: 3:e62f78d544b4
970 parent: 4:ddb82e70d1a1
970 parent: 4:ddb82e70d1a1
971 user: test
971 user: test
972 date: Thu Jan 01 00:00:01 1970 +0000
972 date: Thu Jan 01 00:00:01 1970 +0000
973 summary: m12
973 summary: m12
974
974
975
975
976 $ echo postm >> b1
976 $ echo postm >> b1
977 $ hg ci -Amb1.1 -d'1 0'
977 $ hg ci -Amb1.1 -d'1 0'
978
978
979
979
980 log --follow-first
980 log --follow-first
981
981
982 $ hg log --follow-first
982 $ hg log --follow-first
983 changeset: 6:2404bbcab562
983 changeset: 6:2404bbcab562
984 tag: tip
984 tag: tip
985 user: test
985 user: test
986 date: Thu Jan 01 00:00:01 1970 +0000
986 date: Thu Jan 01 00:00:01 1970 +0000
987 summary: b1.1
987 summary: b1.1
988
988
989 changeset: 5:302e9dd6890d
989 changeset: 5:302e9dd6890d
990 parent: 3:e62f78d544b4
990 parent: 3:e62f78d544b4
991 parent: 4:ddb82e70d1a1
991 parent: 4:ddb82e70d1a1
992 user: test
992 user: test
993 date: Thu Jan 01 00:00:01 1970 +0000
993 date: Thu Jan 01 00:00:01 1970 +0000
994 summary: m12
994 summary: m12
995
995
996 changeset: 3:e62f78d544b4
996 changeset: 3:e62f78d544b4
997 parent: 1:3d5bf5654eda
997 parent: 1:3d5bf5654eda
998 user: test
998 user: test
999 date: Thu Jan 01 00:00:01 1970 +0000
999 date: Thu Jan 01 00:00:01 1970 +0000
1000 summary: b1
1000 summary: b1
1001
1001
1002 changeset: 1:3d5bf5654eda
1002 changeset: 1:3d5bf5654eda
1003 user: test
1003 user: test
1004 date: Thu Jan 01 00:00:01 1970 +0000
1004 date: Thu Jan 01 00:00:01 1970 +0000
1005 summary: r1
1005 summary: r1
1006
1006
1007 changeset: 0:67e992f2c4f3
1007 changeset: 0:67e992f2c4f3
1008 user: test
1008 user: test
1009 date: Thu Jan 01 00:00:01 1970 +0000
1009 date: Thu Jan 01 00:00:01 1970 +0000
1010 summary: base
1010 summary: base
1011
1011
1012
1012
1013
1013
1014 log -P 2
1014 log -P 2
1015
1015
1016 $ hg log -P 2
1016 $ hg log -P 2
1017 changeset: 6:2404bbcab562
1017 changeset: 6:2404bbcab562
1018 tag: tip
1018 tag: tip
1019 user: test
1019 user: test
1020 date: Thu Jan 01 00:00:01 1970 +0000
1020 date: Thu Jan 01 00:00:01 1970 +0000
1021 summary: b1.1
1021 summary: b1.1
1022
1022
1023 changeset: 5:302e9dd6890d
1023 changeset: 5:302e9dd6890d
1024 parent: 3:e62f78d544b4
1024 parent: 3:e62f78d544b4
1025 parent: 4:ddb82e70d1a1
1025 parent: 4:ddb82e70d1a1
1026 user: test
1026 user: test
1027 date: Thu Jan 01 00:00:01 1970 +0000
1027 date: Thu Jan 01 00:00:01 1970 +0000
1028 summary: m12
1028 summary: m12
1029
1029
1030 changeset: 4:ddb82e70d1a1
1030 changeset: 4:ddb82e70d1a1
1031 parent: 0:67e992f2c4f3
1031 parent: 0:67e992f2c4f3
1032 user: test
1032 user: test
1033 date: Thu Jan 01 00:00:01 1970 +0000
1033 date: Thu Jan 01 00:00:01 1970 +0000
1034 summary: b2
1034 summary: b2
1035
1035
1036 changeset: 3:e62f78d544b4
1036 changeset: 3:e62f78d544b4
1037 parent: 1:3d5bf5654eda
1037 parent: 1:3d5bf5654eda
1038 user: test
1038 user: test
1039 date: Thu Jan 01 00:00:01 1970 +0000
1039 date: Thu Jan 01 00:00:01 1970 +0000
1040 summary: b1
1040 summary: b1
1041
1041
1042
1042
1043
1043
1044 log -r tip -p --git
1044 log -r tip -p --git
1045
1045
1046 $ hg log -r tip -p --git
1046 $ hg log -r tip -p --git
1047 changeset: 6:2404bbcab562
1047 changeset: 6:2404bbcab562
1048 tag: tip
1048 tag: tip
1049 user: test
1049 user: test
1050 date: Thu Jan 01 00:00:01 1970 +0000
1050 date: Thu Jan 01 00:00:01 1970 +0000
1051 summary: b1.1
1051 summary: b1.1
1052
1052
1053 diff --git a/b1 b/b1
1053 diff --git a/b1 b/b1
1054 --- a/b1
1054 --- a/b1
1055 +++ b/b1
1055 +++ b/b1
1056 @@ -1,1 +1,2 @@
1056 @@ -1,1 +1,2 @@
1057 b1
1057 b1
1058 +postm
1058 +postm
1059
1059
1060
1060
1061
1061
1062 log -r ""
1062 log -r ""
1063
1063
1064 $ hg log -r ''
1064 $ hg log -r ''
1065 hg: parse error: empty query
1065 hg: parse error: empty query
1066 [10]
1066 [10]
1067
1067
1068 log -r <some unknown node id>
1068 log -r <some unknown node id>
1069
1069
1070 $ hg log -r 1000000000000000000000000000000000000000
1070 $ hg log -r 1000000000000000000000000000000000000000
1071 abort: unknown revision '1000000000000000000000000000000000000000'
1071 abort: unknown revision '1000000000000000000000000000000000000000'
1072 [255]
1072 [255]
1073
1073
1074 log -k r1
1074 log -k r1
1075
1075
1076 $ hg log -k r1
1076 $ hg log -k r1
1077 changeset: 1:3d5bf5654eda
1077 changeset: 1:3d5bf5654eda
1078 user: test
1078 user: test
1079 date: Thu Jan 01 00:00:01 1970 +0000
1079 date: Thu Jan 01 00:00:01 1970 +0000
1080 summary: r1
1080 summary: r1
1081
1081
1082 log -p -l2 --color=always
1082 log -p -l2 --color=always
1083
1083
1084 $ hg --config extensions.color= --config color.mode=ansi \
1084 $ hg --config extensions.color= --config color.mode=ansi \
1085 > log -p -l2 --color=always
1085 > log -p -l2 --color=always
1086 \x1b[0;33mchangeset: 6:2404bbcab562\x1b[0m (esc)
1086 \x1b[0;33mchangeset: 6:2404bbcab562\x1b[0m (esc)
1087 tag: tip
1087 tag: tip
1088 user: test
1088 user: test
1089 date: Thu Jan 01 00:00:01 1970 +0000
1089 date: Thu Jan 01 00:00:01 1970 +0000
1090 summary: b1.1
1090 summary: b1.1
1091
1091
1092 \x1b[0;1mdiff -r 302e9dd6890d -r 2404bbcab562 b1\x1b[0m (esc)
1092 \x1b[0;1mdiff -r 302e9dd6890d -r 2404bbcab562 b1\x1b[0m (esc)
1093 \x1b[0;31;1m--- a/b1 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1093 \x1b[0;31;1m--- a/b1 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1094 \x1b[0;32;1m+++ b/b1 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1094 \x1b[0;32;1m+++ b/b1 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1095 \x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc)
1095 \x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc)
1096 b1
1096 b1
1097 \x1b[0;32m+postm\x1b[0m (esc)
1097 \x1b[0;32m+postm\x1b[0m (esc)
1098
1098
1099 \x1b[0;33mchangeset: 5:302e9dd6890d\x1b[0m (esc)
1099 \x1b[0;33mchangeset: 5:302e9dd6890d\x1b[0m (esc)
1100 parent: 3:e62f78d544b4
1100 parent: 3:e62f78d544b4
1101 parent: 4:ddb82e70d1a1
1101 parent: 4:ddb82e70d1a1
1102 user: test
1102 user: test
1103 date: Thu Jan 01 00:00:01 1970 +0000
1103 date: Thu Jan 01 00:00:01 1970 +0000
1104 summary: m12
1104 summary: m12
1105
1105
1106 \x1b[0;1mdiff -r e62f78d544b4 -r 302e9dd6890d b2\x1b[0m (esc)
1106 \x1b[0;1mdiff -r e62f78d544b4 -r 302e9dd6890d b2\x1b[0m (esc)
1107 \x1b[0;31;1m--- /dev/null Thu Jan 01 00:00:00 1970 +0000\x1b[0m (esc)
1107 \x1b[0;31;1m--- /dev/null Thu Jan 01 00:00:00 1970 +0000\x1b[0m (esc)
1108 \x1b[0;32;1m+++ b/b2 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1108 \x1b[0;32;1m+++ b/b2 Thu Jan 01 00:00:01 1970 +0000\x1b[0m (esc)
1109 \x1b[0;35m@@ -0,0 +1,1 @@\x1b[0m (esc)
1109 \x1b[0;35m@@ -0,0 +1,1 @@\x1b[0m (esc)
1110 \x1b[0;32m+b2\x1b[0m (esc)
1110 \x1b[0;32m+b2\x1b[0m (esc)
1111
1111
1112
1112
1113
1113
1114 log -r tip --stat
1114 log -r tip --stat
1115
1115
1116 $ hg log -r tip --stat
1116 $ hg log -r tip --stat
1117 changeset: 6:2404bbcab562
1117 changeset: 6:2404bbcab562
1118 tag: tip
1118 tag: tip
1119 user: test
1119 user: test
1120 date: Thu Jan 01 00:00:01 1970 +0000
1120 date: Thu Jan 01 00:00:01 1970 +0000
1121 summary: b1.1
1121 summary: b1.1
1122
1122
1123 b1 | 1 +
1123 b1 | 1 +
1124 1 files changed, 1 insertions(+), 0 deletions(-)
1124 1 files changed, 1 insertions(+), 0 deletions(-)
1125
1125
1126
1126
1127 $ cd ..
1127 $ cd ..
1128
1128
1129 log --follow --patch FILE in repository where linkrev isn't trustworthy
1129 log --follow --patch FILE in repository where linkrev isn't trustworthy
1130 (issue5376, issue6124)
1130 (issue5376, issue6124)
1131
1131
1132 $ hg init follow-dup
1132 $ hg init follow-dup
1133 $ cd follow-dup
1133 $ cd follow-dup
1134 $ cat <<EOF >> .hg/hgrc
1134 $ cat <<EOF >> .hg/hgrc
1135 > [command-templates]
1135 > [command-templates]
1136 > log = '=== {rev}: {desc}\n'
1136 > log = '=== {rev}: {desc}\n'
1137 > [diff]
1137 > [diff]
1138 > nodates = True
1138 > nodates = True
1139 > EOF
1139 > EOF
1140 $ echo 0 >> a
1140 $ echo 0 >> a
1141 $ hg ci -qAm 'a0'
1141 $ hg ci -qAm 'a0'
1142 $ echo 1 >> a
1142 $ echo 1 >> a
1143 $ hg ci -m 'a1'
1143 $ hg ci -m 'a1'
1144 $ hg up -q 0
1144 $ hg up -q 0
1145 $ echo 1 >> a
1145 $ echo 1 >> a
1146 $ touch b
1146 $ touch b
1147 $ hg ci -qAm 'a1 with b'
1147 $ hg ci -qAm 'a1 with b'
1148 $ echo 3 >> a
1148 $ echo 3 >> a
1149 $ hg ci -m 'a3'
1149 $ hg ci -m 'a3'
1150
1150
1151 fctx.rev() == 2, but fctx.linkrev() == 1
1151 fctx.rev() == 2, but fctx.linkrev() == 1
1152
1152
1153 $ hg log -pf a
1153 $ hg log -pf a
1154 === 3: a3
1154 === 3: a3
1155 diff -r 4ea02ba94d66 -r e7a6331a34f0 a
1155 diff -r 4ea02ba94d66 -r e7a6331a34f0 a
1156 --- a/a
1156 --- a/a
1157 +++ b/a
1157 +++ b/a
1158 @@ -1,2 +1,3 @@
1158 @@ -1,2 +1,3 @@
1159 0
1159 0
1160 1
1160 1
1161 +3
1161 +3
1162
1162
1163 === 2: a1 with b
1163 === 2: a1 with b
1164 diff -r 49b5e81287e2 -r 4ea02ba94d66 a
1164 diff -r 49b5e81287e2 -r 4ea02ba94d66 a
1165 --- a/a
1165 --- a/a
1166 +++ b/a
1166 +++ b/a
1167 @@ -1,1 +1,2 @@
1167 @@ -1,1 +1,2 @@
1168 0
1168 0
1169 +1
1169 +1
1170
1170
1171 === 0: a0
1171 === 0: a0
1172 diff -r 000000000000 -r 49b5e81287e2 a
1172 diff -r 000000000000 -r 49b5e81287e2 a
1173 --- /dev/null
1173 --- /dev/null
1174 +++ b/a
1174 +++ b/a
1175 @@ -0,0 +1,1 @@
1175 @@ -0,0 +1,1 @@
1176 +0
1176 +0
1177
1177
1178 $ hg log -pr . a
1178 $ hg log -pr . a
1179 === 3: a3
1179 === 3: a3
1180 diff -r 4ea02ba94d66 -r e7a6331a34f0 a
1180 diff -r 4ea02ba94d66 -r e7a6331a34f0 a
1181 --- a/a
1181 --- a/a
1182 +++ b/a
1182 +++ b/a
1183 @@ -1,2 +1,3 @@
1183 @@ -1,2 +1,3 @@
1184 0
1184 0
1185 1
1185 1
1186 +3
1186 +3
1187
1187
1188
1188
1189 fctx.introrev() == 2, but fctx.linkrev() == 1
1189 fctx.introrev() == 2, but fctx.linkrev() == 1
1190
1190
1191 $ hg up -q 2
1191 $ hg up -q 2
1192 $ hg log -pf a
1192 $ hg log -pf a
1193 === 2: a1 with b
1193 === 2: a1 with b
1194 diff -r 49b5e81287e2 -r 4ea02ba94d66 a
1194 diff -r 49b5e81287e2 -r 4ea02ba94d66 a
1195 --- a/a
1195 --- a/a
1196 +++ b/a
1196 +++ b/a
1197 @@ -1,1 +1,2 @@
1197 @@ -1,1 +1,2 @@
1198 0
1198 0
1199 +1
1199 +1
1200
1200
1201 === 0: a0
1201 === 0: a0
1202 diff -r 000000000000 -r 49b5e81287e2 a
1202 diff -r 000000000000 -r 49b5e81287e2 a
1203 --- /dev/null
1203 --- /dev/null
1204 +++ b/a
1204 +++ b/a
1205 @@ -0,0 +1,1 @@
1205 @@ -0,0 +1,1 @@
1206 +0
1206 +0
1207
1207
1208
1208
1209 BROKEN: should show the same diff as for rev 2 above
1209 BROKEN: should show the same diff as for rev 2 above
1210 $ hg log -pr . a
1210 $ hg log -pr . a
1211
1211
1212 $ cd ..
1212 $ cd ..
1213
1213
1214 Multiple copy sources of a file:
1214 Multiple copy sources of a file:
1215
1215
1216 $ hg init follow-multi
1216 $ hg init follow-multi
1217 $ cd follow-multi
1217 $ cd follow-multi
1218 $ echo 0 >> a
1218 $ echo 0 >> a
1219 $ hg ci -qAm 'a'
1219 $ hg ci -qAm 'a'
1220 $ hg cp a b
1220 $ hg cp a b
1221 $ hg ci -m 'a->b'
1221 $ hg ci -m 'a->b'
1222 $ echo 2 >> a
1222 $ echo 2 >> a
1223 $ hg ci -m 'a'
1223 $ hg ci -m 'a'
1224 $ echo 3 >> b
1224 $ echo 3 >> b
1225 $ hg ci -m 'b'
1225 $ hg ci -m 'b'
1226 $ echo 4 >> a
1226 $ echo 4 >> a
1227 $ echo 4 >> b
1227 $ echo 4 >> b
1228 $ hg ci -m 'a,b'
1228 $ hg ci -m 'a,b'
1229 $ echo 5 >> a
1229 $ echo 5 >> a
1230 $ hg ci -m 'a0'
1230 $ hg ci -m 'a0'
1231 $ echo 6 >> b
1231 $ echo 6 >> b
1232 $ hg ci -m 'b0'
1232 $ hg ci -m 'b0'
1233 $ hg up -q 4
1233 $ hg up -q 4
1234 $ echo 7 >> b
1234 $ echo 7 >> b
1235 $ hg ci -m 'b1'
1235 $ hg ci -m 'b1'
1236 created new head
1236 created new head
1237 $ echo 8 >> a
1237 $ echo 8 >> a
1238 $ hg ci -m 'a1'
1238 $ hg ci -m 'a1'
1239 $ hg rm a
1239 $ hg rm a
1240 $ hg mv b a
1240 $ hg mv b a
1241 $ hg ci -m 'b1->a1'
1241 $ hg ci -m 'b1->a1'
1242 $ hg merge -qt :local
1242 $ hg merge -qt :local
1243 $ hg ci -m '(a0,b1->a1)->a'
1243 $ hg ci -m '(a0,b1->a1)->a'
1244
1244
1245 $ hg log -GT '{rev}: {desc}\n'
1245 $ hg log -GT '{rev}: {desc}\n'
1246 @ 10: (a0,b1->a1)->a
1246 @ 10: (a0,b1->a1)->a
1247 |\
1247 |\
1248 | o 9: b1->a1
1248 | o 9: b1->a1
1249 | |
1249 | |
1250 | o 8: a1
1250 | o 8: a1
1251 | |
1251 | |
1252 | o 7: b1
1252 | o 7: b1
1253 | |
1253 | |
1254 o | 6: b0
1254 o | 6: b0
1255 | |
1255 | |
1256 o | 5: a0
1256 o | 5: a0
1257 |/
1257 |/
1258 o 4: a,b
1258 o 4: a,b
1259 |
1259 |
1260 o 3: b
1260 o 3: b
1261 |
1261 |
1262 o 2: a
1262 o 2: a
1263 |
1263 |
1264 o 1: a->b
1264 o 1: a->b
1265 |
1265 |
1266 o 0: a
1266 o 0: a
1267
1267
1268
1268
1269 since file 'a' has multiple copy sources at the revision 4, ancestors can't
1269 since file 'a' has multiple copy sources at the revision 4, ancestors can't
1270 be indexed solely by fctx.linkrev().
1270 be indexed solely by fctx.linkrev().
1271
1271
1272 $ hg log -T '{rev}: {desc}\n' -f a
1272 $ hg log -T '{rev}: {desc}\n' -f a
1273 10: (a0,b1->a1)->a
1273 10: (a0,b1->a1)->a
1274 9: b1->a1
1274 9: b1->a1
1275 7: b1
1275 7: b1
1276 5: a0
1276 5: a0
1277 4: a,b
1277 4: a,b
1278 3: b
1278 3: b
1279 2: a
1279 2: a
1280 1: a->b
1280 1: a->b
1281 0: a
1281 0: a
1282
1282
1283 $ cd ..
1283 $ cd ..
1284
1284
1285 Test that log should respect the order of -rREV even if multiple OR conditions
1285 Test that log should respect the order of -rREV even if multiple OR conditions
1286 are specified (issue5100):
1286 are specified (issue5100):
1287
1287
1288 $ hg init revorder
1288 $ hg init revorder
1289 $ cd revorder
1289 $ cd revorder
1290
1290
1291 $ hg branch -q b0
1291 $ hg branch -q b0
1292 $ echo 0 >> f0
1292 $ echo 0 >> f0
1293 $ hg ci -qAm k0 -u u0
1293 $ hg ci -qAm k0 -u u0
1294 $ hg branch -q b1
1294 $ hg branch -q b1
1295 $ echo 1 >> f1
1295 $ echo 1 >> f1
1296 $ hg ci -qAm k1 -u u1
1296 $ hg ci -qAm k1 -u u1
1297 $ hg branch -q b2
1297 $ hg branch -q b2
1298 $ echo 2 >> f2
1298 $ echo 2 >> f2
1299 $ hg ci -qAm k2 -u u2
1299 $ hg ci -qAm k2 -u u2
1300
1300
1301 $ hg update -q b2
1301 $ hg update -q b2
1302 $ echo 3 >> f2
1302 $ echo 3 >> f2
1303 $ hg ci -qAm k2 -u u2
1303 $ hg ci -qAm k2 -u u2
1304 $ hg update -q b1
1304 $ hg update -q b1
1305 $ echo 4 >> f1
1305 $ echo 4 >> f1
1306 $ hg ci -qAm k1 -u u1
1306 $ hg ci -qAm k1 -u u1
1307 $ hg update -q b0
1307 $ hg update -q b0
1308 $ echo 5 >> f0
1308 $ echo 5 >> f0
1309 $ hg ci -qAm k0 -u u0
1309 $ hg ci -qAm k0 -u u0
1310
1310
1311 summary of revisions:
1311 summary of revisions:
1312
1312
1313 $ hg log -G -T '{rev} {branch} {author} {desc} {files}\n'
1313 $ hg log -G -T '{rev} {branch} {author} {desc} {files}\n'
1314 @ 5 b0 u0 k0 f0
1314 @ 5 b0 u0 k0 f0
1315 |
1315 |
1316 | o 4 b1 u1 k1 f1
1316 | o 4 b1 u1 k1 f1
1317 | |
1317 | |
1318 | | o 3 b2 u2 k2 f2
1318 | | o 3 b2 u2 k2 f2
1319 | | |
1319 | | |
1320 | | o 2 b2 u2 k2 f2
1320 | | o 2 b2 u2 k2 f2
1321 | |/
1321 | |/
1322 | o 1 b1 u1 k1 f1
1322 | o 1 b1 u1 k1 f1
1323 |/
1323 |/
1324 o 0 b0 u0 k0 f0
1324 o 0 b0 u0 k0 f0
1325
1325
1326
1326
1327 log -b BRANCH in ascending order:
1327 log -b BRANCH in ascending order:
1328
1328
1329 $ hg log -r0:tip -T '{rev} {branch}\n' -b b0 -b b1
1329 $ hg log -r0:tip -T '{rev} {branch}\n' -b b0 -b b1
1330 0 b0
1330 0 b0
1331 1 b1
1331 1 b1
1332 4 b1
1332 4 b1
1333 5 b0
1333 5 b0
1334 $ hg log -r0:tip -T '{rev} {branch}\n' -b b1 -b b0
1334 $ hg log -r0:tip -T '{rev} {branch}\n' -b b1 -b b0
1335 0 b0
1335 0 b0
1336 1 b1
1336 1 b1
1337 4 b1
1337 4 b1
1338 5 b0
1338 5 b0
1339
1339
1340 log --only-branch BRANCH in descending order:
1340 log --only-branch BRANCH in descending order:
1341
1341
1342 $ hg log -rtip:0 -T '{rev} {branch}\n' --only-branch b1 --only-branch b2
1342 $ hg log -rtip:0 -T '{rev} {branch}\n' --only-branch b1 --only-branch b2
1343 4 b1
1343 4 b1
1344 3 b2
1344 3 b2
1345 2 b2
1345 2 b2
1346 1 b1
1346 1 b1
1347 $ hg log -rtip:0 -T '{rev} {branch}\n' --only-branch b2 --only-branch b1
1347 $ hg log -rtip:0 -T '{rev} {branch}\n' --only-branch b2 --only-branch b1
1348 4 b1
1348 4 b1
1349 3 b2
1349 3 b2
1350 2 b2
1350 2 b2
1351 1 b1
1351 1 b1
1352
1352
1353 log -u USER in ascending order, against compound set:
1353 log -u USER in ascending order, against compound set:
1354
1354
1355 $ hg log -r'::head()' -T '{rev} {author}\n' -u u0 -u u2
1355 $ hg log -r'::head()' -T '{rev} {author}\n' -u u0 -u u2
1356 0 u0
1356 0 u0
1357 2 u2
1357 2 u2
1358 3 u2
1358 3 u2
1359 5 u0
1359 5 u0
1360 $ hg log -r'::head()' -T '{rev} {author}\n' -u u2 -u u0
1360 $ hg log -r'::head()' -T '{rev} {author}\n' -u u2 -u u0
1361 0 u0
1361 0 u0
1362 2 u2
1362 2 u2
1363 3 u2
1363 3 u2
1364 5 u0
1364 5 u0
1365
1365
1366 log -k TEXT in descending order, against compound set:
1366 log -k TEXT in descending order, against compound set:
1367
1367
1368 $ hg log -r'5 + reverse(::3)' -T '{rev} {desc}\n' -k k0 -k k1 -k k2
1368 $ hg log -r'5 + reverse(::3)' -T '{rev} {desc}\n' -k k0 -k k1 -k k2
1369 5 k0
1369 5 k0
1370 3 k2
1370 3 k2
1371 2 k2
1371 2 k2
1372 1 k1
1372 1 k1
1373 0 k0
1373 0 k0
1374 $ hg log -r'5 + reverse(::3)' -T '{rev} {desc}\n' -k k2 -k k1 -k k0
1374 $ hg log -r'5 + reverse(::3)' -T '{rev} {desc}\n' -k k2 -k k1 -k k0
1375 5 k0
1375 5 k0
1376 3 k2
1376 3 k2
1377 2 k2
1377 2 k2
1378 1 k1
1378 1 k1
1379 0 k0
1379 0 k0
1380
1380
1381 log -b/-u/-k shouldn't accept string-matcher syntax:
1382
1383 $ hg log -b 're:.*'
1384 abort: unknown revision 're:.*'
1385 [255]
1386 $ hg log -k 're:.*'
1387 $ hg log -u 're:.*'
1388
1381 log FILE in ascending order, against dagrange:
1389 log FILE in ascending order, against dagrange:
1382
1390
1383 $ hg log -r1:: -T '{rev} {files}\n' f1 f2
1391 $ hg log -r1:: -T '{rev} {files}\n' f1 f2
1384 1 f1
1392 1 f1
1385 2 f2
1393 2 f2
1386 3 f2
1394 3 f2
1387 4 f1
1395 4 f1
1388 $ hg log -r1:: -T '{rev} {files}\n' f2 f1
1396 $ hg log -r1:: -T '{rev} {files}\n' f2 f1
1389 1 f1
1397 1 f1
1390 2 f2
1398 2 f2
1391 3 f2
1399 3 f2
1392 4 f1
1400 4 f1
1393
1401
1394 $ cd ..
1402 $ cd ..
1395
1403
1396 User
1404 User
1397
1405
1398 $ hg init usertest
1406 $ hg init usertest
1399 $ cd usertest
1407 $ cd usertest
1400
1408
1401 $ echo a > a
1409 $ echo a > a
1402 $ hg ci -A -m "a" -u "User One <user1@example.org>"
1410 $ hg ci -A -m "a" -u "User One <user1@example.org>"
1403 adding a
1411 adding a
1404 $ echo b > b
1412 $ echo b > b
1405 $ hg ci -A -m "b" -u "User Two <user2@example.org>"
1413 $ hg ci -A -m "b" -u "User Two <user2@example.org>"
1406 adding b
1414 adding b
1407
1415
1408 $ hg log -u "User One <user1@example.org>"
1416 $ hg log -u "User One <user1@example.org>"
1409 changeset: 0:29a4c94f1924
1417 changeset: 0:29a4c94f1924
1410 user: User One <user1@example.org>
1418 user: User One <user1@example.org>
1411 date: Thu Jan 01 00:00:00 1970 +0000
1419 date: Thu Jan 01 00:00:00 1970 +0000
1412 summary: a
1420 summary: a
1413
1421
1414 $ hg log -u "user1" -u "user2"
1422 $ hg log -u "user1" -u "user2"
1415 changeset: 1:e834b5e69c0e
1423 changeset: 1:e834b5e69c0e
1416 tag: tip
1424 tag: tip
1417 user: User Two <user2@example.org>
1425 user: User Two <user2@example.org>
1418 date: Thu Jan 01 00:00:00 1970 +0000
1426 date: Thu Jan 01 00:00:00 1970 +0000
1419 summary: b
1427 summary: b
1420
1428
1421 changeset: 0:29a4c94f1924
1429 changeset: 0:29a4c94f1924
1422 user: User One <user1@example.org>
1430 user: User One <user1@example.org>
1423 date: Thu Jan 01 00:00:00 1970 +0000
1431 date: Thu Jan 01 00:00:00 1970 +0000
1424 summary: a
1432 summary: a
1425
1433
1426 $ hg log -u "user3"
1434 $ hg log -u "user3"
1427
1435
1428 "-u USER" shouldn't be overridden by "user(USER)" alias
1436 "-u USER" shouldn't be overridden by "user(USER)" alias
1429
1437
1430 $ hg log --config 'revsetalias.user(x)=branch(x)' -u default
1438 $ hg log --config 'revsetalias.user(x)=branch(x)' -u default
1431 $ hg log --config 'revsetalias.user(x)=branch(x)' -u user1
1439 $ hg log --config 'revsetalias.user(x)=branch(x)' -u user1
1432 changeset: 0:29a4c94f1924
1440 changeset: 0:29a4c94f1924
1433 user: User One <user1@example.org>
1441 user: User One <user1@example.org>
1434 date: Thu Jan 01 00:00:00 1970 +0000
1442 date: Thu Jan 01 00:00:00 1970 +0000
1435 summary: a
1443 summary: a
1436
1444
1437
1445
1438 $ cd ..
1446 $ cd ..
1439
1447
1440 $ hg init branches
1448 $ hg init branches
1441 $ cd branches
1449 $ cd branches
1442
1450
1443 $ echo a > a
1451 $ echo a > a
1444 $ hg ci -A -m "commit on default"
1452 $ hg ci -A -m "commit on default"
1445 adding a
1453 adding a
1446 $ hg branch test
1454 $ hg branch test
1447 marked working directory as branch test
1455 marked working directory as branch test
1448 (branches are permanent and global, did you want a bookmark?)
1456 (branches are permanent and global, did you want a bookmark?)
1449 $ echo b > b
1457 $ echo b > b
1450 $ hg ci -A -m "commit on test"
1458 $ hg ci -A -m "commit on test"
1451 adding b
1459 adding b
1452
1460
1453 $ hg up default
1461 $ hg up default
1454 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1462 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1455 $ echo c > c
1463 $ echo c > c
1456 $ hg ci -A -m "commit on default"
1464 $ hg ci -A -m "commit on default"
1457 adding c
1465 adding c
1458 $ hg up test
1466 $ hg up test
1459 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1467 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1460 $ echo c > c
1468 $ echo c > c
1461 $ hg ci -A -m "commit on test"
1469 $ hg ci -A -m "commit on test"
1462 adding c
1470 adding c
1463
1471
1464
1472
1465 log -b default
1473 log -b default
1466
1474
1467 $ hg log -b default
1475 $ hg log -b default
1468 changeset: 2:c3a4f03cc9a7
1476 changeset: 2:c3a4f03cc9a7
1469 parent: 0:24427303d56f
1477 parent: 0:24427303d56f
1470 user: test
1478 user: test
1471 date: Thu Jan 01 00:00:00 1970 +0000
1479 date: Thu Jan 01 00:00:00 1970 +0000
1472 summary: commit on default
1480 summary: commit on default
1473
1481
1474 changeset: 0:24427303d56f
1482 changeset: 0:24427303d56f
1475 user: test
1483 user: test
1476 date: Thu Jan 01 00:00:00 1970 +0000
1484 date: Thu Jan 01 00:00:00 1970 +0000
1477 summary: commit on default
1485 summary: commit on default
1478
1486
1479
1487
1480
1488
1481 log -b test
1489 log -b test
1482
1490
1483 $ hg log -b test
1491 $ hg log -b test
1484 changeset: 3:f5d8de11c2e2
1492 changeset: 3:f5d8de11c2e2
1485 branch: test
1493 branch: test
1486 tag: tip
1494 tag: tip
1487 parent: 1:d32277701ccb
1495 parent: 1:d32277701ccb
1488 user: test
1496 user: test
1489 date: Thu Jan 01 00:00:00 1970 +0000
1497 date: Thu Jan 01 00:00:00 1970 +0000
1490 summary: commit on test
1498 summary: commit on test
1491
1499
1492 changeset: 1:d32277701ccb
1500 changeset: 1:d32277701ccb
1493 branch: test
1501 branch: test
1494 user: test
1502 user: test
1495 date: Thu Jan 01 00:00:00 1970 +0000
1503 date: Thu Jan 01 00:00:00 1970 +0000
1496 summary: commit on test
1504 summary: commit on test
1497
1505
1498
1506
1499
1507
1500 log -b dummy
1508 log -b dummy
1501
1509
1502 $ hg log -b dummy
1510 $ hg log -b dummy
1503 abort: unknown revision 'dummy'
1511 abort: unknown revision 'dummy'
1504 [255]
1512 [255]
1505
1513
1506
1514
1507 log -b .
1515 log -b .
1508
1516
1509 $ hg log -b .
1517 $ hg log -b .
1510 changeset: 3:f5d8de11c2e2
1518 changeset: 3:f5d8de11c2e2
1511 branch: test
1519 branch: test
1512 tag: tip
1520 tag: tip
1513 parent: 1:d32277701ccb
1521 parent: 1:d32277701ccb
1514 user: test
1522 user: test
1515 date: Thu Jan 01 00:00:00 1970 +0000
1523 date: Thu Jan 01 00:00:00 1970 +0000
1516 summary: commit on test
1524 summary: commit on test
1517
1525
1518 changeset: 1:d32277701ccb
1526 changeset: 1:d32277701ccb
1519 branch: test
1527 branch: test
1520 user: test
1528 user: test
1521 date: Thu Jan 01 00:00:00 1970 +0000
1529 date: Thu Jan 01 00:00:00 1970 +0000
1522 summary: commit on test
1530 summary: commit on test
1523
1531
1524
1532
1525
1533
1526 log -b default -b test
1534 log -b default -b test
1527
1535
1528 $ hg log -b default -b test
1536 $ hg log -b default -b test
1529 changeset: 3:f5d8de11c2e2
1537 changeset: 3:f5d8de11c2e2
1530 branch: test
1538 branch: test
1531 tag: tip
1539 tag: tip
1532 parent: 1:d32277701ccb
1540 parent: 1:d32277701ccb
1533 user: test
1541 user: test
1534 date: Thu Jan 01 00:00:00 1970 +0000
1542 date: Thu Jan 01 00:00:00 1970 +0000
1535 summary: commit on test
1543 summary: commit on test
1536
1544
1537 changeset: 2:c3a4f03cc9a7
1545 changeset: 2:c3a4f03cc9a7
1538 parent: 0:24427303d56f
1546 parent: 0:24427303d56f
1539 user: test
1547 user: test
1540 date: Thu Jan 01 00:00:00 1970 +0000
1548 date: Thu Jan 01 00:00:00 1970 +0000
1541 summary: commit on default
1549 summary: commit on default
1542
1550
1543 changeset: 1:d32277701ccb
1551 changeset: 1:d32277701ccb
1544 branch: test
1552 branch: test
1545 user: test
1553 user: test
1546 date: Thu Jan 01 00:00:00 1970 +0000
1554 date: Thu Jan 01 00:00:00 1970 +0000
1547 summary: commit on test
1555 summary: commit on test
1548
1556
1549 changeset: 0:24427303d56f
1557 changeset: 0:24427303d56f
1550 user: test
1558 user: test
1551 date: Thu Jan 01 00:00:00 1970 +0000
1559 date: Thu Jan 01 00:00:00 1970 +0000
1552 summary: commit on default
1560 summary: commit on default
1553
1561
1554
1562
1555
1563
1556 log -b default -b .
1564 log -b default -b .
1557
1565
1558 $ hg log -b default -b .
1566 $ hg log -b default -b .
1559 changeset: 3:f5d8de11c2e2
1567 changeset: 3:f5d8de11c2e2
1560 branch: test
1568 branch: test
1561 tag: tip
1569 tag: tip
1562 parent: 1:d32277701ccb
1570 parent: 1:d32277701ccb
1563 user: test
1571 user: test
1564 date: Thu Jan 01 00:00:00 1970 +0000
1572 date: Thu Jan 01 00:00:00 1970 +0000
1565 summary: commit on test
1573 summary: commit on test
1566
1574
1567 changeset: 2:c3a4f03cc9a7
1575 changeset: 2:c3a4f03cc9a7
1568 parent: 0:24427303d56f
1576 parent: 0:24427303d56f
1569 user: test
1577 user: test
1570 date: Thu Jan 01 00:00:00 1970 +0000
1578 date: Thu Jan 01 00:00:00 1970 +0000
1571 summary: commit on default
1579 summary: commit on default
1572
1580
1573 changeset: 1:d32277701ccb
1581 changeset: 1:d32277701ccb
1574 branch: test
1582 branch: test
1575 user: test
1583 user: test
1576 date: Thu Jan 01 00:00:00 1970 +0000
1584 date: Thu Jan 01 00:00:00 1970 +0000
1577 summary: commit on test
1585 summary: commit on test
1578
1586
1579 changeset: 0:24427303d56f
1587 changeset: 0:24427303d56f
1580 user: test
1588 user: test
1581 date: Thu Jan 01 00:00:00 1970 +0000
1589 date: Thu Jan 01 00:00:00 1970 +0000
1582 summary: commit on default
1590 summary: commit on default
1583
1591
1584
1592
1585
1593
1586 log -b . -b test
1594 log -b . -b test
1587
1595
1588 $ hg log -b . -b test
1596 $ hg log -b . -b test
1589 changeset: 3:f5d8de11c2e2
1597 changeset: 3:f5d8de11c2e2
1590 branch: test
1598 branch: test
1591 tag: tip
1599 tag: tip
1592 parent: 1:d32277701ccb
1600 parent: 1:d32277701ccb
1593 user: test
1601 user: test
1594 date: Thu Jan 01 00:00:00 1970 +0000
1602 date: Thu Jan 01 00:00:00 1970 +0000
1595 summary: commit on test
1603 summary: commit on test
1596
1604
1597 changeset: 1:d32277701ccb
1605 changeset: 1:d32277701ccb
1598 branch: test
1606 branch: test
1599 user: test
1607 user: test
1600 date: Thu Jan 01 00:00:00 1970 +0000
1608 date: Thu Jan 01 00:00:00 1970 +0000
1601 summary: commit on test
1609 summary: commit on test
1602
1610
1603
1611
1604
1612
1605 log -b 2
1613 log -b 2
1606
1614
1607 $ hg log -b 2
1615 $ hg log -b 2
1608 changeset: 2:c3a4f03cc9a7
1616 changeset: 2:c3a4f03cc9a7
1609 parent: 0:24427303d56f
1617 parent: 0:24427303d56f
1610 user: test
1618 user: test
1611 date: Thu Jan 01 00:00:00 1970 +0000
1619 date: Thu Jan 01 00:00:00 1970 +0000
1612 summary: commit on default
1620 summary: commit on default
1613
1621
1614 changeset: 0:24427303d56f
1622 changeset: 0:24427303d56f
1615 user: test
1623 user: test
1616 date: Thu Jan 01 00:00:00 1970 +0000
1624 date: Thu Jan 01 00:00:00 1970 +0000
1617 summary: commit on default
1625 summary: commit on default
1618
1626
1619 #if gettext
1627 #if gettext
1620
1628
1621 Test that all log names are translated (e.g. branches, bookmarks, tags):
1629 Test that all log names are translated (e.g. branches, bookmarks, tags):
1622
1630
1623 $ hg bookmark babar -r tip
1631 $ hg bookmark babar -r tip
1624
1632
1625 $ HGENCODING=UTF-8 LANGUAGE=de hg log -r tip
1633 $ HGENCODING=UTF-8 LANGUAGE=de hg log -r tip
1626 \xc3\x84nderung: 3:f5d8de11c2e2 (esc)
1634 \xc3\x84nderung: 3:f5d8de11c2e2 (esc)
1627 Zweig: test
1635 Zweig: test
1628 Lesezeichen: babar
1636 Lesezeichen: babar
1629 Marke: tip
1637 Marke: tip
1630 Vorg\xc3\xa4nger: 1:d32277701ccb (esc)
1638 Vorg\xc3\xa4nger: 1:d32277701ccb (esc)
1631 Nutzer: test
1639 Nutzer: test
1632 Datum: Thu Jan 01 00:00:00 1970 +0000
1640 Datum: Thu Jan 01 00:00:00 1970 +0000
1633 Zusammenfassung: commit on test
1641 Zusammenfassung: commit on test
1634
1642
1635 $ hg bookmark -d babar
1643 $ hg bookmark -d babar
1636
1644
1637 #endif
1645 #endif
1638
1646
1639 log -p --cwd dir (in subdir)
1647 log -p --cwd dir (in subdir)
1640
1648
1641 $ mkdir dir
1649 $ mkdir dir
1642 $ hg log -p --cwd dir
1650 $ hg log -p --cwd dir
1643 changeset: 3:f5d8de11c2e2
1651 changeset: 3:f5d8de11c2e2
1644 branch: test
1652 branch: test
1645 tag: tip
1653 tag: tip
1646 parent: 1:d32277701ccb
1654 parent: 1:d32277701ccb
1647 user: test
1655 user: test
1648 date: Thu Jan 01 00:00:00 1970 +0000
1656 date: Thu Jan 01 00:00:00 1970 +0000
1649 summary: commit on test
1657 summary: commit on test
1650
1658
1651 diff -r d32277701ccb -r f5d8de11c2e2 c
1659 diff -r d32277701ccb -r f5d8de11c2e2 c
1652 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1660 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1653 +++ b/c Thu Jan 01 00:00:00 1970 +0000
1661 +++ b/c Thu Jan 01 00:00:00 1970 +0000
1654 @@ -0,0 +1,1 @@
1662 @@ -0,0 +1,1 @@
1655 +c
1663 +c
1656
1664
1657 changeset: 2:c3a4f03cc9a7
1665 changeset: 2:c3a4f03cc9a7
1658 parent: 0:24427303d56f
1666 parent: 0:24427303d56f
1659 user: test
1667 user: test
1660 date: Thu Jan 01 00:00:00 1970 +0000
1668 date: Thu Jan 01 00:00:00 1970 +0000
1661 summary: commit on default
1669 summary: commit on default
1662
1670
1663 diff -r 24427303d56f -r c3a4f03cc9a7 c
1671 diff -r 24427303d56f -r c3a4f03cc9a7 c
1664 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1672 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1665 +++ b/c Thu Jan 01 00:00:00 1970 +0000
1673 +++ b/c Thu Jan 01 00:00:00 1970 +0000
1666 @@ -0,0 +1,1 @@
1674 @@ -0,0 +1,1 @@
1667 +c
1675 +c
1668
1676
1669 changeset: 1:d32277701ccb
1677 changeset: 1:d32277701ccb
1670 branch: test
1678 branch: test
1671 user: test
1679 user: test
1672 date: Thu Jan 01 00:00:00 1970 +0000
1680 date: Thu Jan 01 00:00:00 1970 +0000
1673 summary: commit on test
1681 summary: commit on test
1674
1682
1675 diff -r 24427303d56f -r d32277701ccb b
1683 diff -r 24427303d56f -r d32277701ccb b
1676 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1684 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1677 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1685 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1678 @@ -0,0 +1,1 @@
1686 @@ -0,0 +1,1 @@
1679 +b
1687 +b
1680
1688
1681 changeset: 0:24427303d56f
1689 changeset: 0:24427303d56f
1682 user: test
1690 user: test
1683 date: Thu Jan 01 00:00:00 1970 +0000
1691 date: Thu Jan 01 00:00:00 1970 +0000
1684 summary: commit on default
1692 summary: commit on default
1685
1693
1686 diff -r 000000000000 -r 24427303d56f a
1694 diff -r 000000000000 -r 24427303d56f a
1687 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1695 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1688 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1696 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1689 @@ -0,0 +1,1 @@
1697 @@ -0,0 +1,1 @@
1690 +a
1698 +a
1691
1699
1692
1700
1693
1701
1694 log -p -R repo
1702 log -p -R repo
1695
1703
1696 $ cd dir
1704 $ cd dir
1697 $ hg log -p -R .. ../a
1705 $ hg log -p -R .. ../a
1698 changeset: 0:24427303d56f
1706 changeset: 0:24427303d56f
1699 user: test
1707 user: test
1700 date: Thu Jan 01 00:00:00 1970 +0000
1708 date: Thu Jan 01 00:00:00 1970 +0000
1701 summary: commit on default
1709 summary: commit on default
1702
1710
1703 diff -r 000000000000 -r 24427303d56f a
1711 diff -r 000000000000 -r 24427303d56f a
1704 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1712 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1705 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1713 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1706 @@ -0,0 +1,1 @@
1714 @@ -0,0 +1,1 @@
1707 +a
1715 +a
1708
1716
1709
1717
1710 $ cd ../..
1718 $ cd ../..
1711
1719
1712 $ hg init follow2
1720 $ hg init follow2
1713 $ cd follow2
1721 $ cd follow2
1714
1722
1715 # Build the following history:
1723 # Build the following history:
1716 # tip - o - x - o - x - x
1724 # tip - o - x - o - x - x
1717 # \ /
1725 # \ /
1718 # o - o - o - x
1726 # o - o - o - x
1719 # \ /
1727 # \ /
1720 # o
1728 # o
1721 #
1729 #
1722 # Where "o" is a revision containing "foo" and
1730 # Where "o" is a revision containing "foo" and
1723 # "x" is a revision without "foo"
1731 # "x" is a revision without "foo"
1724
1732
1725 $ touch init
1733 $ touch init
1726 $ hg ci -A -m "init, unrelated"
1734 $ hg ci -A -m "init, unrelated"
1727 adding init
1735 adding init
1728 $ echo 'foo' > init
1736 $ echo 'foo' > init
1729 $ hg ci -m "change, unrelated"
1737 $ hg ci -m "change, unrelated"
1730 $ echo 'foo' > foo
1738 $ echo 'foo' > foo
1731 $ hg ci -A -m "add unrelated old foo"
1739 $ hg ci -A -m "add unrelated old foo"
1732 adding foo
1740 adding foo
1733 $ hg rm foo
1741 $ hg rm foo
1734 $ hg ci -m "delete foo, unrelated"
1742 $ hg ci -m "delete foo, unrelated"
1735 $ echo 'related' > foo
1743 $ echo 'related' > foo
1736 $ hg ci -A -m "add foo, related"
1744 $ hg ci -A -m "add foo, related"
1737 adding foo
1745 adding foo
1738
1746
1739 $ hg up 0
1747 $ hg up 0
1740 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1748 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1741 $ touch branch
1749 $ touch branch
1742 $ hg ci -A -m "first branch, unrelated"
1750 $ hg ci -A -m "first branch, unrelated"
1743 adding branch
1751 adding branch
1744 created new head
1752 created new head
1745 $ touch foo
1753 $ touch foo
1746 $ hg ci -A -m "create foo, related"
1754 $ hg ci -A -m "create foo, related"
1747 adding foo
1755 adding foo
1748 $ echo 'change' > foo
1756 $ echo 'change' > foo
1749 $ hg ci -m "change foo, related"
1757 $ hg ci -m "change foo, related"
1750
1758
1751 $ hg up 6
1759 $ hg up 6
1752 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1760 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1753 $ echo 'change foo in branch' > foo
1761 $ echo 'change foo in branch' > foo
1754 $ hg ci -m "change foo in branch, related"
1762 $ hg ci -m "change foo in branch, related"
1755 created new head
1763 created new head
1756 $ hg merge 7
1764 $ hg merge 7
1757 merging foo
1765 merging foo
1758 warning: conflicts while merging foo! (edit, then use 'hg resolve --mark')
1766 warning: conflicts while merging foo! (edit, then use 'hg resolve --mark')
1759 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
1767 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
1760 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
1768 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
1761 [1]
1769 [1]
1762 $ echo 'merge 1' > foo
1770 $ echo 'merge 1' > foo
1763 $ hg resolve -m foo
1771 $ hg resolve -m foo
1764 (no more unresolved files)
1772 (no more unresolved files)
1765 $ hg ci -m "First merge, related"
1773 $ hg ci -m "First merge, related"
1766
1774
1767 $ hg merge 4
1775 $ hg merge 4
1768 merging foo
1776 merging foo
1769 warning: conflicts while merging foo! (edit, then use 'hg resolve --mark')
1777 warning: conflicts while merging foo! (edit, then use 'hg resolve --mark')
1770 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
1778 1 files updated, 0 files merged, 0 files removed, 1 files unresolved
1771 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
1779 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
1772 [1]
1780 [1]
1773 $ echo 'merge 2' > foo
1781 $ echo 'merge 2' > foo
1774 $ hg resolve -m foo
1782 $ hg resolve -m foo
1775 (no more unresolved files)
1783 (no more unresolved files)
1776 $ hg ci -m "Last merge, related"
1784 $ hg ci -m "Last merge, related"
1777
1785
1778 $ hg log --graph
1786 $ hg log --graph
1779 @ changeset: 10:4dae8563d2c5
1787 @ changeset: 10:4dae8563d2c5
1780 |\ tag: tip
1788 |\ tag: tip
1781 | | parent: 9:7b35701b003e
1789 | | parent: 9:7b35701b003e
1782 | | parent: 4:88176d361b69
1790 | | parent: 4:88176d361b69
1783 | | user: test
1791 | | user: test
1784 | | date: Thu Jan 01 00:00:00 1970 +0000
1792 | | date: Thu Jan 01 00:00:00 1970 +0000
1785 | | summary: Last merge, related
1793 | | summary: Last merge, related
1786 | |
1794 | |
1787 | o changeset: 9:7b35701b003e
1795 | o changeset: 9:7b35701b003e
1788 | |\ parent: 8:e5416ad8a855
1796 | |\ parent: 8:e5416ad8a855
1789 | | | parent: 7:87fe3144dcfa
1797 | | | parent: 7:87fe3144dcfa
1790 | | | user: test
1798 | | | user: test
1791 | | | date: Thu Jan 01 00:00:00 1970 +0000
1799 | | | date: Thu Jan 01 00:00:00 1970 +0000
1792 | | | summary: First merge, related
1800 | | | summary: First merge, related
1793 | | |
1801 | | |
1794 | | o changeset: 8:e5416ad8a855
1802 | | o changeset: 8:e5416ad8a855
1795 | | | parent: 6:dc6c325fe5ee
1803 | | | parent: 6:dc6c325fe5ee
1796 | | | user: test
1804 | | | user: test
1797 | | | date: Thu Jan 01 00:00:00 1970 +0000
1805 | | | date: Thu Jan 01 00:00:00 1970 +0000
1798 | | | summary: change foo in branch, related
1806 | | | summary: change foo in branch, related
1799 | | |
1807 | | |
1800 | o | changeset: 7:87fe3144dcfa
1808 | o | changeset: 7:87fe3144dcfa
1801 | |/ user: test
1809 | |/ user: test
1802 | | date: Thu Jan 01 00:00:00 1970 +0000
1810 | | date: Thu Jan 01 00:00:00 1970 +0000
1803 | | summary: change foo, related
1811 | | summary: change foo, related
1804 | |
1812 | |
1805 | o changeset: 6:dc6c325fe5ee
1813 | o changeset: 6:dc6c325fe5ee
1806 | | user: test
1814 | | user: test
1807 | | date: Thu Jan 01 00:00:00 1970 +0000
1815 | | date: Thu Jan 01 00:00:00 1970 +0000
1808 | | summary: create foo, related
1816 | | summary: create foo, related
1809 | |
1817 | |
1810 | o changeset: 5:73db34516eb9
1818 | o changeset: 5:73db34516eb9
1811 | | parent: 0:e87515fd044a
1819 | | parent: 0:e87515fd044a
1812 | | user: test
1820 | | user: test
1813 | | date: Thu Jan 01 00:00:00 1970 +0000
1821 | | date: Thu Jan 01 00:00:00 1970 +0000
1814 | | summary: first branch, unrelated
1822 | | summary: first branch, unrelated
1815 | |
1823 | |
1816 o | changeset: 4:88176d361b69
1824 o | changeset: 4:88176d361b69
1817 | | user: test
1825 | | user: test
1818 | | date: Thu Jan 01 00:00:00 1970 +0000
1826 | | date: Thu Jan 01 00:00:00 1970 +0000
1819 | | summary: add foo, related
1827 | | summary: add foo, related
1820 | |
1828 | |
1821 o | changeset: 3:dd78ae4afb56
1829 o | changeset: 3:dd78ae4afb56
1822 | | user: test
1830 | | user: test
1823 | | date: Thu Jan 01 00:00:00 1970 +0000
1831 | | date: Thu Jan 01 00:00:00 1970 +0000
1824 | | summary: delete foo, unrelated
1832 | | summary: delete foo, unrelated
1825 | |
1833 | |
1826 o | changeset: 2:c4c64aedf0f7
1834 o | changeset: 2:c4c64aedf0f7
1827 | | user: test
1835 | | user: test
1828 | | date: Thu Jan 01 00:00:00 1970 +0000
1836 | | date: Thu Jan 01 00:00:00 1970 +0000
1829 | | summary: add unrelated old foo
1837 | | summary: add unrelated old foo
1830 | |
1838 | |
1831 o | changeset: 1:e5faa7440653
1839 o | changeset: 1:e5faa7440653
1832 |/ user: test
1840 |/ user: test
1833 | date: Thu Jan 01 00:00:00 1970 +0000
1841 | date: Thu Jan 01 00:00:00 1970 +0000
1834 | summary: change, unrelated
1842 | summary: change, unrelated
1835 |
1843 |
1836 o changeset: 0:e87515fd044a
1844 o changeset: 0:e87515fd044a
1837 user: test
1845 user: test
1838 date: Thu Jan 01 00:00:00 1970 +0000
1846 date: Thu Jan 01 00:00:00 1970 +0000
1839 summary: init, unrelated
1847 summary: init, unrelated
1840
1848
1841
1849
1842 $ hg --traceback log -f foo
1850 $ hg --traceback log -f foo
1843 changeset: 10:4dae8563d2c5
1851 changeset: 10:4dae8563d2c5
1844 tag: tip
1852 tag: tip
1845 parent: 9:7b35701b003e
1853 parent: 9:7b35701b003e
1846 parent: 4:88176d361b69
1854 parent: 4:88176d361b69
1847 user: test
1855 user: test
1848 date: Thu Jan 01 00:00:00 1970 +0000
1856 date: Thu Jan 01 00:00:00 1970 +0000
1849 summary: Last merge, related
1857 summary: Last merge, related
1850
1858
1851 changeset: 9:7b35701b003e
1859 changeset: 9:7b35701b003e
1852 parent: 8:e5416ad8a855
1860 parent: 8:e5416ad8a855
1853 parent: 7:87fe3144dcfa
1861 parent: 7:87fe3144dcfa
1854 user: test
1862 user: test
1855 date: Thu Jan 01 00:00:00 1970 +0000
1863 date: Thu Jan 01 00:00:00 1970 +0000
1856 summary: First merge, related
1864 summary: First merge, related
1857
1865
1858 changeset: 8:e5416ad8a855
1866 changeset: 8:e5416ad8a855
1859 parent: 6:dc6c325fe5ee
1867 parent: 6:dc6c325fe5ee
1860 user: test
1868 user: test
1861 date: Thu Jan 01 00:00:00 1970 +0000
1869 date: Thu Jan 01 00:00:00 1970 +0000
1862 summary: change foo in branch, related
1870 summary: change foo in branch, related
1863
1871
1864 changeset: 7:87fe3144dcfa
1872 changeset: 7:87fe3144dcfa
1865 user: test
1873 user: test
1866 date: Thu Jan 01 00:00:00 1970 +0000
1874 date: Thu Jan 01 00:00:00 1970 +0000
1867 summary: change foo, related
1875 summary: change foo, related
1868
1876
1869 changeset: 6:dc6c325fe5ee
1877 changeset: 6:dc6c325fe5ee
1870 user: test
1878 user: test
1871 date: Thu Jan 01 00:00:00 1970 +0000
1879 date: Thu Jan 01 00:00:00 1970 +0000
1872 summary: create foo, related
1880 summary: create foo, related
1873
1881
1874 changeset: 4:88176d361b69
1882 changeset: 4:88176d361b69
1875 user: test
1883 user: test
1876 date: Thu Jan 01 00:00:00 1970 +0000
1884 date: Thu Jan 01 00:00:00 1970 +0000
1877 summary: add foo, related
1885 summary: add foo, related
1878
1886
1879
1887
1880 Also check when maxrev < lastrevfilelog
1888 Also check when maxrev < lastrevfilelog
1881
1889
1882 $ hg --traceback log -f -r4 foo
1890 $ hg --traceback log -f -r4 foo
1883 changeset: 4:88176d361b69
1891 changeset: 4:88176d361b69
1884 user: test
1892 user: test
1885 date: Thu Jan 01 00:00:00 1970 +0000
1893 date: Thu Jan 01 00:00:00 1970 +0000
1886 summary: add foo, related
1894 summary: add foo, related
1887
1895
1888 $ cd ..
1896 $ cd ..
1889
1897
1890 Issue2383: hg log showing _less_ differences than hg diff
1898 Issue2383: hg log showing _less_ differences than hg diff
1891
1899
1892 $ hg init issue2383
1900 $ hg init issue2383
1893 $ cd issue2383
1901 $ cd issue2383
1894
1902
1895 Create a test repo:
1903 Create a test repo:
1896
1904
1897 $ echo a > a
1905 $ echo a > a
1898 $ hg ci -Am0
1906 $ hg ci -Am0
1899 adding a
1907 adding a
1900 $ echo b > b
1908 $ echo b > b
1901 $ hg ci -Am1
1909 $ hg ci -Am1
1902 adding b
1910 adding b
1903 $ hg co 0
1911 $ hg co 0
1904 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1912 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1905 $ echo b > a
1913 $ echo b > a
1906 $ hg ci -m2
1914 $ hg ci -m2
1907 created new head
1915 created new head
1908
1916
1909 Merge:
1917 Merge:
1910
1918
1911 $ hg merge
1919 $ hg merge
1912 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1920 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1913 (branch merge, don't forget to commit)
1921 (branch merge, don't forget to commit)
1914
1922
1915 Make sure there's a file listed in the merge to trigger the bug:
1923 Make sure there's a file listed in the merge to trigger the bug:
1916
1924
1917 $ echo c > a
1925 $ echo c > a
1918 $ hg ci -m3
1926 $ hg ci -m3
1919
1927
1920 Two files shown here in diff:
1928 Two files shown here in diff:
1921
1929
1922 $ hg diff --rev 2:3
1930 $ hg diff --rev 2:3
1923 diff -r b09be438c43a -r 8e07aafe1edc a
1931 diff -r b09be438c43a -r 8e07aafe1edc a
1924 --- a/a Thu Jan 01 00:00:00 1970 +0000
1932 --- a/a Thu Jan 01 00:00:00 1970 +0000
1925 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1933 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1926 @@ -1,1 +1,1 @@
1934 @@ -1,1 +1,1 @@
1927 -b
1935 -b
1928 +c
1936 +c
1929 diff -r b09be438c43a -r 8e07aafe1edc b
1937 diff -r b09be438c43a -r 8e07aafe1edc b
1930 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1938 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1931 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1939 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1932 @@ -0,0 +1,1 @@
1940 @@ -0,0 +1,1 @@
1933 +b
1941 +b
1934
1942
1935 Diff here should be the same:
1943 Diff here should be the same:
1936
1944
1937 $ hg log -vpr 3
1945 $ hg log -vpr 3
1938 changeset: 3:8e07aafe1edc
1946 changeset: 3:8e07aafe1edc
1939 tag: tip
1947 tag: tip
1940 parent: 2:b09be438c43a
1948 parent: 2:b09be438c43a
1941 parent: 1:925d80f479bb
1949 parent: 1:925d80f479bb
1942 user: test
1950 user: test
1943 date: Thu Jan 01 00:00:00 1970 +0000
1951 date: Thu Jan 01 00:00:00 1970 +0000
1944 files: a
1952 files: a
1945 description:
1953 description:
1946 3
1954 3
1947
1955
1948
1956
1949 diff -r b09be438c43a -r 8e07aafe1edc a
1957 diff -r b09be438c43a -r 8e07aafe1edc a
1950 --- a/a Thu Jan 01 00:00:00 1970 +0000
1958 --- a/a Thu Jan 01 00:00:00 1970 +0000
1951 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1959 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1952 @@ -1,1 +1,1 @@
1960 @@ -1,1 +1,1 @@
1953 -b
1961 -b
1954 +c
1962 +c
1955 diff -r b09be438c43a -r 8e07aafe1edc b
1963 diff -r b09be438c43a -r 8e07aafe1edc b
1956 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1964 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1957 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1965 +++ b/b Thu Jan 01 00:00:00 1970 +0000
1958 @@ -0,0 +1,1 @@
1966 @@ -0,0 +1,1 @@
1959 +b
1967 +b
1960
1968
1961 $ cd ..
1969 $ cd ..
1962
1970
1963 'hg log -r rev fn' when last(filelog(fn)) != rev
1971 'hg log -r rev fn' when last(filelog(fn)) != rev
1964
1972
1965 $ hg init simplelog
1973 $ hg init simplelog
1966 $ cd simplelog
1974 $ cd simplelog
1967 $ echo f > a
1975 $ echo f > a
1968 $ hg ci -Am'a' -d '0 0'
1976 $ hg ci -Am'a' -d '0 0'
1969 adding a
1977 adding a
1970 $ echo f >> a
1978 $ echo f >> a
1971 $ hg ci -Am'a bis' -d '1 0'
1979 $ hg ci -Am'a bis' -d '1 0'
1972
1980
1973 $ hg log -r0 a
1981 $ hg log -r0 a
1974 changeset: 0:9f758d63dcde
1982 changeset: 0:9f758d63dcde
1975 user: test
1983 user: test
1976 date: Thu Jan 01 00:00:00 1970 +0000
1984 date: Thu Jan 01 00:00:00 1970 +0000
1977 summary: a
1985 summary: a
1978
1986
1979 enable obsolete to test hidden feature
1987 enable obsolete to test hidden feature
1980
1988
1981 $ cat >> $HGRCPATH << EOF
1989 $ cat >> $HGRCPATH << EOF
1982 > [experimental]
1990 > [experimental]
1983 > evolution.createmarkers=True
1991 > evolution.createmarkers=True
1984 > EOF
1992 > EOF
1985
1993
1986 $ hg log --template='{rev}:{node}\n'
1994 $ hg log --template='{rev}:{node}\n'
1987 1:a765632148dc55d38c35c4f247c618701886cb2f
1995 1:a765632148dc55d38c35c4f247c618701886cb2f
1988 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
1996 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
1989 $ hg debugobsolete a765632148dc55d38c35c4f247c618701886cb2f
1997 $ hg debugobsolete a765632148dc55d38c35c4f247c618701886cb2f
1990 1 new obsolescence markers
1998 1 new obsolescence markers
1991 obsoleted 1 changesets
1999 obsoleted 1 changesets
1992 $ hg up null -q
2000 $ hg up null -q
1993 $ hg log --template='{rev}:{node}\n'
2001 $ hg log --template='{rev}:{node}\n'
1994 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2002 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
1995 $ hg log --template='{rev}:{node}\n' --hidden
2003 $ hg log --template='{rev}:{node}\n' --hidden
1996 1:a765632148dc55d38c35c4f247c618701886cb2f
2004 1:a765632148dc55d38c35c4f247c618701886cb2f
1997 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2005 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
1998 $ hg log -r a
2006 $ hg log -r a
1999 abort: hidden revision 'a' is pruned
2007 abort: hidden revision 'a' is pruned
2000 (use --hidden to access hidden revisions)
2008 (use --hidden to access hidden revisions)
2001 [255]
2009 [255]
2002
2010
2003 test that parent prevent a changeset to be hidden
2011 test that parent prevent a changeset to be hidden
2004
2012
2005 $ hg up 1 -q --hidden
2013 $ hg up 1 -q --hidden
2006 updated to hidden changeset a765632148dc
2014 updated to hidden changeset a765632148dc
2007 (hidden revision 'a765632148dc' is pruned)
2015 (hidden revision 'a765632148dc' is pruned)
2008 $ hg log --template='{rev}:{node}\n'
2016 $ hg log --template='{rev}:{node}\n'
2009 1:a765632148dc55d38c35c4f247c618701886cb2f
2017 1:a765632148dc55d38c35c4f247c618701886cb2f
2010 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2018 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2011
2019
2012 test that second parent prevent a changeset to be hidden too
2020 test that second parent prevent a changeset to be hidden too
2013
2021
2014 $ hg debugsetparents 0 1 # nothing suitable to merge here
2022 $ hg debugsetparents 0 1 # nothing suitable to merge here
2015 $ hg log --template='{rev}:{node}\n'
2023 $ hg log --template='{rev}:{node}\n'
2016 1:a765632148dc55d38c35c4f247c618701886cb2f
2024 1:a765632148dc55d38c35c4f247c618701886cb2f
2017 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2025 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2018 $ hg debugsetparents 1
2026 $ hg debugsetparents 1
2019 $ hg up -q null
2027 $ hg up -q null
2020
2028
2021 bookmarks prevent a changeset being hidden
2029 bookmarks prevent a changeset being hidden
2022
2030
2023 $ hg bookmark --hidden -r 1 X
2031 $ hg bookmark --hidden -r 1 X
2024 bookmarking hidden changeset a765632148dc
2032 bookmarking hidden changeset a765632148dc
2025 (hidden revision 'a765632148dc' is pruned)
2033 (hidden revision 'a765632148dc' is pruned)
2026 $ hg log --template '{rev}:{node}\n'
2034 $ hg log --template '{rev}:{node}\n'
2027 1:a765632148dc55d38c35c4f247c618701886cb2f
2035 1:a765632148dc55d38c35c4f247c618701886cb2f
2028 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2036 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2029 $ hg bookmark -d X
2037 $ hg bookmark -d X
2030
2038
2031 divergent bookmarks are not hidden
2039 divergent bookmarks are not hidden
2032
2040
2033 $ hg bookmark --hidden -r 1 X@foo
2041 $ hg bookmark --hidden -r 1 X@foo
2034 bookmarking hidden changeset a765632148dc
2042 bookmarking hidden changeset a765632148dc
2035 (hidden revision 'a765632148dc' is pruned)
2043 (hidden revision 'a765632148dc' is pruned)
2036 $ hg log --template '{rev}:{node}\n'
2044 $ hg log --template '{rev}:{node}\n'
2037 1:a765632148dc55d38c35c4f247c618701886cb2f
2045 1:a765632148dc55d38c35c4f247c618701886cb2f
2038 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2046 0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2039
2047
2040 test hidden revision 0 (issue5385)
2048 test hidden revision 0 (issue5385)
2041
2049
2042 $ hg bookmark -d X@foo
2050 $ hg bookmark -d X@foo
2043 $ hg up null -q
2051 $ hg up null -q
2044 $ hg debugobsolete 9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2052 $ hg debugobsolete 9f758d63dcde62d547ebfb08e1e7ee96535f2b05
2045 1 new obsolescence markers
2053 1 new obsolescence markers
2046 obsoleted 1 changesets
2054 obsoleted 1 changesets
2047 $ echo f > b
2055 $ echo f > b
2048 $ hg ci -Am'b' -d '2 0'
2056 $ hg ci -Am'b' -d '2 0'
2049 adding b
2057 adding b
2050 $ echo f >> b
2058 $ echo f >> b
2051 $ hg ci -m'b bis' -d '3 0'
2059 $ hg ci -m'b bis' -d '3 0'
2052 $ hg log -T'{rev}:{node}\n'
2060 $ hg log -T'{rev}:{node}\n'
2053 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2061 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2054 2:94375ec45bddd2a824535fc04855bd058c926ec0
2062 2:94375ec45bddd2a824535fc04855bd058c926ec0
2055
2063
2056 $ hg log -T'{rev}:{node}\n' -r:
2064 $ hg log -T'{rev}:{node}\n' -r:
2057 2:94375ec45bddd2a824535fc04855bd058c926ec0
2065 2:94375ec45bddd2a824535fc04855bd058c926ec0
2058 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2066 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2059 $ hg log -T'{rev}:{node}\n' -r:tip
2067 $ hg log -T'{rev}:{node}\n' -r:tip
2060 2:94375ec45bddd2a824535fc04855bd058c926ec0
2068 2:94375ec45bddd2a824535fc04855bd058c926ec0
2061 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2069 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2062 $ hg log -T'{rev}:{node}\n' -r:0
2070 $ hg log -T'{rev}:{node}\n' -r:0
2063 abort: hidden revision '0' is pruned
2071 abort: hidden revision '0' is pruned
2064 (use --hidden to access hidden revisions)
2072 (use --hidden to access hidden revisions)
2065 [255]
2073 [255]
2066 $ hg log -T'{rev}:{node}\n' -f
2074 $ hg log -T'{rev}:{node}\n' -f
2067 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2075 3:d7d28b288a6b83d5d2cf49f10c5974deed3a1d2e
2068 2:94375ec45bddd2a824535fc04855bd058c926ec0
2076 2:94375ec45bddd2a824535fc04855bd058c926ec0
2069
2077
2070 clear extensions configuration
2078 clear extensions configuration
2071 $ echo '[extensions]' >> $HGRCPATH
2079 $ echo '[extensions]' >> $HGRCPATH
2072 $ echo "obs=!" >> $HGRCPATH
2080 $ echo "obs=!" >> $HGRCPATH
2073 $ cd ..
2081 $ cd ..
2074
2082
2075 test -u/-k for problematic encoding
2083 test -u/-k for problematic encoding
2076 # unicode: cp932:
2084 # unicode: cp932:
2077 # u30A2 0x83 0x41(= 'A')
2085 # u30A2 0x83 0x41(= 'A')
2078 # u30C2 0x83 0x61(= 'a')
2086 # u30C2 0x83 0x61(= 'a')
2079
2087
2080 $ hg init problematicencoding
2088 $ hg init problematicencoding
2081 $ cd problematicencoding
2089 $ cd problematicencoding
2082
2090
2083 >>> with open('setup.sh', 'wb') as f:
2091 >>> with open('setup.sh', 'wb') as f:
2084 ... f.write(u'''
2092 ... f.write(u'''
2085 ... echo a > text
2093 ... echo a > text
2086 ... hg add text
2094 ... hg add text
2087 ... hg --encoding utf-8 commit -u '\u30A2' -m none
2095 ... hg --encoding utf-8 commit -u '\u30A2' -m none
2088 ... echo b > text
2096 ... echo b > text
2089 ... hg --encoding utf-8 commit -u '\u30C2' -m none
2097 ... hg --encoding utf-8 commit -u '\u30C2' -m none
2090 ... echo c > text
2098 ... echo c > text
2091 ... hg --encoding utf-8 commit -u none -m '\u30A2'
2099 ... hg --encoding utf-8 commit -u none -m '\u30A2'
2092 ... echo d > text
2100 ... echo d > text
2093 ... hg --encoding utf-8 commit -u none -m '\u30C2'
2101 ... hg --encoding utf-8 commit -u none -m '\u30C2'
2094 ... '''.encode('utf-8')) and None
2102 ... '''.encode('utf-8')) and None
2095 $ sh < setup.sh
2103 $ sh < setup.sh
2096
2104
2097 test in problematic encoding
2105 test in problematic encoding
2098 >>> with open('test.sh', 'wb') as f:
2106 >>> with open('test.sh', 'wb') as f:
2099 ... f.write(u'''
2107 ... f.write(u'''
2100 ... hg --encoding cp932 log --template '{rev}\\n' -u '\u30A2'
2108 ... hg --encoding cp932 log --template '{rev}\\n' -u '\u30A2'
2101 ... echo ====
2109 ... echo ====
2102 ... hg --encoding cp932 log --template '{rev}\\n' -u '\u30C2'
2110 ... hg --encoding cp932 log --template '{rev}\\n' -u '\u30C2'
2103 ... echo ====
2111 ... echo ====
2104 ... hg --encoding cp932 log --template '{rev}\\n' -k '\u30A2'
2112 ... hg --encoding cp932 log --template '{rev}\\n' -k '\u30A2'
2105 ... echo ====
2113 ... echo ====
2106 ... hg --encoding cp932 log --template '{rev}\\n' -k '\u30C2'
2114 ... hg --encoding cp932 log --template '{rev}\\n' -k '\u30C2'
2107 ... '''.encode('cp932')) and None
2115 ... '''.encode('cp932')) and None
2108 $ sh < test.sh
2116 $ sh < test.sh
2109 0
2117 0
2110 ====
2118 ====
2111 1
2119 1
2112 ====
2120 ====
2113 2
2121 2
2114 0
2122 0
2115 ====
2123 ====
2116 3
2124 3
2117 1
2125 1
2118
2126
2119 $ cd ..
2127 $ cd ..
2120
2128
2121 test hg log on non-existent files and on directories
2129 test hg log on non-existent files and on directories
2122 $ hg init issue1340
2130 $ hg init issue1340
2123 $ cd issue1340
2131 $ cd issue1340
2124 $ mkdir d1; mkdir D2; mkdir D3.i; mkdir d4.hg; mkdir d5.d; mkdir .d6
2132 $ mkdir d1; mkdir D2; mkdir D3.i; mkdir d4.hg; mkdir d5.d; mkdir .d6
2125 $ echo 1 > d1/f1
2133 $ echo 1 > d1/f1
2126 $ echo 1 > D2/f1
2134 $ echo 1 > D2/f1
2127 $ echo 1 > D3.i/f1
2135 $ echo 1 > D3.i/f1
2128 $ echo 1 > d4.hg/f1
2136 $ echo 1 > d4.hg/f1
2129 $ echo 1 > d5.d/f1
2137 $ echo 1 > d5.d/f1
2130 $ echo 1 > .d6/f1
2138 $ echo 1 > .d6/f1
2131 $ hg -q add .
2139 $ hg -q add .
2132 $ hg commit -m "a bunch of weird directories"
2140 $ hg commit -m "a bunch of weird directories"
2133 $ hg log -l1 d1/f1 | grep changeset
2141 $ hg log -l1 d1/f1 | grep changeset
2134 changeset: 0:65624cd9070a
2142 changeset: 0:65624cd9070a
2135 $ hg log -l1 f1
2143 $ hg log -l1 f1
2136 $ hg log -l1 . | grep changeset
2144 $ hg log -l1 . | grep changeset
2137 changeset: 0:65624cd9070a
2145 changeset: 0:65624cd9070a
2138 $ hg log -l1 ./ | grep changeset
2146 $ hg log -l1 ./ | grep changeset
2139 changeset: 0:65624cd9070a
2147 changeset: 0:65624cd9070a
2140 $ hg log -l1 d1 | grep changeset
2148 $ hg log -l1 d1 | grep changeset
2141 changeset: 0:65624cd9070a
2149 changeset: 0:65624cd9070a
2142 $ hg log -l1 D2 | grep changeset
2150 $ hg log -l1 D2 | grep changeset
2143 changeset: 0:65624cd9070a
2151 changeset: 0:65624cd9070a
2144 $ hg log -l1 D2/f1 | grep changeset
2152 $ hg log -l1 D2/f1 | grep changeset
2145 changeset: 0:65624cd9070a
2153 changeset: 0:65624cd9070a
2146 $ hg log -l1 D3.i | grep changeset
2154 $ hg log -l1 D3.i | grep changeset
2147 changeset: 0:65624cd9070a
2155 changeset: 0:65624cd9070a
2148 $ hg log -l1 D3.i/f1 | grep changeset
2156 $ hg log -l1 D3.i/f1 | grep changeset
2149 changeset: 0:65624cd9070a
2157 changeset: 0:65624cd9070a
2150 $ hg log -l1 d4.hg | grep changeset
2158 $ hg log -l1 d4.hg | grep changeset
2151 changeset: 0:65624cd9070a
2159 changeset: 0:65624cd9070a
2152 $ hg log -l1 d4.hg/f1 | grep changeset
2160 $ hg log -l1 d4.hg/f1 | grep changeset
2153 changeset: 0:65624cd9070a
2161 changeset: 0:65624cd9070a
2154 $ hg log -l1 d5.d | grep changeset
2162 $ hg log -l1 d5.d | grep changeset
2155 changeset: 0:65624cd9070a
2163 changeset: 0:65624cd9070a
2156 $ hg log -l1 d5.d/f1 | grep changeset
2164 $ hg log -l1 d5.d/f1 | grep changeset
2157 changeset: 0:65624cd9070a
2165 changeset: 0:65624cd9070a
2158 $ hg log -l1 .d6 | grep changeset
2166 $ hg log -l1 .d6 | grep changeset
2159 changeset: 0:65624cd9070a
2167 changeset: 0:65624cd9070a
2160 $ hg log -l1 .d6/f1 | grep changeset
2168 $ hg log -l1 .d6/f1 | grep changeset
2161 changeset: 0:65624cd9070a
2169 changeset: 0:65624cd9070a
2162
2170
2163 issue3772: hg log -r :null showing revision 0 as well
2171 issue3772: hg log -r :null showing revision 0 as well
2164
2172
2165 $ hg log -r :null
2173 $ hg log -r :null
2166 changeset: 0:65624cd9070a
2174 changeset: 0:65624cd9070a
2167 tag: tip
2175 tag: tip
2168 user: test
2176 user: test
2169 date: Thu Jan 01 00:00:00 1970 +0000
2177 date: Thu Jan 01 00:00:00 1970 +0000
2170 summary: a bunch of weird directories
2178 summary: a bunch of weird directories
2171
2179
2172 changeset: -1:000000000000
2180 changeset: -1:000000000000
2173 user:
2181 user:
2174 date: Thu Jan 01 00:00:00 1970 +0000
2182 date: Thu Jan 01 00:00:00 1970 +0000
2175
2183
2176 $ hg log -r null:null
2184 $ hg log -r null:null
2177 changeset: -1:000000000000
2185 changeset: -1:000000000000
2178 user:
2186 user:
2179 date: Thu Jan 01 00:00:00 1970 +0000
2187 date: Thu Jan 01 00:00:00 1970 +0000
2180
2188
2181 working-directory revision requires special treatment
2189 working-directory revision requires special treatment
2182
2190
2183 clean:
2191 clean:
2184
2192
2185 $ hg log -r 'wdir()' --debug
2193 $ hg log -r 'wdir()' --debug
2186 changeset: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2194 changeset: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2187 phase: draft
2195 phase: draft
2188 parent: 0:65624cd9070a035fa7191a54f2b8af39f16b0c08
2196 parent: 0:65624cd9070a035fa7191a54f2b8af39f16b0c08
2189 parent: -1:0000000000000000000000000000000000000000
2197 parent: -1:0000000000000000000000000000000000000000
2190 manifest: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2198 manifest: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2191 user: test
2199 user: test
2192 date: [A-Za-z0-9:+ ]+ (re)
2200 date: [A-Za-z0-9:+ ]+ (re)
2193 extra: branch=default
2201 extra: branch=default
2194
2202
2195 $ hg log -r 'wdir()' -p --stat
2203 $ hg log -r 'wdir()' -p --stat
2196 changeset: 2147483647:ffffffffffff
2204 changeset: 2147483647:ffffffffffff
2197 parent: 0:65624cd9070a
2205 parent: 0:65624cd9070a
2198 user: test
2206 user: test
2199 date: [A-Za-z0-9:+ ]+ (re)
2207 date: [A-Za-z0-9:+ ]+ (re)
2200
2208
2201
2209
2202
2210
2203
2211
2204 dirty:
2212 dirty:
2205
2213
2206 $ echo 2 >> d1/f1
2214 $ echo 2 >> d1/f1
2207 $ echo 2 > d1/f2
2215 $ echo 2 > d1/f2
2208 $ hg add d1/f2
2216 $ hg add d1/f2
2209 $ hg remove .d6/f1
2217 $ hg remove .d6/f1
2210 $ hg status
2218 $ hg status
2211 M d1/f1
2219 M d1/f1
2212 A d1/f2
2220 A d1/f2
2213 R .d6/f1
2221 R .d6/f1
2214
2222
2215 $ hg log -r 'wdir()'
2223 $ hg log -r 'wdir()'
2216 changeset: 2147483647:ffffffffffff
2224 changeset: 2147483647:ffffffffffff
2217 parent: 0:65624cd9070a
2225 parent: 0:65624cd9070a
2218 user: test
2226 user: test
2219 date: [A-Za-z0-9:+ ]+ (re)
2227 date: [A-Za-z0-9:+ ]+ (re)
2220
2228
2221 $ hg log -r 'wdir()' -q
2229 $ hg log -r 'wdir()' -q
2222 2147483647:ffffffffffff
2230 2147483647:ffffffffffff
2223
2231
2224 $ hg log -r 'wdir()' --debug
2232 $ hg log -r 'wdir()' --debug
2225 changeset: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2233 changeset: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2226 phase: draft
2234 phase: draft
2227 parent: 0:65624cd9070a035fa7191a54f2b8af39f16b0c08
2235 parent: 0:65624cd9070a035fa7191a54f2b8af39f16b0c08
2228 parent: -1:0000000000000000000000000000000000000000
2236 parent: -1:0000000000000000000000000000000000000000
2229 manifest: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2237 manifest: 2147483647:ffffffffffffffffffffffffffffffffffffffff
2230 user: test
2238 user: test
2231 date: [A-Za-z0-9:+ ]+ (re)
2239 date: [A-Za-z0-9:+ ]+ (re)
2232 files: d1/f1
2240 files: d1/f1
2233 files+: d1/f2
2241 files+: d1/f2
2234 files-: .d6/f1
2242 files-: .d6/f1
2235 extra: branch=default
2243 extra: branch=default
2236
2244
2237 $ hg log -r 'wdir()' -p --stat --git
2245 $ hg log -r 'wdir()' -p --stat --git
2238 changeset: 2147483647:ffffffffffff
2246 changeset: 2147483647:ffffffffffff
2239 parent: 0:65624cd9070a
2247 parent: 0:65624cd9070a
2240 user: test
2248 user: test
2241 date: [A-Za-z0-9:+ ]+ (re)
2249 date: [A-Za-z0-9:+ ]+ (re)
2242
2250
2243 .d6/f1 | 1 -
2251 .d6/f1 | 1 -
2244 d1/f1 | 1 +
2252 d1/f1 | 1 +
2245 d1/f2 | 1 +
2253 d1/f2 | 1 +
2246 3 files changed, 2 insertions(+), 1 deletions(-)
2254 3 files changed, 2 insertions(+), 1 deletions(-)
2247
2255
2248 diff --git a/.d6/f1 b/.d6/f1
2256 diff --git a/.d6/f1 b/.d6/f1
2249 deleted file mode 100644
2257 deleted file mode 100644
2250 --- a/.d6/f1
2258 --- a/.d6/f1
2251 +++ /dev/null
2259 +++ /dev/null
2252 @@ -1,1 +0,0 @@
2260 @@ -1,1 +0,0 @@
2253 -1
2261 -1
2254 diff --git a/d1/f1 b/d1/f1
2262 diff --git a/d1/f1 b/d1/f1
2255 --- a/d1/f1
2263 --- a/d1/f1
2256 +++ b/d1/f1
2264 +++ b/d1/f1
2257 @@ -1,1 +1,2 @@
2265 @@ -1,1 +1,2 @@
2258 1
2266 1
2259 +2
2267 +2
2260 diff --git a/d1/f2 b/d1/f2
2268 diff --git a/d1/f2 b/d1/f2
2261 new file mode 100644
2269 new file mode 100644
2262 --- /dev/null
2270 --- /dev/null
2263 +++ b/d1/f2
2271 +++ b/d1/f2
2264 @@ -0,0 +1,1 @@
2272 @@ -0,0 +1,1 @@
2265 +2
2273 +2
2266
2274
2267 $ hg log -r 'wdir()' -Tjson
2275 $ hg log -r 'wdir()' -Tjson
2268 [
2276 [
2269 {
2277 {
2270 "bookmarks": [],
2278 "bookmarks": [],
2271 "branch": "default",
2279 "branch": "default",
2272 "date": [*, 0], (glob)
2280 "date": [*, 0], (glob)
2273 "desc": "",
2281 "desc": "",
2274 "node": "ffffffffffffffffffffffffffffffffffffffff",
2282 "node": "ffffffffffffffffffffffffffffffffffffffff",
2275 "parents": ["65624cd9070a035fa7191a54f2b8af39f16b0c08"],
2283 "parents": ["65624cd9070a035fa7191a54f2b8af39f16b0c08"],
2276 "phase": "draft",
2284 "phase": "draft",
2277 "rev": 2147483647,
2285 "rev": 2147483647,
2278 "tags": [],
2286 "tags": [],
2279 "user": "test"
2287 "user": "test"
2280 }
2288 }
2281 ]
2289 ]
2282
2290
2283 $ hg log -r 'wdir()' -Tjson -q
2291 $ hg log -r 'wdir()' -Tjson -q
2284 [
2292 [
2285 {
2293 {
2286 "node": "ffffffffffffffffffffffffffffffffffffffff",
2294 "node": "ffffffffffffffffffffffffffffffffffffffff",
2287 "rev": 2147483647
2295 "rev": 2147483647
2288 }
2296 }
2289 ]
2297 ]
2290
2298
2291 $ hg log -r 'wdir()' -Tjson --debug
2299 $ hg log -r 'wdir()' -Tjson --debug
2292 [
2300 [
2293 {
2301 {
2294 "added": ["d1/f2"],
2302 "added": ["d1/f2"],
2295 "bookmarks": [],
2303 "bookmarks": [],
2296 "branch": "default",
2304 "branch": "default",
2297 "date": [*, 0], (glob)
2305 "date": [*, 0], (glob)
2298 "desc": "",
2306 "desc": "",
2299 "extra": {"branch": "default"},
2307 "extra": {"branch": "default"},
2300 "manifest": "ffffffffffffffffffffffffffffffffffffffff",
2308 "manifest": "ffffffffffffffffffffffffffffffffffffffff",
2301 "modified": ["d1/f1"],
2309 "modified": ["d1/f1"],
2302 "node": "ffffffffffffffffffffffffffffffffffffffff",
2310 "node": "ffffffffffffffffffffffffffffffffffffffff",
2303 "parents": ["65624cd9070a035fa7191a54f2b8af39f16b0c08"],
2311 "parents": ["65624cd9070a035fa7191a54f2b8af39f16b0c08"],
2304 "phase": "draft",
2312 "phase": "draft",
2305 "removed": [".d6/f1"],
2313 "removed": [".d6/f1"],
2306 "rev": 2147483647,
2314 "rev": 2147483647,
2307 "tags": [],
2315 "tags": [],
2308 "user": "test"
2316 "user": "test"
2309 }
2317 }
2310 ]
2318 ]
2311
2319
2312 follow files from wdir
2320 follow files from wdir
2313
2321
2314 $ hg cp d1/f1 f1-copy
2322 $ hg cp d1/f1 f1-copy
2315 $ hg stat --all
2323 $ hg stat --all
2316 M d1/f1
2324 M d1/f1
2317 A d1/f2
2325 A d1/f2
2318 A f1-copy
2326 A f1-copy
2319 d1/f1
2327 d1/f1
2320 R .d6/f1
2328 R .d6/f1
2321 C D2/f1
2329 C D2/f1
2322 C D3.i/f1
2330 C D3.i/f1
2323 C d4.hg/f1
2331 C d4.hg/f1
2324 C d5.d/f1
2332 C d5.d/f1
2325
2333
2326 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d5.d/f1
2334 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d5.d/f1
2327 == 2147483647 ==
2335 == 2147483647 ==
2328
2336
2329 == 0 ==
2337 == 0 ==
2330 d5.d/f1 | 1 +
2338 d5.d/f1 | 1 +
2331 1 files changed, 1 insertions(+), 0 deletions(-)
2339 1 files changed, 1 insertions(+), 0 deletions(-)
2332
2340
2333
2341
2334 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f1
2342 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f1
2335 == 2147483647 ==
2343 == 2147483647 ==
2336 d1/f1 | 1 +
2344 d1/f1 | 1 +
2337 1 files changed, 1 insertions(+), 0 deletions(-)
2345 1 files changed, 1 insertions(+), 0 deletions(-)
2338
2346
2339 == 0 ==
2347 == 0 ==
2340 d1/f1 | 1 +
2348 d1/f1 | 1 +
2341 1 files changed, 1 insertions(+), 0 deletions(-)
2349 1 files changed, 1 insertions(+), 0 deletions(-)
2342
2350
2343
2351
2344 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f2
2352 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat d1/f2
2345 == 2147483647 ==
2353 == 2147483647 ==
2346 d1/f2 | 1 +
2354 d1/f2 | 1 +
2347 1 files changed, 1 insertions(+), 0 deletions(-)
2355 1 files changed, 1 insertions(+), 0 deletions(-)
2348
2356
2349
2357
2350 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat f1-copy
2358 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat f1-copy
2351 == 2147483647 ==
2359 == 2147483647 ==
2352 f1-copy | 1 +
2360 f1-copy | 1 +
2353 1 files changed, 1 insertions(+), 0 deletions(-)
2361 1 files changed, 1 insertions(+), 0 deletions(-)
2354
2362
2355 == 0 ==
2363 == 0 ==
2356 d1/f1 | 1 +
2364 d1/f1 | 1 +
2357 1 files changed, 1 insertions(+), 0 deletions(-)
2365 1 files changed, 1 insertions(+), 0 deletions(-)
2358
2366
2359
2367
2360 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat notfound
2368 $ hg log -T '== {rev} ==\n' -fr'wdir()' --git --stat notfound
2361 abort: cannot follow file not in any of the specified revisions: "notfound"
2369 abort: cannot follow file not in any of the specified revisions: "notfound"
2362 [255]
2370 [255]
2363
2371
2364 follow files from wdir and non-wdir revision:
2372 follow files from wdir and non-wdir revision:
2365
2373
2366 $ hg log -T '{rev}\n' -fr'wdir()+.' f1-copy
2374 $ hg log -T '{rev}\n' -fr'wdir()+.' f1-copy
2367 f1-copy: no such file in rev 65624cd9070a
2375 f1-copy: no such file in rev 65624cd9070a
2368 2147483647
2376 2147483647
2369 0
2377 0
2370
2378
2371 follow added/removed files from wdir parent
2379 follow added/removed files from wdir parent
2372
2380
2373 $ hg log -T '{rev}\n' -f d1/f2
2381 $ hg log -T '{rev}\n' -f d1/f2
2374 abort: cannot follow nonexistent file: "d1/f2"
2382 abort: cannot follow nonexistent file: "d1/f2"
2375 [255]
2383 [255]
2376
2384
2377 $ hg log -T '{rev}\n' -f f1-copy
2385 $ hg log -T '{rev}\n' -f f1-copy
2378 abort: cannot follow nonexistent file: "f1-copy"
2386 abort: cannot follow nonexistent file: "f1-copy"
2379 [255]
2387 [255]
2380
2388
2381 $ hg log -T '{rev}\n' -f .d6/f1
2389 $ hg log -T '{rev}\n' -f .d6/f1
2382 abort: cannot follow file not in parent revision: ".d6/f1"
2390 abort: cannot follow file not in parent revision: ".d6/f1"
2383 [255]
2391 [255]
2384
2392
2385 $ hg revert -aqC
2393 $ hg revert -aqC
2386
2394
2387 Check that adding an arbitrary name shows up in log automatically
2395 Check that adding an arbitrary name shows up in log automatically
2388
2396
2389 $ cat > ../names.py <<EOF
2397 $ cat > ../names.py <<EOF
2390 > """A small extension to test adding arbitrary names to a repo"""
2398 > """A small extension to test adding arbitrary names to a repo"""
2391 > from __future__ import absolute_import
2399 > from __future__ import absolute_import
2392 > from mercurial import namespaces
2400 > from mercurial import namespaces
2393 >
2401 >
2394 > def reposetup(ui, repo):
2402 > def reposetup(ui, repo):
2395 > if not repo.local():
2403 > if not repo.local():
2396 > return
2404 > return
2397 > foo = {b'foo': repo[0].node()}
2405 > foo = {b'foo': repo[0].node()}
2398 > names = lambda r: foo.keys()
2406 > names = lambda r: foo.keys()
2399 > namemap = lambda r, name: foo.get(name)
2407 > namemap = lambda r, name: foo.get(name)
2400 > nodemap = lambda r, node: [name for name, n in foo.items()
2408 > nodemap = lambda r, node: [name for name, n in foo.items()
2401 > if n == node]
2409 > if n == node]
2402 > ns = namespaces.namespace(
2410 > ns = namespaces.namespace(
2403 > b"bars", templatename=b"bar", logname=b"barlog",
2411 > b"bars", templatename=b"bar", logname=b"barlog",
2404 > colorname=b"barcolor", listnames=names, namemap=namemap,
2412 > colorname=b"barcolor", listnames=names, namemap=namemap,
2405 > nodemap=nodemap)
2413 > nodemap=nodemap)
2406 >
2414 >
2407 > repo.names.addnamespace(ns)
2415 > repo.names.addnamespace(ns)
2408 > EOF
2416 > EOF
2409
2417
2410 $ hg --config extensions.names=../names.py log -r 0
2418 $ hg --config extensions.names=../names.py log -r 0
2411 changeset: 0:65624cd9070a
2419 changeset: 0:65624cd9070a
2412 tag: tip
2420 tag: tip
2413 barlog: foo
2421 barlog: foo
2414 user: test
2422 user: test
2415 date: Thu Jan 01 00:00:00 1970 +0000
2423 date: Thu Jan 01 00:00:00 1970 +0000
2416 summary: a bunch of weird directories
2424 summary: a bunch of weird directories
2417
2425
2418 $ hg --config extensions.names=../names.py \
2426 $ hg --config extensions.names=../names.py \
2419 > --config extensions.color= --config color.log.barcolor=red \
2427 > --config extensions.color= --config color.log.barcolor=red \
2420 > --color=always log -r 0
2428 > --color=always log -r 0
2421 \x1b[0;33mchangeset: 0:65624cd9070a\x1b[0m (esc)
2429 \x1b[0;33mchangeset: 0:65624cd9070a\x1b[0m (esc)
2422 tag: tip
2430 tag: tip
2423 \x1b[0;31mbarlog: foo\x1b[0m (esc)
2431 \x1b[0;31mbarlog: foo\x1b[0m (esc)
2424 user: test
2432 user: test
2425 date: Thu Jan 01 00:00:00 1970 +0000
2433 date: Thu Jan 01 00:00:00 1970 +0000
2426 summary: a bunch of weird directories
2434 summary: a bunch of weird directories
2427
2435
2428 $ hg --config extensions.names=../names.py log -r 0 --template '{bars}\n'
2436 $ hg --config extensions.names=../names.py log -r 0 --template '{bars}\n'
2429 foo
2437 foo
2430
2438
2431 Templater parse errors:
2439 Templater parse errors:
2432
2440
2433 simple error
2441 simple error
2434 $ hg log -r . -T '{shortest(node}'
2442 $ hg log -r . -T '{shortest(node}'
2435 hg: parse error at 14: unexpected token: end
2443 hg: parse error at 14: unexpected token: end
2436 ({shortest(node}
2444 ({shortest(node}
2437 ^ here)
2445 ^ here)
2438 [10]
2446 [10]
2439
2447
2440 multi-line template with error
2448 multi-line template with error
2441 $ hg log -r . -T 'line 1
2449 $ hg log -r . -T 'line 1
2442 > line2
2450 > line2
2443 > {shortest(node}
2451 > {shortest(node}
2444 > line4\nline5'
2452 > line4\nline5'
2445 hg: parse error at 27: unexpected token: end
2453 hg: parse error at 27: unexpected token: end
2446 (line 1\nline2\n{shortest(node}\nline4\nline5
2454 (line 1\nline2\n{shortest(node}\nline4\nline5
2447 ^ here)
2455 ^ here)
2448 [10]
2456 [10]
2449
2457
2450 $ cd ..
2458 $ cd ..
2451
2459
2452 New namespace is registered per repo instance, but the template keyword
2460 New namespace is registered per repo instance, but the template keyword
2453 is global. So we shouldn't expect the namespace always exists. Using
2461 is global. So we shouldn't expect the namespace always exists. Using
2454 ssh:// makes sure a bundle repository is created from scratch. (issue6301)
2462 ssh:// makes sure a bundle repository is created from scratch. (issue6301)
2455
2463
2456 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" \
2464 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" \
2457 > -qr0 "ssh://user@dummy/`pwd`/a" a-clone
2465 > -qr0 "ssh://user@dummy/`pwd`/a" a-clone
2458 $ hg incoming --config extensions.names=names.py -R a-clone \
2466 $ hg incoming --config extensions.names=names.py -R a-clone \
2459 > -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" -T '{bars}\n' -l1
2467 > -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" -T '{bars}\n' -l1
2460 comparing with ssh://user@dummy/$TESTTMP/a
2468 comparing with ssh://user@dummy/$TESTTMP/a
2461 searching for changes
2469 searching for changes
2462
2470
2463
2471
2464 hg log -f dir across branches
2472 hg log -f dir across branches
2465
2473
2466 $ hg init acrossbranches
2474 $ hg init acrossbranches
2467 $ cd acrossbranches
2475 $ cd acrossbranches
2468 $ mkdir d
2476 $ mkdir d
2469 $ echo a > d/a && hg ci -Aqm a
2477 $ echo a > d/a && hg ci -Aqm a
2470 $ echo b > d/a && hg ci -Aqm b
2478 $ echo b > d/a && hg ci -Aqm b
2471 $ hg up -q 0
2479 $ hg up -q 0
2472 $ echo b > d/a && hg ci -Aqm c
2480 $ echo b > d/a && hg ci -Aqm c
2473 $ hg log -f d -T '{desc}' -G
2481 $ hg log -f d -T '{desc}' -G
2474 @ c
2482 @ c
2475 |
2483 |
2476 o a
2484 o a
2477
2485
2478 Ensure that largefiles doesn't interfere with following a normal file
2486 Ensure that largefiles doesn't interfere with following a normal file
2479 $ hg --config extensions.largefiles= log -f d -T '{desc}' -G
2487 $ hg --config extensions.largefiles= log -f d -T '{desc}' -G
2480 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
2488 The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !)
2481 @ c
2489 @ c
2482 |
2490 |
2483 o a
2491 o a
2484
2492
2485 $ hg log -f d/a -T '{desc}' -G
2493 $ hg log -f d/a -T '{desc}' -G
2486 @ c
2494 @ c
2487 |
2495 |
2488 o a
2496 o a
2489
2497
2490 $ cd ..
2498 $ cd ..
2491
2499
2492 hg log -f with linkrev pointing to another branch
2500 hg log -f with linkrev pointing to another branch
2493 -------------------------------------------------
2501 -------------------------------------------------
2494
2502
2495 create history with a filerev whose linkrev points to another branch
2503 create history with a filerev whose linkrev points to another branch
2496
2504
2497 $ hg init branchedlinkrev
2505 $ hg init branchedlinkrev
2498 $ cd branchedlinkrev
2506 $ cd branchedlinkrev
2499 $ echo 1 > a
2507 $ echo 1 > a
2500 $ hg commit -Am 'content1'
2508 $ hg commit -Am 'content1'
2501 adding a
2509 adding a
2502 $ echo 2 > a
2510 $ echo 2 > a
2503 $ hg commit -m 'content2'
2511 $ hg commit -m 'content2'
2504 $ hg up --rev 'desc(content1)'
2512 $ hg up --rev 'desc(content1)'
2505 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2513 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2506 $ echo unrelated > unrelated
2514 $ echo unrelated > unrelated
2507 $ hg commit -Am 'unrelated'
2515 $ hg commit -Am 'unrelated'
2508 adding unrelated
2516 adding unrelated
2509 created new head
2517 created new head
2510 $ hg graft -r 'desc(content2)'
2518 $ hg graft -r 'desc(content2)'
2511 grafting 1:2294ae80ad84 "content2"
2519 grafting 1:2294ae80ad84 "content2"
2512 $ echo 3 > a
2520 $ echo 3 > a
2513 $ hg commit -m 'content3'
2521 $ hg commit -m 'content3'
2514 $ hg log -G
2522 $ hg log -G
2515 @ changeset: 4:50b9b36e9c5d
2523 @ changeset: 4:50b9b36e9c5d
2516 | tag: tip
2524 | tag: tip
2517 | user: test
2525 | user: test
2518 | date: Thu Jan 01 00:00:00 1970 +0000
2526 | date: Thu Jan 01 00:00:00 1970 +0000
2519 | summary: content3
2527 | summary: content3
2520 |
2528 |
2521 o changeset: 3:15b2327059e5
2529 o changeset: 3:15b2327059e5
2522 | user: test
2530 | user: test
2523 | date: Thu Jan 01 00:00:00 1970 +0000
2531 | date: Thu Jan 01 00:00:00 1970 +0000
2524 | summary: content2
2532 | summary: content2
2525 |
2533 |
2526 o changeset: 2:2029acd1168c
2534 o changeset: 2:2029acd1168c
2527 | parent: 0:ae0a3c9f9e95
2535 | parent: 0:ae0a3c9f9e95
2528 | user: test
2536 | user: test
2529 | date: Thu Jan 01 00:00:00 1970 +0000
2537 | date: Thu Jan 01 00:00:00 1970 +0000
2530 | summary: unrelated
2538 | summary: unrelated
2531 |
2539 |
2532 | o changeset: 1:2294ae80ad84
2540 | o changeset: 1:2294ae80ad84
2533 |/ user: test
2541 |/ user: test
2534 | date: Thu Jan 01 00:00:00 1970 +0000
2542 | date: Thu Jan 01 00:00:00 1970 +0000
2535 | summary: content2
2543 | summary: content2
2536 |
2544 |
2537 o changeset: 0:ae0a3c9f9e95
2545 o changeset: 0:ae0a3c9f9e95
2538 user: test
2546 user: test
2539 date: Thu Jan 01 00:00:00 1970 +0000
2547 date: Thu Jan 01 00:00:00 1970 +0000
2540 summary: content1
2548 summary: content1
2541
2549
2542
2550
2543 log -f on the file should list the graft result.
2551 log -f on the file should list the graft result.
2544
2552
2545 $ hg log -Gf a
2553 $ hg log -Gf a
2546 @ changeset: 4:50b9b36e9c5d
2554 @ changeset: 4:50b9b36e9c5d
2547 | tag: tip
2555 | tag: tip
2548 | user: test
2556 | user: test
2549 | date: Thu Jan 01 00:00:00 1970 +0000
2557 | date: Thu Jan 01 00:00:00 1970 +0000
2550 | summary: content3
2558 | summary: content3
2551 |
2559 |
2552 o changeset: 3:15b2327059e5
2560 o changeset: 3:15b2327059e5
2553 : user: test
2561 : user: test
2554 : date: Thu Jan 01 00:00:00 1970 +0000
2562 : date: Thu Jan 01 00:00:00 1970 +0000
2555 : summary: content2
2563 : summary: content2
2556 :
2564 :
2557 o changeset: 0:ae0a3c9f9e95
2565 o changeset: 0:ae0a3c9f9e95
2558 user: test
2566 user: test
2559 date: Thu Jan 01 00:00:00 1970 +0000
2567 date: Thu Jan 01 00:00:00 1970 +0000
2560 summary: content1
2568 summary: content1
2561
2569
2562
2570
2563 plain log lists the original version
2571 plain log lists the original version
2564 (XXX we should probably list both)
2572 (XXX we should probably list both)
2565
2573
2566 $ hg log -G a
2574 $ hg log -G a
2567 @ changeset: 4:50b9b36e9c5d
2575 @ changeset: 4:50b9b36e9c5d
2568 : tag: tip
2576 : tag: tip
2569 : user: test
2577 : user: test
2570 : date: Thu Jan 01 00:00:00 1970 +0000
2578 : date: Thu Jan 01 00:00:00 1970 +0000
2571 : summary: content3
2579 : summary: content3
2572 :
2580 :
2573 : o changeset: 1:2294ae80ad84
2581 : o changeset: 1:2294ae80ad84
2574 :/ user: test
2582 :/ user: test
2575 : date: Thu Jan 01 00:00:00 1970 +0000
2583 : date: Thu Jan 01 00:00:00 1970 +0000
2576 : summary: content2
2584 : summary: content2
2577 :
2585 :
2578 o changeset: 0:ae0a3c9f9e95
2586 o changeset: 0:ae0a3c9f9e95
2579 user: test
2587 user: test
2580 date: Thu Jan 01 00:00:00 1970 +0000
2588 date: Thu Jan 01 00:00:00 1970 +0000
2581 summary: content1
2589 summary: content1
2582
2590
2583
2591
2584 hg log -f from the grafted changeset
2592 hg log -f from the grafted changeset
2585 (The bootstrap should properly take the topology in account)
2593 (The bootstrap should properly take the topology in account)
2586
2594
2587 $ hg up 'desc(content3)^'
2595 $ hg up 'desc(content3)^'
2588 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2596 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2589 $ hg log -Gf a
2597 $ hg log -Gf a
2590 @ changeset: 3:15b2327059e5
2598 @ changeset: 3:15b2327059e5
2591 : user: test
2599 : user: test
2592 : date: Thu Jan 01 00:00:00 1970 +0000
2600 : date: Thu Jan 01 00:00:00 1970 +0000
2593 : summary: content2
2601 : summary: content2
2594 :
2602 :
2595 o changeset: 0:ae0a3c9f9e95
2603 o changeset: 0:ae0a3c9f9e95
2596 user: test
2604 user: test
2597 date: Thu Jan 01 00:00:00 1970 +0000
2605 date: Thu Jan 01 00:00:00 1970 +0000
2598 summary: content1
2606 summary: content1
2599
2607
2600
2608
2601 Test that we use the first non-hidden changeset in that case.
2609 Test that we use the first non-hidden changeset in that case.
2602
2610
2603 (hide the changeset)
2611 (hide the changeset)
2604
2612
2605 $ hg log -T '{node}\n' -r 1
2613 $ hg log -T '{node}\n' -r 1
2606 2294ae80ad8447bc78383182eeac50cb049df623
2614 2294ae80ad8447bc78383182eeac50cb049df623
2607 $ hg debugobsolete 2294ae80ad8447bc78383182eeac50cb049df623
2615 $ hg debugobsolete 2294ae80ad8447bc78383182eeac50cb049df623
2608 1 new obsolescence markers
2616 1 new obsolescence markers
2609 obsoleted 1 changesets
2617 obsoleted 1 changesets
2610 $ hg log -G
2618 $ hg log -G
2611 o changeset: 4:50b9b36e9c5d
2619 o changeset: 4:50b9b36e9c5d
2612 | tag: tip
2620 | tag: tip
2613 | user: test
2621 | user: test
2614 | date: Thu Jan 01 00:00:00 1970 +0000
2622 | date: Thu Jan 01 00:00:00 1970 +0000
2615 | summary: content3
2623 | summary: content3
2616 |
2624 |
2617 @ changeset: 3:15b2327059e5
2625 @ changeset: 3:15b2327059e5
2618 | user: test
2626 | user: test
2619 | date: Thu Jan 01 00:00:00 1970 +0000
2627 | date: Thu Jan 01 00:00:00 1970 +0000
2620 | summary: content2
2628 | summary: content2
2621 |
2629 |
2622 o changeset: 2:2029acd1168c
2630 o changeset: 2:2029acd1168c
2623 | parent: 0:ae0a3c9f9e95
2631 | parent: 0:ae0a3c9f9e95
2624 | user: test
2632 | user: test
2625 | date: Thu Jan 01 00:00:00 1970 +0000
2633 | date: Thu Jan 01 00:00:00 1970 +0000
2626 | summary: unrelated
2634 | summary: unrelated
2627 |
2635 |
2628 o changeset: 0:ae0a3c9f9e95
2636 o changeset: 0:ae0a3c9f9e95
2629 user: test
2637 user: test
2630 date: Thu Jan 01 00:00:00 1970 +0000
2638 date: Thu Jan 01 00:00:00 1970 +0000
2631 summary: content1
2639 summary: content1
2632
2640
2633
2641
2634 Check that log on the file does not drop the file revision.
2642 Check that log on the file does not drop the file revision.
2635
2643
2636 $ hg log -G a
2644 $ hg log -G a
2637 o changeset: 4:50b9b36e9c5d
2645 o changeset: 4:50b9b36e9c5d
2638 | tag: tip
2646 | tag: tip
2639 | user: test
2647 | user: test
2640 | date: Thu Jan 01 00:00:00 1970 +0000
2648 | date: Thu Jan 01 00:00:00 1970 +0000
2641 | summary: content3
2649 | summary: content3
2642 |
2650 |
2643 @ changeset: 3:15b2327059e5
2651 @ changeset: 3:15b2327059e5
2644 : user: test
2652 : user: test
2645 : date: Thu Jan 01 00:00:00 1970 +0000
2653 : date: Thu Jan 01 00:00:00 1970 +0000
2646 : summary: content2
2654 : summary: content2
2647 :
2655 :
2648 o changeset: 0:ae0a3c9f9e95
2656 o changeset: 0:ae0a3c9f9e95
2649 user: test
2657 user: test
2650 date: Thu Jan 01 00:00:00 1970 +0000
2658 date: Thu Jan 01 00:00:00 1970 +0000
2651 summary: content1
2659 summary: content1
2652
2660
2653
2661
2654 Even when a head revision is linkrev-shadowed.
2662 Even when a head revision is linkrev-shadowed.
2655
2663
2656 $ hg log -T '{node}\n' -r 4
2664 $ hg log -T '{node}\n' -r 4
2657 50b9b36e9c5df2c6fc6dcefa8ad0da929e84aed2
2665 50b9b36e9c5df2c6fc6dcefa8ad0da929e84aed2
2658 $ hg debugobsolete 50b9b36e9c5df2c6fc6dcefa8ad0da929e84aed2
2666 $ hg debugobsolete 50b9b36e9c5df2c6fc6dcefa8ad0da929e84aed2
2659 1 new obsolescence markers
2667 1 new obsolescence markers
2660 obsoleted 1 changesets
2668 obsoleted 1 changesets
2661 $ hg log -G a
2669 $ hg log -G a
2662 @ changeset: 3:15b2327059e5
2670 @ changeset: 3:15b2327059e5
2663 : tag: tip
2671 : tag: tip
2664 : user: test
2672 : user: test
2665 : date: Thu Jan 01 00:00:00 1970 +0000
2673 : date: Thu Jan 01 00:00:00 1970 +0000
2666 : summary: content2
2674 : summary: content2
2667 :
2675 :
2668 o changeset: 0:ae0a3c9f9e95
2676 o changeset: 0:ae0a3c9f9e95
2669 user: test
2677 user: test
2670 date: Thu Jan 01 00:00:00 1970 +0000
2678 date: Thu Jan 01 00:00:00 1970 +0000
2671 summary: content1
2679 summary: content1
2672
2680
2673
2681
2674 $ cd ..
2682 $ cd ..
2675
2683
2676 Even when the file revision is missing from some head:
2684 Even when the file revision is missing from some head:
2677
2685
2678 $ hg init issue4490
2686 $ hg init issue4490
2679 $ cd issue4490
2687 $ cd issue4490
2680 $ echo '[experimental]' >> .hg/hgrc
2688 $ echo '[experimental]' >> .hg/hgrc
2681 $ echo 'evolution.createmarkers=True' >> .hg/hgrc
2689 $ echo 'evolution.createmarkers=True' >> .hg/hgrc
2682 $ echo a > a
2690 $ echo a > a
2683 $ hg ci -Am0
2691 $ hg ci -Am0
2684 adding a
2692 adding a
2685 $ echo b > b
2693 $ echo b > b
2686 $ hg ci -Am1
2694 $ hg ci -Am1
2687 adding b
2695 adding b
2688 $ echo B > b
2696 $ echo B > b
2689 $ hg ci --amend -m 1
2697 $ hg ci --amend -m 1
2690 $ hg up 0
2698 $ hg up 0
2691 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2699 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2692 $ echo c > c
2700 $ echo c > c
2693 $ hg ci -Am2
2701 $ hg ci -Am2
2694 adding c
2702 adding c
2695 created new head
2703 created new head
2696 $ hg up 'head() and not .'
2704 $ hg up 'head() and not .'
2697 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
2705 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
2698 $ hg log -G
2706 $ hg log -G
2699 o changeset: 3:db815d6d32e6
2707 o changeset: 3:db815d6d32e6
2700 | tag: tip
2708 | tag: tip
2701 | parent: 0:f7b1eb17ad24
2709 | parent: 0:f7b1eb17ad24
2702 | user: test
2710 | user: test
2703 | date: Thu Jan 01 00:00:00 1970 +0000
2711 | date: Thu Jan 01 00:00:00 1970 +0000
2704 | summary: 2
2712 | summary: 2
2705 |
2713 |
2706 | @ changeset: 2:9bc8ce7f9356
2714 | @ changeset: 2:9bc8ce7f9356
2707 |/ parent: 0:f7b1eb17ad24
2715 |/ parent: 0:f7b1eb17ad24
2708 | user: test
2716 | user: test
2709 | date: Thu Jan 01 00:00:00 1970 +0000
2717 | date: Thu Jan 01 00:00:00 1970 +0000
2710 | summary: 1
2718 | summary: 1
2711 |
2719 |
2712 o changeset: 0:f7b1eb17ad24
2720 o changeset: 0:f7b1eb17ad24
2713 user: test
2721 user: test
2714 date: Thu Jan 01 00:00:00 1970 +0000
2722 date: Thu Jan 01 00:00:00 1970 +0000
2715 summary: 0
2723 summary: 0
2716
2724
2717 $ hg log -f -G b
2725 $ hg log -f -G b
2718 @ changeset: 2:9bc8ce7f9356
2726 @ changeset: 2:9bc8ce7f9356
2719 | parent: 0:f7b1eb17ad24
2727 | parent: 0:f7b1eb17ad24
2720 ~ user: test
2728 ~ user: test
2721 date: Thu Jan 01 00:00:00 1970 +0000
2729 date: Thu Jan 01 00:00:00 1970 +0000
2722 summary: 1
2730 summary: 1
2723
2731
2724 $ hg log -G b
2732 $ hg log -G b
2725 @ changeset: 2:9bc8ce7f9356
2733 @ changeset: 2:9bc8ce7f9356
2726 | parent: 0:f7b1eb17ad24
2734 | parent: 0:f7b1eb17ad24
2727 ~ user: test
2735 ~ user: test
2728 date: Thu Jan 01 00:00:00 1970 +0000
2736 date: Thu Jan 01 00:00:00 1970 +0000
2729 summary: 1
2737 summary: 1
2730
2738
2731 $ cd ..
2739 $ cd ..
2732
2740
2733 Check proper report when the manifest changes but not the file issue4499
2741 Check proper report when the manifest changes but not the file issue4499
2734 ------------------------------------------------------------------------
2742 ------------------------------------------------------------------------
2735
2743
2736 $ hg init issue4499
2744 $ hg init issue4499
2737 $ cd issue4499
2745 $ cd issue4499
2738 $ for f in A B C D F E G H I J K L M N O P Q R S T U; do
2746 $ for f in A B C D F E G H I J K L M N O P Q R S T U; do
2739 > echo 1 > $f;
2747 > echo 1 > $f;
2740 > hg add $f;
2748 > hg add $f;
2741 > done
2749 > done
2742 $ hg commit -m 'A1B1C1'
2750 $ hg commit -m 'A1B1C1'
2743 $ echo 2 > A
2751 $ echo 2 > A
2744 $ echo 2 > B
2752 $ echo 2 > B
2745 $ echo 2 > C
2753 $ echo 2 > C
2746 $ hg commit -m 'A2B2C2'
2754 $ hg commit -m 'A2B2C2'
2747 $ hg up 0
2755 $ hg up 0
2748 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
2756 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
2749 $ echo 3 > A
2757 $ echo 3 > A
2750 $ echo 2 > B
2758 $ echo 2 > B
2751 $ echo 2 > C
2759 $ echo 2 > C
2752 $ hg commit -m 'A3B2C2'
2760 $ hg commit -m 'A3B2C2'
2753 created new head
2761 created new head
2754
2762
2755 $ hg log -G
2763 $ hg log -G
2756 @ changeset: 2:fe5fc3d0eb17
2764 @ changeset: 2:fe5fc3d0eb17
2757 | tag: tip
2765 | tag: tip
2758 | parent: 0:abf4f0e38563
2766 | parent: 0:abf4f0e38563
2759 | user: test
2767 | user: test
2760 | date: Thu Jan 01 00:00:00 1970 +0000
2768 | date: Thu Jan 01 00:00:00 1970 +0000
2761 | summary: A3B2C2
2769 | summary: A3B2C2
2762 |
2770 |
2763 | o changeset: 1:07dcc6b312c0
2771 | o changeset: 1:07dcc6b312c0
2764 |/ user: test
2772 |/ user: test
2765 | date: Thu Jan 01 00:00:00 1970 +0000
2773 | date: Thu Jan 01 00:00:00 1970 +0000
2766 | summary: A2B2C2
2774 | summary: A2B2C2
2767 |
2775 |
2768 o changeset: 0:abf4f0e38563
2776 o changeset: 0:abf4f0e38563
2769 user: test
2777 user: test
2770 date: Thu Jan 01 00:00:00 1970 +0000
2778 date: Thu Jan 01 00:00:00 1970 +0000
2771 summary: A1B1C1
2779 summary: A1B1C1
2772
2780
2773
2781
2774 Log -f on B should reports current changesets
2782 Log -f on B should reports current changesets
2775
2783
2776 $ hg log -fG B
2784 $ hg log -fG B
2777 @ changeset: 2:fe5fc3d0eb17
2785 @ changeset: 2:fe5fc3d0eb17
2778 | tag: tip
2786 | tag: tip
2779 | parent: 0:abf4f0e38563
2787 | parent: 0:abf4f0e38563
2780 | user: test
2788 | user: test
2781 | date: Thu Jan 01 00:00:00 1970 +0000
2789 | date: Thu Jan 01 00:00:00 1970 +0000
2782 | summary: A3B2C2
2790 | summary: A3B2C2
2783 |
2791 |
2784 o changeset: 0:abf4f0e38563
2792 o changeset: 0:abf4f0e38563
2785 user: test
2793 user: test
2786 date: Thu Jan 01 00:00:00 1970 +0000
2794 date: Thu Jan 01 00:00:00 1970 +0000
2787 summary: A1B1C1
2795 summary: A1B1C1
2788
2796
2789 $ cd ..
2797 $ cd ..
2790
2798
2791 --- going to test line wrap fix on using both --stat and -G (issue5800)
2799 --- going to test line wrap fix on using both --stat and -G (issue5800)
2792 $ hg init issue5800
2800 $ hg init issue5800
2793 $ cd issue5800
2801 $ cd issue5800
2794 $ touch a
2802 $ touch a
2795 $ hg ci -Am 'add a'
2803 $ hg ci -Am 'add a'
2796 adding a
2804 adding a
2797 ---- now we are going to add 300 lines to a
2805 ---- now we are going to add 300 lines to a
2798 $ for i in `$TESTDIR/seq.py 1 300`; do echo $i >> a; done
2806 $ for i in `$TESTDIR/seq.py 1 300`; do echo $i >> a; done
2799 $ hg ci -m 'modify a'
2807 $ hg ci -m 'modify a'
2800 $ hg log
2808 $ hg log
2801 changeset: 1:a98683e6a834
2809 changeset: 1:a98683e6a834
2802 tag: tip
2810 tag: tip
2803 user: test
2811 user: test
2804 date: Thu Jan 01 00:00:00 1970 +0000
2812 date: Thu Jan 01 00:00:00 1970 +0000
2805 summary: modify a
2813 summary: modify a
2806
2814
2807 changeset: 0:ac82d8b1f7c4
2815 changeset: 0:ac82d8b1f7c4
2808 user: test
2816 user: test
2809 date: Thu Jan 01 00:00:00 1970 +0000
2817 date: Thu Jan 01 00:00:00 1970 +0000
2810 summary: add a
2818 summary: add a
2811
2819
2812 ---- now visualise the changes we made without template
2820 ---- now visualise the changes we made without template
2813 $ hg log -l1 -r a98683e6a834 --stat -G
2821 $ hg log -l1 -r a98683e6a834 --stat -G
2814 @ changeset: 1:a98683e6a834
2822 @ changeset: 1:a98683e6a834
2815 | tag: tip
2823 | tag: tip
2816 ~ user: test
2824 ~ user: test
2817 date: Thu Jan 01 00:00:00 1970 +0000
2825 date: Thu Jan 01 00:00:00 1970 +0000
2818 summary: modify a
2826 summary: modify a
2819
2827
2820 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2828 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2821 1 files changed, 300 insertions(+), 0 deletions(-)
2829 1 files changed, 300 insertions(+), 0 deletions(-)
2822
2830
2823 ---- with template
2831 ---- with template
2824 $ hg log -l1 -r a98683e6a834 --stat -G -T bisect
2832 $ hg log -l1 -r a98683e6a834 --stat -G -T bisect
2825 @ changeset: 1:a98683e6a834
2833 @ changeset: 1:a98683e6a834
2826 | bisect:
2834 | bisect:
2827 ~ tag: tip
2835 ~ tag: tip
2828 user: test
2836 user: test
2829 date: Thu Jan 01 00:00:00 1970 +0000
2837 date: Thu Jan 01 00:00:00 1970 +0000
2830 summary: modify a
2838 summary: modify a
2831
2839
2832 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2840 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2833 1 files changed, 300 insertions(+), 0 deletions(-)
2841 1 files changed, 300 insertions(+), 0 deletions(-)
2834
2842
2835 $ hg log -l1 -r a98683e6a834 --stat -G -T changelog
2843 $ hg log -l1 -r a98683e6a834 --stat -G -T changelog
2836 1970-01-01 test <test>
2844 1970-01-01 test <test>
2837
2845
2838 @ * a:
2846 @ * a:
2839 | modify a
2847 | modify a
2840 ~ [a98683e6a834] [tip]
2848 ~ [a98683e6a834] [tip]
2841
2849
2842 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2850 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2843 1 files changed, 300 insertions(+), 0 deletions(-)
2851 1 files changed, 300 insertions(+), 0 deletions(-)
2844
2852
2845 $ hg log -l1 -r a98683e6a834 --stat -G -T compact
2853 $ hg log -l1 -r a98683e6a834 --stat -G -T compact
2846 @ 1[tip] a98683e6a834 1970-01-01 00:00 +0000 test
2854 @ 1[tip] a98683e6a834 1970-01-01 00:00 +0000 test
2847 | modify a
2855 | modify a
2848 ~
2856 ~
2849 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2857 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2850 1 files changed, 300 insertions(+), 0 deletions(-)
2858 1 files changed, 300 insertions(+), 0 deletions(-)
2851
2859
2852 $ hg log -l1 -r a98683e6a834 --stat -G -T default
2860 $ hg log -l1 -r a98683e6a834 --stat -G -T default
2853 @ changeset: 1:a98683e6a834
2861 @ changeset: 1:a98683e6a834
2854 | tag: tip
2862 | tag: tip
2855 ~ user: test
2863 ~ user: test
2856 date: Thu Jan 01 00:00:00 1970 +0000
2864 date: Thu Jan 01 00:00:00 1970 +0000
2857 summary: modify a
2865 summary: modify a
2858
2866
2859 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2867 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2860 1 files changed, 300 insertions(+), 0 deletions(-)
2868 1 files changed, 300 insertions(+), 0 deletions(-)
2861
2869
2862 $ hg log -l1 -r a98683e6a834 --stat -G -T phases
2870 $ hg log -l1 -r a98683e6a834 --stat -G -T phases
2863 @ changeset: 1:a98683e6a834
2871 @ changeset: 1:a98683e6a834
2864 | tag: tip
2872 | tag: tip
2865 ~ phase: draft
2873 ~ phase: draft
2866 user: test
2874 user: test
2867 date: Thu Jan 01 00:00:00 1970 +0000
2875 date: Thu Jan 01 00:00:00 1970 +0000
2868 summary: modify a
2876 summary: modify a
2869
2877
2870 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2878 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2871 1 files changed, 300 insertions(+), 0 deletions(-)
2879 1 files changed, 300 insertions(+), 0 deletions(-)
2872
2880
2873 $ hg log -l1 -r a98683e6a834 --stat -G -T show
2881 $ hg log -l1 -r a98683e6a834 --stat -G -T show
2874 @ changeset: 1:a98683e6a834
2882 @ changeset: 1:a98683e6a834
2875 | tag: tip
2883 | tag: tip
2876 ~ user: test
2884 ~ user: test
2877 date: Thu Jan 01 00:00:00 1970 +0000
2885 date: Thu Jan 01 00:00:00 1970 +0000
2878 summary: modify a
2886 summary: modify a
2879
2887
2880 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2888 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2881 1 files changed, 300 insertions(+), 0 deletions(-)
2889 1 files changed, 300 insertions(+), 0 deletions(-)
2882
2890
2883 $ hg log -l1 -r a98683e6a834 --stat -G -T status
2891 $ hg log -l1 -r a98683e6a834 --stat -G -T status
2884 @ changeset: 1:a98683e6a834
2892 @ changeset: 1:a98683e6a834
2885 | tag: tip
2893 | tag: tip
2886 ~ user: test
2894 ~ user: test
2887 date: Thu Jan 01 00:00:00 1970 +0000
2895 date: Thu Jan 01 00:00:00 1970 +0000
2888 summary: modify a
2896 summary: modify a
2889 files:
2897 files:
2890 M a
2898 M a
2891
2899
2892 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2900 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2893 1 files changed, 300 insertions(+), 0 deletions(-)
2901 1 files changed, 300 insertions(+), 0 deletions(-)
2894
2902
2895 $ hg log -l1 -r a98683e6a834 --stat -G -T xml
2903 $ hg log -l1 -r a98683e6a834 --stat -G -T xml
2896 <?xml version="1.0"?>
2904 <?xml version="1.0"?>
2897 <log>
2905 <log>
2898 @ <logentry revision="1" node="a98683e6a8340830a7683909768b62871e84bc9d">
2906 @ <logentry revision="1" node="a98683e6a8340830a7683909768b62871e84bc9d">
2899 | <tag>tip</tag>
2907 | <tag>tip</tag>
2900 ~ <author email="test">test</author>
2908 ~ <author email="test">test</author>
2901 <date>1970-01-01T00:00:00+00:00</date>
2909 <date>1970-01-01T00:00:00+00:00</date>
2902 <msg xml:space="preserve">modify a</msg>
2910 <msg xml:space="preserve">modify a</msg>
2903 </logentry>
2911 </logentry>
2904 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2912 a | 300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2905 1 files changed, 300 insertions(+), 0 deletions(-)
2913 1 files changed, 300 insertions(+), 0 deletions(-)
2906
2914
2907 </log>
2915 </log>
2908
2916
2909 $ cd ..
2917 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now