##// END OF EJS Templates
templatekw: make {successorssets} always return a list (issue6342)...
Aay Jay Chan -
r46268:f95b2328 default
parent child Browse files
Show More
@@ -1,992 +1,991 b''
1 # templatekw.py - common changeset template keywords
1 # templatekw.py - common changeset template keywords
2 #
2 #
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2009 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 from .i18n import _
10 from .i18n import _
11 from .node import (
11 from .node import (
12 hex,
12 hex,
13 nullid,
13 nullid,
14 wdirid,
14 wdirid,
15 wdirrev,
15 wdirrev,
16 )
16 )
17
17
18 from . import (
18 from . import (
19 diffutil,
19 diffutil,
20 encoding,
20 encoding,
21 error,
21 error,
22 hbisect,
22 hbisect,
23 i18n,
23 i18n,
24 obsutil,
24 obsutil,
25 patch,
25 patch,
26 pycompat,
26 pycompat,
27 registrar,
27 registrar,
28 scmutil,
28 scmutil,
29 templateutil,
29 templateutil,
30 util,
30 util,
31 )
31 )
32 from .utils import stringutil
32 from .utils import stringutil
33
33
34 _hybrid = templateutil.hybrid
34 _hybrid = templateutil.hybrid
35 hybriddict = templateutil.hybriddict
35 hybriddict = templateutil.hybriddict
36 hybridlist = templateutil.hybridlist
36 hybridlist = templateutil.hybridlist
37 compatdict = templateutil.compatdict
37 compatdict = templateutil.compatdict
38 compatlist = templateutil.compatlist
38 compatlist = templateutil.compatlist
39 _showcompatlist = templateutil._showcompatlist
39 _showcompatlist = templateutil._showcompatlist
40
40
41
41
42 def getlatesttags(context, mapping, pattern=None):
42 def getlatesttags(context, mapping, pattern=None):
43 '''return date, distance and name for the latest tag of rev'''
43 '''return date, distance and name for the latest tag of rev'''
44 repo = context.resource(mapping, b'repo')
44 repo = context.resource(mapping, b'repo')
45 ctx = context.resource(mapping, b'ctx')
45 ctx = context.resource(mapping, b'ctx')
46 cache = context.resource(mapping, b'cache')
46 cache = context.resource(mapping, b'cache')
47
47
48 cachename = b'latesttags'
48 cachename = b'latesttags'
49 if pattern is not None:
49 if pattern is not None:
50 cachename += b'-' + pattern
50 cachename += b'-' + pattern
51 match = stringutil.stringmatcher(pattern)[2]
51 match = stringutil.stringmatcher(pattern)[2]
52 else:
52 else:
53 match = util.always
53 match = util.always
54
54
55 if cachename not in cache:
55 if cachename not in cache:
56 # Cache mapping from rev to a tuple with tag date, tag
56 # Cache mapping from rev to a tuple with tag date, tag
57 # distance and tag name
57 # distance and tag name
58 cache[cachename] = {-1: (0, 0, [b'null'])}
58 cache[cachename] = {-1: (0, 0, [b'null'])}
59 latesttags = cache[cachename]
59 latesttags = cache[cachename]
60
60
61 rev = ctx.rev()
61 rev = ctx.rev()
62 todo = [rev]
62 todo = [rev]
63 while todo:
63 while todo:
64 rev = todo.pop()
64 rev = todo.pop()
65 if rev in latesttags:
65 if rev in latesttags:
66 continue
66 continue
67 ctx = repo[rev]
67 ctx = repo[rev]
68 tags = [
68 tags = [
69 t
69 t
70 for t in ctx.tags()
70 for t in ctx.tags()
71 if (repo.tagtype(t) and repo.tagtype(t) != b'local' and match(t))
71 if (repo.tagtype(t) and repo.tagtype(t) != b'local' and match(t))
72 ]
72 ]
73 if tags:
73 if tags:
74 latesttags[rev] = ctx.date()[0], 0, [t for t in sorted(tags)]
74 latesttags[rev] = ctx.date()[0], 0, [t for t in sorted(tags)]
75 continue
75 continue
76 try:
76 try:
77 ptags = [latesttags[p.rev()] for p in ctx.parents()]
77 ptags = [latesttags[p.rev()] for p in ctx.parents()]
78 if len(ptags) > 1:
78 if len(ptags) > 1:
79 if ptags[0][2] == ptags[1][2]:
79 if ptags[0][2] == ptags[1][2]:
80 # The tuples are laid out so the right one can be found by
80 # The tuples are laid out so the right one can be found by
81 # comparison in this case.
81 # comparison in this case.
82 pdate, pdist, ptag = max(ptags)
82 pdate, pdist, ptag = max(ptags)
83 else:
83 else:
84
84
85 def key(x):
85 def key(x):
86 tag = x[2][0]
86 tag = x[2][0]
87 if ctx.rev() is None:
87 if ctx.rev() is None:
88 # only() doesn't support wdir
88 # only() doesn't support wdir
89 prevs = [c.rev() for c in ctx.parents()]
89 prevs = [c.rev() for c in ctx.parents()]
90 changes = repo.revs(b'only(%ld, %s)', prevs, tag)
90 changes = repo.revs(b'only(%ld, %s)', prevs, tag)
91 changessincetag = len(changes) + 1
91 changessincetag = len(changes) + 1
92 else:
92 else:
93 changes = repo.revs(b'only(%d, %s)', ctx.rev(), tag)
93 changes = repo.revs(b'only(%d, %s)', ctx.rev(), tag)
94 changessincetag = len(changes)
94 changessincetag = len(changes)
95 # Smallest number of changes since tag wins. Date is
95 # Smallest number of changes since tag wins. Date is
96 # used as tiebreaker.
96 # used as tiebreaker.
97 return [-changessincetag, x[0]]
97 return [-changessincetag, x[0]]
98
98
99 pdate, pdist, ptag = max(ptags, key=key)
99 pdate, pdist, ptag = max(ptags, key=key)
100 else:
100 else:
101 pdate, pdist, ptag = ptags[0]
101 pdate, pdist, ptag = ptags[0]
102 except KeyError:
102 except KeyError:
103 # Cache miss - recurse
103 # Cache miss - recurse
104 todo.append(rev)
104 todo.append(rev)
105 todo.extend(p.rev() for p in ctx.parents())
105 todo.extend(p.rev() for p in ctx.parents())
106 continue
106 continue
107 latesttags[rev] = pdate, pdist + 1, ptag
107 latesttags[rev] = pdate, pdist + 1, ptag
108 return latesttags[rev]
108 return latesttags[rev]
109
109
110
110
111 def getlogcolumns():
111 def getlogcolumns():
112 """Return a dict of log column labels"""
112 """Return a dict of log column labels"""
113 _ = pycompat.identity # temporarily disable gettext
113 _ = pycompat.identity # temporarily disable gettext
114 # i18n: column positioning for "hg log"
114 # i18n: column positioning for "hg log"
115 columns = _(
115 columns = _(
116 b'bookmark: %s\n'
116 b'bookmark: %s\n'
117 b'branch: %s\n'
117 b'branch: %s\n'
118 b'changeset: %s\n'
118 b'changeset: %s\n'
119 b'copies: %s\n'
119 b'copies: %s\n'
120 b'date: %s\n'
120 b'date: %s\n'
121 b'extra: %s=%s\n'
121 b'extra: %s=%s\n'
122 b'files+: %s\n'
122 b'files+: %s\n'
123 b'files-: %s\n'
123 b'files-: %s\n'
124 b'files: %s\n'
124 b'files: %s\n'
125 b'instability: %s\n'
125 b'instability: %s\n'
126 b'manifest: %s\n'
126 b'manifest: %s\n'
127 b'obsolete: %s\n'
127 b'obsolete: %s\n'
128 b'parent: %s\n'
128 b'parent: %s\n'
129 b'phase: %s\n'
129 b'phase: %s\n'
130 b'summary: %s\n'
130 b'summary: %s\n'
131 b'tag: %s\n'
131 b'tag: %s\n'
132 b'user: %s\n'
132 b'user: %s\n'
133 )
133 )
134 return dict(
134 return dict(
135 zip(
135 zip(
136 [s.split(b':', 1)[0] for s in columns.splitlines()],
136 [s.split(b':', 1)[0] for s in columns.splitlines()],
137 i18n._(columns).splitlines(True),
137 i18n._(columns).splitlines(True),
138 )
138 )
139 )
139 )
140
140
141
141
142 # basic internal templates
142 # basic internal templates
143 _changeidtmpl = b'{rev}:{node|formatnode}'
143 _changeidtmpl = b'{rev}:{node|formatnode}'
144
144
145 # default templates internally used for rendering of lists
145 # default templates internally used for rendering of lists
146 defaulttempl = {
146 defaulttempl = {
147 b'parent': _changeidtmpl + b' ',
147 b'parent': _changeidtmpl + b' ',
148 b'manifest': _changeidtmpl,
148 b'manifest': _changeidtmpl,
149 b'file_copy': b'{name} ({source})',
149 b'file_copy': b'{name} ({source})',
150 b'envvar': b'{key}={value}',
150 b'envvar': b'{key}={value}',
151 b'extra': b'{key}={value|stringescape}',
151 b'extra': b'{key}={value|stringescape}',
152 }
152 }
153 # filecopy is preserved for compatibility reasons
153 # filecopy is preserved for compatibility reasons
154 defaulttempl[b'filecopy'] = defaulttempl[b'file_copy']
154 defaulttempl[b'filecopy'] = defaulttempl[b'file_copy']
155
155
156 # keywords are callables (see registrar.templatekeyword for details)
156 # keywords are callables (see registrar.templatekeyword for details)
157 keywords = {}
157 keywords = {}
158 templatekeyword = registrar.templatekeyword(keywords)
158 templatekeyword = registrar.templatekeyword(keywords)
159
159
160
160
161 @templatekeyword(b'author', requires={b'ctx'})
161 @templatekeyword(b'author', requires={b'ctx'})
162 def showauthor(context, mapping):
162 def showauthor(context, mapping):
163 """Alias for ``{user}``"""
163 """Alias for ``{user}``"""
164 return showuser(context, mapping)
164 return showuser(context, mapping)
165
165
166
166
167 @templatekeyword(b'bisect', requires={b'repo', b'ctx'})
167 @templatekeyword(b'bisect', requires={b'repo', b'ctx'})
168 def showbisect(context, mapping):
168 def showbisect(context, mapping):
169 """String. The changeset bisection status."""
169 """String. The changeset bisection status."""
170 repo = context.resource(mapping, b'repo')
170 repo = context.resource(mapping, b'repo')
171 ctx = context.resource(mapping, b'ctx')
171 ctx = context.resource(mapping, b'ctx')
172 return hbisect.label(repo, ctx.node())
172 return hbisect.label(repo, ctx.node())
173
173
174
174
175 @templatekeyword(b'branch', requires={b'ctx'})
175 @templatekeyword(b'branch', requires={b'ctx'})
176 def showbranch(context, mapping):
176 def showbranch(context, mapping):
177 """String. The name of the branch on which the changeset was
177 """String. The name of the branch on which the changeset was
178 committed.
178 committed.
179 """
179 """
180 ctx = context.resource(mapping, b'ctx')
180 ctx = context.resource(mapping, b'ctx')
181 return ctx.branch()
181 return ctx.branch()
182
182
183
183
184 @templatekeyword(b'branches', requires={b'ctx'})
184 @templatekeyword(b'branches', requires={b'ctx'})
185 def showbranches(context, mapping):
185 def showbranches(context, mapping):
186 """List of strings. The name of the branch on which the
186 """List of strings. The name of the branch on which the
187 changeset was committed. Will be empty if the branch name was
187 changeset was committed. Will be empty if the branch name was
188 default. (DEPRECATED)
188 default. (DEPRECATED)
189 """
189 """
190 ctx = context.resource(mapping, b'ctx')
190 ctx = context.resource(mapping, b'ctx')
191 branch = ctx.branch()
191 branch = ctx.branch()
192 if branch != b'default':
192 if branch != b'default':
193 return compatlist(
193 return compatlist(
194 context, mapping, b'branch', [branch], plural=b'branches'
194 context, mapping, b'branch', [branch], plural=b'branches'
195 )
195 )
196 return compatlist(context, mapping, b'branch', [], plural=b'branches')
196 return compatlist(context, mapping, b'branch', [], plural=b'branches')
197
197
198
198
199 @templatekeyword(b'bookmarks', requires={b'repo', b'ctx'})
199 @templatekeyword(b'bookmarks', requires={b'repo', b'ctx'})
200 def showbookmarks(context, mapping):
200 def showbookmarks(context, mapping):
201 """List of strings. Any bookmarks associated with the
201 """List of strings. Any bookmarks associated with the
202 changeset. Also sets 'active', the name of the active bookmark.
202 changeset. Also sets 'active', the name of the active bookmark.
203 """
203 """
204 repo = context.resource(mapping, b'repo')
204 repo = context.resource(mapping, b'repo')
205 ctx = context.resource(mapping, b'ctx')
205 ctx = context.resource(mapping, b'ctx')
206 bookmarks = ctx.bookmarks()
206 bookmarks = ctx.bookmarks()
207 active = repo._activebookmark
207 active = repo._activebookmark
208 makemap = lambda v: {b'bookmark': v, b'active': active, b'current': active}
208 makemap = lambda v: {b'bookmark': v, b'active': active, b'current': active}
209 f = _showcompatlist(context, mapping, b'bookmark', bookmarks)
209 f = _showcompatlist(context, mapping, b'bookmark', bookmarks)
210 return _hybrid(f, bookmarks, makemap, pycompat.identity)
210 return _hybrid(f, bookmarks, makemap, pycompat.identity)
211
211
212
212
213 @templatekeyword(b'children', requires={b'ctx'})
213 @templatekeyword(b'children', requires={b'ctx'})
214 def showchildren(context, mapping):
214 def showchildren(context, mapping):
215 """List of strings. The children of the changeset."""
215 """List of strings. The children of the changeset."""
216 ctx = context.resource(mapping, b'ctx')
216 ctx = context.resource(mapping, b'ctx')
217 childrevs = [b'%d:%s' % (cctx.rev(), cctx) for cctx in ctx.children()]
217 childrevs = [b'%d:%s' % (cctx.rev(), cctx) for cctx in ctx.children()]
218 return compatlist(
218 return compatlist(
219 context, mapping, b'children', childrevs, element=b'child'
219 context, mapping, b'children', childrevs, element=b'child'
220 )
220 )
221
221
222
222
223 # Deprecated, but kept alive for help generation a purpose.
223 # Deprecated, but kept alive for help generation a purpose.
224 @templatekeyword(b'currentbookmark', requires={b'repo', b'ctx'})
224 @templatekeyword(b'currentbookmark', requires={b'repo', b'ctx'})
225 def showcurrentbookmark(context, mapping):
225 def showcurrentbookmark(context, mapping):
226 """String. The active bookmark, if it is associated with the changeset.
226 """String. The active bookmark, if it is associated with the changeset.
227 (DEPRECATED)"""
227 (DEPRECATED)"""
228 return showactivebookmark(context, mapping)
228 return showactivebookmark(context, mapping)
229
229
230
230
231 @templatekeyword(b'activebookmark', requires={b'repo', b'ctx'})
231 @templatekeyword(b'activebookmark', requires={b'repo', b'ctx'})
232 def showactivebookmark(context, mapping):
232 def showactivebookmark(context, mapping):
233 """String. The active bookmark, if it is associated with the changeset."""
233 """String. The active bookmark, if it is associated with the changeset."""
234 repo = context.resource(mapping, b'repo')
234 repo = context.resource(mapping, b'repo')
235 ctx = context.resource(mapping, b'ctx')
235 ctx = context.resource(mapping, b'ctx')
236 active = repo._activebookmark
236 active = repo._activebookmark
237 if active and active in ctx.bookmarks():
237 if active and active in ctx.bookmarks():
238 return active
238 return active
239 return b''
239 return b''
240
240
241
241
242 @templatekeyword(b'date', requires={b'ctx'})
242 @templatekeyword(b'date', requires={b'ctx'})
243 def showdate(context, mapping):
243 def showdate(context, mapping):
244 """Date information. The date when the changeset was committed."""
244 """Date information. The date when the changeset was committed."""
245 ctx = context.resource(mapping, b'ctx')
245 ctx = context.resource(mapping, b'ctx')
246 # the default string format is '<float(unixtime)><tzoffset>' because
246 # the default string format is '<float(unixtime)><tzoffset>' because
247 # python-hglib splits date at decimal separator.
247 # python-hglib splits date at decimal separator.
248 return templateutil.date(ctx.date(), showfmt=b'%d.0%d')
248 return templateutil.date(ctx.date(), showfmt=b'%d.0%d')
249
249
250
250
251 @templatekeyword(b'desc', requires={b'ctx'})
251 @templatekeyword(b'desc', requires={b'ctx'})
252 def showdescription(context, mapping):
252 def showdescription(context, mapping):
253 """String. The text of the changeset description."""
253 """String. The text of the changeset description."""
254 ctx = context.resource(mapping, b'ctx')
254 ctx = context.resource(mapping, b'ctx')
255 s = ctx.description()
255 s = ctx.description()
256 if isinstance(s, encoding.localstr):
256 if isinstance(s, encoding.localstr):
257 # try hard to preserve utf-8 bytes
257 # try hard to preserve utf-8 bytes
258 return encoding.tolocal(encoding.fromlocal(s).strip())
258 return encoding.tolocal(encoding.fromlocal(s).strip())
259 elif isinstance(s, encoding.safelocalstr):
259 elif isinstance(s, encoding.safelocalstr):
260 return encoding.safelocalstr(s.strip())
260 return encoding.safelocalstr(s.strip())
261 else:
261 else:
262 return s.strip()
262 return s.strip()
263
263
264
264
265 @templatekeyword(b'diffstat', requires={b'ui', b'ctx'})
265 @templatekeyword(b'diffstat', requires={b'ui', b'ctx'})
266 def showdiffstat(context, mapping):
266 def showdiffstat(context, mapping):
267 """String. Statistics of changes with the following format:
267 """String. Statistics of changes with the following format:
268 "modified files: +added/-removed lines"
268 "modified files: +added/-removed lines"
269 """
269 """
270 ui = context.resource(mapping, b'ui')
270 ui = context.resource(mapping, b'ui')
271 ctx = context.resource(mapping, b'ctx')
271 ctx = context.resource(mapping, b'ctx')
272 diffopts = diffutil.diffallopts(ui, {b'noprefix': False})
272 diffopts = diffutil.diffallopts(ui, {b'noprefix': False})
273 diff = ctx.diff(opts=diffopts)
273 diff = ctx.diff(opts=diffopts)
274 stats = patch.diffstatdata(util.iterlines(diff))
274 stats = patch.diffstatdata(util.iterlines(diff))
275 maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats)
275 maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats)
276 return b'%d: +%d/-%d' % (len(stats), adds, removes)
276 return b'%d: +%d/-%d' % (len(stats), adds, removes)
277
277
278
278
279 @templatekeyword(b'envvars', requires={b'ui'})
279 @templatekeyword(b'envvars', requires={b'ui'})
280 def showenvvars(context, mapping):
280 def showenvvars(context, mapping):
281 """A dictionary of environment variables. (EXPERIMENTAL)"""
281 """A dictionary of environment variables. (EXPERIMENTAL)"""
282 ui = context.resource(mapping, b'ui')
282 ui = context.resource(mapping, b'ui')
283 env = ui.exportableenviron()
283 env = ui.exportableenviron()
284 env = util.sortdict((k, env[k]) for k in sorted(env))
284 env = util.sortdict((k, env[k]) for k in sorted(env))
285 return compatdict(context, mapping, b'envvar', env, plural=b'envvars')
285 return compatdict(context, mapping, b'envvar', env, plural=b'envvars')
286
286
287
287
288 @templatekeyword(b'extras', requires={b'ctx'})
288 @templatekeyword(b'extras', requires={b'ctx'})
289 def showextras(context, mapping):
289 def showextras(context, mapping):
290 """List of dicts with key, value entries of the 'extras'
290 """List of dicts with key, value entries of the 'extras'
291 field of this changeset."""
291 field of this changeset."""
292 ctx = context.resource(mapping, b'ctx')
292 ctx = context.resource(mapping, b'ctx')
293 extras = ctx.extra()
293 extras = ctx.extra()
294 extras = util.sortdict((k, extras[k]) for k in sorted(extras))
294 extras = util.sortdict((k, extras[k]) for k in sorted(extras))
295 makemap = lambda k: {b'key': k, b'value': extras[k]}
295 makemap = lambda k: {b'key': k, b'value': extras[k]}
296 c = [makemap(k) for k in extras]
296 c = [makemap(k) for k in extras]
297 f = _showcompatlist(context, mapping, b'extra', c, plural=b'extras')
297 f = _showcompatlist(context, mapping, b'extra', c, plural=b'extras')
298 return _hybrid(
298 return _hybrid(
299 f,
299 f,
300 extras,
300 extras,
301 makemap,
301 makemap,
302 lambda k: b'%s=%s' % (k, stringutil.escapestr(extras[k])),
302 lambda k: b'%s=%s' % (k, stringutil.escapestr(extras[k])),
303 )
303 )
304
304
305
305
306 def _getfilestatus(context, mapping, listall=False):
306 def _getfilestatus(context, mapping, listall=False):
307 ctx = context.resource(mapping, b'ctx')
307 ctx = context.resource(mapping, b'ctx')
308 revcache = context.resource(mapping, b'revcache')
308 revcache = context.resource(mapping, b'revcache')
309 if b'filestatus' not in revcache or revcache[b'filestatusall'] < listall:
309 if b'filestatus' not in revcache or revcache[b'filestatusall'] < listall:
310 stat = ctx.p1().status(
310 stat = ctx.p1().status(
311 ctx, listignored=listall, listclean=listall, listunknown=listall
311 ctx, listignored=listall, listclean=listall, listunknown=listall
312 )
312 )
313 revcache[b'filestatus'] = stat
313 revcache[b'filestatus'] = stat
314 revcache[b'filestatusall'] = listall
314 revcache[b'filestatusall'] = listall
315 return revcache[b'filestatus']
315 return revcache[b'filestatus']
316
316
317
317
318 def _getfilestatusmap(context, mapping, listall=False):
318 def _getfilestatusmap(context, mapping, listall=False):
319 revcache = context.resource(mapping, b'revcache')
319 revcache = context.resource(mapping, b'revcache')
320 if b'filestatusmap' not in revcache or revcache[b'filestatusall'] < listall:
320 if b'filestatusmap' not in revcache or revcache[b'filestatusall'] < listall:
321 stat = _getfilestatus(context, mapping, listall=listall)
321 stat = _getfilestatus(context, mapping, listall=listall)
322 revcache[b'filestatusmap'] = statmap = {}
322 revcache[b'filestatusmap'] = statmap = {}
323 for char, files in zip(pycompat.iterbytestr(b'MAR!?IC'), stat):
323 for char, files in zip(pycompat.iterbytestr(b'MAR!?IC'), stat):
324 statmap.update((f, char) for f in files)
324 statmap.update((f, char) for f in files)
325 return revcache[b'filestatusmap'] # {path: statchar}
325 return revcache[b'filestatusmap'] # {path: statchar}
326
326
327
327
328 @templatekeyword(
328 @templatekeyword(
329 b'file_copies', requires={b'repo', b'ctx', b'cache', b'revcache'}
329 b'file_copies', requires={b'repo', b'ctx', b'cache', b'revcache'}
330 )
330 )
331 def showfilecopies(context, mapping):
331 def showfilecopies(context, mapping):
332 """List of strings. Files copied in this changeset with
332 """List of strings. Files copied in this changeset with
333 their sources.
333 their sources.
334 """
334 """
335 repo = context.resource(mapping, b'repo')
335 repo = context.resource(mapping, b'repo')
336 ctx = context.resource(mapping, b'ctx')
336 ctx = context.resource(mapping, b'ctx')
337 cache = context.resource(mapping, b'cache')
337 cache = context.resource(mapping, b'cache')
338 copies = context.resource(mapping, b'revcache').get(b'copies')
338 copies = context.resource(mapping, b'revcache').get(b'copies')
339 if copies is None:
339 if copies is None:
340 if b'getcopies' not in cache:
340 if b'getcopies' not in cache:
341 cache[b'getcopies'] = scmutil.getcopiesfn(repo)
341 cache[b'getcopies'] = scmutil.getcopiesfn(repo)
342 getcopies = cache[b'getcopies']
342 getcopies = cache[b'getcopies']
343 copies = getcopies(ctx)
343 copies = getcopies(ctx)
344 return templateutil.compatfilecopiesdict(
344 return templateutil.compatfilecopiesdict(
345 context, mapping, b'file_copy', copies
345 context, mapping, b'file_copy', copies
346 )
346 )
347
347
348
348
349 # showfilecopiesswitch() displays file copies only if copy records are
349 # showfilecopiesswitch() displays file copies only if copy records are
350 # provided before calling the templater, usually with a --copies
350 # provided before calling the templater, usually with a --copies
351 # command line switch.
351 # command line switch.
352 @templatekeyword(b'file_copies_switch', requires={b'revcache'})
352 @templatekeyword(b'file_copies_switch', requires={b'revcache'})
353 def showfilecopiesswitch(context, mapping):
353 def showfilecopiesswitch(context, mapping):
354 """List of strings. Like "file_copies" but displayed
354 """List of strings. Like "file_copies" but displayed
355 only if the --copied switch is set.
355 only if the --copied switch is set.
356 """
356 """
357 copies = context.resource(mapping, b'revcache').get(b'copies') or []
357 copies = context.resource(mapping, b'revcache').get(b'copies') or []
358 return templateutil.compatfilecopiesdict(
358 return templateutil.compatfilecopiesdict(
359 context, mapping, b'file_copy', copies
359 context, mapping, b'file_copy', copies
360 )
360 )
361
361
362
362
363 @templatekeyword(b'file_adds', requires={b'ctx', b'revcache'})
363 @templatekeyword(b'file_adds', requires={b'ctx', b'revcache'})
364 def showfileadds(context, mapping):
364 def showfileadds(context, mapping):
365 """List of strings. Files added by this changeset."""
365 """List of strings. Files added by this changeset."""
366 ctx = context.resource(mapping, b'ctx')
366 ctx = context.resource(mapping, b'ctx')
367 return templateutil.compatfileslist(
367 return templateutil.compatfileslist(
368 context, mapping, b'file_add', ctx.filesadded()
368 context, mapping, b'file_add', ctx.filesadded()
369 )
369 )
370
370
371
371
372 @templatekeyword(b'file_dels', requires={b'ctx', b'revcache'})
372 @templatekeyword(b'file_dels', requires={b'ctx', b'revcache'})
373 def showfiledels(context, mapping):
373 def showfiledels(context, mapping):
374 """List of strings. Files removed by this changeset."""
374 """List of strings. Files removed by this changeset."""
375 ctx = context.resource(mapping, b'ctx')
375 ctx = context.resource(mapping, b'ctx')
376 return templateutil.compatfileslist(
376 return templateutil.compatfileslist(
377 context, mapping, b'file_del', ctx.filesremoved()
377 context, mapping, b'file_del', ctx.filesremoved()
378 )
378 )
379
379
380
380
381 @templatekeyword(b'file_mods', requires={b'ctx', b'revcache'})
381 @templatekeyword(b'file_mods', requires={b'ctx', b'revcache'})
382 def showfilemods(context, mapping):
382 def showfilemods(context, mapping):
383 """List of strings. Files modified by this changeset."""
383 """List of strings. Files modified by this changeset."""
384 ctx = context.resource(mapping, b'ctx')
384 ctx = context.resource(mapping, b'ctx')
385 return templateutil.compatfileslist(
385 return templateutil.compatfileslist(
386 context, mapping, b'file_mod', ctx.filesmodified()
386 context, mapping, b'file_mod', ctx.filesmodified()
387 )
387 )
388
388
389
389
390 @templatekeyword(b'files', requires={b'ctx'})
390 @templatekeyword(b'files', requires={b'ctx'})
391 def showfiles(context, mapping):
391 def showfiles(context, mapping):
392 """List of strings. All files modified, added, or removed by this
392 """List of strings. All files modified, added, or removed by this
393 changeset.
393 changeset.
394 """
394 """
395 ctx = context.resource(mapping, b'ctx')
395 ctx = context.resource(mapping, b'ctx')
396 return templateutil.compatfileslist(context, mapping, b'file', ctx.files())
396 return templateutil.compatfileslist(context, mapping, b'file', ctx.files())
397
397
398
398
399 @templatekeyword(b'graphnode', requires={b'repo', b'ctx', b'cache'})
399 @templatekeyword(b'graphnode', requires={b'repo', b'ctx', b'cache'})
400 def showgraphnode(context, mapping):
400 def showgraphnode(context, mapping):
401 """String. The character representing the changeset node in an ASCII
401 """String. The character representing the changeset node in an ASCII
402 revision graph."""
402 revision graph."""
403 repo = context.resource(mapping, b'repo')
403 repo = context.resource(mapping, b'repo')
404 ctx = context.resource(mapping, b'ctx')
404 ctx = context.resource(mapping, b'ctx')
405 cache = context.resource(mapping, b'cache')
405 cache = context.resource(mapping, b'cache')
406 return getgraphnode(repo, ctx, cache)
406 return getgraphnode(repo, ctx, cache)
407
407
408
408
409 def getgraphnode(repo, ctx, cache):
409 def getgraphnode(repo, ctx, cache):
410 return getgraphnodecurrent(repo, ctx, cache) or getgraphnodesymbol(ctx)
410 return getgraphnodecurrent(repo, ctx, cache) or getgraphnodesymbol(ctx)
411
411
412
412
413 def getgraphnodecurrent(repo, ctx, cache):
413 def getgraphnodecurrent(repo, ctx, cache):
414 wpnodes = repo.dirstate.parents()
414 wpnodes = repo.dirstate.parents()
415 if wpnodes[1] == nullid:
415 if wpnodes[1] == nullid:
416 wpnodes = wpnodes[:1]
416 wpnodes = wpnodes[:1]
417 if ctx.node() in wpnodes:
417 if ctx.node() in wpnodes:
418 return b'@'
418 return b'@'
419 else:
419 else:
420 merge_nodes = cache.get(b'merge_nodes')
420 merge_nodes = cache.get(b'merge_nodes')
421 if merge_nodes is None:
421 if merge_nodes is None:
422 from . import mergestate as mergestatemod
422 from . import mergestate as mergestatemod
423
423
424 mergestate = mergestatemod.mergestate.read(repo)
424 mergestate = mergestatemod.mergestate.read(repo)
425 if mergestate.unresolvedcount():
425 if mergestate.unresolvedcount():
426 merge_nodes = (mergestate.local, mergestate.other)
426 merge_nodes = (mergestate.local, mergestate.other)
427 else:
427 else:
428 merge_nodes = ()
428 merge_nodes = ()
429 cache[b'merge_nodes'] = merge_nodes
429 cache[b'merge_nodes'] = merge_nodes
430
430
431 if ctx.node() in merge_nodes:
431 if ctx.node() in merge_nodes:
432 return b'%'
432 return b'%'
433 return b''
433 return b''
434
434
435
435
436 def getgraphnodesymbol(ctx):
436 def getgraphnodesymbol(ctx):
437 if ctx.obsolete():
437 if ctx.obsolete():
438 return b'x'
438 return b'x'
439 elif ctx.isunstable():
439 elif ctx.isunstable():
440 return b'*'
440 return b'*'
441 elif ctx.closesbranch():
441 elif ctx.closesbranch():
442 return b'_'
442 return b'_'
443 else:
443 else:
444 return b'o'
444 return b'o'
445
445
446
446
447 @templatekeyword(b'graphwidth', requires=())
447 @templatekeyword(b'graphwidth', requires=())
448 def showgraphwidth(context, mapping):
448 def showgraphwidth(context, mapping):
449 """Integer. The width of the graph drawn by 'log --graph' or zero."""
449 """Integer. The width of the graph drawn by 'log --graph' or zero."""
450 # just hosts documentation; should be overridden by template mapping
450 # just hosts documentation; should be overridden by template mapping
451 return 0
451 return 0
452
452
453
453
454 @templatekeyword(b'index', requires=())
454 @templatekeyword(b'index', requires=())
455 def showindex(context, mapping):
455 def showindex(context, mapping):
456 """Integer. The current iteration of the loop. (0 indexed)"""
456 """Integer. The current iteration of the loop. (0 indexed)"""
457 # just hosts documentation; should be overridden by template mapping
457 # just hosts documentation; should be overridden by template mapping
458 raise error.Abort(_(b"can't use index in this context"))
458 raise error.Abort(_(b"can't use index in this context"))
459
459
460
460
461 @templatekeyword(b'latesttag', requires={b'repo', b'ctx', b'cache'})
461 @templatekeyword(b'latesttag', requires={b'repo', b'ctx', b'cache'})
462 def showlatesttag(context, mapping):
462 def showlatesttag(context, mapping):
463 """List of strings. The global tags on the most recent globally
463 """List of strings. The global tags on the most recent globally
464 tagged ancestor of this changeset. If no such tags exist, the list
464 tagged ancestor of this changeset. If no such tags exist, the list
465 consists of the single string "null".
465 consists of the single string "null".
466 """
466 """
467 return showlatesttags(context, mapping, None)
467 return showlatesttags(context, mapping, None)
468
468
469
469
470 def showlatesttags(context, mapping, pattern):
470 def showlatesttags(context, mapping, pattern):
471 """helper method for the latesttag keyword and function"""
471 """helper method for the latesttag keyword and function"""
472 latesttags = getlatesttags(context, mapping, pattern)
472 latesttags = getlatesttags(context, mapping, pattern)
473
473
474 # latesttag[0] is an implementation detail for sorting csets on different
474 # latesttag[0] is an implementation detail for sorting csets on different
475 # branches in a stable manner- it is the date the tagged cset was created,
475 # branches in a stable manner- it is the date the tagged cset was created,
476 # not the date the tag was created. Therefore it isn't made visible here.
476 # not the date the tag was created. Therefore it isn't made visible here.
477 makemap = lambda v: {
477 makemap = lambda v: {
478 b'changes': _showchangessincetag,
478 b'changes': _showchangessincetag,
479 b'distance': latesttags[1],
479 b'distance': latesttags[1],
480 b'latesttag': v, # BC with {latesttag % '{latesttag}'}
480 b'latesttag': v, # BC with {latesttag % '{latesttag}'}
481 b'tag': v,
481 b'tag': v,
482 }
482 }
483
483
484 tags = latesttags[2]
484 tags = latesttags[2]
485 f = _showcompatlist(context, mapping, b'latesttag', tags, separator=b':')
485 f = _showcompatlist(context, mapping, b'latesttag', tags, separator=b':')
486 return _hybrid(f, tags, makemap, pycompat.identity)
486 return _hybrid(f, tags, makemap, pycompat.identity)
487
487
488
488
489 @templatekeyword(b'latesttagdistance', requires={b'repo', b'ctx', b'cache'})
489 @templatekeyword(b'latesttagdistance', requires={b'repo', b'ctx', b'cache'})
490 def showlatesttagdistance(context, mapping):
490 def showlatesttagdistance(context, mapping):
491 """Integer. Longest path to the latest tag."""
491 """Integer. Longest path to the latest tag."""
492 return getlatesttags(context, mapping)[1]
492 return getlatesttags(context, mapping)[1]
493
493
494
494
495 @templatekeyword(b'changessincelatesttag', requires={b'repo', b'ctx', b'cache'})
495 @templatekeyword(b'changessincelatesttag', requires={b'repo', b'ctx', b'cache'})
496 def showchangessincelatesttag(context, mapping):
496 def showchangessincelatesttag(context, mapping):
497 """Integer. All ancestors not in the latest tag."""
497 """Integer. All ancestors not in the latest tag."""
498 tag = getlatesttags(context, mapping)[2][0]
498 tag = getlatesttags(context, mapping)[2][0]
499 mapping = context.overlaymap(mapping, {b'tag': tag})
499 mapping = context.overlaymap(mapping, {b'tag': tag})
500 return _showchangessincetag(context, mapping)
500 return _showchangessincetag(context, mapping)
501
501
502
502
503 def _showchangessincetag(context, mapping):
503 def _showchangessincetag(context, mapping):
504 repo = context.resource(mapping, b'repo')
504 repo = context.resource(mapping, b'repo')
505 ctx = context.resource(mapping, b'ctx')
505 ctx = context.resource(mapping, b'ctx')
506 offset = 0
506 offset = 0
507 revs = [ctx.rev()]
507 revs = [ctx.rev()]
508 tag = context.symbol(mapping, b'tag')
508 tag = context.symbol(mapping, b'tag')
509
509
510 # The only() revset doesn't currently support wdir()
510 # The only() revset doesn't currently support wdir()
511 if ctx.rev() is None:
511 if ctx.rev() is None:
512 offset = 1
512 offset = 1
513 revs = [p.rev() for p in ctx.parents()]
513 revs = [p.rev() for p in ctx.parents()]
514
514
515 return len(repo.revs(b'only(%ld, %s)', revs, tag)) + offset
515 return len(repo.revs(b'only(%ld, %s)', revs, tag)) + offset
516
516
517
517
518 # teach templater latesttags.changes is switched to (context, mapping) API
518 # teach templater latesttags.changes is switched to (context, mapping) API
519 _showchangessincetag._requires = {b'repo', b'ctx'}
519 _showchangessincetag._requires = {b'repo', b'ctx'}
520
520
521
521
522 @templatekeyword(b'manifest', requires={b'repo', b'ctx'})
522 @templatekeyword(b'manifest', requires={b'repo', b'ctx'})
523 def showmanifest(context, mapping):
523 def showmanifest(context, mapping):
524 repo = context.resource(mapping, b'repo')
524 repo = context.resource(mapping, b'repo')
525 ctx = context.resource(mapping, b'ctx')
525 ctx = context.resource(mapping, b'ctx')
526 mnode = ctx.manifestnode()
526 mnode = ctx.manifestnode()
527 if mnode is None:
527 if mnode is None:
528 mnode = wdirid
528 mnode = wdirid
529 mrev = wdirrev
529 mrev = wdirrev
530 else:
530 else:
531 mrev = repo.manifestlog.rev(mnode)
531 mrev = repo.manifestlog.rev(mnode)
532 mhex = hex(mnode)
532 mhex = hex(mnode)
533 mapping = context.overlaymap(mapping, {b'rev': mrev, b'node': mhex})
533 mapping = context.overlaymap(mapping, {b'rev': mrev, b'node': mhex})
534 f = context.process(b'manifest', mapping)
534 f = context.process(b'manifest', mapping)
535 return templateutil.hybriditem(
535 return templateutil.hybriditem(
536 f, None, f, lambda x: {b'rev': mrev, b'node': mhex}
536 f, None, f, lambda x: {b'rev': mrev, b'node': mhex}
537 )
537 )
538
538
539
539
540 @templatekeyword(b'obsfate', requires={b'ui', b'repo', b'ctx'})
540 @templatekeyword(b'obsfate', requires={b'ui', b'repo', b'ctx'})
541 def showobsfate(context, mapping):
541 def showobsfate(context, mapping):
542 # this function returns a list containing pre-formatted obsfate strings.
542 # this function returns a list containing pre-formatted obsfate strings.
543 #
543 #
544 # This function will be replaced by templates fragments when we will have
544 # This function will be replaced by templates fragments when we will have
545 # the verbosity templatekw available.
545 # the verbosity templatekw available.
546 succsandmarkers = showsuccsandmarkers(context, mapping)
546 succsandmarkers = showsuccsandmarkers(context, mapping)
547
547
548 ui = context.resource(mapping, b'ui')
548 ui = context.resource(mapping, b'ui')
549 repo = context.resource(mapping, b'repo')
549 repo = context.resource(mapping, b'repo')
550 values = []
550 values = []
551
551
552 for x in succsandmarkers.tovalue(context, mapping):
552 for x in succsandmarkers.tovalue(context, mapping):
553 v = obsutil.obsfateprinter(
553 v = obsutil.obsfateprinter(
554 ui, repo, x[b'successors'], x[b'markers'], scmutil.formatchangeid
554 ui, repo, x[b'successors'], x[b'markers'], scmutil.formatchangeid
555 )
555 )
556 values.append(v)
556 values.append(v)
557
557
558 return compatlist(context, mapping, b"fate", values)
558 return compatlist(context, mapping, b"fate", values)
559
559
560
560
561 def shownames(context, mapping, namespace):
561 def shownames(context, mapping, namespace):
562 """helper method to generate a template keyword for a namespace"""
562 """helper method to generate a template keyword for a namespace"""
563 repo = context.resource(mapping, b'repo')
563 repo = context.resource(mapping, b'repo')
564 ctx = context.resource(mapping, b'ctx')
564 ctx = context.resource(mapping, b'ctx')
565 ns = repo.names.get(namespace)
565 ns = repo.names.get(namespace)
566 if ns is None:
566 if ns is None:
567 # namespaces.addnamespace() registers new template keyword, but
567 # namespaces.addnamespace() registers new template keyword, but
568 # the registered namespace might not exist in the current repo.
568 # the registered namespace might not exist in the current repo.
569 return
569 return
570 names = ns.names(repo, ctx.node())
570 names = ns.names(repo, ctx.node())
571 return compatlist(
571 return compatlist(
572 context, mapping, ns.templatename, names, plural=namespace
572 context, mapping, ns.templatename, names, plural=namespace
573 )
573 )
574
574
575
575
576 @templatekeyword(b'namespaces', requires={b'repo', b'ctx'})
576 @templatekeyword(b'namespaces', requires={b'repo', b'ctx'})
577 def shownamespaces(context, mapping):
577 def shownamespaces(context, mapping):
578 """Dict of lists. Names attached to this changeset per
578 """Dict of lists. Names attached to this changeset per
579 namespace."""
579 namespace."""
580 repo = context.resource(mapping, b'repo')
580 repo = context.resource(mapping, b'repo')
581 ctx = context.resource(mapping, b'ctx')
581 ctx = context.resource(mapping, b'ctx')
582
582
583 namespaces = util.sortdict()
583 namespaces = util.sortdict()
584
584
585 def makensmapfn(ns):
585 def makensmapfn(ns):
586 # 'name' for iterating over namespaces, templatename for local reference
586 # 'name' for iterating over namespaces, templatename for local reference
587 return lambda v: {b'name': v, ns.templatename: v}
587 return lambda v: {b'name': v, ns.templatename: v}
588
588
589 for k, ns in pycompat.iteritems(repo.names):
589 for k, ns in pycompat.iteritems(repo.names):
590 names = ns.names(repo, ctx.node())
590 names = ns.names(repo, ctx.node())
591 f = _showcompatlist(context, mapping, b'name', names)
591 f = _showcompatlist(context, mapping, b'name', names)
592 namespaces[k] = _hybrid(f, names, makensmapfn(ns), pycompat.identity)
592 namespaces[k] = _hybrid(f, names, makensmapfn(ns), pycompat.identity)
593
593
594 f = _showcompatlist(context, mapping, b'namespace', list(namespaces))
594 f = _showcompatlist(context, mapping, b'namespace', list(namespaces))
595
595
596 def makemap(ns):
596 def makemap(ns):
597 return {
597 return {
598 b'namespace': ns,
598 b'namespace': ns,
599 b'names': namespaces[ns],
599 b'names': namespaces[ns],
600 b'builtin': repo.names[ns].builtin,
600 b'builtin': repo.names[ns].builtin,
601 b'colorname': repo.names[ns].colorname,
601 b'colorname': repo.names[ns].colorname,
602 }
602 }
603
603
604 return _hybrid(f, namespaces, makemap, pycompat.identity)
604 return _hybrid(f, namespaces, makemap, pycompat.identity)
605
605
606
606
607 @templatekeyword(b'negrev', requires={b'repo', b'ctx'})
607 @templatekeyword(b'negrev', requires={b'repo', b'ctx'})
608 def shownegrev(context, mapping):
608 def shownegrev(context, mapping):
609 """Integer. The repository-local changeset negative revision number,
609 """Integer. The repository-local changeset negative revision number,
610 which counts in the opposite direction."""
610 which counts in the opposite direction."""
611 ctx = context.resource(mapping, b'ctx')
611 ctx = context.resource(mapping, b'ctx')
612 rev = ctx.rev()
612 rev = ctx.rev()
613 if rev is None or rev < 0: # wdir() or nullrev?
613 if rev is None or rev < 0: # wdir() or nullrev?
614 return None
614 return None
615 repo = context.resource(mapping, b'repo')
615 repo = context.resource(mapping, b'repo')
616 return rev - len(repo)
616 return rev - len(repo)
617
617
618
618
619 @templatekeyword(b'node', requires={b'ctx'})
619 @templatekeyword(b'node', requires={b'ctx'})
620 def shownode(context, mapping):
620 def shownode(context, mapping):
621 """String. The changeset identification hash, as a 40 hexadecimal
621 """String. The changeset identification hash, as a 40 hexadecimal
622 digit string.
622 digit string.
623 """
623 """
624 ctx = context.resource(mapping, b'ctx')
624 ctx = context.resource(mapping, b'ctx')
625 return ctx.hex()
625 return ctx.hex()
626
626
627
627
628 @templatekeyword(b'obsolete', requires={b'ctx'})
628 @templatekeyword(b'obsolete', requires={b'ctx'})
629 def showobsolete(context, mapping):
629 def showobsolete(context, mapping):
630 """String. Whether the changeset is obsolete. (EXPERIMENTAL)"""
630 """String. Whether the changeset is obsolete. (EXPERIMENTAL)"""
631 ctx = context.resource(mapping, b'ctx')
631 ctx = context.resource(mapping, b'ctx')
632 if ctx.obsolete():
632 if ctx.obsolete():
633 return b'obsolete'
633 return b'obsolete'
634 return b''
634 return b''
635
635
636
636
637 @templatekeyword(b'path', requires={b'fctx'})
637 @templatekeyword(b'path', requires={b'fctx'})
638 def showpath(context, mapping):
638 def showpath(context, mapping):
639 """String. Repository-absolute path of the current file. (EXPERIMENTAL)"""
639 """String. Repository-absolute path of the current file. (EXPERIMENTAL)"""
640 fctx = context.resource(mapping, b'fctx')
640 fctx = context.resource(mapping, b'fctx')
641 return fctx.path()
641 return fctx.path()
642
642
643
643
644 @templatekeyword(b'peerurls', requires={b'repo'})
644 @templatekeyword(b'peerurls', requires={b'repo'})
645 def showpeerurls(context, mapping):
645 def showpeerurls(context, mapping):
646 """A dictionary of repository locations defined in the [paths] section
646 """A dictionary of repository locations defined in the [paths] section
647 of your configuration file."""
647 of your configuration file."""
648 repo = context.resource(mapping, b'repo')
648 repo = context.resource(mapping, b'repo')
649 # see commands.paths() for naming of dictionary keys
649 # see commands.paths() for naming of dictionary keys
650 paths = repo.ui.paths
650 paths = repo.ui.paths
651 urls = util.sortdict(
651 urls = util.sortdict(
652 (k, p.rawloc) for k, p in sorted(pycompat.iteritems(paths))
652 (k, p.rawloc) for k, p in sorted(pycompat.iteritems(paths))
653 )
653 )
654
654
655 def makemap(k):
655 def makemap(k):
656 p = paths[k]
656 p = paths[k]
657 d = {b'name': k, b'url': p.rawloc}
657 d = {b'name': k, b'url': p.rawloc}
658 d.update((o, v) for o, v in sorted(pycompat.iteritems(p.suboptions)))
658 d.update((o, v) for o, v in sorted(pycompat.iteritems(p.suboptions)))
659 return d
659 return d
660
660
661 return _hybrid(None, urls, makemap, lambda k: b'%s=%s' % (k, urls[k]))
661 return _hybrid(None, urls, makemap, lambda k: b'%s=%s' % (k, urls[k]))
662
662
663
663
664 @templatekeyword(b"predecessors", requires={b'repo', b'ctx'})
664 @templatekeyword(b"predecessors", requires={b'repo', b'ctx'})
665 def showpredecessors(context, mapping):
665 def showpredecessors(context, mapping):
666 """Returns the list of the closest visible predecessors. (EXPERIMENTAL)"""
666 """Returns the list of the closest visible predecessors. (EXPERIMENTAL)"""
667 repo = context.resource(mapping, b'repo')
667 repo = context.resource(mapping, b'repo')
668 ctx = context.resource(mapping, b'ctx')
668 ctx = context.resource(mapping, b'ctx')
669 predecessors = sorted(obsutil.closestpredecessors(repo, ctx.node()))
669 predecessors = sorted(obsutil.closestpredecessors(repo, ctx.node()))
670 predecessors = pycompat.maplist(hex, predecessors)
670 predecessors = pycompat.maplist(hex, predecessors)
671
671
672 return _hybrid(
672 return _hybrid(
673 None,
673 None,
674 predecessors,
674 predecessors,
675 lambda x: {b'ctx': repo[x]},
675 lambda x: {b'ctx': repo[x]},
676 lambda x: scmutil.formatchangeid(repo[x]),
676 lambda x: scmutil.formatchangeid(repo[x]),
677 )
677 )
678
678
679
679
680 @templatekeyword(b'reporoot', requires={b'repo'})
680 @templatekeyword(b'reporoot', requires={b'repo'})
681 def showreporoot(context, mapping):
681 def showreporoot(context, mapping):
682 """String. The root directory of the current repository."""
682 """String. The root directory of the current repository."""
683 repo = context.resource(mapping, b'repo')
683 repo = context.resource(mapping, b'repo')
684 return repo.root
684 return repo.root
685
685
686
686
687 @templatekeyword(b'size', requires={b'fctx'})
687 @templatekeyword(b'size', requires={b'fctx'})
688 def showsize(context, mapping):
688 def showsize(context, mapping):
689 """Integer. Size of the current file in bytes. (EXPERIMENTAL)"""
689 """Integer. Size of the current file in bytes. (EXPERIMENTAL)"""
690 fctx = context.resource(mapping, b'fctx')
690 fctx = context.resource(mapping, b'fctx')
691 return fctx.size()
691 return fctx.size()
692
692
693
693
694 # requires 'fctx' to denote {status} depends on (ctx, path) pair
694 # requires 'fctx' to denote {status} depends on (ctx, path) pair
695 @templatekeyword(b'status', requires={b'ctx', b'fctx', b'revcache'})
695 @templatekeyword(b'status', requires={b'ctx', b'fctx', b'revcache'})
696 def showstatus(context, mapping):
696 def showstatus(context, mapping):
697 """String. Status code of the current file. (EXPERIMENTAL)"""
697 """String. Status code of the current file. (EXPERIMENTAL)"""
698 path = templateutil.runsymbol(context, mapping, b'path')
698 path = templateutil.runsymbol(context, mapping, b'path')
699 path = templateutil.stringify(context, mapping, path)
699 path = templateutil.stringify(context, mapping, path)
700 if not path:
700 if not path:
701 return
701 return
702 statmap = _getfilestatusmap(context, mapping)
702 statmap = _getfilestatusmap(context, mapping)
703 if path not in statmap:
703 if path not in statmap:
704 statmap = _getfilestatusmap(context, mapping, listall=True)
704 statmap = _getfilestatusmap(context, mapping, listall=True)
705 return statmap.get(path)
705 return statmap.get(path)
706
706
707
707
708 @templatekeyword(b"successorssets", requires={b'repo', b'ctx'})
708 @templatekeyword(b"successorssets", requires={b'repo', b'ctx'})
709 def showsuccessorssets(context, mapping):
709 def showsuccessorssets(context, mapping):
710 """Returns a string of sets of successors for a changectx. Format used
710 """Returns a string of sets of successors for a changectx. Format used
711 is: [ctx1, ctx2], [ctx3] if ctx has been split into ctx1 and ctx2
711 is: [ctx1, ctx2], [ctx3] if ctx has been split into ctx1 and ctx2
712 while also diverged into ctx3. (EXPERIMENTAL)"""
712 while also diverged into ctx3. (EXPERIMENTAL)"""
713 repo = context.resource(mapping, b'repo')
713 repo = context.resource(mapping, b'repo')
714 ctx = context.resource(mapping, b'ctx')
714 ctx = context.resource(mapping, b'ctx')
715 if not ctx.obsolete():
715 data = []
716 return b''
717
716
717 if ctx.obsolete():
718 ssets = obsutil.successorssets(repo, ctx.node(), closest=True)
718 ssets = obsutil.successorssets(repo, ctx.node(), closest=True)
719 ssets = [[hex(n) for n in ss] for ss in ssets]
719 ssets = [[hex(n) for n in ss] for ss in ssets]
720
720
721 data = []
722 for ss in ssets:
721 for ss in ssets:
723 h = _hybrid(
722 h = _hybrid(
724 None,
723 None,
725 ss,
724 ss,
726 lambda x: {b'ctx': repo[x]},
725 lambda x: {b'ctx': repo[x]},
727 lambda x: scmutil.formatchangeid(repo[x]),
726 lambda x: scmutil.formatchangeid(repo[x]),
728 )
727 )
729 data.append(h)
728 data.append(h)
730
729
731 # Format the successorssets
730 # Format the successorssets
732 def render(d):
731 def render(d):
733 return templateutil.stringify(context, mapping, d)
732 return templateutil.stringify(context, mapping, d)
734
733
735 def gen(data):
734 def gen(data):
736 yield b"; ".join(render(d) for d in data)
735 yield b"; ".join(render(d) for d in data)
737
736
738 return _hybrid(
737 return _hybrid(
739 gen(data), data, lambda x: {b'successorset': x}, pycompat.identity
738 gen(data), data, lambda x: {b'successorset': x}, pycompat.identity
740 )
739 )
741
740
742
741
743 @templatekeyword(b"succsandmarkers", requires={b'repo', b'ctx'})
742 @templatekeyword(b"succsandmarkers", requires={b'repo', b'ctx'})
744 def showsuccsandmarkers(context, mapping):
743 def showsuccsandmarkers(context, mapping):
745 """Returns a list of dict for each final successor of ctx. The dict
744 """Returns a list of dict for each final successor of ctx. The dict
746 contains successors node id in "successors" keys and the list of
745 contains successors node id in "successors" keys and the list of
747 obs-markers from ctx to the set of successors in "markers".
746 obs-markers from ctx to the set of successors in "markers".
748 (EXPERIMENTAL)
747 (EXPERIMENTAL)
749 """
748 """
750 repo = context.resource(mapping, b'repo')
749 repo = context.resource(mapping, b'repo')
751 ctx = context.resource(mapping, b'ctx')
750 ctx = context.resource(mapping, b'ctx')
752
751
753 values = obsutil.successorsandmarkers(repo, ctx)
752 values = obsutil.successorsandmarkers(repo, ctx)
754
753
755 if values is None:
754 if values is None:
756 values = []
755 values = []
757
756
758 # Format successors and markers to avoid exposing binary to templates
757 # Format successors and markers to avoid exposing binary to templates
759 data = []
758 data = []
760 for i in values:
759 for i in values:
761 # Format successors
760 # Format successors
762 successors = i[b'successors']
761 successors = i[b'successors']
763
762
764 successors = [hex(n) for n in successors]
763 successors = [hex(n) for n in successors]
765 successors = _hybrid(
764 successors = _hybrid(
766 None,
765 None,
767 successors,
766 successors,
768 lambda x: {b'ctx': repo[x]},
767 lambda x: {b'ctx': repo[x]},
769 lambda x: scmutil.formatchangeid(repo[x]),
768 lambda x: scmutil.formatchangeid(repo[x]),
770 )
769 )
771
770
772 # Format markers
771 # Format markers
773 finalmarkers = []
772 finalmarkers = []
774 for m in i[b'markers']:
773 for m in i[b'markers']:
775 hexprec = hex(m[0])
774 hexprec = hex(m[0])
776 hexsucs = tuple(hex(n) for n in m[1])
775 hexsucs = tuple(hex(n) for n in m[1])
777 hexparents = None
776 hexparents = None
778 if m[5] is not None:
777 if m[5] is not None:
779 hexparents = tuple(hex(n) for n in m[5])
778 hexparents = tuple(hex(n) for n in m[5])
780 newmarker = (hexprec, hexsucs) + m[2:5] + (hexparents,) + m[6:]
779 newmarker = (hexprec, hexsucs) + m[2:5] + (hexparents,) + m[6:]
781 finalmarkers.append(newmarker)
780 finalmarkers.append(newmarker)
782
781
783 data.append({b'successors': successors, b'markers': finalmarkers})
782 data.append({b'successors': successors, b'markers': finalmarkers})
784
783
785 return templateutil.mappinglist(data)
784 return templateutil.mappinglist(data)
786
785
787
786
788 @templatekeyword(b'p1', requires={b'ctx'})
787 @templatekeyword(b'p1', requires={b'ctx'})
789 def showp1(context, mapping):
788 def showp1(context, mapping):
790 """Changeset. The changeset's first parent. ``{p1.rev}`` for the revision
789 """Changeset. The changeset's first parent. ``{p1.rev}`` for the revision
791 number, and ``{p1.node}`` for the identification hash."""
790 number, and ``{p1.node}`` for the identification hash."""
792 ctx = context.resource(mapping, b'ctx')
791 ctx = context.resource(mapping, b'ctx')
793 return templateutil.mappingdict({b'ctx': ctx.p1()}, tmpl=_changeidtmpl)
792 return templateutil.mappingdict({b'ctx': ctx.p1()}, tmpl=_changeidtmpl)
794
793
795
794
796 @templatekeyword(b'p2', requires={b'ctx'})
795 @templatekeyword(b'p2', requires={b'ctx'})
797 def showp2(context, mapping):
796 def showp2(context, mapping):
798 """Changeset. The changeset's second parent. ``{p2.rev}`` for the revision
797 """Changeset. The changeset's second parent. ``{p2.rev}`` for the revision
799 number, and ``{p2.node}`` for the identification hash."""
798 number, and ``{p2.node}`` for the identification hash."""
800 ctx = context.resource(mapping, b'ctx')
799 ctx = context.resource(mapping, b'ctx')
801 return templateutil.mappingdict({b'ctx': ctx.p2()}, tmpl=_changeidtmpl)
800 return templateutil.mappingdict({b'ctx': ctx.p2()}, tmpl=_changeidtmpl)
802
801
803
802
804 @templatekeyword(b'p1rev', requires={b'ctx'})
803 @templatekeyword(b'p1rev', requires={b'ctx'})
805 def showp1rev(context, mapping):
804 def showp1rev(context, mapping):
806 """Integer. The repository-local revision number of the changeset's
805 """Integer. The repository-local revision number of the changeset's
807 first parent, or -1 if the changeset has no parents. (DEPRECATED)"""
806 first parent, or -1 if the changeset has no parents. (DEPRECATED)"""
808 ctx = context.resource(mapping, b'ctx')
807 ctx = context.resource(mapping, b'ctx')
809 return ctx.p1().rev()
808 return ctx.p1().rev()
810
809
811
810
812 @templatekeyword(b'p2rev', requires={b'ctx'})
811 @templatekeyword(b'p2rev', requires={b'ctx'})
813 def showp2rev(context, mapping):
812 def showp2rev(context, mapping):
814 """Integer. The repository-local revision number of the changeset's
813 """Integer. The repository-local revision number of the changeset's
815 second parent, or -1 if the changeset has no second parent. (DEPRECATED)"""
814 second parent, or -1 if the changeset has no second parent. (DEPRECATED)"""
816 ctx = context.resource(mapping, b'ctx')
815 ctx = context.resource(mapping, b'ctx')
817 return ctx.p2().rev()
816 return ctx.p2().rev()
818
817
819
818
820 @templatekeyword(b'p1node', requires={b'ctx'})
819 @templatekeyword(b'p1node', requires={b'ctx'})
821 def showp1node(context, mapping):
820 def showp1node(context, mapping):
822 """String. The identification hash of the changeset's first parent,
821 """String. The identification hash of the changeset's first parent,
823 as a 40 digit hexadecimal string. If the changeset has no parents, all
822 as a 40 digit hexadecimal string. If the changeset has no parents, all
824 digits are 0. (DEPRECATED)"""
823 digits are 0. (DEPRECATED)"""
825 ctx = context.resource(mapping, b'ctx')
824 ctx = context.resource(mapping, b'ctx')
826 return ctx.p1().hex()
825 return ctx.p1().hex()
827
826
828
827
829 @templatekeyword(b'p2node', requires={b'ctx'})
828 @templatekeyword(b'p2node', requires={b'ctx'})
830 def showp2node(context, mapping):
829 def showp2node(context, mapping):
831 """String. The identification hash of the changeset's second
830 """String. The identification hash of the changeset's second
832 parent, as a 40 digit hexadecimal string. If the changeset has no second
831 parent, as a 40 digit hexadecimal string. If the changeset has no second
833 parent, all digits are 0. (DEPRECATED)"""
832 parent, all digits are 0. (DEPRECATED)"""
834 ctx = context.resource(mapping, b'ctx')
833 ctx = context.resource(mapping, b'ctx')
835 return ctx.p2().hex()
834 return ctx.p2().hex()
836
835
837
836
838 @templatekeyword(b'parents', requires={b'repo', b'ctx'})
837 @templatekeyword(b'parents', requires={b'repo', b'ctx'})
839 def showparents(context, mapping):
838 def showparents(context, mapping):
840 """List of strings. The parents of the changeset in "rev:node"
839 """List of strings. The parents of the changeset in "rev:node"
841 format. If the changeset has only one "natural" parent (the predecessor
840 format. If the changeset has only one "natural" parent (the predecessor
842 revision) nothing is shown."""
841 revision) nothing is shown."""
843 repo = context.resource(mapping, b'repo')
842 repo = context.resource(mapping, b'repo')
844 ctx = context.resource(mapping, b'ctx')
843 ctx = context.resource(mapping, b'ctx')
845 pctxs = scmutil.meaningfulparents(repo, ctx)
844 pctxs = scmutil.meaningfulparents(repo, ctx)
846 prevs = [p.rev() for p in pctxs]
845 prevs = [p.rev() for p in pctxs]
847 parents = [
846 parents = [
848 [(b'rev', p.rev()), (b'node', p.hex()), (b'phase', p.phasestr())]
847 [(b'rev', p.rev()), (b'node', p.hex()), (b'phase', p.phasestr())]
849 for p in pctxs
848 for p in pctxs
850 ]
849 ]
851 f = _showcompatlist(context, mapping, b'parent', parents)
850 f = _showcompatlist(context, mapping, b'parent', parents)
852 return _hybrid(
851 return _hybrid(
853 f,
852 f,
854 prevs,
853 prevs,
855 lambda x: {b'ctx': repo[x]},
854 lambda x: {b'ctx': repo[x]},
856 lambda x: scmutil.formatchangeid(repo[x]),
855 lambda x: scmutil.formatchangeid(repo[x]),
857 keytype=int,
856 keytype=int,
858 )
857 )
859
858
860
859
861 @templatekeyword(b'phase', requires={b'ctx'})
860 @templatekeyword(b'phase', requires={b'ctx'})
862 def showphase(context, mapping):
861 def showphase(context, mapping):
863 """String. The changeset phase name."""
862 """String. The changeset phase name."""
864 ctx = context.resource(mapping, b'ctx')
863 ctx = context.resource(mapping, b'ctx')
865 return ctx.phasestr()
864 return ctx.phasestr()
866
865
867
866
868 @templatekeyword(b'phaseidx', requires={b'ctx'})
867 @templatekeyword(b'phaseidx', requires={b'ctx'})
869 def showphaseidx(context, mapping):
868 def showphaseidx(context, mapping):
870 """Integer. The changeset phase index. (ADVANCED)"""
869 """Integer. The changeset phase index. (ADVANCED)"""
871 ctx = context.resource(mapping, b'ctx')
870 ctx = context.resource(mapping, b'ctx')
872 return ctx.phase()
871 return ctx.phase()
873
872
874
873
875 @templatekeyword(b'rev', requires={b'ctx'})
874 @templatekeyword(b'rev', requires={b'ctx'})
876 def showrev(context, mapping):
875 def showrev(context, mapping):
877 """Integer. The repository-local changeset revision number."""
876 """Integer. The repository-local changeset revision number."""
878 ctx = context.resource(mapping, b'ctx')
877 ctx = context.resource(mapping, b'ctx')
879 return scmutil.intrev(ctx)
878 return scmutil.intrev(ctx)
880
879
881
880
882 @templatekeyword(b'subrepos', requires={b'ctx'})
881 @templatekeyword(b'subrepos', requires={b'ctx'})
883 def showsubrepos(context, mapping):
882 def showsubrepos(context, mapping):
884 """List of strings. Updated subrepositories in the changeset."""
883 """List of strings. Updated subrepositories in the changeset."""
885 ctx = context.resource(mapping, b'ctx')
884 ctx = context.resource(mapping, b'ctx')
886 substate = ctx.substate
885 substate = ctx.substate
887 if not substate:
886 if not substate:
888 return compatlist(context, mapping, b'subrepo', [])
887 return compatlist(context, mapping, b'subrepo', [])
889 psubstate = ctx.p1().substate or {}
888 psubstate = ctx.p1().substate or {}
890 subrepos = []
889 subrepos = []
891 for sub in substate:
890 for sub in substate:
892 if sub not in psubstate or substate[sub] != psubstate[sub]:
891 if sub not in psubstate or substate[sub] != psubstate[sub]:
893 subrepos.append(sub) # modified or newly added in ctx
892 subrepos.append(sub) # modified or newly added in ctx
894 for sub in psubstate:
893 for sub in psubstate:
895 if sub not in substate:
894 if sub not in substate:
896 subrepos.append(sub) # removed in ctx
895 subrepos.append(sub) # removed in ctx
897 return compatlist(context, mapping, b'subrepo', sorted(subrepos))
896 return compatlist(context, mapping, b'subrepo', sorted(subrepos))
898
897
899
898
900 # don't remove "showtags" definition, even though namespaces will put
899 # don't remove "showtags" definition, even though namespaces will put
901 # a helper function for "tags" keyword into "keywords" map automatically,
900 # a helper function for "tags" keyword into "keywords" map automatically,
902 # because online help text is built without namespaces initialization
901 # because online help text is built without namespaces initialization
903 @templatekeyword(b'tags', requires={b'repo', b'ctx'})
902 @templatekeyword(b'tags', requires={b'repo', b'ctx'})
904 def showtags(context, mapping):
903 def showtags(context, mapping):
905 """List of strings. Any tags associated with the changeset."""
904 """List of strings. Any tags associated with the changeset."""
906 return shownames(context, mapping, b'tags')
905 return shownames(context, mapping, b'tags')
907
906
908
907
909 @templatekeyword(b'termwidth', requires={b'ui'})
908 @templatekeyword(b'termwidth', requires={b'ui'})
910 def showtermwidth(context, mapping):
909 def showtermwidth(context, mapping):
911 """Integer. The width of the current terminal."""
910 """Integer. The width of the current terminal."""
912 ui = context.resource(mapping, b'ui')
911 ui = context.resource(mapping, b'ui')
913 return ui.termwidth()
912 return ui.termwidth()
914
913
915
914
916 @templatekeyword(b'user', requires={b'ctx'})
915 @templatekeyword(b'user', requires={b'ctx'})
917 def showuser(context, mapping):
916 def showuser(context, mapping):
918 """String. The unmodified author of the changeset."""
917 """String. The unmodified author of the changeset."""
919 ctx = context.resource(mapping, b'ctx')
918 ctx = context.resource(mapping, b'ctx')
920 return ctx.user()
919 return ctx.user()
921
920
922
921
923 @templatekeyword(b'instabilities', requires={b'ctx'})
922 @templatekeyword(b'instabilities', requires={b'ctx'})
924 def showinstabilities(context, mapping):
923 def showinstabilities(context, mapping):
925 """List of strings. Evolution instabilities affecting the changeset.
924 """List of strings. Evolution instabilities affecting the changeset.
926 (EXPERIMENTAL)
925 (EXPERIMENTAL)
927 """
926 """
928 ctx = context.resource(mapping, b'ctx')
927 ctx = context.resource(mapping, b'ctx')
929 return compatlist(
928 return compatlist(
930 context,
929 context,
931 mapping,
930 mapping,
932 b'instability',
931 b'instability',
933 ctx.instabilities(),
932 ctx.instabilities(),
934 plural=b'instabilities',
933 plural=b'instabilities',
935 )
934 )
936
935
937
936
938 @templatekeyword(b'verbosity', requires={b'ui'})
937 @templatekeyword(b'verbosity', requires={b'ui'})
939 def showverbosity(context, mapping):
938 def showverbosity(context, mapping):
940 """String. The current output verbosity in 'debug', 'quiet', 'verbose',
939 """String. The current output verbosity in 'debug', 'quiet', 'verbose',
941 or ''."""
940 or ''."""
942 ui = context.resource(mapping, b'ui')
941 ui = context.resource(mapping, b'ui')
943 # see logcmdutil.changesettemplater for priority of these flags
942 # see logcmdutil.changesettemplater for priority of these flags
944 if ui.debugflag:
943 if ui.debugflag:
945 return b'debug'
944 return b'debug'
946 elif ui.quiet:
945 elif ui.quiet:
947 return b'quiet'
946 return b'quiet'
948 elif ui.verbose:
947 elif ui.verbose:
949 return b'verbose'
948 return b'verbose'
950 return b''
949 return b''
951
950
952
951
953 @templatekeyword(b'whyunstable', requires={b'repo', b'ctx'})
952 @templatekeyword(b'whyunstable', requires={b'repo', b'ctx'})
954 def showwhyunstable(context, mapping):
953 def showwhyunstable(context, mapping):
955 """List of dicts explaining all instabilities of a changeset.
954 """List of dicts explaining all instabilities of a changeset.
956 (EXPERIMENTAL)
955 (EXPERIMENTAL)
957 """
956 """
958 repo = context.resource(mapping, b'repo')
957 repo = context.resource(mapping, b'repo')
959 ctx = context.resource(mapping, b'ctx')
958 ctx = context.resource(mapping, b'ctx')
960
959
961 def formatnode(ctx):
960 def formatnode(ctx):
962 return b'%s (%s)' % (scmutil.formatchangeid(ctx), ctx.phasestr())
961 return b'%s (%s)' % (scmutil.formatchangeid(ctx), ctx.phasestr())
963
962
964 entries = obsutil.whyunstable(repo, ctx)
963 entries = obsutil.whyunstable(repo, ctx)
965
964
966 for entry in entries:
965 for entry in entries:
967 if entry.get(b'divergentnodes'):
966 if entry.get(b'divergentnodes'):
968 dnodes = entry[b'divergentnodes']
967 dnodes = entry[b'divergentnodes']
969 dnhybrid = _hybrid(
968 dnhybrid = _hybrid(
970 None,
969 None,
971 [dnode.hex() for dnode in dnodes],
970 [dnode.hex() for dnode in dnodes],
972 lambda x: {b'ctx': repo[x]},
971 lambda x: {b'ctx': repo[x]},
973 lambda x: formatnode(repo[x]),
972 lambda x: formatnode(repo[x]),
974 )
973 )
975 entry[b'divergentnodes'] = dnhybrid
974 entry[b'divergentnodes'] = dnhybrid
976
975
977 tmpl = (
976 tmpl = (
978 b'{instability}:{if(divergentnodes, " ")}{divergentnodes} '
977 b'{instability}:{if(divergentnodes, " ")}{divergentnodes} '
979 b'{reason} {node|short}'
978 b'{reason} {node|short}'
980 )
979 )
981 return templateutil.mappinglist(entries, tmpl=tmpl, sep=b'\n')
980 return templateutil.mappinglist(entries, tmpl=tmpl, sep=b'\n')
982
981
983
982
984 def loadkeyword(ui, extname, registrarobj):
983 def loadkeyword(ui, extname, registrarobj):
985 """Load template keyword from specified registrarobj
984 """Load template keyword from specified registrarobj
986 """
985 """
987 for name, func in pycompat.iteritems(registrarobj._table):
986 for name, func in pycompat.iteritems(registrarobj._table):
988 keywords[name] = func
987 keywords[name] = func
989
988
990
989
991 # tell hggettext to extract docstrings from these functions:
990 # tell hggettext to extract docstrings from these functions:
992 i18nfunctions = keywords.values()
991 i18nfunctions = keywords.values()
@@ -1,3192 +1,3192 b''
1 This test file test the various templates related to obsmarkers.
1 This test file test the various templates related to obsmarkers.
2
2
3 Global setup
3 Global setup
4 ============
4 ============
5
5
6 $ . $TESTDIR/testlib/obsmarker-common.sh
6 $ . $TESTDIR/testlib/obsmarker-common.sh
7 $ cat >> $HGRCPATH <<EOF
7 $ cat >> $HGRCPATH <<EOF
8 > [ui]
8 > [ui]
9 > interactive = true
9 > interactive = true
10 > [phases]
10 > [phases]
11 > publish=False
11 > publish=False
12 > [experimental]
12 > [experimental]
13 > evolution=true
13 > evolution=true
14 > [templates]
14 > [templates]
15 > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}"
15 > obsfatesuccessors = "{if(successors, " as ")}{join(successors, ", ")}"
16 > obsfateverb = "{obsfateverb(successors, markers)}"
16 > obsfateverb = "{obsfateverb(successors, markers)}"
17 > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}"
17 > obsfateoperations = "{if(obsfateoperations(markers), " using {join(obsfateoperations(markers), ", ")}")}"
18 > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}"
18 > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}"
19 > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}"
19 > obsfatedate = "{if(obsfatedate(markers), "{ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), " (at {min(obsfatedate(markers))|isodate})", " (between {min(obsfatedate(markers))|isodate} and {max(obsfatedate(markers))|isodate})")}")}"
20 > obsfatetempl = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; "
20 > obsfatetempl = "{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}; "
21 > [alias]
21 > [alias]
22 > tlog = log -G -T '{node|short}\
22 > tlog = log -G -T '{node|short}\
23 > \n Predecessors: {predecessors}\
23 > \n Predecessors: {predecessors}\
24 > \n semi-colon: {join(predecessors, "; ")}\
24 > \n semi-colon: {join(predecessors, "; ")}\
25 > \n json: {predecessors|json}\
25 > \n json: {predecessors|json}\
26 > \n map: {join(predecessors % "{rev}:{node}", " ")}\
26 > \n map: {join(predecessors % "{rev}:{node}", " ")}\
27 > \n Successors: {successorssets}\
27 > \n Successors: {successorssets}\
28 > \n multi-line: {join(successorssets, "\n multi-line: ")}\
28 > \n multi-line: {join(successorssets, "\n multi-line: ")}\
29 > \n json: {successorssets|json}\n'
29 > \n json: {successorssets|json}\n'
30 > fatelog = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers % "{obsfatetempl}"} \n" )}'
30 > fatelog = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers % "{obsfatetempl}"} \n" )}'
31 > fatelogjson = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers|json}\n")}'
31 > fatelogjson = log -G -T '{node|short}\n{if(succsandmarkers, " Obsfate: {succsandmarkers|json}\n")}'
32 > fatelogkw = log -G -T '{node|short}\n{if(obsfate, "{obsfate % " Obsfate: {fate}\n"}")}'
32 > fatelogkw = log -G -T '{node|short}\n{if(obsfate, "{obsfate % " Obsfate: {fate}\n"}")}'
33 > EOF
33 > EOF
34
34
35 Test templates on amended commit
35 Test templates on amended commit
36 ================================
36 ================================
37
37
38 Test setup
38 Test setup
39 ----------
39 ----------
40
40
41 $ hg init $TESTTMP/templates-local-amend
41 $ hg init $TESTTMP/templates-local-amend
42 $ cd $TESTTMP/templates-local-amend
42 $ cd $TESTTMP/templates-local-amend
43 $ mkcommit ROOT
43 $ mkcommit ROOT
44 $ mkcommit A0
44 $ mkcommit A0
45 $ echo 42 >> A0
45 $ echo 42 >> A0
46 $ hg commit --amend -m "A1" --config devel.default-date="1234567890 0"
46 $ hg commit --amend -m "A1" --config devel.default-date="1234567890 0"
47 $ hg commit --amend -m "A2" --config devel.default-date="987654321 0" --config devel.user.obsmarker=test2
47 $ hg commit --amend -m "A2" --config devel.default-date="987654321 0" --config devel.user.obsmarker=test2
48
48
49 $ hg log --hidden -G
49 $ hg log --hidden -G
50 @ changeset: 3:d004c8f274b9
50 @ changeset: 3:d004c8f274b9
51 | tag: tip
51 | tag: tip
52 | parent: 0:ea207398892e
52 | parent: 0:ea207398892e
53 | user: test
53 | user: test
54 | date: Thu Jan 01 00:00:00 1970 +0000
54 | date: Thu Jan 01 00:00:00 1970 +0000
55 | summary: A2
55 | summary: A2
56 |
56 |
57 | x changeset: 2:a468dc9b3633
57 | x changeset: 2:a468dc9b3633
58 |/ parent: 0:ea207398892e
58 |/ parent: 0:ea207398892e
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 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2
61 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2
62 | summary: A1
62 | summary: A1
63 |
63 |
64 | x changeset: 1:471f378eab4c
64 | x changeset: 1:471f378eab4c
65 |/ user: test
65 |/ user: test
66 | date: Thu Jan 01 00:00:00 1970 +0000
66 | date: Thu Jan 01 00:00:00 1970 +0000
67 | obsolete: rewritten using amend as 2:a468dc9b3633
67 | obsolete: rewritten using amend as 2:a468dc9b3633
68 | summary: A0
68 | summary: A0
69 |
69 |
70 o changeset: 0:ea207398892e
70 o changeset: 0:ea207398892e
71 user: test
71 user: test
72 date: Thu Jan 01 00:00:00 1970 +0000
72 date: Thu Jan 01 00:00:00 1970 +0000
73 summary: ROOT
73 summary: ROOT
74
74
75 Check templates
75 Check templates
76 ---------------
76 ---------------
77 $ hg up 'desc(A0)' --hidden
77 $ hg up 'desc(A0)' --hidden
78 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
78 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
79 updated to hidden changeset 471f378eab4c
79 updated to hidden changeset 471f378eab4c
80 (hidden revision '471f378eab4c' was rewritten as: d004c8f274b9)
80 (hidden revision '471f378eab4c' was rewritten as: d004c8f274b9)
81
81
82 Predecessors template should show current revision as it is the working copy
82 Predecessors template should show current revision as it is the working copy
83 $ hg tlog
83 $ hg tlog
84 o d004c8f274b9
84 o d004c8f274b9
85 | Predecessors: 1:471f378eab4c
85 | Predecessors: 1:471f378eab4c
86 | semi-colon: 1:471f378eab4c
86 | semi-colon: 1:471f378eab4c
87 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
87 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
88 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
88 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
89 | Successors:
89 | Successors:
90 | multi-line:
90 | multi-line:
91 | json: ""
91 | json: []
92 | @ 471f378eab4c
92 | @ 471f378eab4c
93 |/ Predecessors:
93 |/ Predecessors:
94 | semi-colon:
94 | semi-colon:
95 | json: []
95 | json: []
96 | map:
96 | map:
97 | Successors: 3:d004c8f274b9
97 | Successors: 3:d004c8f274b9
98 | multi-line: 3:d004c8f274b9
98 | multi-line: 3:d004c8f274b9
99 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
99 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
100 o ea207398892e
100 o ea207398892e
101 Predecessors:
101 Predecessors:
102 semi-colon:
102 semi-colon:
103 json: []
103 json: []
104 map:
104 map:
105 Successors:
105 Successors:
106 multi-line:
106 multi-line:
107 json: ""
107 json: []
108
108
109 $ hg fatelog
109 $ hg fatelog
110 o d004c8f274b9
110 o d004c8f274b9
111 |
111 |
112 | @ 471f378eab4c
112 | @ 471f378eab4c
113 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000);
113 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000);
114 o ea207398892e
114 o ea207398892e
115
115
116
116
117 $ hg fatelogkw
117 $ hg fatelogkw
118 o d004c8f274b9
118 o d004c8f274b9
119 |
119 |
120 | @ 471f378eab4c
120 | @ 471f378eab4c
121 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2
121 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2
122 o ea207398892e
122 o ea207398892e
123
123
124
124
125 $ hg log -G --config ui.logtemplate=
125 $ hg log -G --config ui.logtemplate=
126 o changeset: 3:d004c8f274b9
126 o changeset: 3:d004c8f274b9
127 | tag: tip
127 | tag: tip
128 | parent: 0:ea207398892e
128 | parent: 0:ea207398892e
129 | user: test
129 | user: test
130 | date: Thu Jan 01 00:00:00 1970 +0000
130 | date: Thu Jan 01 00:00:00 1970 +0000
131 | summary: A2
131 | summary: A2
132 |
132 |
133 | @ changeset: 1:471f378eab4c
133 | @ changeset: 1:471f378eab4c
134 |/ user: test
134 |/ user: test
135 | date: Thu Jan 01 00:00:00 1970 +0000
135 | date: Thu Jan 01 00:00:00 1970 +0000
136 | obsolete: rewritten using amend as 3:d004c8f274b9 by test, test2
136 | obsolete: rewritten using amend as 3:d004c8f274b9 by test, test2
137 | summary: A0
137 | summary: A0
138 |
138 |
139 o changeset: 0:ea207398892e
139 o changeset: 0:ea207398892e
140 user: test
140 user: test
141 date: Thu Jan 01 00:00:00 1970 +0000
141 date: Thu Jan 01 00:00:00 1970 +0000
142 summary: ROOT
142 summary: ROOT
143
143
144
144
145 $ hg log -G -T "default"
145 $ hg log -G -T "default"
146 o changeset: 3:d004c8f274b9
146 o changeset: 3:d004c8f274b9
147 | tag: tip
147 | tag: tip
148 | parent: 0:ea207398892e
148 | parent: 0:ea207398892e
149 | user: test
149 | user: test
150 | date: Thu Jan 01 00:00:00 1970 +0000
150 | date: Thu Jan 01 00:00:00 1970 +0000
151 | summary: A2
151 | summary: A2
152 |
152 |
153 | @ changeset: 1:471f378eab4c
153 | @ changeset: 1:471f378eab4c
154 |/ user: test
154 |/ user: test
155 | date: Thu Jan 01 00:00:00 1970 +0000
155 | date: Thu Jan 01 00:00:00 1970 +0000
156 | obsolete: rewritten using amend as 3:d004c8f274b9 by test, test2
156 | obsolete: rewritten using amend as 3:d004c8f274b9 by test, test2
157 | summary: A0
157 | summary: A0
158 |
158 |
159 o changeset: 0:ea207398892e
159 o changeset: 0:ea207398892e
160 user: test
160 user: test
161 date: Thu Jan 01 00:00:00 1970 +0000
161 date: Thu Jan 01 00:00:00 1970 +0000
162 summary: ROOT
162 summary: ROOT
163
163
164 $ hg up 'desc(A1)' --hidden
164 $ hg up 'desc(A1)' --hidden
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
166 updated to hidden changeset a468dc9b3633
166 updated to hidden changeset a468dc9b3633
167 (hidden revision 'a468dc9b3633' was rewritten as: d004c8f274b9)
167 (hidden revision 'a468dc9b3633' was rewritten as: d004c8f274b9)
168
168
169 Predecessors template should show current revision as it is the working copy
169 Predecessors template should show current revision as it is the working copy
170 $ hg tlog
170 $ hg tlog
171 o d004c8f274b9
171 o d004c8f274b9
172 | Predecessors: 2:a468dc9b3633
172 | Predecessors: 2:a468dc9b3633
173 | semi-colon: 2:a468dc9b3633
173 | semi-colon: 2:a468dc9b3633
174 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
174 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
175 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
175 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
176 | Successors:
176 | Successors:
177 | multi-line:
177 | multi-line:
178 | json: ""
178 | json: []
179 | @ a468dc9b3633
179 | @ a468dc9b3633
180 |/ Predecessors:
180 |/ Predecessors:
181 | semi-colon:
181 | semi-colon:
182 | json: []
182 | json: []
183 | map:
183 | map:
184 | Successors: 3:d004c8f274b9
184 | Successors: 3:d004c8f274b9
185 | multi-line: 3:d004c8f274b9
185 | multi-line: 3:d004c8f274b9
186 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
186 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
187 o ea207398892e
187 o ea207398892e
188 Predecessors:
188 Predecessors:
189 semi-colon:
189 semi-colon:
190 json: []
190 json: []
191 map:
191 map:
192 Successors:
192 Successors:
193 multi-line:
193 multi-line:
194 json: ""
194 json: []
195
195
196 $ hg fatelog
196 $ hg fatelog
197 o d004c8f274b9
197 o d004c8f274b9
198 |
198 |
199 | @ a468dc9b3633
199 | @ a468dc9b3633
200 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
200 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
201 o ea207398892e
201 o ea207398892e
202
202
203 Predecessors template should show all the predecessors as we force their display
203 Predecessors template should show all the predecessors as we force their display
204 with --hidden
204 with --hidden
205 $ hg tlog --hidden
205 $ hg tlog --hidden
206 o d004c8f274b9
206 o d004c8f274b9
207 | Predecessors: 2:a468dc9b3633
207 | Predecessors: 2:a468dc9b3633
208 | semi-colon: 2:a468dc9b3633
208 | semi-colon: 2:a468dc9b3633
209 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
209 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
210 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
210 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
211 | Successors:
211 | Successors:
212 | multi-line:
212 | multi-line:
213 | json: ""
213 | json: []
214 | @ a468dc9b3633
214 | @ a468dc9b3633
215 |/ Predecessors: 1:471f378eab4c
215 |/ Predecessors: 1:471f378eab4c
216 | semi-colon: 1:471f378eab4c
216 | semi-colon: 1:471f378eab4c
217 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
217 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
218 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
218 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
219 | Successors: 3:d004c8f274b9
219 | Successors: 3:d004c8f274b9
220 | multi-line: 3:d004c8f274b9
220 | multi-line: 3:d004c8f274b9
221 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
221 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
222 | x 471f378eab4c
222 | x 471f378eab4c
223 |/ Predecessors:
223 |/ Predecessors:
224 | semi-colon:
224 | semi-colon:
225 | json: []
225 | json: []
226 | map:
226 | map:
227 | Successors: 2:a468dc9b3633
227 | Successors: 2:a468dc9b3633
228 | multi-line: 2:a468dc9b3633
228 | multi-line: 2:a468dc9b3633
229 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
229 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
230 o ea207398892e
230 o ea207398892e
231 Predecessors:
231 Predecessors:
232 semi-colon:
232 semi-colon:
233 json: []
233 json: []
234 map:
234 map:
235 Successors:
235 Successors:
236 multi-line:
236 multi-line:
237 json: ""
237 json: []
238
238
239 $ hg fatelog --hidden
239 $ hg fatelog --hidden
240 o d004c8f274b9
240 o d004c8f274b9
241 |
241 |
242 | @ a468dc9b3633
242 | @ a468dc9b3633
243 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
243 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
244 | x 471f378eab4c
244 | x 471f378eab4c
245 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
245 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
246 o ea207398892e
246 o ea207398892e
247
247
248
248
249 Predecessors template shouldn't show anything as all obsolete commit are not
249 Predecessors template shouldn't show anything as all obsolete commit are not
250 visible.
250 visible.
251 $ hg up 'desc(A2)'
251 $ hg up 'desc(A2)'
252 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
252 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
253 $ hg tlog
253 $ hg tlog
254 @ d004c8f274b9
254 @ d004c8f274b9
255 | Predecessors:
255 | Predecessors:
256 | semi-colon:
256 | semi-colon:
257 | json: []
257 | json: []
258 | map:
258 | map:
259 | Successors:
259 | Successors:
260 | multi-line:
260 | multi-line:
261 | json: ""
261 | json: []
262 o ea207398892e
262 o ea207398892e
263 Predecessors:
263 Predecessors:
264 semi-colon:
264 semi-colon:
265 json: []
265 json: []
266 map:
266 map:
267 Successors:
267 Successors:
268 multi-line:
268 multi-line:
269 json: ""
269 json: []
270
270
271 $ hg tlog --hidden
271 $ hg tlog --hidden
272 @ d004c8f274b9
272 @ d004c8f274b9
273 | Predecessors: 2:a468dc9b3633
273 | Predecessors: 2:a468dc9b3633
274 | semi-colon: 2:a468dc9b3633
274 | semi-colon: 2:a468dc9b3633
275 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
275 | json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
276 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
276 | map: 2:a468dc9b36338b14fdb7825f55ce3df4e71517ad
277 | Successors:
277 | Successors:
278 | multi-line:
278 | multi-line:
279 | json: ""
279 | json: []
280 | x a468dc9b3633
280 | x a468dc9b3633
281 |/ Predecessors: 1:471f378eab4c
281 |/ Predecessors: 1:471f378eab4c
282 | semi-colon: 1:471f378eab4c
282 | semi-colon: 1:471f378eab4c
283 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
283 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
284 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
284 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
285 | Successors: 3:d004c8f274b9
285 | Successors: 3:d004c8f274b9
286 | multi-line: 3:d004c8f274b9
286 | multi-line: 3:d004c8f274b9
287 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
287 | json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
288 | x 471f378eab4c
288 | x 471f378eab4c
289 |/ Predecessors:
289 |/ Predecessors:
290 | semi-colon:
290 | semi-colon:
291 | json: []
291 | json: []
292 | map:
292 | map:
293 | Successors: 2:a468dc9b3633
293 | Successors: 2:a468dc9b3633
294 | multi-line: 2:a468dc9b3633
294 | multi-line: 2:a468dc9b3633
295 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
295 | json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
296 o ea207398892e
296 o ea207398892e
297 Predecessors:
297 Predecessors:
298 semi-colon:
298 semi-colon:
299 json: []
299 json: []
300 map:
300 map:
301 Successors:
301 Successors:
302 multi-line:
302 multi-line:
303 json: ""
303 json: []
304
304
305 $ hg fatelog
305 $ hg fatelog
306 @ d004c8f274b9
306 @ d004c8f274b9
307 |
307 |
308 o ea207398892e
308 o ea207398892e
309
309
310
310
311 $ hg fatelog --hidden
311 $ hg fatelog --hidden
312 @ d004c8f274b9
312 @ d004c8f274b9
313 |
313 |
314 | x a468dc9b3633
314 | x a468dc9b3633
315 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
315 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000);
316 | x 471f378eab4c
316 | x 471f378eab4c
317 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
317 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000);
318 o ea207398892e
318 o ea207398892e
319
319
320 $ hg fatelogjson --hidden
320 $ hg fatelogjson --hidden
321 @ d004c8f274b9
321 @ d004c8f274b9
322 |
322 |
323 | x a468dc9b3633
323 | x a468dc9b3633
324 |/ Obsfate: [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test2"]], [987654321.0, 0], null]], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"]}]
324 |/ Obsfate: [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test2"]], [987654321.0, 0], null]], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"]}]
325 | x 471f378eab4c
325 | x 471f378eab4c
326 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["ef1", "9"], ["operation", "amend"], ["user", "test"]], [1234567890.0, 0], null]], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]}]
326 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["ef1", "9"], ["operation", "amend"], ["user", "test"]], [1234567890.0, 0], null]], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]}]
327 o ea207398892e
327 o ea207398892e
328
328
329
329
330 Check other fatelog implementations
330 Check other fatelog implementations
331 -----------------------------------
331 -----------------------------------
332
332
333 $ hg fatelogkw --hidden -q
333 $ hg fatelogkw --hidden -q
334 @ d004c8f274b9
334 @ d004c8f274b9
335 |
335 |
336 | x a468dc9b3633
336 | x a468dc9b3633
337 |/ Obsfate: rewritten using amend as 3:d004c8f274b9
337 |/ Obsfate: rewritten using amend as 3:d004c8f274b9
338 | x 471f378eab4c
338 | x 471f378eab4c
339 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
339 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
340 o ea207398892e
340 o ea207398892e
341
341
342 $ hg fatelogkw --hidden
342 $ hg fatelogkw --hidden
343 @ d004c8f274b9
343 @ d004c8f274b9
344 |
344 |
345 | x a468dc9b3633
345 | x a468dc9b3633
346 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2
346 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2
347 | x 471f378eab4c
347 | x 471f378eab4c
348 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
348 |/ Obsfate: rewritten using amend as 2:a468dc9b3633
349 o ea207398892e
349 o ea207398892e
350
350
351 $ hg fatelogkw --hidden -v
351 $ hg fatelogkw --hidden -v
352 @ d004c8f274b9
352 @ d004c8f274b9
353 |
353 |
354 | x a468dc9b3633
354 | x a468dc9b3633
355 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
355 |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
356 | x 471f378eab4c
356 | x 471f378eab4c
357 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
357 |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
358 o ea207398892e
358 o ea207398892e
359
359
360
360
361 $ hg log -G -T "default" --hidden
361 $ hg log -G -T "default" --hidden
362 @ changeset: 3:d004c8f274b9
362 @ changeset: 3:d004c8f274b9
363 | tag: tip
363 | tag: tip
364 | parent: 0:ea207398892e
364 | parent: 0:ea207398892e
365 | user: test
365 | user: test
366 | date: Thu Jan 01 00:00:00 1970 +0000
366 | date: Thu Jan 01 00:00:00 1970 +0000
367 | summary: A2
367 | summary: A2
368 |
368 |
369 | x changeset: 2:a468dc9b3633
369 | x changeset: 2:a468dc9b3633
370 |/ parent: 0:ea207398892e
370 |/ parent: 0:ea207398892e
371 | user: test
371 | user: test
372 | date: Thu Jan 01 00:00:00 1970 +0000
372 | date: Thu Jan 01 00:00:00 1970 +0000
373 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2
373 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2
374 | summary: A1
374 | summary: A1
375 |
375 |
376 | x changeset: 1:471f378eab4c
376 | x changeset: 1:471f378eab4c
377 |/ user: test
377 |/ user: test
378 | date: Thu Jan 01 00:00:00 1970 +0000
378 | date: Thu Jan 01 00:00:00 1970 +0000
379 | obsolete: rewritten using amend as 2:a468dc9b3633
379 | obsolete: rewritten using amend as 2:a468dc9b3633
380 | summary: A0
380 | summary: A0
381 |
381 |
382 o changeset: 0:ea207398892e
382 o changeset: 0:ea207398892e
383 user: test
383 user: test
384 date: Thu Jan 01 00:00:00 1970 +0000
384 date: Thu Jan 01 00:00:00 1970 +0000
385 summary: ROOT
385 summary: ROOT
386
386
387 $ hg log -G -T "default" --hidden -v
387 $ hg log -G -T "default" --hidden -v
388 @ changeset: 3:d004c8f274b9
388 @ changeset: 3:d004c8f274b9
389 | tag: tip
389 | tag: tip
390 | parent: 0:ea207398892e
390 | parent: 0:ea207398892e
391 | user: test
391 | user: test
392 | date: Thu Jan 01 00:00:00 1970 +0000
392 | date: Thu Jan 01 00:00:00 1970 +0000
393 | files: A0
393 | files: A0
394 | description:
394 | description:
395 | A2
395 | A2
396 |
396 |
397 |
397 |
398 | x changeset: 2:a468dc9b3633
398 | x changeset: 2:a468dc9b3633
399 |/ parent: 0:ea207398892e
399 |/ parent: 0:ea207398892e
400 | user: test
400 | user: test
401 | date: Thu Jan 01 00:00:00 1970 +0000
401 | date: Thu Jan 01 00:00:00 1970 +0000
402 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
402 | obsolete: rewritten using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000)
403 | files: A0
403 | files: A0
404 | description:
404 | description:
405 | A1
405 | A1
406 |
406 |
407 |
407 |
408 | x changeset: 1:471f378eab4c
408 | x changeset: 1:471f378eab4c
409 |/ user: test
409 |/ user: test
410 | date: Thu Jan 01 00:00:00 1970 +0000
410 | date: Thu Jan 01 00:00:00 1970 +0000
411 | obsolete: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
411 | obsolete: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000)
412 | files: A0
412 | files: A0
413 | description:
413 | description:
414 | A0
414 | A0
415 |
415 |
416 |
416 |
417 o changeset: 0:ea207398892e
417 o changeset: 0:ea207398892e
418 user: test
418 user: test
419 date: Thu Jan 01 00:00:00 1970 +0000
419 date: Thu Jan 01 00:00:00 1970 +0000
420 files: ROOT
420 files: ROOT
421 description:
421 description:
422 ROOT
422 ROOT
423
423
424
424
425 Test templates with splitted commit
425 Test templates with splitted commit
426 ===================================
426 ===================================
427
427
428 $ hg init $TESTTMP/templates-local-split
428 $ hg init $TESTTMP/templates-local-split
429 $ cd $TESTTMP/templates-local-split
429 $ cd $TESTTMP/templates-local-split
430 $ mkcommit ROOT
430 $ mkcommit ROOT
431 $ echo 42 >> a
431 $ echo 42 >> a
432 $ echo 43 >> b
432 $ echo 43 >> b
433 $ hg commit -A -m "A0"
433 $ hg commit -A -m "A0"
434 adding a
434 adding a
435 adding b
435 adding b
436 $ hg log --hidden -G
436 $ hg log --hidden -G
437 @ changeset: 1:471597cad322
437 @ changeset: 1:471597cad322
438 | tag: tip
438 | tag: tip
439 | user: test
439 | user: test
440 | date: Thu Jan 01 00:00:00 1970 +0000
440 | date: Thu Jan 01 00:00:00 1970 +0000
441 | summary: A0
441 | summary: A0
442 |
442 |
443 o changeset: 0:ea207398892e
443 o changeset: 0:ea207398892e
444 user: test
444 user: test
445 date: Thu Jan 01 00:00:00 1970 +0000
445 date: Thu Jan 01 00:00:00 1970 +0000
446 summary: ROOT
446 summary: ROOT
447
447
448 # Simulate split
448 # Simulate split
449 $ hg up -r "desc(ROOT)"
449 $ hg up -r "desc(ROOT)"
450 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
450 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
451 $ echo 42 >> a
451 $ echo 42 >> a
452 $ hg commit -A -m "A0"
452 $ hg commit -A -m "A0"
453 adding a
453 adding a
454 created new head
454 created new head
455 $ echo 43 >> b
455 $ echo 43 >> b
456 $ hg commit -A -m "A0"
456 $ hg commit -A -m "A0"
457 adding b
457 adding b
458 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
458 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
459 1 new obsolescence markers
459 1 new obsolescence markers
460 obsoleted 1 changesets
460 obsoleted 1 changesets
461
461
462 $ hg log --hidden -G
462 $ hg log --hidden -G
463 @ changeset: 3:f257fde29c7a
463 @ changeset: 3:f257fde29c7a
464 | tag: tip
464 | tag: tip
465 | user: test
465 | user: test
466 | date: Thu Jan 01 00:00:00 1970 +0000
466 | date: Thu Jan 01 00:00:00 1970 +0000
467 | summary: A0
467 | summary: A0
468 |
468 |
469 o changeset: 2:337fec4d2edc
469 o changeset: 2:337fec4d2edc
470 | parent: 0:ea207398892e
470 | parent: 0:ea207398892e
471 | user: test
471 | user: test
472 | date: Thu Jan 01 00:00:00 1970 +0000
472 | date: Thu Jan 01 00:00:00 1970 +0000
473 | summary: A0
473 | summary: A0
474 |
474 |
475 | x changeset: 1:471597cad322
475 | x changeset: 1:471597cad322
476 |/ user: test
476 |/ user: test
477 | date: Thu Jan 01 00:00:00 1970 +0000
477 | date: Thu Jan 01 00:00:00 1970 +0000
478 | obsolete: split as 2:337fec4d2edc, 3:f257fde29c7a
478 | obsolete: split as 2:337fec4d2edc, 3:f257fde29c7a
479 | summary: A0
479 | summary: A0
480 |
480 |
481 o changeset: 0:ea207398892e
481 o changeset: 0:ea207398892e
482 user: test
482 user: test
483 date: Thu Jan 01 00:00:00 1970 +0000
483 date: Thu Jan 01 00:00:00 1970 +0000
484 summary: ROOT
484 summary: ROOT
485
485
486 Check templates
486 Check templates
487 ---------------
487 ---------------
488
488
489 $ hg up 'obsolete()' --hidden
489 $ hg up 'obsolete()' --hidden
490 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
490 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
491 updated to hidden changeset 471597cad322
491 updated to hidden changeset 471597cad322
492 (hidden revision '471597cad322' was split as: 337fec4d2edc, f257fde29c7a)
492 (hidden revision '471597cad322' was split as: 337fec4d2edc, f257fde29c7a)
493
493
494 Predecessors template should show current revision as it is the working copy
494 Predecessors template should show current revision as it is the working copy
495 $ hg tlog
495 $ hg tlog
496 o f257fde29c7a
496 o f257fde29c7a
497 | Predecessors: 1:471597cad322
497 | Predecessors: 1:471597cad322
498 | semi-colon: 1:471597cad322
498 | semi-colon: 1:471597cad322
499 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
499 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
500 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
500 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
501 | Successors:
501 | Successors:
502 | multi-line:
502 | multi-line:
503 | json: ""
503 | json: []
504 o 337fec4d2edc
504 o 337fec4d2edc
505 | Predecessors: 1:471597cad322
505 | Predecessors: 1:471597cad322
506 | semi-colon: 1:471597cad322
506 | semi-colon: 1:471597cad322
507 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
507 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
508 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
508 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
509 | Successors:
509 | Successors:
510 | multi-line:
510 | multi-line:
511 | json: ""
511 | json: []
512 | @ 471597cad322
512 | @ 471597cad322
513 |/ Predecessors:
513 |/ Predecessors:
514 | semi-colon:
514 | semi-colon:
515 | json: []
515 | json: []
516 | map:
516 | map:
517 | Successors: 2:337fec4d2edc 3:f257fde29c7a
517 | Successors: 2:337fec4d2edc 3:f257fde29c7a
518 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
518 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
519 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
519 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
520 o ea207398892e
520 o ea207398892e
521 Predecessors:
521 Predecessors:
522 semi-colon:
522 semi-colon:
523 json: []
523 json: []
524 map:
524 map:
525 Successors:
525 Successors:
526 multi-line:
526 multi-line:
527 json: ""
527 json: []
528
528
529 $ hg fatelog
529 $ hg fatelog
530 o f257fde29c7a
530 o f257fde29c7a
531 |
531 |
532 o 337fec4d2edc
532 o 337fec4d2edc
533 |
533 |
534 | @ 471597cad322
534 | @ 471597cad322
535 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
535 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
536 o ea207398892e
536 o ea207398892e
537
537
538 $ hg up f257fde29c7a
538 $ hg up f257fde29c7a
539 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
539 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
540
540
541 Predecessors template should not show a predecessor as it's not displayed in
541 Predecessors template should not show a predecessor as it's not displayed in
542 the log
542 the log
543 $ hg tlog
543 $ hg tlog
544 @ f257fde29c7a
544 @ f257fde29c7a
545 | Predecessors:
545 | Predecessors:
546 | semi-colon:
546 | semi-colon:
547 | json: []
547 | json: []
548 | map:
548 | map:
549 | Successors:
549 | Successors:
550 | multi-line:
550 | multi-line:
551 | json: ""
551 | json: []
552 o 337fec4d2edc
552 o 337fec4d2edc
553 | Predecessors:
553 | Predecessors:
554 | semi-colon:
554 | semi-colon:
555 | json: []
555 | json: []
556 | map:
556 | map:
557 | Successors:
557 | Successors:
558 | multi-line:
558 | multi-line:
559 | json: ""
559 | json: []
560 o ea207398892e
560 o ea207398892e
561 Predecessors:
561 Predecessors:
562 semi-colon:
562 semi-colon:
563 json: []
563 json: []
564 map:
564 map:
565 Successors:
565 Successors:
566 multi-line:
566 multi-line:
567 json: ""
567 json: []
568
568
569 Predecessors template should show both predecessors as we force their display
569 Predecessors template should show both predecessors as we force their display
570 with --hidden
570 with --hidden
571 $ hg tlog --hidden
571 $ hg tlog --hidden
572 @ f257fde29c7a
572 @ f257fde29c7a
573 | Predecessors: 1:471597cad322
573 | Predecessors: 1:471597cad322
574 | semi-colon: 1:471597cad322
574 | semi-colon: 1:471597cad322
575 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
575 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
576 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
576 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
577 | Successors:
577 | Successors:
578 | multi-line:
578 | multi-line:
579 | json: ""
579 | json: []
580 o 337fec4d2edc
580 o 337fec4d2edc
581 | Predecessors: 1:471597cad322
581 | Predecessors: 1:471597cad322
582 | semi-colon: 1:471597cad322
582 | semi-colon: 1:471597cad322
583 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
583 | json: ["471597cad322d1f659bb169751be9133dad92ef3"]
584 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
584 | map: 1:471597cad322d1f659bb169751be9133dad92ef3
585 | Successors:
585 | Successors:
586 | multi-line:
586 | multi-line:
587 | json: ""
587 | json: []
588 | x 471597cad322
588 | x 471597cad322
589 |/ Predecessors:
589 |/ Predecessors:
590 | semi-colon:
590 | semi-colon:
591 | json: []
591 | json: []
592 | map:
592 | map:
593 | Successors: 2:337fec4d2edc 3:f257fde29c7a
593 | Successors: 2:337fec4d2edc 3:f257fde29c7a
594 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
594 | multi-line: 2:337fec4d2edc 3:f257fde29c7a
595 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
595 | json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
596 o ea207398892e
596 o ea207398892e
597 Predecessors:
597 Predecessors:
598 semi-colon:
598 semi-colon:
599 json: []
599 json: []
600 map:
600 map:
601 Successors:
601 Successors:
602 multi-line:
602 multi-line:
603 json: ""
603 json: []
604
604
605 $ hg fatelog --hidden
605 $ hg fatelog --hidden
606 @ f257fde29c7a
606 @ f257fde29c7a
607 |
607 |
608 o 337fec4d2edc
608 o 337fec4d2edc
609 |
609 |
610 | x 471597cad322
610 | x 471597cad322
611 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
611 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000);
612 o ea207398892e
612 o ea207398892e
613
613
614 $ hg fatelogjson --hidden
614 $ hg fatelogjson --hidden
615 @ f257fde29c7a
615 @ f257fde29c7a
616 |
616 |
617 o 337fec4d2edc
617 o 337fec4d2edc
618 |
618 |
619 | x 471597cad322
619 | x 471597cad322
620 |/ Obsfate: [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]}]
620 |/ Obsfate: [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]}]
621 o ea207398892e
621 o ea207398892e
622
622
623 Check other fatelog implementations
623 Check other fatelog implementations
624 -----------------------------------
624 -----------------------------------
625
625
626 $ hg fatelogkw --hidden -q
626 $ hg fatelogkw --hidden -q
627 @ f257fde29c7a
627 @ f257fde29c7a
628 |
628 |
629 o 337fec4d2edc
629 o 337fec4d2edc
630 |
630 |
631 | x 471597cad322
631 | x 471597cad322
632 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
632 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
633 o ea207398892e
633 o ea207398892e
634
634
635 $ hg fatelogkw --hidden
635 $ hg fatelogkw --hidden
636 @ f257fde29c7a
636 @ f257fde29c7a
637 |
637 |
638 o 337fec4d2edc
638 o 337fec4d2edc
639 |
639 |
640 | x 471597cad322
640 | x 471597cad322
641 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
641 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
642 o ea207398892e
642 o ea207398892e
643
643
644 $ hg fatelogkw --hidden -v
644 $ hg fatelogkw --hidden -v
645 @ f257fde29c7a
645 @ f257fde29c7a
646 |
646 |
647 o 337fec4d2edc
647 o 337fec4d2edc
648 |
648 |
649 | x 471597cad322
649 | x 471597cad322
650 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000)
650 |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test (at 1970-01-01 00:00 +0000)
651 o ea207398892e
651 o ea207398892e
652
652
653
653
654 $ hg log -G -T "default" --hidden
654 $ hg log -G -T "default" --hidden
655 @ changeset: 3:f257fde29c7a
655 @ changeset: 3:f257fde29c7a
656 | tag: tip
656 | tag: tip
657 | user: test
657 | user: test
658 | date: Thu Jan 01 00:00:00 1970 +0000
658 | date: Thu Jan 01 00:00:00 1970 +0000
659 | summary: A0
659 | summary: A0
660 |
660 |
661 o changeset: 2:337fec4d2edc
661 o changeset: 2:337fec4d2edc
662 | parent: 0:ea207398892e
662 | parent: 0:ea207398892e
663 | user: test
663 | user: test
664 | date: Thu Jan 01 00:00:00 1970 +0000
664 | date: Thu Jan 01 00:00:00 1970 +0000
665 | summary: A0
665 | summary: A0
666 |
666 |
667 | x changeset: 1:471597cad322
667 | x changeset: 1:471597cad322
668 |/ user: test
668 |/ user: test
669 | date: Thu Jan 01 00:00:00 1970 +0000
669 | date: Thu Jan 01 00:00:00 1970 +0000
670 | obsolete: split as 2:337fec4d2edc, 3:f257fde29c7a
670 | obsolete: split as 2:337fec4d2edc, 3:f257fde29c7a
671 | summary: A0
671 | summary: A0
672 |
672 |
673 o changeset: 0:ea207398892e
673 o changeset: 0:ea207398892e
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: ROOT
676 summary: ROOT
677
677
678
678
679 Test templates with folded commit
679 Test templates with folded commit
680 =================================
680 =================================
681
681
682 Test setup
682 Test setup
683 ----------
683 ----------
684
684
685 $ hg init $TESTTMP/templates-local-fold
685 $ hg init $TESTTMP/templates-local-fold
686 $ cd $TESTTMP/templates-local-fold
686 $ cd $TESTTMP/templates-local-fold
687 $ mkcommit ROOT
687 $ mkcommit ROOT
688 $ mkcommit A0
688 $ mkcommit A0
689 $ mkcommit B0
689 $ mkcommit B0
690 $ hg log --hidden -G
690 $ hg log --hidden -G
691 @ changeset: 2:0dec01379d3b
691 @ changeset: 2:0dec01379d3b
692 | tag: tip
692 | tag: tip
693 | user: test
693 | user: test
694 | date: Thu Jan 01 00:00:00 1970 +0000
694 | date: Thu Jan 01 00:00:00 1970 +0000
695 | summary: B0
695 | summary: B0
696 |
696 |
697 o changeset: 1:471f378eab4c
697 o changeset: 1:471f378eab4c
698 | user: test
698 | user: test
699 | date: Thu Jan 01 00:00:00 1970 +0000
699 | date: Thu Jan 01 00:00:00 1970 +0000
700 | summary: A0
700 | summary: A0
701 |
701 |
702 o changeset: 0:ea207398892e
702 o changeset: 0:ea207398892e
703 user: test
703 user: test
704 date: Thu Jan 01 00:00:00 1970 +0000
704 date: Thu Jan 01 00:00:00 1970 +0000
705 summary: ROOT
705 summary: ROOT
706
706
707 Simulate a fold
707 Simulate a fold
708 $ hg up -r "desc(ROOT)"
708 $ hg up -r "desc(ROOT)"
709 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
709 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
710 $ echo "A0" > A0
710 $ echo "A0" > A0
711 $ echo "B0" > B0
711 $ echo "B0" > B0
712 $ hg commit -A -m "C0"
712 $ hg commit -A -m "C0"
713 adding A0
713 adding A0
714 adding B0
714 adding B0
715 created new head
715 created new head
716 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
716 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
717 1 new obsolescence markers
717 1 new obsolescence markers
718 obsoleted 1 changesets
718 obsoleted 1 changesets
719 1 new orphan changesets
719 1 new orphan changesets
720 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
720 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
721 1 new obsolescence markers
721 1 new obsolescence markers
722 obsoleted 1 changesets
722 obsoleted 1 changesets
723
723
724 $ hg log --hidden -G
724 $ hg log --hidden -G
725 @ changeset: 3:eb5a0daa2192
725 @ changeset: 3:eb5a0daa2192
726 | tag: tip
726 | tag: tip
727 | parent: 0:ea207398892e
727 | parent: 0:ea207398892e
728 | user: test
728 | user: test
729 | date: Thu Jan 01 00:00:00 1970 +0000
729 | date: Thu Jan 01 00:00:00 1970 +0000
730 | summary: C0
730 | summary: C0
731 |
731 |
732 | x changeset: 2:0dec01379d3b
732 | x changeset: 2:0dec01379d3b
733 | | user: test
733 | | user: test
734 | | date: Thu Jan 01 00:00:00 1970 +0000
734 | | date: Thu Jan 01 00:00:00 1970 +0000
735 | | obsolete: rewritten as 3:eb5a0daa2192
735 | | obsolete: rewritten as 3:eb5a0daa2192
736 | | summary: B0
736 | | summary: B0
737 | |
737 | |
738 | x changeset: 1:471f378eab4c
738 | x changeset: 1:471f378eab4c
739 |/ user: test
739 |/ user: test
740 | date: Thu Jan 01 00:00:00 1970 +0000
740 | date: Thu Jan 01 00:00:00 1970 +0000
741 | obsolete: rewritten as 3:eb5a0daa2192
741 | obsolete: rewritten as 3:eb5a0daa2192
742 | summary: A0
742 | summary: A0
743 |
743 |
744 o changeset: 0:ea207398892e
744 o changeset: 0:ea207398892e
745 user: test
745 user: test
746 date: Thu Jan 01 00:00:00 1970 +0000
746 date: Thu Jan 01 00:00:00 1970 +0000
747 summary: ROOT
747 summary: ROOT
748
748
749 Check templates
749 Check templates
750 ---------------
750 ---------------
751
751
752 $ hg up 'desc(A0)' --hidden
752 $ hg up 'desc(A0)' --hidden
753 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
753 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
754 updated to hidden changeset 471f378eab4c
754 updated to hidden changeset 471f378eab4c
755 (hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192)
755 (hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192)
756
756
757 Predecessors template should show current revision as it is the working copy
757 Predecessors template should show current revision as it is the working copy
758 $ hg tlog
758 $ hg tlog
759 o eb5a0daa2192
759 o eb5a0daa2192
760 | Predecessors: 1:471f378eab4c
760 | Predecessors: 1:471f378eab4c
761 | semi-colon: 1:471f378eab4c
761 | semi-colon: 1:471f378eab4c
762 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
762 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
763 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
763 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
764 | Successors:
764 | Successors:
765 | multi-line:
765 | multi-line:
766 | json: ""
766 | json: []
767 | @ 471f378eab4c
767 | @ 471f378eab4c
768 |/ Predecessors:
768 |/ Predecessors:
769 | semi-colon:
769 | semi-colon:
770 | json: []
770 | json: []
771 | map:
771 | map:
772 | Successors: 3:eb5a0daa2192
772 | Successors: 3:eb5a0daa2192
773 | multi-line: 3:eb5a0daa2192
773 | multi-line: 3:eb5a0daa2192
774 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
774 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
775 o ea207398892e
775 o ea207398892e
776 Predecessors:
776 Predecessors:
777 semi-colon:
777 semi-colon:
778 json: []
778 json: []
779 map:
779 map:
780 Successors:
780 Successors:
781 multi-line:
781 multi-line:
782 json: ""
782 json: []
783
783
784 $ hg fatelog
784 $ hg fatelog
785 o eb5a0daa2192
785 o eb5a0daa2192
786 |
786 |
787 | @ 471f378eab4c
787 | @ 471f378eab4c
788 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
788 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
789 o ea207398892e
789 o ea207398892e
790
790
791 $ hg up 'desc(B0)' --hidden
791 $ hg up 'desc(B0)' --hidden
792 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
792 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
793 updated to hidden changeset 0dec01379d3b
793 updated to hidden changeset 0dec01379d3b
794 (hidden revision '0dec01379d3b' was rewritten as: eb5a0daa2192)
794 (hidden revision '0dec01379d3b' was rewritten as: eb5a0daa2192)
795
795
796 Predecessors template should show both predecessors as they should be both
796 Predecessors template should show both predecessors as they should be both
797 displayed
797 displayed
798 $ hg tlog
798 $ hg tlog
799 o eb5a0daa2192
799 o eb5a0daa2192
800 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
800 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
801 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
801 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
802 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
802 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
803 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
803 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
804 | Successors:
804 | Successors:
805 | multi-line:
805 | multi-line:
806 | json: ""
806 | json: []
807 | @ 0dec01379d3b
807 | @ 0dec01379d3b
808 | | Predecessors:
808 | | Predecessors:
809 | | semi-colon:
809 | | semi-colon:
810 | | json: []
810 | | json: []
811 | | map:
811 | | map:
812 | | Successors: 3:eb5a0daa2192
812 | | Successors: 3:eb5a0daa2192
813 | | multi-line: 3:eb5a0daa2192
813 | | multi-line: 3:eb5a0daa2192
814 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
814 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
815 | x 471f378eab4c
815 | x 471f378eab4c
816 |/ Predecessors:
816 |/ Predecessors:
817 | semi-colon:
817 | semi-colon:
818 | json: []
818 | json: []
819 | map:
819 | map:
820 | Successors: 3:eb5a0daa2192
820 | Successors: 3:eb5a0daa2192
821 | multi-line: 3:eb5a0daa2192
821 | multi-line: 3:eb5a0daa2192
822 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
822 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
823 o ea207398892e
823 o ea207398892e
824 Predecessors:
824 Predecessors:
825 semi-colon:
825 semi-colon:
826 json: []
826 json: []
827 map:
827 map:
828 Successors:
828 Successors:
829 multi-line:
829 multi-line:
830 json: ""
830 json: []
831
831
832 $ hg fatelog
832 $ hg fatelog
833 o eb5a0daa2192
833 o eb5a0daa2192
834 |
834 |
835 | @ 0dec01379d3b
835 | @ 0dec01379d3b
836 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
836 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
837 | x 471f378eab4c
837 | x 471f378eab4c
838 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
838 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
839 o ea207398892e
839 o ea207398892e
840
840
841 $ hg up 'desc(C0)'
841 $ hg up 'desc(C0)'
842 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
842 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
843
843
844 Predecessors template should not show predecessors as they are not displayed in
844 Predecessors template should not show predecessors as they are not displayed in
845 the log
845 the log
846 $ hg tlog
846 $ hg tlog
847 @ eb5a0daa2192
847 @ eb5a0daa2192
848 | Predecessors:
848 | Predecessors:
849 | semi-colon:
849 | semi-colon:
850 | json: []
850 | json: []
851 | map:
851 | map:
852 | Successors:
852 | Successors:
853 | multi-line:
853 | multi-line:
854 | json: ""
854 | json: []
855 o ea207398892e
855 o ea207398892e
856 Predecessors:
856 Predecessors:
857 semi-colon:
857 semi-colon:
858 json: []
858 json: []
859 map:
859 map:
860 Successors:
860 Successors:
861 multi-line:
861 multi-line:
862 json: ""
862 json: []
863 Predecessors template should show both predecessors as we force their display
863 Predecessors template should show both predecessors as we force their display
864 with --hidden
864 with --hidden
865 $ hg tlog --hidden
865 $ hg tlog --hidden
866 @ eb5a0daa2192
866 @ eb5a0daa2192
867 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
867 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
868 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
868 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
869 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
869 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
870 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
870 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
871 | Successors:
871 | Successors:
872 | multi-line:
872 | multi-line:
873 | json: ""
873 | json: []
874 | x 0dec01379d3b
874 | x 0dec01379d3b
875 | | Predecessors:
875 | | Predecessors:
876 | | semi-colon:
876 | | semi-colon:
877 | | json: []
877 | | json: []
878 | | map:
878 | | map:
879 | | Successors: 3:eb5a0daa2192
879 | | Successors: 3:eb5a0daa2192
880 | | multi-line: 3:eb5a0daa2192
880 | | multi-line: 3:eb5a0daa2192
881 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
881 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
882 | x 471f378eab4c
882 | x 471f378eab4c
883 |/ Predecessors:
883 |/ Predecessors:
884 | semi-colon:
884 | semi-colon:
885 | json: []
885 | json: []
886 | map:
886 | map:
887 | Successors: 3:eb5a0daa2192
887 | Successors: 3:eb5a0daa2192
888 | multi-line: 3:eb5a0daa2192
888 | multi-line: 3:eb5a0daa2192
889 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
889 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
890 o ea207398892e
890 o ea207398892e
891 Predecessors:
891 Predecessors:
892 semi-colon:
892 semi-colon:
893 json: []
893 json: []
894 map:
894 map:
895 Successors:
895 Successors:
896 multi-line:
896 multi-line:
897 json: ""
897 json: []
898
898
899 $ hg fatelog --hidden
899 $ hg fatelog --hidden
900 @ eb5a0daa2192
900 @ eb5a0daa2192
901 |
901 |
902 | x 0dec01379d3b
902 | x 0dec01379d3b
903 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
903 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
904 | x 471f378eab4c
904 | x 471f378eab4c
905 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
905 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
906 o ea207398892e
906 o ea207398892e
907
907
908
908
909 $ hg fatelogjson --hidden
909 $ hg fatelogjson --hidden
910 @ eb5a0daa2192
910 @ eb5a0daa2192
911 |
911 |
912 | x 0dec01379d3b
912 | x 0dec01379d3b
913 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
913 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
914 | x 471f378eab4c
914 | x 471f378eab4c
915 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
915 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
916 o ea207398892e
916 o ea207398892e
917
917
918 Check other fatelog implementations
918 Check other fatelog implementations
919 -----------------------------------
919 -----------------------------------
920
920
921 $ hg fatelogkw --hidden -q
921 $ hg fatelogkw --hidden -q
922 @ eb5a0daa2192
922 @ eb5a0daa2192
923 |
923 |
924 | x 0dec01379d3b
924 | x 0dec01379d3b
925 | | Obsfate: rewritten as 3:eb5a0daa2192
925 | | Obsfate: rewritten as 3:eb5a0daa2192
926 | x 471f378eab4c
926 | x 471f378eab4c
927 |/ Obsfate: rewritten as 3:eb5a0daa2192
927 |/ Obsfate: rewritten as 3:eb5a0daa2192
928 o ea207398892e
928 o ea207398892e
929
929
930 $ hg fatelogkw --hidden
930 $ hg fatelogkw --hidden
931 @ eb5a0daa2192
931 @ eb5a0daa2192
932 |
932 |
933 | x 0dec01379d3b
933 | x 0dec01379d3b
934 | | Obsfate: rewritten as 3:eb5a0daa2192
934 | | Obsfate: rewritten as 3:eb5a0daa2192
935 | x 471f378eab4c
935 | x 471f378eab4c
936 |/ Obsfate: rewritten as 3:eb5a0daa2192
936 |/ Obsfate: rewritten as 3:eb5a0daa2192
937 o ea207398892e
937 o ea207398892e
938
938
939 $ hg fatelogkw --hidden -v
939 $ hg fatelogkw --hidden -v
940 @ eb5a0daa2192
940 @ eb5a0daa2192
941 |
941 |
942 | x 0dec01379d3b
942 | x 0dec01379d3b
943 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
943 | | Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
944 | x 471f378eab4c
944 | x 471f378eab4c
945 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
945 |/ Obsfate: rewritten as 3:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
946 o ea207398892e
946 o ea207398892e
947
947
948 $ hg log -G -T "default" --hidden
948 $ hg log -G -T "default" --hidden
949 @ changeset: 3:eb5a0daa2192
949 @ changeset: 3:eb5a0daa2192
950 | tag: tip
950 | tag: tip
951 | parent: 0:ea207398892e
951 | parent: 0:ea207398892e
952 | user: test
952 | user: test
953 | date: Thu Jan 01 00:00:00 1970 +0000
953 | date: Thu Jan 01 00:00:00 1970 +0000
954 | summary: C0
954 | summary: C0
955 |
955 |
956 | x changeset: 2:0dec01379d3b
956 | x changeset: 2:0dec01379d3b
957 | | user: test
957 | | user: test
958 | | date: Thu Jan 01 00:00:00 1970 +0000
958 | | date: Thu Jan 01 00:00:00 1970 +0000
959 | | obsolete: rewritten as 3:eb5a0daa2192
959 | | obsolete: rewritten as 3:eb5a0daa2192
960 | | summary: B0
960 | | summary: B0
961 | |
961 | |
962 | x changeset: 1:471f378eab4c
962 | x changeset: 1:471f378eab4c
963 |/ user: test
963 |/ user: test
964 | date: Thu Jan 01 00:00:00 1970 +0000
964 | date: Thu Jan 01 00:00:00 1970 +0000
965 | obsolete: rewritten as 3:eb5a0daa2192
965 | obsolete: rewritten as 3:eb5a0daa2192
966 | summary: A0
966 | summary: A0
967 |
967 |
968 o changeset: 0:ea207398892e
968 o changeset: 0:ea207398892e
969 user: test
969 user: test
970 date: Thu Jan 01 00:00:00 1970 +0000
970 date: Thu Jan 01 00:00:00 1970 +0000
971 summary: ROOT
971 summary: ROOT
972
972
973
973
974 Test templates with divergence
974 Test templates with divergence
975 ==============================
975 ==============================
976
976
977 Test setup
977 Test setup
978 ----------
978 ----------
979
979
980 $ hg init $TESTTMP/templates-local-divergence
980 $ hg init $TESTTMP/templates-local-divergence
981 $ cd $TESTTMP/templates-local-divergence
981 $ cd $TESTTMP/templates-local-divergence
982 $ mkcommit ROOT
982 $ mkcommit ROOT
983 $ mkcommit A0
983 $ mkcommit A0
984 $ hg commit --amend -m "A1"
984 $ hg commit --amend -m "A1"
985 $ hg log --hidden -G
985 $ hg log --hidden -G
986 @ changeset: 2:fdf9bde5129a
986 @ changeset: 2:fdf9bde5129a
987 | tag: tip
987 | tag: tip
988 | parent: 0:ea207398892e
988 | parent: 0:ea207398892e
989 | user: test
989 | user: test
990 | date: Thu Jan 01 00:00:00 1970 +0000
990 | date: Thu Jan 01 00:00:00 1970 +0000
991 | summary: A1
991 | summary: A1
992 |
992 |
993 | x changeset: 1:471f378eab4c
993 | x changeset: 1:471f378eab4c
994 |/ user: test
994 |/ user: test
995 | date: Thu Jan 01 00:00:00 1970 +0000
995 | date: Thu Jan 01 00:00:00 1970 +0000
996 | obsolete: rewritten using amend as 2:fdf9bde5129a
996 | obsolete: rewritten using amend as 2:fdf9bde5129a
997 | summary: A0
997 | summary: A0
998 |
998 |
999 o changeset: 0:ea207398892e
999 o changeset: 0:ea207398892e
1000 user: test
1000 user: test
1001 date: Thu Jan 01 00:00:00 1970 +0000
1001 date: Thu Jan 01 00:00:00 1970 +0000
1002 summary: ROOT
1002 summary: ROOT
1003
1003
1004 $ hg update --hidden 'desc(A0)'
1004 $ hg update --hidden 'desc(A0)'
1005 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1005 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1006 updated to hidden changeset 471f378eab4c
1006 updated to hidden changeset 471f378eab4c
1007 (hidden revision '471f378eab4c' was rewritten as: fdf9bde5129a)
1007 (hidden revision '471f378eab4c' was rewritten as: fdf9bde5129a)
1008 $ hg commit --amend -m "A2"
1008 $ hg commit --amend -m "A2"
1009 2 new content-divergent changesets
1009 2 new content-divergent changesets
1010 $ hg log --hidden -G
1010 $ hg log --hidden -G
1011 @ changeset: 3:65b757b745b9
1011 @ changeset: 3:65b757b745b9
1012 | tag: tip
1012 | tag: tip
1013 | parent: 0:ea207398892e
1013 | parent: 0:ea207398892e
1014 | user: test
1014 | user: test
1015 | date: Thu Jan 01 00:00:00 1970 +0000
1015 | date: Thu Jan 01 00:00:00 1970 +0000
1016 | instability: content-divergent
1016 | instability: content-divergent
1017 | summary: A2
1017 | summary: A2
1018 |
1018 |
1019 | * changeset: 2:fdf9bde5129a
1019 | * changeset: 2:fdf9bde5129a
1020 |/ parent: 0:ea207398892e
1020 |/ parent: 0:ea207398892e
1021 | user: test
1021 | user: test
1022 | date: Thu Jan 01 00:00:00 1970 +0000
1022 | date: Thu Jan 01 00:00:00 1970 +0000
1023 | instability: content-divergent
1023 | instability: content-divergent
1024 | summary: A1
1024 | summary: A1
1025 |
1025 |
1026 | x changeset: 1:471f378eab4c
1026 | x changeset: 1:471f378eab4c
1027 |/ user: test
1027 |/ user: test
1028 | date: Thu Jan 01 00:00:00 1970 +0000
1028 | date: Thu Jan 01 00:00:00 1970 +0000
1029 | obsolete: rewritten using amend as 2:fdf9bde5129a
1029 | obsolete: rewritten using amend as 2:fdf9bde5129a
1030 | obsolete: rewritten using amend as 3:65b757b745b9
1030 | obsolete: rewritten using amend as 3:65b757b745b9
1031 | summary: A0
1031 | summary: A0
1032 |
1032 |
1033 o changeset: 0:ea207398892e
1033 o changeset: 0:ea207398892e
1034 user: test
1034 user: test
1035 date: Thu Jan 01 00:00:00 1970 +0000
1035 date: Thu Jan 01 00:00:00 1970 +0000
1036 summary: ROOT
1036 summary: ROOT
1037
1037
1038 $ hg commit --amend -m 'A3'
1038 $ hg commit --amend -m 'A3'
1039 $ hg log --hidden -G
1039 $ hg log --hidden -G
1040 @ changeset: 4:019fadeab383
1040 @ changeset: 4:019fadeab383
1041 | tag: tip
1041 | tag: tip
1042 | parent: 0:ea207398892e
1042 | parent: 0:ea207398892e
1043 | user: test
1043 | user: test
1044 | date: Thu Jan 01 00:00:00 1970 +0000
1044 | date: Thu Jan 01 00:00:00 1970 +0000
1045 | instability: content-divergent
1045 | instability: content-divergent
1046 | summary: A3
1046 | summary: A3
1047 |
1047 |
1048 | x changeset: 3:65b757b745b9
1048 | x changeset: 3:65b757b745b9
1049 |/ parent: 0:ea207398892e
1049 |/ parent: 0:ea207398892e
1050 | user: test
1050 | user: test
1051 | date: Thu Jan 01 00:00:00 1970 +0000
1051 | date: Thu Jan 01 00:00:00 1970 +0000
1052 | obsolete: rewritten using amend as 4:019fadeab383
1052 | obsolete: rewritten using amend as 4:019fadeab383
1053 | summary: A2
1053 | summary: A2
1054 |
1054 |
1055 | * changeset: 2:fdf9bde5129a
1055 | * changeset: 2:fdf9bde5129a
1056 |/ parent: 0:ea207398892e
1056 |/ parent: 0:ea207398892e
1057 | user: test
1057 | user: test
1058 | date: Thu Jan 01 00:00:00 1970 +0000
1058 | date: Thu Jan 01 00:00:00 1970 +0000
1059 | instability: content-divergent
1059 | instability: content-divergent
1060 | summary: A1
1060 | summary: A1
1061 |
1061 |
1062 | x changeset: 1:471f378eab4c
1062 | x changeset: 1:471f378eab4c
1063 |/ user: test
1063 |/ user: test
1064 | date: Thu Jan 01 00:00:00 1970 +0000
1064 | date: Thu Jan 01 00:00:00 1970 +0000
1065 | obsolete: rewritten using amend as 2:fdf9bde5129a
1065 | obsolete: rewritten using amend as 2:fdf9bde5129a
1066 | obsolete: rewritten using amend as 3:65b757b745b9
1066 | obsolete: rewritten using amend as 3:65b757b745b9
1067 | summary: A0
1067 | summary: A0
1068 |
1068 |
1069 o changeset: 0:ea207398892e
1069 o changeset: 0:ea207398892e
1070 user: test
1070 user: test
1071 date: Thu Jan 01 00:00:00 1970 +0000
1071 date: Thu Jan 01 00:00:00 1970 +0000
1072 summary: ROOT
1072 summary: ROOT
1073
1073
1074
1074
1075 Check templates
1075 Check templates
1076 ---------------
1076 ---------------
1077
1077
1078 $ hg up 'desc(A0)' --hidden
1078 $ hg up 'desc(A0)' --hidden
1079 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1079 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1080 updated to hidden changeset 471f378eab4c
1080 updated to hidden changeset 471f378eab4c
1081 (hidden revision '471f378eab4c' has diverged)
1081 (hidden revision '471f378eab4c' has diverged)
1082
1082
1083 Predecessors template should show current revision as it is the working copy
1083 Predecessors template should show current revision as it is the working copy
1084 $ hg tlog
1084 $ hg tlog
1085 * 019fadeab383
1085 * 019fadeab383
1086 | Predecessors: 1:471f378eab4c
1086 | Predecessors: 1:471f378eab4c
1087 | semi-colon: 1:471f378eab4c
1087 | semi-colon: 1:471f378eab4c
1088 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1088 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1089 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1089 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1090 | Successors:
1090 | Successors:
1091 | multi-line:
1091 | multi-line:
1092 | json: ""
1092 | json: []
1093 | * fdf9bde5129a
1093 | * fdf9bde5129a
1094 |/ Predecessors: 1:471f378eab4c
1094 |/ Predecessors: 1:471f378eab4c
1095 | semi-colon: 1:471f378eab4c
1095 | semi-colon: 1:471f378eab4c
1096 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1096 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1097 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1097 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1098 | Successors:
1098 | Successors:
1099 | multi-line:
1099 | multi-line:
1100 | json: ""
1100 | json: []
1101 | @ 471f378eab4c
1101 | @ 471f378eab4c
1102 |/ Predecessors:
1102 |/ Predecessors:
1103 | semi-colon:
1103 | semi-colon:
1104 | json: []
1104 | json: []
1105 | map:
1105 | map:
1106 | Successors: 2:fdf9bde5129a; 4:019fadeab383
1106 | Successors: 2:fdf9bde5129a; 4:019fadeab383
1107 | multi-line: 2:fdf9bde5129a
1107 | multi-line: 2:fdf9bde5129a
1108 | multi-line: 4:019fadeab383
1108 | multi-line: 4:019fadeab383
1109 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
1109 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
1110 o ea207398892e
1110 o ea207398892e
1111 Predecessors:
1111 Predecessors:
1112 semi-colon:
1112 semi-colon:
1113 json: []
1113 json: []
1114 map:
1114 map:
1115 Successors:
1115 Successors:
1116 multi-line:
1116 multi-line:
1117 json: ""
1117 json: []
1118 $ hg fatelog
1118 $ hg fatelog
1119 * 019fadeab383
1119 * 019fadeab383
1120 |
1120 |
1121 | * fdf9bde5129a
1121 | * fdf9bde5129a
1122 |/
1122 |/
1123 | @ 471f378eab4c
1123 | @ 471f378eab4c
1124 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
1124 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
1125 o ea207398892e
1125 o ea207398892e
1126
1126
1127 $ hg up 'desc(A1)'
1127 $ hg up 'desc(A1)'
1128 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1128 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1129
1129
1130 Predecessors template should not show predecessors as they are not displayed in
1130 Predecessors template should not show predecessors as they are not displayed in
1131 the log
1131 the log
1132 $ hg tlog
1132 $ hg tlog
1133 * 019fadeab383
1133 * 019fadeab383
1134 | Predecessors:
1134 | Predecessors:
1135 | semi-colon:
1135 | semi-colon:
1136 | json: []
1136 | json: []
1137 | map:
1137 | map:
1138 | Successors:
1138 | Successors:
1139 | multi-line:
1139 | multi-line:
1140 | json: ""
1140 | json: []
1141 | @ fdf9bde5129a
1141 | @ fdf9bde5129a
1142 |/ Predecessors:
1142 |/ Predecessors:
1143 | semi-colon:
1143 | semi-colon:
1144 | json: []
1144 | json: []
1145 | map:
1145 | map:
1146 | Successors:
1146 | Successors:
1147 | multi-line:
1147 | multi-line:
1148 | json: ""
1148 | json: []
1149 o ea207398892e
1149 o ea207398892e
1150 Predecessors:
1150 Predecessors:
1151 semi-colon:
1151 semi-colon:
1152 json: []
1152 json: []
1153 map:
1153 map:
1154 Successors:
1154 Successors:
1155 multi-line:
1155 multi-line:
1156 json: ""
1156 json: []
1157
1157
1158 $ hg fatelog
1158 $ hg fatelog
1159 * 019fadeab383
1159 * 019fadeab383
1160 |
1160 |
1161 | @ fdf9bde5129a
1161 | @ fdf9bde5129a
1162 |/
1162 |/
1163 o ea207398892e
1163 o ea207398892e
1164
1164
1165 Predecessors template should the predecessors as we force their display with
1165 Predecessors template should the predecessors as we force their display with
1166 --hidden
1166 --hidden
1167 $ hg tlog --hidden
1167 $ hg tlog --hidden
1168 * 019fadeab383
1168 * 019fadeab383
1169 | Predecessors: 3:65b757b745b9
1169 | Predecessors: 3:65b757b745b9
1170 | semi-colon: 3:65b757b745b9
1170 | semi-colon: 3:65b757b745b9
1171 | json: ["65b757b745b935093c87a2bccd877521cccffcbd"]
1171 | json: ["65b757b745b935093c87a2bccd877521cccffcbd"]
1172 | map: 3:65b757b745b935093c87a2bccd877521cccffcbd
1172 | map: 3:65b757b745b935093c87a2bccd877521cccffcbd
1173 | Successors:
1173 | Successors:
1174 | multi-line:
1174 | multi-line:
1175 | json: ""
1175 | json: []
1176 | x 65b757b745b9
1176 | x 65b757b745b9
1177 |/ Predecessors: 1:471f378eab4c
1177 |/ Predecessors: 1:471f378eab4c
1178 | semi-colon: 1:471f378eab4c
1178 | semi-colon: 1:471f378eab4c
1179 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1179 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1180 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1180 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1181 | Successors: 4:019fadeab383
1181 | Successors: 4:019fadeab383
1182 | multi-line: 4:019fadeab383
1182 | multi-line: 4:019fadeab383
1183 | json: [["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
1183 | json: [["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
1184 | @ fdf9bde5129a
1184 | @ fdf9bde5129a
1185 |/ Predecessors: 1:471f378eab4c
1185 |/ Predecessors: 1:471f378eab4c
1186 | semi-colon: 1:471f378eab4c
1186 | semi-colon: 1:471f378eab4c
1187 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1187 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1188 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1188 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1189 | Successors:
1189 | Successors:
1190 | multi-line:
1190 | multi-line:
1191 | json: ""
1191 | json: []
1192 | x 471f378eab4c
1192 | x 471f378eab4c
1193 |/ Predecessors:
1193 |/ Predecessors:
1194 | semi-colon:
1194 | semi-colon:
1195 | json: []
1195 | json: []
1196 | map:
1196 | map:
1197 | Successors: 2:fdf9bde5129a; 3:65b757b745b9
1197 | Successors: 2:fdf9bde5129a; 3:65b757b745b9
1198 | multi-line: 2:fdf9bde5129a
1198 | multi-line: 2:fdf9bde5129a
1199 | multi-line: 3:65b757b745b9
1199 | multi-line: 3:65b757b745b9
1200 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["65b757b745b935093c87a2bccd877521cccffcbd"]]
1200 | json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["65b757b745b935093c87a2bccd877521cccffcbd"]]
1201 o ea207398892e
1201 o ea207398892e
1202 Predecessors:
1202 Predecessors:
1203 semi-colon:
1203 semi-colon:
1204 json: []
1204 json: []
1205 map:
1205 map:
1206 Successors:
1206 Successors:
1207 multi-line:
1207 multi-line:
1208 json: ""
1208 json: []
1209
1209
1210 $ hg fatelog --hidden
1210 $ hg fatelog --hidden
1211 * 019fadeab383
1211 * 019fadeab383
1212 |
1212 |
1213 | x 65b757b745b9
1213 | x 65b757b745b9
1214 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
1214 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000);
1215 | @ fdf9bde5129a
1215 | @ fdf9bde5129a
1216 |/
1216 |/
1217 | x 471f378eab4c
1217 | x 471f378eab4c
1218 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
1218 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
1219 o ea207398892e
1219 o ea207398892e
1220
1220
1221
1221
1222 $ hg fatelogjson --hidden
1222 $ hg fatelogjson --hidden
1223 * 019fadeab383
1223 * 019fadeab383
1224 |
1224 |
1225 | x 65b757b745b9
1225 | x 65b757b745b9
1226 |/ Obsfate: [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]}]
1226 |/ Obsfate: [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]}]
1227 | @ fdf9bde5129a
1227 | @ fdf9bde5129a
1228 |/
1228 |/
1229 | x 471f378eab4c
1229 | x 471f378eab4c
1230 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"]}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"]}]
1230 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"]}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"]}]
1231 o ea207398892e
1231 o ea207398892e
1232
1232
1233
1233
1234 Check other fatelog implementations
1234 Check other fatelog implementations
1235 -----------------------------------
1235 -----------------------------------
1236
1236
1237 $ hg fatelogkw --hidden -q
1237 $ hg fatelogkw --hidden -q
1238 * 019fadeab383
1238 * 019fadeab383
1239 |
1239 |
1240 | x 65b757b745b9
1240 | x 65b757b745b9
1241 |/ Obsfate: rewritten using amend as 4:019fadeab383
1241 |/ Obsfate: rewritten using amend as 4:019fadeab383
1242 | @ fdf9bde5129a
1242 | @ fdf9bde5129a
1243 |/
1243 |/
1244 | x 471f378eab4c
1244 | x 471f378eab4c
1245 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1245 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1246 | Obsfate: rewritten using amend as 3:65b757b745b9
1246 | Obsfate: rewritten using amend as 3:65b757b745b9
1247 o ea207398892e
1247 o ea207398892e
1248
1248
1249 $ hg fatelogkw --hidden
1249 $ hg fatelogkw --hidden
1250 * 019fadeab383
1250 * 019fadeab383
1251 |
1251 |
1252 | x 65b757b745b9
1252 | x 65b757b745b9
1253 |/ Obsfate: rewritten using amend as 4:019fadeab383
1253 |/ Obsfate: rewritten using amend as 4:019fadeab383
1254 | @ fdf9bde5129a
1254 | @ fdf9bde5129a
1255 |/
1255 |/
1256 | x 471f378eab4c
1256 | x 471f378eab4c
1257 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1257 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
1258 | Obsfate: rewritten using amend as 3:65b757b745b9
1258 | Obsfate: rewritten using amend as 3:65b757b745b9
1259 o ea207398892e
1259 o ea207398892e
1260
1260
1261 $ hg fatelogkw --hidden -v
1261 $ hg fatelogkw --hidden -v
1262 * 019fadeab383
1262 * 019fadeab383
1263 |
1263 |
1264 | x 65b757b745b9
1264 | x 65b757b745b9
1265 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000)
1265 |/ Obsfate: rewritten using amend as 4:019fadeab383 by test (at 1970-01-01 00:00 +0000)
1266 | @ fdf9bde5129a
1266 | @ fdf9bde5129a
1267 |/
1267 |/
1268 | x 471f378eab4c
1268 | x 471f378eab4c
1269 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
1269 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
1270 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
1270 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
1271 o ea207398892e
1271 o ea207398892e
1272
1272
1273 $ hg log -G -T "default" --hidden
1273 $ hg log -G -T "default" --hidden
1274 * changeset: 4:019fadeab383
1274 * changeset: 4:019fadeab383
1275 | tag: tip
1275 | tag: tip
1276 | parent: 0:ea207398892e
1276 | parent: 0:ea207398892e
1277 | user: test
1277 | user: test
1278 | date: Thu Jan 01 00:00:00 1970 +0000
1278 | date: Thu Jan 01 00:00:00 1970 +0000
1279 | instability: content-divergent
1279 | instability: content-divergent
1280 | summary: A3
1280 | summary: A3
1281 |
1281 |
1282 | x changeset: 3:65b757b745b9
1282 | x changeset: 3:65b757b745b9
1283 |/ parent: 0:ea207398892e
1283 |/ parent: 0:ea207398892e
1284 | user: test
1284 | user: test
1285 | date: Thu Jan 01 00:00:00 1970 +0000
1285 | date: Thu Jan 01 00:00:00 1970 +0000
1286 | obsolete: rewritten using amend as 4:019fadeab383
1286 | obsolete: rewritten using amend as 4:019fadeab383
1287 | summary: A2
1287 | summary: A2
1288 |
1288 |
1289 | @ changeset: 2:fdf9bde5129a
1289 | @ changeset: 2:fdf9bde5129a
1290 |/ parent: 0:ea207398892e
1290 |/ parent: 0:ea207398892e
1291 | user: test
1291 | user: test
1292 | date: Thu Jan 01 00:00:00 1970 +0000
1292 | date: Thu Jan 01 00:00:00 1970 +0000
1293 | instability: content-divergent
1293 | instability: content-divergent
1294 | summary: A1
1294 | summary: A1
1295 |
1295 |
1296 | x changeset: 1:471f378eab4c
1296 | x changeset: 1:471f378eab4c
1297 |/ user: test
1297 |/ user: test
1298 | date: Thu Jan 01 00:00:00 1970 +0000
1298 | date: Thu Jan 01 00:00:00 1970 +0000
1299 | obsolete: rewritten using amend as 2:fdf9bde5129a
1299 | obsolete: rewritten using amend as 2:fdf9bde5129a
1300 | obsolete: rewritten using amend as 3:65b757b745b9
1300 | obsolete: rewritten using amend as 3:65b757b745b9
1301 | summary: A0
1301 | summary: A0
1302 |
1302 |
1303 o changeset: 0:ea207398892e
1303 o changeset: 0:ea207398892e
1304 user: test
1304 user: test
1305 date: Thu Jan 01 00:00:00 1970 +0000
1305 date: Thu Jan 01 00:00:00 1970 +0000
1306 summary: ROOT
1306 summary: ROOT
1307
1307
1308
1308
1309 Test templates with amended + folded commit
1309 Test templates with amended + folded commit
1310 ===========================================
1310 ===========================================
1311
1311
1312 Test setup
1312 Test setup
1313 ----------
1313 ----------
1314
1314
1315 $ hg init $TESTTMP/templates-local-amend-fold
1315 $ hg init $TESTTMP/templates-local-amend-fold
1316 $ cd $TESTTMP/templates-local-amend-fold
1316 $ cd $TESTTMP/templates-local-amend-fold
1317 $ mkcommit ROOT
1317 $ mkcommit ROOT
1318 $ mkcommit A0
1318 $ mkcommit A0
1319 $ mkcommit B0
1319 $ mkcommit B0
1320 $ hg commit --amend -m "B1"
1320 $ hg commit --amend -m "B1"
1321 $ hg log --hidden -G
1321 $ hg log --hidden -G
1322 @ changeset: 3:b7ea6d14e664
1322 @ changeset: 3:b7ea6d14e664
1323 | tag: tip
1323 | tag: tip
1324 | parent: 1:471f378eab4c
1324 | parent: 1:471f378eab4c
1325 | user: test
1325 | user: test
1326 | date: Thu Jan 01 00:00:00 1970 +0000
1326 | date: Thu Jan 01 00:00:00 1970 +0000
1327 | summary: B1
1327 | summary: B1
1328 |
1328 |
1329 | x changeset: 2:0dec01379d3b
1329 | x changeset: 2:0dec01379d3b
1330 |/ user: test
1330 |/ user: test
1331 | date: Thu Jan 01 00:00:00 1970 +0000
1331 | date: Thu Jan 01 00:00:00 1970 +0000
1332 | obsolete: rewritten using amend as 3:b7ea6d14e664
1332 | obsolete: rewritten using amend as 3:b7ea6d14e664
1333 | summary: B0
1333 | summary: B0
1334 |
1334 |
1335 o changeset: 1:471f378eab4c
1335 o changeset: 1:471f378eab4c
1336 | user: test
1336 | user: test
1337 | date: Thu Jan 01 00:00:00 1970 +0000
1337 | date: Thu Jan 01 00:00:00 1970 +0000
1338 | summary: A0
1338 | summary: A0
1339 |
1339 |
1340 o changeset: 0:ea207398892e
1340 o changeset: 0:ea207398892e
1341 user: test
1341 user: test
1342 date: Thu Jan 01 00:00:00 1970 +0000
1342 date: Thu Jan 01 00:00:00 1970 +0000
1343 summary: ROOT
1343 summary: ROOT
1344
1344
1345 # Simulate a fold
1345 # Simulate a fold
1346 $ hg up -r "desc(ROOT)"
1346 $ hg up -r "desc(ROOT)"
1347 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1347 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1348 $ echo "A0" > A0
1348 $ echo "A0" > A0
1349 $ echo "B0" > B0
1349 $ echo "B0" > B0
1350 $ hg commit -A -m "C0"
1350 $ hg commit -A -m "C0"
1351 adding A0
1351 adding A0
1352 adding B0
1352 adding B0
1353 created new head
1353 created new head
1354 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
1354 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
1355 1 new obsolescence markers
1355 1 new obsolescence markers
1356 obsoleted 1 changesets
1356 obsoleted 1 changesets
1357 1 new orphan changesets
1357 1 new orphan changesets
1358 $ hg debugobsolete `getid "desc(B1)"` `getid "desc(C0)"`
1358 $ hg debugobsolete `getid "desc(B1)"` `getid "desc(C0)"`
1359 1 new obsolescence markers
1359 1 new obsolescence markers
1360 obsoleted 1 changesets
1360 obsoleted 1 changesets
1361
1361
1362 $ hg log --hidden -G
1362 $ hg log --hidden -G
1363 @ changeset: 4:eb5a0daa2192
1363 @ changeset: 4:eb5a0daa2192
1364 | tag: tip
1364 | tag: tip
1365 | parent: 0:ea207398892e
1365 | parent: 0:ea207398892e
1366 | user: test
1366 | user: test
1367 | date: Thu Jan 01 00:00:00 1970 +0000
1367 | date: Thu Jan 01 00:00:00 1970 +0000
1368 | summary: C0
1368 | summary: C0
1369 |
1369 |
1370 | x changeset: 3:b7ea6d14e664
1370 | x changeset: 3:b7ea6d14e664
1371 | | parent: 1:471f378eab4c
1371 | | parent: 1:471f378eab4c
1372 | | user: test
1372 | | user: test
1373 | | date: Thu Jan 01 00:00:00 1970 +0000
1373 | | date: Thu Jan 01 00:00:00 1970 +0000
1374 | | obsolete: rewritten as 4:eb5a0daa2192
1374 | | obsolete: rewritten as 4:eb5a0daa2192
1375 | | summary: B1
1375 | | summary: B1
1376 | |
1376 | |
1377 | | x changeset: 2:0dec01379d3b
1377 | | x changeset: 2:0dec01379d3b
1378 | |/ user: test
1378 | |/ user: test
1379 | | date: Thu Jan 01 00:00:00 1970 +0000
1379 | | date: Thu Jan 01 00:00:00 1970 +0000
1380 | | obsolete: rewritten using amend as 3:b7ea6d14e664
1380 | | obsolete: rewritten using amend as 3:b7ea6d14e664
1381 | | summary: B0
1381 | | summary: B0
1382 | |
1382 | |
1383 | x changeset: 1:471f378eab4c
1383 | x changeset: 1:471f378eab4c
1384 |/ user: test
1384 |/ user: test
1385 | date: Thu Jan 01 00:00:00 1970 +0000
1385 | date: Thu Jan 01 00:00:00 1970 +0000
1386 | obsolete: rewritten as 4:eb5a0daa2192
1386 | obsolete: rewritten as 4:eb5a0daa2192
1387 | summary: A0
1387 | summary: A0
1388 |
1388 |
1389 o changeset: 0:ea207398892e
1389 o changeset: 0:ea207398892e
1390 user: test
1390 user: test
1391 date: Thu Jan 01 00:00:00 1970 +0000
1391 date: Thu Jan 01 00:00:00 1970 +0000
1392 summary: ROOT
1392 summary: ROOT
1393
1393
1394 Check templates
1394 Check templates
1395 ---------------
1395 ---------------
1396
1396
1397 $ hg up 'desc(A0)' --hidden
1397 $ hg up 'desc(A0)' --hidden
1398 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1398 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1399 updated to hidden changeset 471f378eab4c
1399 updated to hidden changeset 471f378eab4c
1400 (hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192)
1400 (hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192)
1401
1401
1402 Predecessors template should show current revision as it is the working copy
1402 Predecessors template should show current revision as it is the working copy
1403 $ hg tlog
1403 $ hg tlog
1404 o eb5a0daa2192
1404 o eb5a0daa2192
1405 | Predecessors: 1:471f378eab4c
1405 | Predecessors: 1:471f378eab4c
1406 | semi-colon: 1:471f378eab4c
1406 | semi-colon: 1:471f378eab4c
1407 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1407 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1408 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1408 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1409 | Successors:
1409 | Successors:
1410 | multi-line:
1410 | multi-line:
1411 | json: ""
1411 | json: []
1412 | @ 471f378eab4c
1412 | @ 471f378eab4c
1413 |/ Predecessors:
1413 |/ Predecessors:
1414 | semi-colon:
1414 | semi-colon:
1415 | json: []
1415 | json: []
1416 | map:
1416 | map:
1417 | Successors: 4:eb5a0daa2192
1417 | Successors: 4:eb5a0daa2192
1418 | multi-line: 4:eb5a0daa2192
1418 | multi-line: 4:eb5a0daa2192
1419 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1419 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1420 o ea207398892e
1420 o ea207398892e
1421 Predecessors:
1421 Predecessors:
1422 semi-colon:
1422 semi-colon:
1423 json: []
1423 json: []
1424 map:
1424 map:
1425 Successors:
1425 Successors:
1426 multi-line:
1426 multi-line:
1427 json: ""
1427 json: []
1428
1428
1429 $ hg fatelog
1429 $ hg fatelog
1430 o eb5a0daa2192
1430 o eb5a0daa2192
1431 |
1431 |
1432 | @ 471f378eab4c
1432 | @ 471f378eab4c
1433 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1433 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1434 o ea207398892e
1434 o ea207398892e
1435
1435
1436 $ hg up 'desc(B0)' --hidden
1436 $ hg up 'desc(B0)' --hidden
1437 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1437 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1438 updated to hidden changeset 0dec01379d3b
1438 updated to hidden changeset 0dec01379d3b
1439 (hidden revision '0dec01379d3b' was rewritten as: eb5a0daa2192)
1439 (hidden revision '0dec01379d3b' was rewritten as: eb5a0daa2192)
1440
1440
1441 Predecessors template should both predecessors as they are visible
1441 Predecessors template should both predecessors as they are visible
1442 $ hg tlog
1442 $ hg tlog
1443 o eb5a0daa2192
1443 o eb5a0daa2192
1444 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
1444 | Predecessors: 2:0dec01379d3b 1:471f378eab4c
1445 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
1445 | semi-colon: 2:0dec01379d3b; 1:471f378eab4c
1446 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
1446 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
1447 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
1447 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
1448 | Successors:
1448 | Successors:
1449 | multi-line:
1449 | multi-line:
1450 | json: ""
1450 | json: []
1451 | @ 0dec01379d3b
1451 | @ 0dec01379d3b
1452 | | Predecessors:
1452 | | Predecessors:
1453 | | semi-colon:
1453 | | semi-colon:
1454 | | json: []
1454 | | json: []
1455 | | map:
1455 | | map:
1456 | | Successors: 4:eb5a0daa2192
1456 | | Successors: 4:eb5a0daa2192
1457 | | multi-line: 4:eb5a0daa2192
1457 | | multi-line: 4:eb5a0daa2192
1458 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1458 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1459 | x 471f378eab4c
1459 | x 471f378eab4c
1460 |/ Predecessors:
1460 |/ Predecessors:
1461 | semi-colon:
1461 | semi-colon:
1462 | json: []
1462 | json: []
1463 | map:
1463 | map:
1464 | Successors: 4:eb5a0daa2192
1464 | Successors: 4:eb5a0daa2192
1465 | multi-line: 4:eb5a0daa2192
1465 | multi-line: 4:eb5a0daa2192
1466 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1466 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1467 o ea207398892e
1467 o ea207398892e
1468 Predecessors:
1468 Predecessors:
1469 semi-colon:
1469 semi-colon:
1470 json: []
1470 json: []
1471 map:
1471 map:
1472 Successors:
1472 Successors:
1473 multi-line:
1473 multi-line:
1474 json: ""
1474 json: []
1475
1475
1476 $ hg fatelog
1476 $ hg fatelog
1477 o eb5a0daa2192
1477 o eb5a0daa2192
1478 |
1478 |
1479 | @ 0dec01379d3b
1479 | @ 0dec01379d3b
1480 | | Obsfate: rewritten using amend as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1480 | | Obsfate: rewritten using amend as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1481 | x 471f378eab4c
1481 | x 471f378eab4c
1482 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1482 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1483 o ea207398892e
1483 o ea207398892e
1484
1484
1485 $ hg up 'desc(B1)' --hidden
1485 $ hg up 'desc(B1)' --hidden
1486 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1486 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1487 updated to hidden changeset b7ea6d14e664
1487 updated to hidden changeset b7ea6d14e664
1488 (hidden revision 'b7ea6d14e664' was rewritten as: eb5a0daa2192)
1488 (hidden revision 'b7ea6d14e664' was rewritten as: eb5a0daa2192)
1489
1489
1490 Predecessors template should both predecessors as they are visible
1490 Predecessors template should both predecessors as they are visible
1491 $ hg tlog
1491 $ hg tlog
1492 o eb5a0daa2192
1492 o eb5a0daa2192
1493 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1493 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1494 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1494 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1495 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1495 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1496 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1496 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1497 | Successors:
1497 | Successors:
1498 | multi-line:
1498 | multi-line:
1499 | json: ""
1499 | json: []
1500 | @ b7ea6d14e664
1500 | @ b7ea6d14e664
1501 | | Predecessors:
1501 | | Predecessors:
1502 | | semi-colon:
1502 | | semi-colon:
1503 | | json: []
1503 | | json: []
1504 | | map:
1504 | | map:
1505 | | Successors: 4:eb5a0daa2192
1505 | | Successors: 4:eb5a0daa2192
1506 | | multi-line: 4:eb5a0daa2192
1506 | | multi-line: 4:eb5a0daa2192
1507 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1507 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1508 | x 471f378eab4c
1508 | x 471f378eab4c
1509 |/ Predecessors:
1509 |/ Predecessors:
1510 | semi-colon:
1510 | semi-colon:
1511 | json: []
1511 | json: []
1512 | map:
1512 | map:
1513 | Successors: 4:eb5a0daa2192
1513 | Successors: 4:eb5a0daa2192
1514 | multi-line: 4:eb5a0daa2192
1514 | multi-line: 4:eb5a0daa2192
1515 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1515 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1516 o ea207398892e
1516 o ea207398892e
1517 Predecessors:
1517 Predecessors:
1518 semi-colon:
1518 semi-colon:
1519 json: []
1519 json: []
1520 map:
1520 map:
1521 Successors:
1521 Successors:
1522 multi-line:
1522 multi-line:
1523 json: ""
1523 json: []
1524
1524
1525 $ hg fatelog
1525 $ hg fatelog
1526 o eb5a0daa2192
1526 o eb5a0daa2192
1527 |
1527 |
1528 | @ b7ea6d14e664
1528 | @ b7ea6d14e664
1529 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1529 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1530 | x 471f378eab4c
1530 | x 471f378eab4c
1531 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1531 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1532 o ea207398892e
1532 o ea207398892e
1533
1533
1534 $ hg up 'desc(C0)'
1534 $ hg up 'desc(C0)'
1535 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1535 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1536
1536
1537 Predecessors template should show no predecessors as they are both non visible
1537 Predecessors template should show no predecessors as they are both non visible
1538 $ hg tlog
1538 $ hg tlog
1539 @ eb5a0daa2192
1539 @ eb5a0daa2192
1540 | Predecessors:
1540 | Predecessors:
1541 | semi-colon:
1541 | semi-colon:
1542 | json: []
1542 | json: []
1543 | map:
1543 | map:
1544 | Successors:
1544 | Successors:
1545 | multi-line:
1545 | multi-line:
1546 | json: ""
1546 | json: []
1547 o ea207398892e
1547 o ea207398892e
1548 Predecessors:
1548 Predecessors:
1549 semi-colon:
1549 semi-colon:
1550 json: []
1550 json: []
1551 map:
1551 map:
1552 Successors:
1552 Successors:
1553 multi-line:
1553 multi-line:
1554 json: ""
1554 json: []
1555
1555
1556 $ hg fatelog
1556 $ hg fatelog
1557 @ eb5a0daa2192
1557 @ eb5a0daa2192
1558 |
1558 |
1559 o ea207398892e
1559 o ea207398892e
1560
1560
1561 Predecessors template should show all predecessors as we force their display
1561 Predecessors template should show all predecessors as we force their display
1562 with --hidden
1562 with --hidden
1563 $ hg tlog --hidden
1563 $ hg tlog --hidden
1564 @ eb5a0daa2192
1564 @ eb5a0daa2192
1565 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1565 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664
1566 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1566 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664
1567 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1567 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
1568 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1568 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
1569 | Successors:
1569 | Successors:
1570 | multi-line:
1570 | multi-line:
1571 | json: ""
1571 | json: []
1572 | x b7ea6d14e664
1572 | x b7ea6d14e664
1573 | | Predecessors: 2:0dec01379d3b
1573 | | Predecessors: 2:0dec01379d3b
1574 | | semi-colon: 2:0dec01379d3b
1574 | | semi-colon: 2:0dec01379d3b
1575 | | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1575 | | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1576 | | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1576 | | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1577 | | Successors: 4:eb5a0daa2192
1577 | | Successors: 4:eb5a0daa2192
1578 | | multi-line: 4:eb5a0daa2192
1578 | | multi-line: 4:eb5a0daa2192
1579 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1579 | | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1580 | | x 0dec01379d3b
1580 | | x 0dec01379d3b
1581 | |/ Predecessors:
1581 | |/ Predecessors:
1582 | | semi-colon:
1582 | | semi-colon:
1583 | | json: []
1583 | | json: []
1584 | | map:
1584 | | map:
1585 | | Successors: 3:b7ea6d14e664
1585 | | Successors: 3:b7ea6d14e664
1586 | | multi-line: 3:b7ea6d14e664
1586 | | multi-line: 3:b7ea6d14e664
1587 | | json: [["b7ea6d14e664bdc8922221f7992631b50da3fb07"]]
1587 | | json: [["b7ea6d14e664bdc8922221f7992631b50da3fb07"]]
1588 | x 471f378eab4c
1588 | x 471f378eab4c
1589 |/ Predecessors:
1589 |/ Predecessors:
1590 | semi-colon:
1590 | semi-colon:
1591 | json: []
1591 | json: []
1592 | map:
1592 | map:
1593 | Successors: 4:eb5a0daa2192
1593 | Successors: 4:eb5a0daa2192
1594 | multi-line: 4:eb5a0daa2192
1594 | multi-line: 4:eb5a0daa2192
1595 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1595 | json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
1596 o ea207398892e
1596 o ea207398892e
1597 Predecessors:
1597 Predecessors:
1598 semi-colon:
1598 semi-colon:
1599 json: []
1599 json: []
1600 map:
1600 map:
1601 Successors:
1601 Successors:
1602 multi-line:
1602 multi-line:
1603 json: ""
1603 json: []
1604
1604
1605 $ hg fatelog --hidden
1605 $ hg fatelog --hidden
1606 @ eb5a0daa2192
1606 @ eb5a0daa2192
1607 |
1607 |
1608 | x b7ea6d14e664
1608 | x b7ea6d14e664
1609 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1609 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1610 | | x 0dec01379d3b
1610 | | x 0dec01379d3b
1611 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000);
1611 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000);
1612 | x 471f378eab4c
1612 | x 471f378eab4c
1613 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1613 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000);
1614 o ea207398892e
1614 o ea207398892e
1615
1615
1616
1616
1617 $ hg fatelogjson --hidden
1617 $ hg fatelogjson --hidden
1618 @ eb5a0daa2192
1618 @ eb5a0daa2192
1619 |
1619 |
1620 | x b7ea6d14e664
1620 | x b7ea6d14e664
1621 | | Obsfate: [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1621 | | Obsfate: [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1622 | | x 0dec01379d3b
1622 | | x 0dec01379d3b
1623 | |/ Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"]}]
1623 | |/ Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"]}]
1624 | x 471f378eab4c
1624 | x 471f378eab4c
1625 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1625 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]}]
1626 o ea207398892e
1626 o ea207398892e
1627
1627
1628
1628
1629 Check other fatelog implementations
1629 Check other fatelog implementations
1630 -----------------------------------
1630 -----------------------------------
1631
1631
1632 $ hg fatelogkw --hidden -q
1632 $ hg fatelogkw --hidden -q
1633 @ eb5a0daa2192
1633 @ eb5a0daa2192
1634 |
1634 |
1635 | x b7ea6d14e664
1635 | x b7ea6d14e664
1636 | | Obsfate: rewritten as 4:eb5a0daa2192
1636 | | Obsfate: rewritten as 4:eb5a0daa2192
1637 | | x 0dec01379d3b
1637 | | x 0dec01379d3b
1638 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1638 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1639 | x 471f378eab4c
1639 | x 471f378eab4c
1640 |/ Obsfate: rewritten as 4:eb5a0daa2192
1640 |/ Obsfate: rewritten as 4:eb5a0daa2192
1641 o ea207398892e
1641 o ea207398892e
1642
1642
1643 $ hg fatelogkw --hidden
1643 $ hg fatelogkw --hidden
1644 @ eb5a0daa2192
1644 @ eb5a0daa2192
1645 |
1645 |
1646 | x b7ea6d14e664
1646 | x b7ea6d14e664
1647 | | Obsfate: rewritten as 4:eb5a0daa2192
1647 | | Obsfate: rewritten as 4:eb5a0daa2192
1648 | | x 0dec01379d3b
1648 | | x 0dec01379d3b
1649 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1649 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664
1650 | x 471f378eab4c
1650 | x 471f378eab4c
1651 |/ Obsfate: rewritten as 4:eb5a0daa2192
1651 |/ Obsfate: rewritten as 4:eb5a0daa2192
1652 o ea207398892e
1652 o ea207398892e
1653
1653
1654 $ hg fatelogkw --hidden -v
1654 $ hg fatelogkw --hidden -v
1655 @ eb5a0daa2192
1655 @ eb5a0daa2192
1656 |
1656 |
1657 | x b7ea6d14e664
1657 | x b7ea6d14e664
1658 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1658 | | Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1659 | | x 0dec01379d3b
1659 | | x 0dec01379d3b
1660 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000)
1660 | |/ Obsfate: rewritten using amend as 3:b7ea6d14e664 by test (at 1970-01-01 00:00 +0000)
1661 | x 471f378eab4c
1661 | x 471f378eab4c
1662 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1662 |/ Obsfate: rewritten as 4:eb5a0daa2192 by test (at 1970-01-01 00:00 +0000)
1663 o ea207398892e
1663 o ea207398892e
1664
1664
1665 $ hg log -G -T "default" --hidden
1665 $ hg log -G -T "default" --hidden
1666 @ changeset: 4:eb5a0daa2192
1666 @ changeset: 4:eb5a0daa2192
1667 | tag: tip
1667 | tag: tip
1668 | parent: 0:ea207398892e
1668 | parent: 0:ea207398892e
1669 | user: test
1669 | user: test
1670 | date: Thu Jan 01 00:00:00 1970 +0000
1670 | date: Thu Jan 01 00:00:00 1970 +0000
1671 | summary: C0
1671 | summary: C0
1672 |
1672 |
1673 | x changeset: 3:b7ea6d14e664
1673 | x changeset: 3:b7ea6d14e664
1674 | | parent: 1:471f378eab4c
1674 | | parent: 1:471f378eab4c
1675 | | user: test
1675 | | user: test
1676 | | date: Thu Jan 01 00:00:00 1970 +0000
1676 | | date: Thu Jan 01 00:00:00 1970 +0000
1677 | | obsolete: rewritten as 4:eb5a0daa2192
1677 | | obsolete: rewritten as 4:eb5a0daa2192
1678 | | summary: B1
1678 | | summary: B1
1679 | |
1679 | |
1680 | | x changeset: 2:0dec01379d3b
1680 | | x changeset: 2:0dec01379d3b
1681 | |/ user: test
1681 | |/ user: test
1682 | | date: Thu Jan 01 00:00:00 1970 +0000
1682 | | date: Thu Jan 01 00:00:00 1970 +0000
1683 | | obsolete: rewritten using amend as 3:b7ea6d14e664
1683 | | obsolete: rewritten using amend as 3:b7ea6d14e664
1684 | | summary: B0
1684 | | summary: B0
1685 | |
1685 | |
1686 | x changeset: 1:471f378eab4c
1686 | x changeset: 1:471f378eab4c
1687 |/ user: test
1687 |/ user: test
1688 | date: Thu Jan 01 00:00:00 1970 +0000
1688 | date: Thu Jan 01 00:00:00 1970 +0000
1689 | obsolete: rewritten as 4:eb5a0daa2192
1689 | obsolete: rewritten as 4:eb5a0daa2192
1690 | summary: A0
1690 | summary: A0
1691 |
1691 |
1692 o changeset: 0:ea207398892e
1692 o changeset: 0:ea207398892e
1693 user: test
1693 user: test
1694 date: Thu Jan 01 00:00:00 1970 +0000
1694 date: Thu Jan 01 00:00:00 1970 +0000
1695 summary: ROOT
1695 summary: ROOT
1696
1696
1697
1697
1698 Test template with pushed and pulled obs markers
1698 Test template with pushed and pulled obs markers
1699 ================================================
1699 ================================================
1700
1700
1701 Test setup
1701 Test setup
1702 ----------
1702 ----------
1703
1703
1704 $ hg init $TESTTMP/templates-local-remote-markers-1
1704 $ hg init $TESTTMP/templates-local-remote-markers-1
1705 $ cd $TESTTMP/templates-local-remote-markers-1
1705 $ cd $TESTTMP/templates-local-remote-markers-1
1706 $ mkcommit ROOT
1706 $ mkcommit ROOT
1707 $ mkcommit A0
1707 $ mkcommit A0
1708 $ hg clone $TESTTMP/templates-local-remote-markers-1 $TESTTMP/templates-local-remote-markers-2
1708 $ hg clone $TESTTMP/templates-local-remote-markers-1 $TESTTMP/templates-local-remote-markers-2
1709 updating to branch default
1709 updating to branch default
1710 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1710 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1711 $ cd $TESTTMP/templates-local-remote-markers-2
1711 $ cd $TESTTMP/templates-local-remote-markers-2
1712 $ hg log --hidden -G
1712 $ hg log --hidden -G
1713 @ changeset: 1:471f378eab4c
1713 @ changeset: 1:471f378eab4c
1714 | tag: tip
1714 | tag: tip
1715 | user: test
1715 | user: test
1716 | date: Thu Jan 01 00:00:00 1970 +0000
1716 | date: Thu Jan 01 00:00:00 1970 +0000
1717 | summary: A0
1717 | summary: A0
1718 |
1718 |
1719 o changeset: 0:ea207398892e
1719 o changeset: 0:ea207398892e
1720 user: test
1720 user: test
1721 date: Thu Jan 01 00:00:00 1970 +0000
1721 date: Thu Jan 01 00:00:00 1970 +0000
1722 summary: ROOT
1722 summary: ROOT
1723
1723
1724 $ cd $TESTTMP/templates-local-remote-markers-1
1724 $ cd $TESTTMP/templates-local-remote-markers-1
1725 $ hg commit --amend -m "A1"
1725 $ hg commit --amend -m "A1"
1726 $ hg commit --amend -m "A2"
1726 $ hg commit --amend -m "A2"
1727 $ hg log --hidden -G
1727 $ hg log --hidden -G
1728 @ changeset: 3:7a230b46bf61
1728 @ changeset: 3:7a230b46bf61
1729 | tag: tip
1729 | tag: tip
1730 | parent: 0:ea207398892e
1730 | parent: 0:ea207398892e
1731 | user: test
1731 | user: test
1732 | date: Thu Jan 01 00:00:00 1970 +0000
1732 | date: Thu Jan 01 00:00:00 1970 +0000
1733 | summary: A2
1733 | summary: A2
1734 |
1734 |
1735 | x changeset: 2:fdf9bde5129a
1735 | x changeset: 2:fdf9bde5129a
1736 |/ parent: 0:ea207398892e
1736 |/ parent: 0:ea207398892e
1737 | user: test
1737 | user: test
1738 | date: Thu Jan 01 00:00:00 1970 +0000
1738 | date: Thu Jan 01 00:00:00 1970 +0000
1739 | obsolete: rewritten using amend as 3:7a230b46bf61
1739 | obsolete: rewritten using amend as 3:7a230b46bf61
1740 | summary: A1
1740 | summary: A1
1741 |
1741 |
1742 | x changeset: 1:471f378eab4c
1742 | x changeset: 1:471f378eab4c
1743 |/ user: test
1743 |/ user: test
1744 | date: Thu Jan 01 00:00:00 1970 +0000
1744 | date: Thu Jan 01 00:00:00 1970 +0000
1745 | obsolete: rewritten using amend as 2:fdf9bde5129a
1745 | obsolete: rewritten using amend as 2:fdf9bde5129a
1746 | summary: A0
1746 | summary: A0
1747 |
1747 |
1748 o changeset: 0:ea207398892e
1748 o changeset: 0:ea207398892e
1749 user: test
1749 user: test
1750 date: Thu Jan 01 00:00:00 1970 +0000
1750 date: Thu Jan 01 00:00:00 1970 +0000
1751 summary: ROOT
1751 summary: ROOT
1752
1752
1753 $ cd $TESTTMP/templates-local-remote-markers-2
1753 $ cd $TESTTMP/templates-local-remote-markers-2
1754 $ hg pull
1754 $ hg pull
1755 pulling from $TESTTMP/templates-local-remote-markers-1
1755 pulling from $TESTTMP/templates-local-remote-markers-1
1756 searching for changes
1756 searching for changes
1757 adding changesets
1757 adding changesets
1758 adding manifests
1758 adding manifests
1759 adding file changes
1759 adding file changes
1760 added 1 changesets with 0 changes to 1 files (+1 heads)
1760 added 1 changesets with 0 changes to 1 files (+1 heads)
1761 2 new obsolescence markers
1761 2 new obsolescence markers
1762 obsoleted 1 changesets
1762 obsoleted 1 changesets
1763 new changesets 7a230b46bf61 (1 drafts)
1763 new changesets 7a230b46bf61 (1 drafts)
1764 (run 'hg heads' to see heads, 'hg merge' to merge)
1764 (run 'hg heads' to see heads, 'hg merge' to merge)
1765 $ hg log --hidden -G
1765 $ hg log --hidden -G
1766 o changeset: 2:7a230b46bf61
1766 o changeset: 2:7a230b46bf61
1767 | tag: tip
1767 | tag: tip
1768 | parent: 0:ea207398892e
1768 | parent: 0:ea207398892e
1769 | user: test
1769 | user: test
1770 | date: Thu Jan 01 00:00:00 1970 +0000
1770 | date: Thu Jan 01 00:00:00 1970 +0000
1771 | summary: A2
1771 | summary: A2
1772 |
1772 |
1773 | @ changeset: 1:471f378eab4c
1773 | @ changeset: 1:471f378eab4c
1774 |/ user: test
1774 |/ user: test
1775 | date: Thu Jan 01 00:00:00 1970 +0000
1775 | date: Thu Jan 01 00:00:00 1970 +0000
1776 | obsolete: rewritten using amend as 2:7a230b46bf61
1776 | obsolete: rewritten using amend as 2:7a230b46bf61
1777 | summary: A0
1777 | summary: A0
1778 |
1778 |
1779 o changeset: 0:ea207398892e
1779 o changeset: 0:ea207398892e
1780 user: test
1780 user: test
1781 date: Thu Jan 01 00:00:00 1970 +0000
1781 date: Thu Jan 01 00:00:00 1970 +0000
1782 summary: ROOT
1782 summary: ROOT
1783
1783
1784
1784
1785 $ hg debugobsolete
1785 $ hg debugobsolete
1786 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1786 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1787 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 7a230b46bf61e50b30308c6cfd7bd1269ef54702 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1787 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 7a230b46bf61e50b30308c6cfd7bd1269ef54702 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'}
1788
1788
1789 Check templates
1789 Check templates
1790 ---------------
1790 ---------------
1791
1791
1792 Predecessors template should show current revision as it is the working copy
1792 Predecessors template should show current revision as it is the working copy
1793 $ hg tlog
1793 $ hg tlog
1794 o 7a230b46bf61
1794 o 7a230b46bf61
1795 | Predecessors: 1:471f378eab4c
1795 | Predecessors: 1:471f378eab4c
1796 | semi-colon: 1:471f378eab4c
1796 | semi-colon: 1:471f378eab4c
1797 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1797 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1798 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1798 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1799 | Successors:
1799 | Successors:
1800 | multi-line:
1800 | multi-line:
1801 | json: ""
1801 | json: []
1802 | @ 471f378eab4c
1802 | @ 471f378eab4c
1803 |/ Predecessors:
1803 |/ Predecessors:
1804 | semi-colon:
1804 | semi-colon:
1805 | json: []
1805 | json: []
1806 | map:
1806 | map:
1807 | Successors: 2:7a230b46bf61
1807 | Successors: 2:7a230b46bf61
1808 | multi-line: 2:7a230b46bf61
1808 | multi-line: 2:7a230b46bf61
1809 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1809 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1810 o ea207398892e
1810 o ea207398892e
1811 Predecessors:
1811 Predecessors:
1812 semi-colon:
1812 semi-colon:
1813 json: []
1813 json: []
1814 map:
1814 map:
1815 Successors:
1815 Successors:
1816 multi-line:
1816 multi-line:
1817 json: ""
1817 json: []
1818
1818
1819 $ hg fatelog
1819 $ hg fatelog
1820 o 7a230b46bf61
1820 o 7a230b46bf61
1821 |
1821 |
1822 | @ 471f378eab4c
1822 | @ 471f378eab4c
1823 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1823 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1824 o ea207398892e
1824 o ea207398892e
1825
1825
1826 $ hg up 'desc(A2)'
1826 $ hg up 'desc(A2)'
1827 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1827 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1828
1828
1829 Predecessors template should show no predecessors as they are non visible
1829 Predecessors template should show no predecessors as they are non visible
1830 $ hg tlog
1830 $ hg tlog
1831 @ 7a230b46bf61
1831 @ 7a230b46bf61
1832 | Predecessors:
1832 | Predecessors:
1833 | semi-colon:
1833 | semi-colon:
1834 | json: []
1834 | json: []
1835 | map:
1835 | map:
1836 | Successors:
1836 | Successors:
1837 | multi-line:
1837 | multi-line:
1838 | json: ""
1838 | json: []
1839 o ea207398892e
1839 o ea207398892e
1840 Predecessors:
1840 Predecessors:
1841 semi-colon:
1841 semi-colon:
1842 json: []
1842 json: []
1843 map:
1843 map:
1844 Successors:
1844 Successors:
1845 multi-line:
1845 multi-line:
1846 json: ""
1846 json: []
1847
1847
1848 $ hg fatelog
1848 $ hg fatelog
1849 @ 7a230b46bf61
1849 @ 7a230b46bf61
1850 |
1850 |
1851 o ea207398892e
1851 o ea207398892e
1852
1852
1853 Predecessors template should show all predecessors as we force their display
1853 Predecessors template should show all predecessors as we force their display
1854 with --hidden
1854 with --hidden
1855 $ hg tlog --hidden
1855 $ hg tlog --hidden
1856 @ 7a230b46bf61
1856 @ 7a230b46bf61
1857 | Predecessors: 1:471f378eab4c
1857 | Predecessors: 1:471f378eab4c
1858 | semi-colon: 1:471f378eab4c
1858 | semi-colon: 1:471f378eab4c
1859 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1859 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
1860 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1860 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
1861 | Successors:
1861 | Successors:
1862 | multi-line:
1862 | multi-line:
1863 | json: ""
1863 | json: []
1864 | x 471f378eab4c
1864 | x 471f378eab4c
1865 |/ Predecessors:
1865 |/ Predecessors:
1866 | semi-colon:
1866 | semi-colon:
1867 | json: []
1867 | json: []
1868 | map:
1868 | map:
1869 | Successors: 2:7a230b46bf61
1869 | Successors: 2:7a230b46bf61
1870 | multi-line: 2:7a230b46bf61
1870 | multi-line: 2:7a230b46bf61
1871 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1871 | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
1872 o ea207398892e
1872 o ea207398892e
1873 Predecessors:
1873 Predecessors:
1874 semi-colon:
1874 semi-colon:
1875 json: []
1875 json: []
1876 map:
1876 map:
1877 Successors:
1877 Successors:
1878 multi-line:
1878 multi-line:
1879 json: ""
1879 json: []
1880
1880
1881 $ hg fatelog --hidden
1881 $ hg fatelog --hidden
1882 @ 7a230b46bf61
1882 @ 7a230b46bf61
1883 |
1883 |
1884 | x 471f378eab4c
1884 | x 471f378eab4c
1885 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1885 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000);
1886 o ea207398892e
1886 o ea207398892e
1887
1887
1888
1888
1889 Check other fatelog implementations
1889 Check other fatelog implementations
1890 -----------------------------------
1890 -----------------------------------
1891
1891
1892 $ hg fatelogkw --hidden -q
1892 $ hg fatelogkw --hidden -q
1893 @ 7a230b46bf61
1893 @ 7a230b46bf61
1894 |
1894 |
1895 | x 471f378eab4c
1895 | x 471f378eab4c
1896 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1896 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1897 o ea207398892e
1897 o ea207398892e
1898
1898
1899 $ hg fatelogkw --hidden
1899 $ hg fatelogkw --hidden
1900 @ 7a230b46bf61
1900 @ 7a230b46bf61
1901 |
1901 |
1902 | x 471f378eab4c
1902 | x 471f378eab4c
1903 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1903 |/ Obsfate: rewritten using amend as 2:7a230b46bf61
1904 o ea207398892e
1904 o ea207398892e
1905
1905
1906 $ hg fatelogkw --hidden -v
1906 $ hg fatelogkw --hidden -v
1907 @ 7a230b46bf61
1907 @ 7a230b46bf61
1908 |
1908 |
1909 | x 471f378eab4c
1909 | x 471f378eab4c
1910 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
1910 |/ Obsfate: rewritten using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000)
1911 o ea207398892e
1911 o ea207398892e
1912
1912
1913 $ hg log -G -T "default" --hidden
1913 $ hg log -G -T "default" --hidden
1914 @ changeset: 2:7a230b46bf61
1914 @ changeset: 2:7a230b46bf61
1915 | tag: tip
1915 | tag: tip
1916 | parent: 0:ea207398892e
1916 | parent: 0:ea207398892e
1917 | user: test
1917 | user: test
1918 | date: Thu Jan 01 00:00:00 1970 +0000
1918 | date: Thu Jan 01 00:00:00 1970 +0000
1919 | summary: A2
1919 | summary: A2
1920 |
1920 |
1921 | x changeset: 1:471f378eab4c
1921 | x changeset: 1:471f378eab4c
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 | obsolete: rewritten using amend as 2:7a230b46bf61
1924 | obsolete: rewritten using amend as 2:7a230b46bf61
1925 | summary: A0
1925 | summary: A0
1926 |
1926 |
1927 o changeset: 0:ea207398892e
1927 o changeset: 0:ea207398892e
1928 user: test
1928 user: test
1929 date: Thu Jan 01 00:00:00 1970 +0000
1929 date: Thu Jan 01 00:00:00 1970 +0000
1930 summary: ROOT
1930 summary: ROOT
1931
1931
1932
1932
1933 Test template with obsmarkers cycle
1933 Test template with obsmarkers cycle
1934 ===================================
1934 ===================================
1935
1935
1936 Test setup
1936 Test setup
1937 ----------
1937 ----------
1938
1938
1939 $ hg init $TESTTMP/templates-local-cycle
1939 $ hg init $TESTTMP/templates-local-cycle
1940 $ cd $TESTTMP/templates-local-cycle
1940 $ cd $TESTTMP/templates-local-cycle
1941 $ mkcommit ROOT
1941 $ mkcommit ROOT
1942 $ mkcommit A0
1942 $ mkcommit A0
1943 $ mkcommit B0
1943 $ mkcommit B0
1944 $ hg up -r 0
1944 $ hg up -r 0
1945 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1945 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1946 $ mkcommit C0
1946 $ mkcommit C0
1947 created new head
1947 created new head
1948
1948
1949 Create the cycle
1949 Create the cycle
1950
1950
1951 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(B0)"`
1951 $ hg debugobsolete `getid "desc(A0)"` `getid "desc(B0)"`
1952 1 new obsolescence markers
1952 1 new obsolescence markers
1953 obsoleted 1 changesets
1953 obsoleted 1 changesets
1954 1 new orphan changesets
1954 1 new orphan changesets
1955 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
1955 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
1956 1 new obsolescence markers
1956 1 new obsolescence markers
1957 obsoleted 1 changesets
1957 obsoleted 1 changesets
1958 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(A0)"`
1958 $ hg debugobsolete `getid "desc(B0)"` `getid "desc(A0)"`
1959 1 new obsolescence markers
1959 1 new obsolescence markers
1960
1960
1961 Check templates
1961 Check templates
1962 ---------------
1962 ---------------
1963
1963
1964 $ hg tlog
1964 $ hg tlog
1965 @ f897c6137566
1965 @ f897c6137566
1966 | Predecessors:
1966 | Predecessors:
1967 | semi-colon:
1967 | semi-colon:
1968 | json: []
1968 | json: []
1969 | map:
1969 | map:
1970 | Successors:
1970 | Successors:
1971 | multi-line:
1971 | multi-line:
1972 | json: ""
1972 | json: []
1973 o ea207398892e
1973 o ea207398892e
1974 Predecessors:
1974 Predecessors:
1975 semi-colon:
1975 semi-colon:
1976 json: []
1976 json: []
1977 map:
1977 map:
1978 Successors:
1978 Successors:
1979 multi-line:
1979 multi-line:
1980 json: ""
1980 json: []
1981
1981
1982 $ hg fatelog
1982 $ hg fatelog
1983 @ f897c6137566
1983 @ f897c6137566
1984 |
1984 |
1985 o ea207398892e
1985 o ea207398892e
1986
1986
1987
1987
1988 $ hg up -r "desc(B0)" --hidden
1988 $ hg up -r "desc(B0)" --hidden
1989 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1989 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1990 updated to hidden changeset 0dec01379d3b
1990 updated to hidden changeset 0dec01379d3b
1991 (hidden revision '0dec01379d3b' is pruned)
1991 (hidden revision '0dec01379d3b' is pruned)
1992 $ hg tlog
1992 $ hg tlog
1993 o f897c6137566
1993 o f897c6137566
1994 | Predecessors: 2:0dec01379d3b
1994 | Predecessors: 2:0dec01379d3b
1995 | semi-colon: 2:0dec01379d3b
1995 | semi-colon: 2:0dec01379d3b
1996 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1996 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
1997 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1997 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
1998 | Successors:
1998 | Successors:
1999 | multi-line:
1999 | multi-line:
2000 | json: ""
2000 | json: []
2001 | @ 0dec01379d3b
2001 | @ 0dec01379d3b
2002 | | Predecessors: 1:471f378eab4c
2002 | | Predecessors: 1:471f378eab4c
2003 | | semi-colon: 1:471f378eab4c
2003 | | semi-colon: 1:471f378eab4c
2004 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2004 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2005 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2005 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2006 | | Successors: 3:f897c6137566; 1:471f378eab4c
2006 | | Successors: 3:f897c6137566; 1:471f378eab4c
2007 | | multi-line: 3:f897c6137566
2007 | | multi-line: 3:f897c6137566
2008 | | multi-line: 1:471f378eab4c
2008 | | multi-line: 1:471f378eab4c
2009 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2009 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2010 | x 471f378eab4c
2010 | x 471f378eab4c
2011 |/ Predecessors: 2:0dec01379d3b
2011 |/ Predecessors: 2:0dec01379d3b
2012 | semi-colon: 2:0dec01379d3b
2012 | semi-colon: 2:0dec01379d3b
2013 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2013 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2014 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2014 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2015 | Successors: 2:0dec01379d3b
2015 | Successors: 2:0dec01379d3b
2016 | multi-line: 2:0dec01379d3b
2016 | multi-line: 2:0dec01379d3b
2017 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2017 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2018 o ea207398892e
2018 o ea207398892e
2019 Predecessors:
2019 Predecessors:
2020 semi-colon:
2020 semi-colon:
2021 json: []
2021 json: []
2022 map:
2022 map:
2023 Successors:
2023 Successors:
2024 multi-line:
2024 multi-line:
2025 json: ""
2025 json: []
2026
2026
2027 $ hg fatelog
2027 $ hg fatelog
2028 o f897c6137566
2028 o f897c6137566
2029 |
2029 |
2030 | @ 0dec01379d3b
2030 | @ 0dec01379d3b
2031 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
2031 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
2032 | x 471f378eab4c
2032 | x 471f378eab4c
2033 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
2033 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
2034 o ea207398892e
2034 o ea207398892e
2035
2035
2036
2036
2037 $ hg up -r "desc(A0)" --hidden
2037 $ hg up -r "desc(A0)" --hidden
2038 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2038 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2039 $ hg tlog
2039 $ hg tlog
2040 o f897c6137566
2040 o f897c6137566
2041 | Predecessors: 1:471f378eab4c
2041 | Predecessors: 1:471f378eab4c
2042 | semi-colon: 1:471f378eab4c
2042 | semi-colon: 1:471f378eab4c
2043 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2043 | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2044 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2044 | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2045 | Successors:
2045 | Successors:
2046 | multi-line:
2046 | multi-line:
2047 | json: ""
2047 | json: []
2048 | @ 471f378eab4c
2048 | @ 471f378eab4c
2049 |/ Predecessors:
2049 |/ Predecessors:
2050 | semi-colon:
2050 | semi-colon:
2051 | json: []
2051 | json: []
2052 | map:
2052 | map:
2053 | Successors:
2053 | Successors:
2054 | multi-line:
2054 | multi-line:
2055 | json: []
2055 | json: []
2056 o ea207398892e
2056 o ea207398892e
2057 Predecessors:
2057 Predecessors:
2058 semi-colon:
2058 semi-colon:
2059 json: []
2059 json: []
2060 map:
2060 map:
2061 Successors:
2061 Successors:
2062 multi-line:
2062 multi-line:
2063 json: ""
2063 json: []
2064
2064
2065 $ hg fatelog
2065 $ hg fatelog
2066 o f897c6137566
2066 o f897c6137566
2067 |
2067 |
2068 | @ 471f378eab4c
2068 | @ 471f378eab4c
2069 |/ Obsfate: pruned;
2069 |/ Obsfate: pruned;
2070 o ea207398892e
2070 o ea207398892e
2071
2071
2072
2072
2073 $ hg up -r "desc(ROOT)" --hidden
2073 $ hg up -r "desc(ROOT)" --hidden
2074 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2074 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2075 $ hg tlog
2075 $ hg tlog
2076 o f897c6137566
2076 o f897c6137566
2077 | Predecessors:
2077 | Predecessors:
2078 | semi-colon:
2078 | semi-colon:
2079 | json: []
2079 | json: []
2080 | map:
2080 | map:
2081 | Successors:
2081 | Successors:
2082 | multi-line:
2082 | multi-line:
2083 | json: ""
2083 | json: []
2084 @ ea207398892e
2084 @ ea207398892e
2085 Predecessors:
2085 Predecessors:
2086 semi-colon:
2086 semi-colon:
2087 json: []
2087 json: []
2088 map:
2088 map:
2089 Successors:
2089 Successors:
2090 multi-line:
2090 multi-line:
2091 json: ""
2091 json: []
2092
2092
2093 $ hg fatelog
2093 $ hg fatelog
2094 o f897c6137566
2094 o f897c6137566
2095 |
2095 |
2096 @ ea207398892e
2096 @ ea207398892e
2097
2097
2098
2098
2099 $ hg tlog --hidden
2099 $ hg tlog --hidden
2100 o f897c6137566
2100 o f897c6137566
2101 | Predecessors: 2:0dec01379d3b
2101 | Predecessors: 2:0dec01379d3b
2102 | semi-colon: 2:0dec01379d3b
2102 | semi-colon: 2:0dec01379d3b
2103 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2103 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2104 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2104 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2105 | Successors:
2105 | Successors:
2106 | multi-line:
2106 | multi-line:
2107 | json: ""
2107 | json: []
2108 | x 0dec01379d3b
2108 | x 0dec01379d3b
2109 | | Predecessors: 1:471f378eab4c
2109 | | Predecessors: 1:471f378eab4c
2110 | | semi-colon: 1:471f378eab4c
2110 | | semi-colon: 1:471f378eab4c
2111 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2111 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2112 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2112 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2113 | | Successors: 3:f897c6137566; 1:471f378eab4c
2113 | | Successors: 3:f897c6137566; 1:471f378eab4c
2114 | | multi-line: 3:f897c6137566
2114 | | multi-line: 3:f897c6137566
2115 | | multi-line: 1:471f378eab4c
2115 | | multi-line: 1:471f378eab4c
2116 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2116 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2117 | x 471f378eab4c
2117 | x 471f378eab4c
2118 |/ Predecessors: 2:0dec01379d3b
2118 |/ Predecessors: 2:0dec01379d3b
2119 | semi-colon: 2:0dec01379d3b
2119 | semi-colon: 2:0dec01379d3b
2120 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2120 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2121 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2121 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2122 | Successors: 2:0dec01379d3b
2122 | Successors: 2:0dec01379d3b
2123 | multi-line: 2:0dec01379d3b
2123 | multi-line: 2:0dec01379d3b
2124 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2124 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2125 @ ea207398892e
2125 @ ea207398892e
2126 Predecessors:
2126 Predecessors:
2127 semi-colon:
2127 semi-colon:
2128 json: []
2128 json: []
2129 map:
2129 map:
2130 Successors:
2130 Successors:
2131 multi-line:
2131 multi-line:
2132 json: ""
2132 json: []
2133
2133
2134 Check other fatelog implementations
2134 Check other fatelog implementations
2135 -----------------------------------
2135 -----------------------------------
2136
2136
2137 $ hg fatelogkw --hidden -q
2137 $ hg fatelogkw --hidden -q
2138 o f897c6137566
2138 o f897c6137566
2139 |
2139 |
2140 | x 0dec01379d3b
2140 | x 0dec01379d3b
2141 | | Obsfate: rewritten as 3:f897c6137566
2141 | | Obsfate: rewritten as 3:f897c6137566
2142 | | Obsfate: rewritten as 1:471f378eab4c
2142 | | Obsfate: rewritten as 1:471f378eab4c
2143 | x 471f378eab4c
2143 | x 471f378eab4c
2144 |/ Obsfate: rewritten as 2:0dec01379d3b
2144 |/ Obsfate: rewritten as 2:0dec01379d3b
2145 @ ea207398892e
2145 @ ea207398892e
2146
2146
2147 $ hg fatelogkw --hidden
2147 $ hg fatelogkw --hidden
2148 o f897c6137566
2148 o f897c6137566
2149 |
2149 |
2150 | x 0dec01379d3b
2150 | x 0dec01379d3b
2151 | | Obsfate: rewritten as 3:f897c6137566
2151 | | Obsfate: rewritten as 3:f897c6137566
2152 | | Obsfate: rewritten as 1:471f378eab4c
2152 | | Obsfate: rewritten as 1:471f378eab4c
2153 | x 471f378eab4c
2153 | x 471f378eab4c
2154 |/ Obsfate: rewritten as 2:0dec01379d3b
2154 |/ Obsfate: rewritten as 2:0dec01379d3b
2155 @ ea207398892e
2155 @ ea207398892e
2156
2156
2157 $ hg fatelogkw --hidden -v
2157 $ hg fatelogkw --hidden -v
2158 o f897c6137566
2158 o f897c6137566
2159 |
2159 |
2160 | x 0dec01379d3b
2160 | x 0dec01379d3b
2161 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
2161 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
2162 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
2162 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
2163 | x 471f378eab4c
2163 | x 471f378eab4c
2164 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
2164 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
2165 @ ea207398892e
2165 @ ea207398892e
2166
2166
2167 $ hg log -G -T "default" --hidden
2167 $ hg log -G -T "default" --hidden
2168 o changeset: 3:f897c6137566
2168 o changeset: 3:f897c6137566
2169 | tag: tip
2169 | tag: tip
2170 | parent: 0:ea207398892e
2170 | parent: 0:ea207398892e
2171 | user: test
2171 | user: test
2172 | date: Thu Jan 01 00:00:00 1970 +0000
2172 | date: Thu Jan 01 00:00:00 1970 +0000
2173 | summary: C0
2173 | summary: C0
2174 |
2174 |
2175 | x changeset: 2:0dec01379d3b
2175 | x changeset: 2:0dec01379d3b
2176 | | user: test
2176 | | user: test
2177 | | date: Thu Jan 01 00:00:00 1970 +0000
2177 | | date: Thu Jan 01 00:00:00 1970 +0000
2178 | | obsolete: rewritten as 3:f897c6137566
2178 | | obsolete: rewritten as 3:f897c6137566
2179 | | obsolete: rewritten as 1:471f378eab4c
2179 | | obsolete: rewritten as 1:471f378eab4c
2180 | | summary: B0
2180 | | summary: B0
2181 | |
2181 | |
2182 | x changeset: 1:471f378eab4c
2182 | x changeset: 1:471f378eab4c
2183 |/ user: test
2183 |/ user: test
2184 | date: Thu Jan 01 00:00:00 1970 +0000
2184 | date: Thu Jan 01 00:00:00 1970 +0000
2185 | obsolete: rewritten as 2:0dec01379d3b
2185 | obsolete: rewritten as 2:0dec01379d3b
2186 | summary: A0
2186 | summary: A0
2187 |
2187 |
2188 @ changeset: 0:ea207398892e
2188 @ changeset: 0:ea207398892e
2189 user: test
2189 user: test
2190 date: Thu Jan 01 00:00:00 1970 +0000
2190 date: Thu Jan 01 00:00:00 1970 +0000
2191 summary: ROOT
2191 summary: ROOT
2192
2192
2193
2193
2194 Test template with split + divergence with cycles
2194 Test template with split + divergence with cycles
2195 =================================================
2195 =================================================
2196
2196
2197 $ hg log -G
2197 $ hg log -G
2198 o changeset: 3:f897c6137566
2198 o changeset: 3:f897c6137566
2199 | tag: tip
2199 | tag: tip
2200 | parent: 0:ea207398892e
2200 | parent: 0:ea207398892e
2201 | user: test
2201 | user: test
2202 | date: Thu Jan 01 00:00:00 1970 +0000
2202 | date: Thu Jan 01 00:00:00 1970 +0000
2203 | summary: C0
2203 | summary: C0
2204 |
2204 |
2205 @ changeset: 0:ea207398892e
2205 @ changeset: 0:ea207398892e
2206 user: test
2206 user: test
2207 date: Thu Jan 01 00:00:00 1970 +0000
2207 date: Thu Jan 01 00:00:00 1970 +0000
2208 summary: ROOT
2208 summary: ROOT
2209
2209
2210 $ hg up
2210 $ hg up
2211 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2211 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2212
2212
2213 Create a commit with three files
2213 Create a commit with three files
2214 $ touch A B C
2214 $ touch A B C
2215 $ hg commit -A -m "Add A,B,C" A B C
2215 $ hg commit -A -m "Add A,B,C" A B C
2216
2216
2217 Split it
2217 Split it
2218 $ hg up 3
2218 $ hg up 3
2219 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
2219 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
2220 $ touch A
2220 $ touch A
2221 $ hg commit -A -m "Add A,B,C" A
2221 $ hg commit -A -m "Add A,B,C" A
2222 created new head
2222 created new head
2223
2223
2224 $ touch B
2224 $ touch B
2225 $ hg commit -A -m "Add A,B,C" B
2225 $ hg commit -A -m "Add A,B,C" B
2226
2226
2227 $ touch C
2227 $ touch C
2228 $ hg commit -A -m "Add A,B,C" C
2228 $ hg commit -A -m "Add A,B,C" C
2229
2229
2230 $ hg log -G
2230 $ hg log -G
2231 @ changeset: 7:ba2ed02b0c9a
2231 @ changeset: 7:ba2ed02b0c9a
2232 | tag: tip
2232 | tag: tip
2233 | user: test
2233 | user: test
2234 | date: Thu Jan 01 00:00:00 1970 +0000
2234 | date: Thu Jan 01 00:00:00 1970 +0000
2235 | summary: Add A,B,C
2235 | summary: Add A,B,C
2236 |
2236 |
2237 o changeset: 6:4a004186e638
2237 o changeset: 6:4a004186e638
2238 | user: test
2238 | user: test
2239 | date: Thu Jan 01 00:00:00 1970 +0000
2239 | date: Thu Jan 01 00:00:00 1970 +0000
2240 | summary: Add A,B,C
2240 | summary: Add A,B,C
2241 |
2241 |
2242 o changeset: 5:dd800401bd8c
2242 o changeset: 5:dd800401bd8c
2243 | parent: 3:f897c6137566
2243 | parent: 3:f897c6137566
2244 | user: test
2244 | user: test
2245 | date: Thu Jan 01 00:00:00 1970 +0000
2245 | date: Thu Jan 01 00:00:00 1970 +0000
2246 | summary: Add A,B,C
2246 | summary: Add A,B,C
2247 |
2247 |
2248 | o changeset: 4:9bd10a0775e4
2248 | o changeset: 4:9bd10a0775e4
2249 |/ user: test
2249 |/ user: test
2250 | date: Thu Jan 01 00:00:00 1970 +0000
2250 | date: Thu Jan 01 00:00:00 1970 +0000
2251 | summary: Add A,B,C
2251 | summary: Add A,B,C
2252 |
2252 |
2253 o changeset: 3:f897c6137566
2253 o changeset: 3:f897c6137566
2254 | parent: 0:ea207398892e
2254 | parent: 0:ea207398892e
2255 | user: test
2255 | user: test
2256 | date: Thu Jan 01 00:00:00 1970 +0000
2256 | date: Thu Jan 01 00:00:00 1970 +0000
2257 | summary: C0
2257 | summary: C0
2258 |
2258 |
2259 o changeset: 0:ea207398892e
2259 o changeset: 0:ea207398892e
2260 user: test
2260 user: test
2261 date: Thu Jan 01 00:00:00 1970 +0000
2261 date: Thu Jan 01 00:00:00 1970 +0000
2262 summary: ROOT
2262 summary: ROOT
2263
2263
2264 $ hg debugobsolete `getid "4"` `getid "5"` `getid "6"` `getid "7"`
2264 $ hg debugobsolete `getid "4"` `getid "5"` `getid "6"` `getid "7"`
2265 1 new obsolescence markers
2265 1 new obsolescence markers
2266 obsoleted 1 changesets
2266 obsoleted 1 changesets
2267 $ hg log -G
2267 $ hg log -G
2268 @ changeset: 7:ba2ed02b0c9a
2268 @ changeset: 7:ba2ed02b0c9a
2269 | tag: tip
2269 | tag: tip
2270 | user: test
2270 | user: test
2271 | date: Thu Jan 01 00:00:00 1970 +0000
2271 | date: Thu Jan 01 00:00:00 1970 +0000
2272 | summary: Add A,B,C
2272 | summary: Add A,B,C
2273 |
2273 |
2274 o changeset: 6:4a004186e638
2274 o changeset: 6:4a004186e638
2275 | user: test
2275 | user: test
2276 | date: Thu Jan 01 00:00:00 1970 +0000
2276 | date: Thu Jan 01 00:00:00 1970 +0000
2277 | summary: Add A,B,C
2277 | summary: Add A,B,C
2278 |
2278 |
2279 o changeset: 5:dd800401bd8c
2279 o changeset: 5:dd800401bd8c
2280 | parent: 3:f897c6137566
2280 | parent: 3:f897c6137566
2281 | user: test
2281 | user: test
2282 | date: Thu Jan 01 00:00:00 1970 +0000
2282 | date: Thu Jan 01 00:00:00 1970 +0000
2283 | summary: Add A,B,C
2283 | summary: Add A,B,C
2284 |
2284 |
2285 o changeset: 3:f897c6137566
2285 o changeset: 3:f897c6137566
2286 | parent: 0:ea207398892e
2286 | parent: 0:ea207398892e
2287 | user: test
2287 | user: test
2288 | date: Thu Jan 01 00:00:00 1970 +0000
2288 | date: Thu Jan 01 00:00:00 1970 +0000
2289 | summary: C0
2289 | summary: C0
2290 |
2290 |
2291 o changeset: 0:ea207398892e
2291 o changeset: 0:ea207398892e
2292 user: test
2292 user: test
2293 date: Thu Jan 01 00:00:00 1970 +0000
2293 date: Thu Jan 01 00:00:00 1970 +0000
2294 summary: ROOT
2294 summary: ROOT
2295
2295
2296 Diverge one of the splitted commit
2296 Diverge one of the splitted commit
2297
2297
2298 $ hg up 6
2298 $ hg up 6
2299 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2299 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2300 $ hg commit --amend -m "Add only B"
2300 $ hg commit --amend -m "Add only B"
2301 1 new orphan changesets
2301 1 new orphan changesets
2302
2302
2303 $ hg up 6 --hidden
2303 $ hg up 6 --hidden
2304 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2304 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2305 $ hg commit --amend -m "Add B only"
2305 $ hg commit --amend -m "Add B only"
2306 4 new content-divergent changesets
2306 4 new content-divergent changesets
2307
2307
2308 $ hg log -G
2308 $ hg log -G
2309 @ changeset: 9:0b997eb7ceee
2309 @ changeset: 9:0b997eb7ceee
2310 | tag: tip
2310 | tag: tip
2311 | parent: 5:dd800401bd8c
2311 | parent: 5:dd800401bd8c
2312 | user: test
2312 | user: test
2313 | date: Thu Jan 01 00:00:00 1970 +0000
2313 | date: Thu Jan 01 00:00:00 1970 +0000
2314 | instability: content-divergent
2314 | instability: content-divergent
2315 | summary: Add B only
2315 | summary: Add B only
2316 |
2316 |
2317 | * changeset: 8:b18bc8331526
2317 | * changeset: 8:b18bc8331526
2318 |/ parent: 5:dd800401bd8c
2318 |/ parent: 5:dd800401bd8c
2319 | user: test
2319 | user: test
2320 | date: Thu Jan 01 00:00:00 1970 +0000
2320 | date: Thu Jan 01 00:00:00 1970 +0000
2321 | instability: content-divergent
2321 | instability: content-divergent
2322 | summary: Add only B
2322 | summary: Add only B
2323 |
2323 |
2324 | * changeset: 7:ba2ed02b0c9a
2324 | * changeset: 7:ba2ed02b0c9a
2325 | | user: test
2325 | | user: test
2326 | | date: Thu Jan 01 00:00:00 1970 +0000
2326 | | date: Thu Jan 01 00:00:00 1970 +0000
2327 | | instability: orphan, content-divergent
2327 | | instability: orphan, content-divergent
2328 | | summary: Add A,B,C
2328 | | summary: Add A,B,C
2329 | |
2329 | |
2330 | x changeset: 6:4a004186e638
2330 | x changeset: 6:4a004186e638
2331 |/ user: test
2331 |/ user: test
2332 | date: Thu Jan 01 00:00:00 1970 +0000
2332 | date: Thu Jan 01 00:00:00 1970 +0000
2333 | obsolete: rewritten using amend as 8:b18bc8331526
2333 | obsolete: rewritten using amend as 8:b18bc8331526
2334 | obsolete: rewritten using amend as 9:0b997eb7ceee
2334 | obsolete: rewritten using amend as 9:0b997eb7ceee
2335 | summary: Add A,B,C
2335 | summary: Add A,B,C
2336 |
2336 |
2337 * changeset: 5:dd800401bd8c
2337 * changeset: 5:dd800401bd8c
2338 | parent: 3:f897c6137566
2338 | parent: 3:f897c6137566
2339 | user: test
2339 | user: test
2340 | date: Thu Jan 01 00:00:00 1970 +0000
2340 | date: Thu Jan 01 00:00:00 1970 +0000
2341 | instability: content-divergent
2341 | instability: content-divergent
2342 | summary: Add A,B,C
2342 | summary: Add A,B,C
2343 |
2343 |
2344 o changeset: 3:f897c6137566
2344 o changeset: 3:f897c6137566
2345 | parent: 0:ea207398892e
2345 | parent: 0:ea207398892e
2346 | user: test
2346 | user: test
2347 | date: Thu Jan 01 00:00:00 1970 +0000
2347 | date: Thu Jan 01 00:00:00 1970 +0000
2348 | summary: C0
2348 | summary: C0
2349 |
2349 |
2350 o changeset: 0:ea207398892e
2350 o changeset: 0:ea207398892e
2351 user: test
2351 user: test
2352 date: Thu Jan 01 00:00:00 1970 +0000
2352 date: Thu Jan 01 00:00:00 1970 +0000
2353 summary: ROOT
2353 summary: ROOT
2354
2354
2355
2355
2356 Check templates
2356 Check templates
2357 ---------------
2357 ---------------
2358
2358
2359 $ hg tlog
2359 $ hg tlog
2360 @ 0b997eb7ceee
2360 @ 0b997eb7ceee
2361 | Predecessors: 6:4a004186e638
2361 | Predecessors: 6:4a004186e638
2362 | semi-colon: 6:4a004186e638
2362 | semi-colon: 6:4a004186e638
2363 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2363 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2364 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2364 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2365 | Successors:
2365 | Successors:
2366 | multi-line:
2366 | multi-line:
2367 | json: ""
2367 | json: []
2368 | * b18bc8331526
2368 | * b18bc8331526
2369 |/ Predecessors: 6:4a004186e638
2369 |/ Predecessors: 6:4a004186e638
2370 | semi-colon: 6:4a004186e638
2370 | semi-colon: 6:4a004186e638
2371 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2371 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2372 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2372 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2373 | Successors:
2373 | Successors:
2374 | multi-line:
2374 | multi-line:
2375 | json: ""
2375 | json: []
2376 | * ba2ed02b0c9a
2376 | * ba2ed02b0c9a
2377 | | Predecessors:
2377 | | Predecessors:
2378 | | semi-colon:
2378 | | semi-colon:
2379 | | json: []
2379 | | json: []
2380 | | map:
2380 | | map:
2381 | | Successors:
2381 | | Successors:
2382 | | multi-line:
2382 | | multi-line:
2383 | | json: ""
2383 | | json: []
2384 | x 4a004186e638
2384 | x 4a004186e638
2385 |/ Predecessors:
2385 |/ Predecessors:
2386 | semi-colon:
2386 | semi-colon:
2387 | json: []
2387 | json: []
2388 | map:
2388 | map:
2389 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
2389 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
2390 | multi-line: 8:b18bc8331526
2390 | multi-line: 8:b18bc8331526
2391 | multi-line: 9:0b997eb7ceee
2391 | multi-line: 9:0b997eb7ceee
2392 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
2392 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
2393 * dd800401bd8c
2393 * dd800401bd8c
2394 | Predecessors:
2394 | Predecessors:
2395 | semi-colon:
2395 | semi-colon:
2396 | json: []
2396 | json: []
2397 | map:
2397 | map:
2398 | Successors:
2398 | Successors:
2399 | multi-line:
2399 | multi-line:
2400 | json: ""
2400 | json: []
2401 o f897c6137566
2401 o f897c6137566
2402 | Predecessors:
2402 | Predecessors:
2403 | semi-colon:
2403 | semi-colon:
2404 | json: []
2404 | json: []
2405 | map:
2405 | map:
2406 | Successors:
2406 | Successors:
2407 | multi-line:
2407 | multi-line:
2408 | json: ""
2408 | json: []
2409 o ea207398892e
2409 o ea207398892e
2410 Predecessors:
2410 Predecessors:
2411 semi-colon:
2411 semi-colon:
2412 json: []
2412 json: []
2413 map:
2413 map:
2414 Successors:
2414 Successors:
2415 multi-line:
2415 multi-line:
2416 json: ""
2416 json: []
2417 $ hg fatelog
2417 $ hg fatelog
2418 @ 0b997eb7ceee
2418 @ 0b997eb7ceee
2419 |
2419 |
2420 | * b18bc8331526
2420 | * b18bc8331526
2421 |/
2421 |/
2422 | * ba2ed02b0c9a
2422 | * ba2ed02b0c9a
2423 | |
2423 | |
2424 | x 4a004186e638
2424 | x 4a004186e638
2425 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
2425 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
2426 * dd800401bd8c
2426 * dd800401bd8c
2427 |
2427 |
2428 o f897c6137566
2428 o f897c6137566
2429 |
2429 |
2430 o ea207398892e
2430 o ea207398892e
2431
2431
2432 $ hg tlog --hidden
2432 $ hg tlog --hidden
2433 @ 0b997eb7ceee
2433 @ 0b997eb7ceee
2434 | Predecessors: 6:4a004186e638
2434 | Predecessors: 6:4a004186e638
2435 | semi-colon: 6:4a004186e638
2435 | semi-colon: 6:4a004186e638
2436 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2436 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2437 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2437 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2438 | Successors:
2438 | Successors:
2439 | multi-line:
2439 | multi-line:
2440 | json: ""
2440 | json: []
2441 | * b18bc8331526
2441 | * b18bc8331526
2442 |/ Predecessors: 6:4a004186e638
2442 |/ Predecessors: 6:4a004186e638
2443 | semi-colon: 6:4a004186e638
2443 | semi-colon: 6:4a004186e638
2444 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2444 | json: ["4a004186e63889f20cb16434fcbd72220bd1eace"]
2445 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2445 | map: 6:4a004186e63889f20cb16434fcbd72220bd1eace
2446 | Successors:
2446 | Successors:
2447 | multi-line:
2447 | multi-line:
2448 | json: ""
2448 | json: []
2449 | * ba2ed02b0c9a
2449 | * ba2ed02b0c9a
2450 | | Predecessors: 4:9bd10a0775e4
2450 | | Predecessors: 4:9bd10a0775e4
2451 | | semi-colon: 4:9bd10a0775e4
2451 | | semi-colon: 4:9bd10a0775e4
2452 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2452 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2453 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2453 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2454 | | Successors:
2454 | | Successors:
2455 | | multi-line:
2455 | | multi-line:
2456 | | json: ""
2456 | | json: []
2457 | x 4a004186e638
2457 | x 4a004186e638
2458 |/ Predecessors: 4:9bd10a0775e4
2458 |/ Predecessors: 4:9bd10a0775e4
2459 | semi-colon: 4:9bd10a0775e4
2459 | semi-colon: 4:9bd10a0775e4
2460 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2460 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2461 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2461 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2462 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
2462 | Successors: 8:b18bc8331526; 9:0b997eb7ceee
2463 | multi-line: 8:b18bc8331526
2463 | multi-line: 8:b18bc8331526
2464 | multi-line: 9:0b997eb7ceee
2464 | multi-line: 9:0b997eb7ceee
2465 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
2465 | json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
2466 * dd800401bd8c
2466 * dd800401bd8c
2467 | Predecessors: 4:9bd10a0775e4
2467 | Predecessors: 4:9bd10a0775e4
2468 | semi-colon: 4:9bd10a0775e4
2468 | semi-colon: 4:9bd10a0775e4
2469 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2469 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2470 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2470 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2471 | Successors:
2471 | Successors:
2472 | multi-line:
2472 | multi-line:
2473 | json: ""
2473 | json: []
2474 | x 9bd10a0775e4
2474 | x 9bd10a0775e4
2475 |/ Predecessors:
2475 |/ Predecessors:
2476 | semi-colon:
2476 | semi-colon:
2477 | json: []
2477 | json: []
2478 | map:
2478 | map:
2479 | Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
2479 | Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
2480 | multi-line: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
2480 | multi-line: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
2481 | json: [["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]]
2481 | json: [["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]]
2482 o f897c6137566
2482 o f897c6137566
2483 | Predecessors: 2:0dec01379d3b
2483 | Predecessors: 2:0dec01379d3b
2484 | semi-colon: 2:0dec01379d3b
2484 | semi-colon: 2:0dec01379d3b
2485 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2485 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2486 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2486 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2487 | Successors:
2487 | Successors:
2488 | multi-line:
2488 | multi-line:
2489 | json: ""
2489 | json: []
2490 | x 0dec01379d3b
2490 | x 0dec01379d3b
2491 | | Predecessors: 1:471f378eab4c
2491 | | Predecessors: 1:471f378eab4c
2492 | | semi-colon: 1:471f378eab4c
2492 | | semi-colon: 1:471f378eab4c
2493 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2493 | | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
2494 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2494 | | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
2495 | | Successors: 3:f897c6137566; 1:471f378eab4c
2495 | | Successors: 3:f897c6137566; 1:471f378eab4c
2496 | | multi-line: 3:f897c6137566
2496 | | multi-line: 3:f897c6137566
2497 | | multi-line: 1:471f378eab4c
2497 | | multi-line: 1:471f378eab4c
2498 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2498 | | json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
2499 | x 471f378eab4c
2499 | x 471f378eab4c
2500 |/ Predecessors: 2:0dec01379d3b
2500 |/ Predecessors: 2:0dec01379d3b
2501 | semi-colon: 2:0dec01379d3b
2501 | semi-colon: 2:0dec01379d3b
2502 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2502 | json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
2503 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2503 | map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
2504 | Successors: 2:0dec01379d3b
2504 | Successors: 2:0dec01379d3b
2505 | multi-line: 2:0dec01379d3b
2505 | multi-line: 2:0dec01379d3b
2506 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2506 | json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
2507 o ea207398892e
2507 o ea207398892e
2508 Predecessors:
2508 Predecessors:
2509 semi-colon:
2509 semi-colon:
2510 json: []
2510 json: []
2511 map:
2511 map:
2512 Successors:
2512 Successors:
2513 multi-line:
2513 multi-line:
2514 json: ""
2514 json: []
2515 $ hg fatelog --hidden
2515 $ hg fatelog --hidden
2516 @ 0b997eb7ceee
2516 @ 0b997eb7ceee
2517 |
2517 |
2518 | * b18bc8331526
2518 | * b18bc8331526
2519 |/
2519 |/
2520 | * ba2ed02b0c9a
2520 | * ba2ed02b0c9a
2521 | |
2521 | |
2522 | x 4a004186e638
2522 | x 4a004186e638
2523 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
2523 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000); rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000);
2524 * dd800401bd8c
2524 * dd800401bd8c
2525 |
2525 |
2526 | x 9bd10a0775e4
2526 | x 9bd10a0775e4
2527 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000);
2527 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000);
2528 o f897c6137566
2528 o f897c6137566
2529 |
2529 |
2530 | x 0dec01379d3b
2530 | x 0dec01379d3b
2531 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
2531 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000); rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000);
2532 | x 471f378eab4c
2532 | x 471f378eab4c
2533 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
2533 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000);
2534 o ea207398892e
2534 o ea207398892e
2535
2535
2536 $ hg fatelogjson --hidden
2536 $ hg fatelogjson --hidden
2537 @ 0b997eb7ceee
2537 @ 0b997eb7ceee
2538 |
2538 |
2539 | * b18bc8331526
2539 | * b18bc8331526
2540 |/
2540 |/
2541 | * ba2ed02b0c9a
2541 | * ba2ed02b0c9a
2542 | |
2542 | |
2543 | x 4a004186e638
2543 | x 4a004186e638
2544 |/ Obsfate: [{"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["b18bc8331526a22cbb1801022bd1555bf291c48b"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b18bc8331526a22cbb1801022bd1555bf291c48b"]}, {"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["0b997eb7ceeee06200a02f8aab185979092d514e"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["0b997eb7ceeee06200a02f8aab185979092d514e"]}]
2544 |/ Obsfate: [{"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["b18bc8331526a22cbb1801022bd1555bf291c48b"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["b18bc8331526a22cbb1801022bd1555bf291c48b"]}, {"markers": [["4a004186e63889f20cb16434fcbd72220bd1eace", ["0b997eb7ceeee06200a02f8aab185979092d514e"], 0, [["ef1", "1"], ["operation", "amend"], ["user", "test"]], [0.0, 0], null]], "successors": ["0b997eb7ceeee06200a02f8aab185979092d514e"]}]
2545 * dd800401bd8c
2545 * dd800401bd8c
2546 |
2546 |
2547 | x 9bd10a0775e4
2547 | x 9bd10a0775e4
2548 |/ Obsfate: [{"markers": [["9bd10a0775e478708cada5f176ec6de654359ce7", ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]}]
2548 |/ Obsfate: [{"markers": [["9bd10a0775e478708cada5f176ec6de654359ce7", ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]}]
2549 o f897c6137566
2549 o f897c6137566
2550 |
2550 |
2551 | x 0dec01379d3b
2551 | x 0dec01379d3b
2552 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["f897c6137566320b081514b4c7227ecc3d384b39"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["f897c6137566320b081514b4c7227ecc3d384b39"]}, {"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["471f378eab4c5e25f6c77f785b27c936efb22874"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["471f378eab4c5e25f6c77f785b27c936efb22874"]}]
2552 | | Obsfate: [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["f897c6137566320b081514b4c7227ecc3d384b39"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["f897c6137566320b081514b4c7227ecc3d384b39"]}, {"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["471f378eab4c5e25f6c77f785b27c936efb22874"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["471f378eab4c5e25f6c77f785b27c936efb22874"]}]
2553 | x 471f378eab4c
2553 | x 471f378eab4c
2554 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]}]
2554 |/ Obsfate: [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"], 0, [["user", "test"]], [0.0, 0], null]], "successors": ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]}]
2555 o ea207398892e
2555 o ea207398892e
2556
2556
2557 $ hg up --hidden 4
2557 $ hg up --hidden 4
2558 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2558 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2559 updated to hidden changeset 9bd10a0775e4
2559 updated to hidden changeset 9bd10a0775e4
2560 (hidden revision '9bd10a0775e4' has diverged)
2560 (hidden revision '9bd10a0775e4' has diverged)
2561 $ hg rebase -r 7 -d 8 --config extensions.rebase=
2561 $ hg rebase -r 7 -d 8 --config extensions.rebase=
2562 rebasing 7:ba2ed02b0c9a "Add A,B,C"
2562 rebasing 7:ba2ed02b0c9a "Add A,B,C"
2563 $ hg tlog
2563 $ hg tlog
2564 * eceed8f98ffc
2564 * eceed8f98ffc
2565 | Predecessors: 4:9bd10a0775e4
2565 | Predecessors: 4:9bd10a0775e4
2566 | semi-colon: 4:9bd10a0775e4
2566 | semi-colon: 4:9bd10a0775e4
2567 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2567 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2568 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2568 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2569 | Successors:
2569 | Successors:
2570 | multi-line:
2570 | multi-line:
2571 | json: ""
2571 | json: []
2572 | * 0b997eb7ceee
2572 | * 0b997eb7ceee
2573 | | Predecessors: 4:9bd10a0775e4
2573 | | Predecessors: 4:9bd10a0775e4
2574 | | semi-colon: 4:9bd10a0775e4
2574 | | semi-colon: 4:9bd10a0775e4
2575 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2575 | | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2576 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2576 | | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2577 | | Successors:
2577 | | Successors:
2578 | | multi-line:
2578 | | multi-line:
2579 | | json: ""
2579 | | json: []
2580 * | b18bc8331526
2580 * | b18bc8331526
2581 |/ Predecessors: 4:9bd10a0775e4
2581 |/ Predecessors: 4:9bd10a0775e4
2582 | semi-colon: 4:9bd10a0775e4
2582 | semi-colon: 4:9bd10a0775e4
2583 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2583 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2584 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2584 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2585 | Successors:
2585 | Successors:
2586 | multi-line:
2586 | multi-line:
2587 | json: ""
2587 | json: []
2588 * dd800401bd8c
2588 * dd800401bd8c
2589 | Predecessors: 4:9bd10a0775e4
2589 | Predecessors: 4:9bd10a0775e4
2590 | semi-colon: 4:9bd10a0775e4
2590 | semi-colon: 4:9bd10a0775e4
2591 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2591 | json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
2592 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2592 | map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
2593 | Successors:
2593 | Successors:
2594 | multi-line:
2594 | multi-line:
2595 | json: ""
2595 | json: []
2596 | @ 9bd10a0775e4
2596 | @ 9bd10a0775e4
2597 |/ Predecessors:
2597 |/ Predecessors:
2598 | semi-colon:
2598 | semi-colon:
2599 | json: []
2599 | json: []
2600 | map:
2600 | map:
2601 | Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
2601 | Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
2602 | multi-line: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc
2602 | multi-line: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc
2603 | multi-line: 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
2603 | multi-line: 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
2604 | json: [["dd800401bd8c79d815329277739e433e883f784e", "0b997eb7ceeee06200a02f8aab185979092d514e", "eceed8f98ffc4186032e29a6542ab98888ebf68d"], ["dd800401bd8c79d815329277739e433e883f784e", "b18bc8331526a22cbb1801022bd1555bf291c48b", "eceed8f98ffc4186032e29a6542ab98888ebf68d"]]
2604 | json: [["dd800401bd8c79d815329277739e433e883f784e", "0b997eb7ceeee06200a02f8aab185979092d514e", "eceed8f98ffc4186032e29a6542ab98888ebf68d"], ["dd800401bd8c79d815329277739e433e883f784e", "b18bc8331526a22cbb1801022bd1555bf291c48b", "eceed8f98ffc4186032e29a6542ab98888ebf68d"]]
2605 o f897c6137566
2605 o f897c6137566
2606 | Predecessors:
2606 | Predecessors:
2607 | semi-colon:
2607 | semi-colon:
2608 | json: []
2608 | json: []
2609 | map:
2609 | map:
2610 | Successors:
2610 | Successors:
2611 | multi-line:
2611 | multi-line:
2612 | json: ""
2612 | json: []
2613 o ea207398892e
2613 o ea207398892e
2614 Predecessors:
2614 Predecessors:
2615 semi-colon:
2615 semi-colon:
2616 json: []
2616 json: []
2617 map:
2617 map:
2618 Successors:
2618 Successors:
2619 multi-line:
2619 multi-line:
2620 json: ""
2620 json: []
2621
2621
2622 $ hg fatelog
2622 $ hg fatelog
2623 * eceed8f98ffc
2623 * eceed8f98ffc
2624 |
2624 |
2625 | * 0b997eb7ceee
2625 | * 0b997eb7ceee
2626 | |
2626 | |
2627 * | b18bc8331526
2627 * | b18bc8331526
2628 |/
2628 |/
2629 * dd800401bd8c
2629 * dd800401bd8c
2630 |
2630 |
2631 | @ 9bd10a0775e4
2631 | @ 9bd10a0775e4
2632 |/ Obsfate: split using amend, rebase as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000); split using amend, rebase as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000);
2632 |/ Obsfate: split using amend, rebase as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000); split using amend, rebase as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000);
2633 o f897c6137566
2633 o f897c6137566
2634 |
2634 |
2635 o ea207398892e
2635 o ea207398892e
2636
2636
2637 Check other fatelog implementations
2637 Check other fatelog implementations
2638 -----------------------------------
2638 -----------------------------------
2639
2639
2640 $ hg fatelogkw --hidden -q
2640 $ hg fatelogkw --hidden -q
2641 * eceed8f98ffc
2641 * eceed8f98ffc
2642 |
2642 |
2643 | * 0b997eb7ceee
2643 | * 0b997eb7ceee
2644 | |
2644 | |
2645 * | b18bc8331526
2645 * | b18bc8331526
2646 |/
2646 |/
2647 | x ba2ed02b0c9a
2647 | x ba2ed02b0c9a
2648 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
2648 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
2649 | x 4a004186e638
2649 | x 4a004186e638
2650 |/ Obsfate: rewritten using amend as 8:b18bc8331526
2650 |/ Obsfate: rewritten using amend as 8:b18bc8331526
2651 | Obsfate: rewritten using amend as 9:0b997eb7ceee
2651 | Obsfate: rewritten using amend as 9:0b997eb7ceee
2652 * dd800401bd8c
2652 * dd800401bd8c
2653 |
2653 |
2654 | @ 9bd10a0775e4
2654 | @ 9bd10a0775e4
2655 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2655 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2656 o f897c6137566
2656 o f897c6137566
2657 |
2657 |
2658 | x 0dec01379d3b
2658 | x 0dec01379d3b
2659 | | Obsfate: rewritten as 3:f897c6137566
2659 | | Obsfate: rewritten as 3:f897c6137566
2660 | | Obsfate: rewritten as 1:471f378eab4c
2660 | | Obsfate: rewritten as 1:471f378eab4c
2661 | x 471f378eab4c
2661 | x 471f378eab4c
2662 |/ Obsfate: rewritten as 2:0dec01379d3b
2662 |/ Obsfate: rewritten as 2:0dec01379d3b
2663 o ea207398892e
2663 o ea207398892e
2664
2664
2665 $ hg fatelogkw --hidden
2665 $ hg fatelogkw --hidden
2666 * eceed8f98ffc
2666 * eceed8f98ffc
2667 |
2667 |
2668 | * 0b997eb7ceee
2668 | * 0b997eb7ceee
2669 | |
2669 | |
2670 * | b18bc8331526
2670 * | b18bc8331526
2671 |/
2671 |/
2672 | x ba2ed02b0c9a
2672 | x ba2ed02b0c9a
2673 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
2673 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc
2674 | x 4a004186e638
2674 | x 4a004186e638
2675 |/ Obsfate: rewritten using amend as 8:b18bc8331526
2675 |/ Obsfate: rewritten using amend as 8:b18bc8331526
2676 | Obsfate: rewritten using amend as 9:0b997eb7ceee
2676 | Obsfate: rewritten using amend as 9:0b997eb7ceee
2677 * dd800401bd8c
2677 * dd800401bd8c
2678 |
2678 |
2679 | @ 9bd10a0775e4
2679 | @ 9bd10a0775e4
2680 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2680 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2681 o f897c6137566
2681 o f897c6137566
2682 |
2682 |
2683 | x 0dec01379d3b
2683 | x 0dec01379d3b
2684 | | Obsfate: rewritten as 3:f897c6137566
2684 | | Obsfate: rewritten as 3:f897c6137566
2685 | | Obsfate: rewritten as 1:471f378eab4c
2685 | | Obsfate: rewritten as 1:471f378eab4c
2686 | x 471f378eab4c
2686 | x 471f378eab4c
2687 |/ Obsfate: rewritten as 2:0dec01379d3b
2687 |/ Obsfate: rewritten as 2:0dec01379d3b
2688 o ea207398892e
2688 o ea207398892e
2689
2689
2690 $ hg fatelogkw --hidden -v
2690 $ hg fatelogkw --hidden -v
2691 * eceed8f98ffc
2691 * eceed8f98ffc
2692 |
2692 |
2693 | * 0b997eb7ceee
2693 | * 0b997eb7ceee
2694 | |
2694 | |
2695 * | b18bc8331526
2695 * | b18bc8331526
2696 |/
2696 |/
2697 | x ba2ed02b0c9a
2697 | x ba2ed02b0c9a
2698 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000)
2698 | | Obsfate: rewritten using rebase as 10:eceed8f98ffc by test (at 1970-01-01 00:00 +0000)
2699 | x 4a004186e638
2699 | x 4a004186e638
2700 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000)
2700 |/ Obsfate: rewritten using amend as 8:b18bc8331526 by test (at 1970-01-01 00:00 +0000)
2701 | Obsfate: rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000)
2701 | Obsfate: rewritten using amend as 9:0b997eb7ceee by test (at 1970-01-01 00:00 +0000)
2702 * dd800401bd8c
2702 * dd800401bd8c
2703 |
2703 |
2704 | @ 9bd10a0775e4
2704 | @ 9bd10a0775e4
2705 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000)
2705 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test (at 1970-01-01 00:00 +0000)
2706 o f897c6137566
2706 o f897c6137566
2707 |
2707 |
2708 | x 0dec01379d3b
2708 | x 0dec01379d3b
2709 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
2709 | | Obsfate: rewritten as 3:f897c6137566 by test (at 1970-01-01 00:00 +0000)
2710 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
2710 | | Obsfate: rewritten as 1:471f378eab4c by test (at 1970-01-01 00:00 +0000)
2711 | x 471f378eab4c
2711 | x 471f378eab4c
2712 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
2712 |/ Obsfate: rewritten as 2:0dec01379d3b by test (at 1970-01-01 00:00 +0000)
2713 o ea207398892e
2713 o ea207398892e
2714
2714
2715 $ hg log -G -T "default" --hidden
2715 $ hg log -G -T "default" --hidden
2716 * changeset: 10:eceed8f98ffc
2716 * changeset: 10:eceed8f98ffc
2717 | tag: tip
2717 | tag: tip
2718 | parent: 8:b18bc8331526
2718 | parent: 8:b18bc8331526
2719 | user: test
2719 | user: test
2720 | date: Thu Jan 01 00:00:00 1970 +0000
2720 | date: Thu Jan 01 00:00:00 1970 +0000
2721 | instability: content-divergent
2721 | instability: content-divergent
2722 | summary: Add A,B,C
2722 | summary: Add A,B,C
2723 |
2723 |
2724 | * changeset: 9:0b997eb7ceee
2724 | * changeset: 9:0b997eb7ceee
2725 | | parent: 5:dd800401bd8c
2725 | | parent: 5:dd800401bd8c
2726 | | user: test
2726 | | user: test
2727 | | date: Thu Jan 01 00:00:00 1970 +0000
2727 | | date: Thu Jan 01 00:00:00 1970 +0000
2728 | | instability: content-divergent
2728 | | instability: content-divergent
2729 | | summary: Add B only
2729 | | summary: Add B only
2730 | |
2730 | |
2731 * | changeset: 8:b18bc8331526
2731 * | changeset: 8:b18bc8331526
2732 |/ parent: 5:dd800401bd8c
2732 |/ parent: 5:dd800401bd8c
2733 | user: test
2733 | user: test
2734 | date: Thu Jan 01 00:00:00 1970 +0000
2734 | date: Thu Jan 01 00:00:00 1970 +0000
2735 | instability: content-divergent
2735 | instability: content-divergent
2736 | summary: Add only B
2736 | summary: Add only B
2737 |
2737 |
2738 | x changeset: 7:ba2ed02b0c9a
2738 | x changeset: 7:ba2ed02b0c9a
2739 | | user: test
2739 | | user: test
2740 | | date: Thu Jan 01 00:00:00 1970 +0000
2740 | | date: Thu Jan 01 00:00:00 1970 +0000
2741 | | obsolete: rewritten using rebase as 10:eceed8f98ffc
2741 | | obsolete: rewritten using rebase as 10:eceed8f98ffc
2742 | | summary: Add A,B,C
2742 | | summary: Add A,B,C
2743 | |
2743 | |
2744 | x changeset: 6:4a004186e638
2744 | x changeset: 6:4a004186e638
2745 |/ user: test
2745 |/ user: test
2746 | date: Thu Jan 01 00:00:00 1970 +0000
2746 | date: Thu Jan 01 00:00:00 1970 +0000
2747 | obsolete: rewritten using amend as 8:b18bc8331526
2747 | obsolete: rewritten using amend as 8:b18bc8331526
2748 | obsolete: rewritten using amend as 9:0b997eb7ceee
2748 | obsolete: rewritten using amend as 9:0b997eb7ceee
2749 | summary: Add A,B,C
2749 | summary: Add A,B,C
2750 |
2750 |
2751 * changeset: 5:dd800401bd8c
2751 * changeset: 5:dd800401bd8c
2752 | parent: 3:f897c6137566
2752 | parent: 3:f897c6137566
2753 | user: test
2753 | user: test
2754 | date: Thu Jan 01 00:00:00 1970 +0000
2754 | date: Thu Jan 01 00:00:00 1970 +0000
2755 | instability: content-divergent
2755 | instability: content-divergent
2756 | summary: Add A,B,C
2756 | summary: Add A,B,C
2757 |
2757 |
2758 | @ changeset: 4:9bd10a0775e4
2758 | @ changeset: 4:9bd10a0775e4
2759 |/ user: test
2759 |/ user: test
2760 | date: Thu Jan 01 00:00:00 1970 +0000
2760 | date: Thu Jan 01 00:00:00 1970 +0000
2761 | obsolete: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2761 | obsolete: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a
2762 | summary: Add A,B,C
2762 | summary: Add A,B,C
2763 |
2763 |
2764 o changeset: 3:f897c6137566
2764 o changeset: 3:f897c6137566
2765 | parent: 0:ea207398892e
2765 | parent: 0:ea207398892e
2766 | user: test
2766 | user: test
2767 | date: Thu Jan 01 00:00:00 1970 +0000
2767 | date: Thu Jan 01 00:00:00 1970 +0000
2768 | summary: C0
2768 | summary: C0
2769 |
2769 |
2770 | x changeset: 2:0dec01379d3b
2770 | x changeset: 2:0dec01379d3b
2771 | | user: test
2771 | | user: test
2772 | | date: Thu Jan 01 00:00:00 1970 +0000
2772 | | date: Thu Jan 01 00:00:00 1970 +0000
2773 | | obsolete: rewritten as 3:f897c6137566
2773 | | obsolete: rewritten as 3:f897c6137566
2774 | | obsolete: rewritten as 1:471f378eab4c
2774 | | obsolete: rewritten as 1:471f378eab4c
2775 | | summary: B0
2775 | | summary: B0
2776 | |
2776 | |
2777 | x changeset: 1:471f378eab4c
2777 | x changeset: 1:471f378eab4c
2778 |/ user: test
2778 |/ user: test
2779 | date: Thu Jan 01 00:00:00 1970 +0000
2779 | date: Thu Jan 01 00:00:00 1970 +0000
2780 | obsolete: rewritten as 2:0dec01379d3b
2780 | obsolete: rewritten as 2:0dec01379d3b
2781 | summary: A0
2781 | summary: A0
2782 |
2782 |
2783 o changeset: 0:ea207398892e
2783 o changeset: 0:ea207398892e
2784 user: test
2784 user: test
2785 date: Thu Jan 01 00:00:00 1970 +0000
2785 date: Thu Jan 01 00:00:00 1970 +0000
2786 summary: ROOT
2786 summary: ROOT
2787
2787
2788
2788
2789 Test templates with pruned commits
2789 Test templates with pruned commits
2790 ==================================
2790 ==================================
2791
2791
2792 Test setup
2792 Test setup
2793 ----------
2793 ----------
2794
2794
2795 $ hg init $TESTTMP/templates-local-prune
2795 $ hg init $TESTTMP/templates-local-prune
2796 $ cd $TESTTMP/templates-local-prune
2796 $ cd $TESTTMP/templates-local-prune
2797 $ mkcommit ROOT
2797 $ mkcommit ROOT
2798 $ mkcommit A0
2798 $ mkcommit A0
2799 $ hg debugobsolete --record-parent `getid "."`
2799 $ hg debugobsolete --record-parent `getid "."`
2800 1 new obsolescence markers
2800 1 new obsolescence markers
2801 obsoleted 1 changesets
2801 obsoleted 1 changesets
2802
2802
2803 Check output
2803 Check output
2804 ------------
2804 ------------
2805
2805
2806 $ hg up "desc(A0)" --hidden
2806 $ hg up "desc(A0)" --hidden
2807 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2807 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2808 $ hg tlog
2808 $ hg tlog
2809 @ 471f378eab4c
2809 @ 471f378eab4c
2810 | Predecessors:
2810 | Predecessors:
2811 | semi-colon:
2811 | semi-colon:
2812 | json: []
2812 | json: []
2813 | map:
2813 | map:
2814 | Successors:
2814 | Successors:
2815 | multi-line:
2815 | multi-line:
2816 | json: []
2816 | json: []
2817 o ea207398892e
2817 o ea207398892e
2818 Predecessors:
2818 Predecessors:
2819 semi-colon:
2819 semi-colon:
2820 json: []
2820 json: []
2821 map:
2821 map:
2822 Successors:
2822 Successors:
2823 multi-line:
2823 multi-line:
2824 json: ""
2824 json: []
2825 $ hg fatelog
2825 $ hg fatelog
2826 @ 471f378eab4c
2826 @ 471f378eab4c
2827 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2827 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2828 o ea207398892e
2828 o ea207398892e
2829
2829
2830 Test templates with multiple pruned commits
2830 Test templates with multiple pruned commits
2831 ===========================================
2831 ===========================================
2832
2832
2833 Test setup
2833 Test setup
2834 ----------
2834 ----------
2835
2835
2836 $ hg init $TESTTMP/multiple-local-prune
2836 $ hg init $TESTTMP/multiple-local-prune
2837 $ cd $TESTTMP/multiple-local-prune
2837 $ cd $TESTTMP/multiple-local-prune
2838 $ mkcommit ROOT
2838 $ mkcommit ROOT
2839 $ mkcommit A0
2839 $ mkcommit A0
2840 $ hg commit --amend -m "A1"
2840 $ hg commit --amend -m "A1"
2841 $ hg debugobsolete --record-parent `getid "."`
2841 $ hg debugobsolete --record-parent `getid "."`
2842 1 new obsolescence markers
2842 1 new obsolescence markers
2843 obsoleted 1 changesets
2843 obsoleted 1 changesets
2844
2844
2845 $ hg up -r "desc(A0)" --hidden
2845 $ hg up -r "desc(A0)" --hidden
2846 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2846 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2847 updated to hidden changeset 471f378eab4c
2847 updated to hidden changeset 471f378eab4c
2848 (hidden revision '471f378eab4c' is pruned)
2848 (hidden revision '471f378eab4c' is pruned)
2849 $ hg commit --amend -m "A2"
2849 $ hg commit --amend -m "A2"
2850 $ hg debugobsolete --record-parent `getid "."`
2850 $ hg debugobsolete --record-parent `getid "."`
2851 1 new obsolescence markers
2851 1 new obsolescence markers
2852 obsoleted 1 changesets
2852 obsoleted 1 changesets
2853
2853
2854 Check output
2854 Check output
2855 ------------
2855 ------------
2856
2856
2857 $ hg up "desc(A0)" --hidden
2857 $ hg up "desc(A0)" --hidden
2858 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2858 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2859 updated to hidden changeset 471f378eab4c
2859 updated to hidden changeset 471f378eab4c
2860 (hidden revision '471f378eab4c' is pruned)
2860 (hidden revision '471f378eab4c' is pruned)
2861 $ hg tlog
2861 $ hg tlog
2862 @ 471f378eab4c
2862 @ 471f378eab4c
2863 | Predecessors:
2863 | Predecessors:
2864 | semi-colon:
2864 | semi-colon:
2865 | json: []
2865 | json: []
2866 | map:
2866 | map:
2867 | Successors:
2867 | Successors:
2868 | multi-line:
2868 | multi-line:
2869 | json: []
2869 | json: []
2870 o ea207398892e
2870 o ea207398892e
2871 Predecessors:
2871 Predecessors:
2872 semi-colon:
2872 semi-colon:
2873 json: []
2873 json: []
2874 map:
2874 map:
2875 Successors:
2875 Successors:
2876 multi-line:
2876 multi-line:
2877 json: ""
2877 json: []
2878
2878
2879 # todo: the obsfate output is not ideal
2879 # todo: the obsfate output is not ideal
2880 $ hg fatelog
2880 $ hg fatelog
2881 @ 471f378eab4c
2881 @ 471f378eab4c
2882 | Obsfate: pruned;
2882 | Obsfate: pruned;
2883 o ea207398892e
2883 o ea207398892e
2884
2884
2885 $ hg fatelog --hidden
2885 $ hg fatelog --hidden
2886 x 65b757b745b9
2886 x 65b757b745b9
2887 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2887 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2888 | x fdf9bde5129a
2888 | x fdf9bde5129a
2889 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2889 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
2890 | @ 471f378eab4c
2890 | @ 471f378eab4c
2891 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
2891 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000); rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000);
2892 o ea207398892e
2892 o ea207398892e
2893
2893
2894 Check other fatelog implementations
2894 Check other fatelog implementations
2895 -----------------------------------
2895 -----------------------------------
2896
2896
2897 $ hg fatelogkw --hidden -q
2897 $ hg fatelogkw --hidden -q
2898 x 65b757b745b9
2898 x 65b757b745b9
2899 | Obsfate: pruned
2899 | Obsfate: pruned
2900 | x fdf9bde5129a
2900 | x fdf9bde5129a
2901 |/ Obsfate: pruned
2901 |/ Obsfate: pruned
2902 | @ 471f378eab4c
2902 | @ 471f378eab4c
2903 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
2903 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
2904 | Obsfate: rewritten using amend as 3:65b757b745b9
2904 | Obsfate: rewritten using amend as 3:65b757b745b9
2905 o ea207398892e
2905 o ea207398892e
2906
2906
2907 $ hg fatelogkw --hidden
2907 $ hg fatelogkw --hidden
2908 x 65b757b745b9
2908 x 65b757b745b9
2909 | Obsfate: pruned
2909 | Obsfate: pruned
2910 | x fdf9bde5129a
2910 | x fdf9bde5129a
2911 |/ Obsfate: pruned
2911 |/ Obsfate: pruned
2912 | @ 471f378eab4c
2912 | @ 471f378eab4c
2913 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
2913 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a
2914 | Obsfate: rewritten using amend as 3:65b757b745b9
2914 | Obsfate: rewritten using amend as 3:65b757b745b9
2915 o ea207398892e
2915 o ea207398892e
2916
2916
2917 $ hg fatelogkw --hidden -v
2917 $ hg fatelogkw --hidden -v
2918 x 65b757b745b9
2918 x 65b757b745b9
2919 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2919 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2920 | x fdf9bde5129a
2920 | x fdf9bde5129a
2921 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2921 |/ Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
2922 | @ 471f378eab4c
2922 | @ 471f378eab4c
2923 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
2923 |/ Obsfate: rewritten using amend as 2:fdf9bde5129a by test (at 1970-01-01 00:00 +0000)
2924 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
2924 | Obsfate: rewritten using amend as 3:65b757b745b9 by test (at 1970-01-01 00:00 +0000)
2925 o ea207398892e
2925 o ea207398892e
2926
2926
2927
2927
2928 $ hg log -G -T "default" --hidden
2928 $ hg log -G -T "default" --hidden
2929 x changeset: 3:65b757b745b9
2929 x changeset: 3:65b757b745b9
2930 | tag: tip
2930 | tag: tip
2931 | parent: 0:ea207398892e
2931 | parent: 0:ea207398892e
2932 | user: test
2932 | user: test
2933 | date: Thu Jan 01 00:00:00 1970 +0000
2933 | date: Thu Jan 01 00:00:00 1970 +0000
2934 | obsolete: pruned
2934 | obsolete: pruned
2935 | summary: A2
2935 | summary: A2
2936 |
2936 |
2937 | x changeset: 2:fdf9bde5129a
2937 | x changeset: 2:fdf9bde5129a
2938 |/ parent: 0:ea207398892e
2938 |/ parent: 0:ea207398892e
2939 | user: test
2939 | user: test
2940 | date: Thu Jan 01 00:00:00 1970 +0000
2940 | date: Thu Jan 01 00:00:00 1970 +0000
2941 | obsolete: pruned
2941 | obsolete: pruned
2942 | summary: A1
2942 | summary: A1
2943 |
2943 |
2944 | @ changeset: 1:471f378eab4c
2944 | @ changeset: 1:471f378eab4c
2945 |/ user: test
2945 |/ user: test
2946 | date: Thu Jan 01 00:00:00 1970 +0000
2946 | date: Thu Jan 01 00:00:00 1970 +0000
2947 | obsolete: rewritten using amend as 2:fdf9bde5129a
2947 | obsolete: rewritten using amend as 2:fdf9bde5129a
2948 | obsolete: rewritten using amend as 3:65b757b745b9
2948 | obsolete: rewritten using amend as 3:65b757b745b9
2949 | summary: A0
2949 | summary: A0
2950 |
2950 |
2951 o changeset: 0:ea207398892e
2951 o changeset: 0:ea207398892e
2952 user: test
2952 user: test
2953 date: Thu Jan 01 00:00:00 1970 +0000
2953 date: Thu Jan 01 00:00:00 1970 +0000
2954 summary: ROOT
2954 summary: ROOT
2955
2955
2956 Check that {negrev} shows usable negative revisions despite hidden commits
2956 Check that {negrev} shows usable negative revisions despite hidden commits
2957
2957
2958 $ hg log -G -T "{negrev}\n"
2958 $ hg log -G -T "{negrev}\n"
2959 @ -3
2959 @ -3
2960 |
2960 |
2961 o -4
2961 o -4
2962
2962
2963
2963
2964 $ hg log -G -T "{negrev}\n" --hidden
2964 $ hg log -G -T "{negrev}\n" --hidden
2965 x -1
2965 x -1
2966 |
2966 |
2967 | x -2
2967 | x -2
2968 |/
2968 |/
2969 | @ -3
2969 | @ -3
2970 |/
2970 |/
2971 o -4
2971 o -4
2972
2972
2973
2973
2974 Test templates with splitted and pruned commit
2974 Test templates with splitted and pruned commit
2975 ==============================================
2975 ==============================================
2976
2976
2977 $ hg init $TESTTMP/templates-local-split-prune
2977 $ hg init $TESTTMP/templates-local-split-prune
2978 $ cd $TESTTMP/templates-local-split-prune
2978 $ cd $TESTTMP/templates-local-split-prune
2979 $ mkcommit ROOT
2979 $ mkcommit ROOT
2980 $ echo 42 >> a
2980 $ echo 42 >> a
2981 $ echo 43 >> b
2981 $ echo 43 >> b
2982 $ hg commit -A -m "A0"
2982 $ hg commit -A -m "A0"
2983 adding a
2983 adding a
2984 adding b
2984 adding b
2985 $ hg log --hidden -G
2985 $ hg log --hidden -G
2986 @ changeset: 1:471597cad322
2986 @ changeset: 1:471597cad322
2987 | tag: tip
2987 | tag: tip
2988 | user: test
2988 | user: test
2989 | date: Thu Jan 01 00:00:00 1970 +0000
2989 | date: Thu Jan 01 00:00:00 1970 +0000
2990 | summary: A0
2990 | summary: A0
2991 |
2991 |
2992 o changeset: 0:ea207398892e
2992 o changeset: 0:ea207398892e
2993 user: test
2993 user: test
2994 date: Thu Jan 01 00:00:00 1970 +0000
2994 date: Thu Jan 01 00:00:00 1970 +0000
2995 summary: ROOT
2995 summary: ROOT
2996
2996
2997 # Simulate split
2997 # Simulate split
2998 $ hg up -r "desc(ROOT)"
2998 $ hg up -r "desc(ROOT)"
2999 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
2999 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
3000 $ echo 42 >> a
3000 $ echo 42 >> a
3001 $ hg commit -A -m "A1"
3001 $ hg commit -A -m "A1"
3002 adding a
3002 adding a
3003 created new head
3003 created new head
3004 $ echo 43 >> b
3004 $ echo 43 >> b
3005 $ hg commit -A -m "A2"
3005 $ hg commit -A -m "A2"
3006 adding b
3006 adding b
3007 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
3007 $ hg debugobsolete `getid "1"` `getid "2"` `getid "3"`
3008 1 new obsolescence markers
3008 1 new obsolescence markers
3009 obsoleted 1 changesets
3009 obsoleted 1 changesets
3010
3010
3011 # Simulate prune
3011 # Simulate prune
3012 $ hg debugobsolete --record-parent `getid "."`
3012 $ hg debugobsolete --record-parent `getid "."`
3013 1 new obsolescence markers
3013 1 new obsolescence markers
3014 obsoleted 1 changesets
3014 obsoleted 1 changesets
3015
3015
3016 $ hg log --hidden -G
3016 $ hg log --hidden -G
3017 @ changeset: 3:0d0ef4bdf70e
3017 @ changeset: 3:0d0ef4bdf70e
3018 | tag: tip
3018 | tag: tip
3019 | user: test
3019 | user: test
3020 | date: Thu Jan 01 00:00:00 1970 +0000
3020 | date: Thu Jan 01 00:00:00 1970 +0000
3021 | obsolete: pruned
3021 | obsolete: pruned
3022 | summary: A2
3022 | summary: A2
3023 |
3023 |
3024 o changeset: 2:617adc3a144c
3024 o changeset: 2:617adc3a144c
3025 | parent: 0:ea207398892e
3025 | parent: 0:ea207398892e
3026 | user: test
3026 | user: test
3027 | date: Thu Jan 01 00:00:00 1970 +0000
3027 | date: Thu Jan 01 00:00:00 1970 +0000
3028 | summary: A1
3028 | summary: A1
3029 |
3029 |
3030 | x changeset: 1:471597cad322
3030 | x changeset: 1:471597cad322
3031 |/ user: test
3031 |/ user: test
3032 | date: Thu Jan 01 00:00:00 1970 +0000
3032 | date: Thu Jan 01 00:00:00 1970 +0000
3033 | obsolete: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3033 | obsolete: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3034 | summary: A0
3034 | summary: A0
3035 |
3035 |
3036 o changeset: 0:ea207398892e
3036 o changeset: 0:ea207398892e
3037 user: test
3037 user: test
3038 date: Thu Jan 01 00:00:00 1970 +0000
3038 date: Thu Jan 01 00:00:00 1970 +0000
3039 summary: ROOT
3039 summary: ROOT
3040
3040
3041 Check templates
3041 Check templates
3042 ---------------
3042 ---------------
3043
3043
3044 $ hg up 'desc("A0")' --hidden
3044 $ hg up 'desc("A0")' --hidden
3045 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3045 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3046 updated to hidden changeset 471597cad322
3046 updated to hidden changeset 471597cad322
3047 (hidden revision '471597cad322' was rewritten as: 617adc3a144c)
3047 (hidden revision '471597cad322' was rewritten as: 617adc3a144c)
3048
3048
3049 # todo: the obsfate output is not ideal
3049 # todo: the obsfate output is not ideal
3050 $ hg fatelog
3050 $ hg fatelog
3051 o 617adc3a144c
3051 o 617adc3a144c
3052 |
3052 |
3053 | @ 471597cad322
3053 | @ 471597cad322
3054 |/ Obsfate: rewritten as 2:617adc3a144c by test (at 1970-01-01 00:00 +0000);
3054 |/ Obsfate: rewritten as 2:617adc3a144c by test (at 1970-01-01 00:00 +0000);
3055 o ea207398892e
3055 o ea207398892e
3056
3056
3057 $ hg up -r 'desc("A2")' --hidden
3057 $ hg up -r 'desc("A2")' --hidden
3058 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3058 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3059 updated to hidden changeset 0d0ef4bdf70e
3059 updated to hidden changeset 0d0ef4bdf70e
3060 (hidden revision '0d0ef4bdf70e' is pruned)
3060 (hidden revision '0d0ef4bdf70e' is pruned)
3061
3061
3062 $ hg fatelog --hidden
3062 $ hg fatelog --hidden
3063 @ 0d0ef4bdf70e
3063 @ 0d0ef4bdf70e
3064 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
3064 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000);
3065 o 617adc3a144c
3065 o 617adc3a144c
3066 |
3066 |
3067 | x 471597cad322
3067 | x 471597cad322
3068 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000);
3068 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000);
3069 o ea207398892e
3069 o ea207398892e
3070
3070
3071
3071
3072 Check other fatelog implementations
3072 Check other fatelog implementations
3073 -----------------------------------
3073 -----------------------------------
3074
3074
3075 $ hg fatelogkw --hidden -q
3075 $ hg fatelogkw --hidden -q
3076 @ 0d0ef4bdf70e
3076 @ 0d0ef4bdf70e
3077 | Obsfate: pruned
3077 | Obsfate: pruned
3078 o 617adc3a144c
3078 o 617adc3a144c
3079 |
3079 |
3080 | x 471597cad322
3080 | x 471597cad322
3081 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3081 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3082 o ea207398892e
3082 o ea207398892e
3083
3083
3084 $ hg fatelogkw --hidden
3084 $ hg fatelogkw --hidden
3085 @ 0d0ef4bdf70e
3085 @ 0d0ef4bdf70e
3086 | Obsfate: pruned
3086 | Obsfate: pruned
3087 o 617adc3a144c
3087 o 617adc3a144c
3088 |
3088 |
3089 | x 471597cad322
3089 | x 471597cad322
3090 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3090 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3091 o ea207398892e
3091 o ea207398892e
3092
3092
3093 $ hg fatelogkw --hidden -v
3093 $ hg fatelogkw --hidden -v
3094 @ 0d0ef4bdf70e
3094 @ 0d0ef4bdf70e
3095 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
3095 | Obsfate: pruned by test (at 1970-01-01 00:00 +0000)
3096 o 617adc3a144c
3096 o 617adc3a144c
3097 |
3097 |
3098 | x 471597cad322
3098 | x 471597cad322
3099 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000)
3099 |/ Obsfate: split as 2:617adc3a144c, 3:0d0ef4bdf70e by test (at 1970-01-01 00:00 +0000)
3100 o ea207398892e
3100 o ea207398892e
3101
3101
3102 $ hg log -G -T "default" --hidden
3102 $ hg log -G -T "default" --hidden
3103 @ changeset: 3:0d0ef4bdf70e
3103 @ changeset: 3:0d0ef4bdf70e
3104 | tag: tip
3104 | tag: tip
3105 | user: test
3105 | user: test
3106 | date: Thu Jan 01 00:00:00 1970 +0000
3106 | date: Thu Jan 01 00:00:00 1970 +0000
3107 | obsolete: pruned
3107 | obsolete: pruned
3108 | summary: A2
3108 | summary: A2
3109 |
3109 |
3110 o changeset: 2:617adc3a144c
3110 o changeset: 2:617adc3a144c
3111 | parent: 0:ea207398892e
3111 | parent: 0:ea207398892e
3112 | user: test
3112 | user: test
3113 | date: Thu Jan 01 00:00:00 1970 +0000
3113 | date: Thu Jan 01 00:00:00 1970 +0000
3114 | summary: A1
3114 | summary: A1
3115 |
3115 |
3116 | x changeset: 1:471597cad322
3116 | x changeset: 1:471597cad322
3117 |/ user: test
3117 |/ user: test
3118 | date: Thu Jan 01 00:00:00 1970 +0000
3118 | date: Thu Jan 01 00:00:00 1970 +0000
3119 | obsolete: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3119 | obsolete: split as 2:617adc3a144c, 3:0d0ef4bdf70e
3120 | summary: A0
3120 | summary: A0
3121 |
3121 |
3122 o changeset: 0:ea207398892e
3122 o changeset: 0:ea207398892e
3123 user: test
3123 user: test
3124 date: Thu Jan 01 00:00:00 1970 +0000
3124 date: Thu Jan 01 00:00:00 1970 +0000
3125 summary: ROOT
3125 summary: ROOT
3126
3126
3127
3127
3128 Test metadata encoding (issue5754)
3128 Test metadata encoding (issue5754)
3129 ==================================
3129 ==================================
3130
3130
3131 $ hg init $TESTTMP/metadata-encoding
3131 $ hg init $TESTTMP/metadata-encoding
3132 $ cd $TESTTMP/metadata-encoding
3132 $ cd $TESTTMP/metadata-encoding
3133 $ cat <<'EOF' >> .hg/hgrc
3133 $ cat <<'EOF' >> .hg/hgrc
3134 > [extensions]
3134 > [extensions]
3135 > amend =
3135 > amend =
3136 > EOF
3136 > EOF
3137 $ "$PYTHON" <<'EOF'
3137 $ "$PYTHON" <<'EOF'
3138 > with open('test1', 'wb') as f:
3138 > with open('test1', 'wb') as f:
3139 > f.write(b't\xe8st1') and None
3139 > f.write(b't\xe8st1') and None
3140 > with open('test2', 'wb') as f:
3140 > with open('test2', 'wb') as f:
3141 > f.write(b't\xe8st2') and None
3141 > f.write(b't\xe8st2') and None
3142 > EOF
3142 > EOF
3143 $ mkcommit ROOT
3143 $ mkcommit ROOT
3144 $ ( HGENCODING=latin-1 HGUSER="`cat test1`" mkcommit A0 )
3144 $ ( HGENCODING=latin-1 HGUSER="`cat test1`" mkcommit A0 )
3145 $ echo 42 >> A0
3145 $ echo 42 >> A0
3146 $ HGENCODING=latin-1 hg amend -m "A1" --note "`cat test2`"
3146 $ HGENCODING=latin-1 hg amend -m "A1" --note "`cat test2`"
3147 $ HGENCODING=latin-1 hg amend -m "A2" \
3147 $ HGENCODING=latin-1 hg amend -m "A2" \
3148 > --config devel.user.obsmarker="`cat test2`"
3148 > --config devel.user.obsmarker="`cat test2`"
3149 $ mkcommit B0
3149 $ mkcommit B0
3150 $ HGENCODING=latin-1 hg debugobsolete -u "`cat test2`" "`getid 'desc(B0)'`"
3150 $ HGENCODING=latin-1 hg debugobsolete -u "`cat test2`" "`getid 'desc(B0)'`"
3151 1 new obsolescence markers
3151 1 new obsolescence markers
3152 obsoleted 1 changesets
3152 obsoleted 1 changesets
3153
3153
3154 metadata should be stored in UTF-8, and debugobsolete doesn't decode it to
3154 metadata should be stored in UTF-8, and debugobsolete doesn't decode it to
3155 local encoding since the command is supposed to show unmodified content:
3155 local encoding since the command is supposed to show unmodified content:
3156
3156
3157 $ HGENCODING=latin-1 hg debugobsolete
3157 $ HGENCODING=latin-1 hg debugobsolete
3158 5f66a482f0bb2fcaccfc215554ad5eb9f40b50f5 718c0d00cee1429bdb73064e0d88908c601507a8 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'note': 't\xc3\xa8st2', 'operation': 'amend', 'user': 'test'}
3158 5f66a482f0bb2fcaccfc215554ad5eb9f40b50f5 718c0d00cee1429bdb73064e0d88908c601507a8 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'note': 't\xc3\xa8st2', 'operation': 'amend', 'user': 'test'}
3159 718c0d00cee1429bdb73064e0d88908c601507a8 1132562159b35bb27e1d6b80c80ee94a1659a4da 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 't\xc3\xa8st2'}
3159 718c0d00cee1429bdb73064e0d88908c601507a8 1132562159b35bb27e1d6b80c80ee94a1659a4da 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 't\xc3\xa8st2'}
3160 8f82db6f991db367fdbb3b6dba5e187ecc3ebd96 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 't\xc3\xa8st2'}
3160 8f82db6f991db367fdbb3b6dba5e187ecc3ebd96 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 't\xc3\xa8st2'}
3161
3161
3162 metadata should be converted back to local encoding when displaying:
3162 metadata should be converted back to local encoding when displaying:
3163
3163
3164 $ HGENCODING=latin-1 hg fatelog --hidden
3164 $ HGENCODING=latin-1 hg fatelog --hidden
3165 @ 8f82db6f991d
3165 @ 8f82db6f991d
3166 | Obsfate: pruned by t\xe8st2 (at 1970-01-01 00:00 +0000); (esc)
3166 | Obsfate: pruned by t\xe8st2 (at 1970-01-01 00:00 +0000); (esc)
3167 o 1132562159b3
3167 o 1132562159b3
3168 |
3168 |
3169 | x 718c0d00cee1
3169 | x 718c0d00cee1
3170 |/ Obsfate: rewritten using amend as 3:1132562159b3 by t\xe8st2 (at 1970-01-01 00:00 +0000); (esc)
3170 |/ Obsfate: rewritten using amend as 3:1132562159b3 by t\xe8st2 (at 1970-01-01 00:00 +0000); (esc)
3171 | x 5f66a482f0bb
3171 | x 5f66a482f0bb
3172 |/ Obsfate: rewritten using amend as 2:718c0d00cee1 by test (at 1970-01-01 00:00 +0000);
3172 |/ Obsfate: rewritten using amend as 2:718c0d00cee1 by test (at 1970-01-01 00:00 +0000);
3173 o ea207398892e
3173 o ea207398892e
3174
3174
3175 $ HGENCODING=utf-8 hg fatelog --hidden
3175 $ HGENCODING=utf-8 hg fatelog --hidden
3176 @ 8f82db6f991d
3176 @ 8f82db6f991d
3177 | Obsfate: pruned by t\xc3\xa8st2 (at 1970-01-01 00:00 +0000); (esc)
3177 | Obsfate: pruned by t\xc3\xa8st2 (at 1970-01-01 00:00 +0000); (esc)
3178 o 1132562159b3
3178 o 1132562159b3
3179 |
3179 |
3180 | x 718c0d00cee1
3180 | x 718c0d00cee1
3181 |/ Obsfate: rewritten using amend as 3:1132562159b3 by t\xc3\xa8st2 (at 1970-01-01 00:00 +0000); (esc)
3181 |/ Obsfate: rewritten using amend as 3:1132562159b3 by t\xc3\xa8st2 (at 1970-01-01 00:00 +0000); (esc)
3182 | x 5f66a482f0bb
3182 | x 5f66a482f0bb
3183 |/ Obsfate: rewritten using amend as 2:718c0d00cee1 by test (at 1970-01-01 00:00 +0000);
3183 |/ Obsfate: rewritten using amend as 2:718c0d00cee1 by test (at 1970-01-01 00:00 +0000);
3184 o ea207398892e
3184 o ea207398892e
3185
3185
3186 $ hg log -G -T "{negrev}\n"
3186 $ hg log -G -T "{negrev}\n"
3187 @ -1
3187 @ -1
3188 |
3188 |
3189 o -2
3189 o -2
3190 |
3190 |
3191 o -5
3191 o -5
3192
3192
General Comments 0
You need to be logged in to leave comments. Login now