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