##// END OF EJS Templates
debugbundle: add --part-type flag to emit only named part types...
Danek Duvall -
r32694:3ef319e9 default
parent child Browse files
Show More
@@ -1,2188 +1,2192
1 # debugcommands.py - command processing for debug* commands
1 # debugcommands.py - command processing for debug* commands
2 #
2 #
3 # Copyright 2005-2016 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2016 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import difflib
10 import difflib
11 import errno
11 import errno
12 import operator
12 import operator
13 import os
13 import os
14 import random
14 import random
15 import socket
15 import socket
16 import string
16 import string
17 import sys
17 import sys
18 import tempfile
18 import tempfile
19 import time
19 import time
20
20
21 from .i18n import _
21 from .i18n import _
22 from .node import (
22 from .node import (
23 bin,
23 bin,
24 hex,
24 hex,
25 nullhex,
25 nullhex,
26 nullid,
26 nullid,
27 nullrev,
27 nullrev,
28 short,
28 short,
29 )
29 )
30 from . import (
30 from . import (
31 bundle2,
31 bundle2,
32 changegroup,
32 changegroup,
33 cmdutil,
33 cmdutil,
34 color,
34 color,
35 context,
35 context,
36 dagparser,
36 dagparser,
37 dagutil,
37 dagutil,
38 encoding,
38 encoding,
39 error,
39 error,
40 exchange,
40 exchange,
41 extensions,
41 extensions,
42 filemerge,
42 filemerge,
43 fileset,
43 fileset,
44 formatter,
44 formatter,
45 hg,
45 hg,
46 localrepo,
46 localrepo,
47 lock as lockmod,
47 lock as lockmod,
48 merge as mergemod,
48 merge as mergemod,
49 obsolete,
49 obsolete,
50 policy,
50 policy,
51 pvec,
51 pvec,
52 pycompat,
52 pycompat,
53 registrar,
53 registrar,
54 repair,
54 repair,
55 revlog,
55 revlog,
56 revset,
56 revset,
57 revsetlang,
57 revsetlang,
58 scmutil,
58 scmutil,
59 setdiscovery,
59 setdiscovery,
60 simplemerge,
60 simplemerge,
61 smartset,
61 smartset,
62 sslutil,
62 sslutil,
63 streamclone,
63 streamclone,
64 templater,
64 templater,
65 treediscovery,
65 treediscovery,
66 upgrade,
66 upgrade,
67 util,
67 util,
68 vfs as vfsmod,
68 vfs as vfsmod,
69 )
69 )
70
70
71 release = lockmod.release
71 release = lockmod.release
72
72
73 command = registrar.command()
73 command = registrar.command()
74
74
75 @command('debugancestor', [], _('[INDEX] REV1 REV2'), optionalrepo=True)
75 @command('debugancestor', [], _('[INDEX] REV1 REV2'), optionalrepo=True)
76 def debugancestor(ui, repo, *args):
76 def debugancestor(ui, repo, *args):
77 """find the ancestor revision of two revisions in a given index"""
77 """find the ancestor revision of two revisions in a given index"""
78 if len(args) == 3:
78 if len(args) == 3:
79 index, rev1, rev2 = args
79 index, rev1, rev2 = args
80 r = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False), index)
80 r = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False), index)
81 lookup = r.lookup
81 lookup = r.lookup
82 elif len(args) == 2:
82 elif len(args) == 2:
83 if not repo:
83 if not repo:
84 raise error.Abort(_('there is no Mercurial repository here '
84 raise error.Abort(_('there is no Mercurial repository here '
85 '(.hg not found)'))
85 '(.hg not found)'))
86 rev1, rev2 = args
86 rev1, rev2 = args
87 r = repo.changelog
87 r = repo.changelog
88 lookup = repo.lookup
88 lookup = repo.lookup
89 else:
89 else:
90 raise error.Abort(_('either two or three arguments required'))
90 raise error.Abort(_('either two or three arguments required'))
91 a = r.ancestor(lookup(rev1), lookup(rev2))
91 a = r.ancestor(lookup(rev1), lookup(rev2))
92 ui.write('%d:%s\n' % (r.rev(a), hex(a)))
92 ui.write('%d:%s\n' % (r.rev(a), hex(a)))
93
93
94 @command('debugapplystreamclonebundle', [], 'FILE')
94 @command('debugapplystreamclonebundle', [], 'FILE')
95 def debugapplystreamclonebundle(ui, repo, fname):
95 def debugapplystreamclonebundle(ui, repo, fname):
96 """apply a stream clone bundle file"""
96 """apply a stream clone bundle file"""
97 f = hg.openpath(ui, fname)
97 f = hg.openpath(ui, fname)
98 gen = exchange.readbundle(ui, f, fname)
98 gen = exchange.readbundle(ui, f, fname)
99 gen.apply(repo)
99 gen.apply(repo)
100
100
101 @command('debugbuilddag',
101 @command('debugbuilddag',
102 [('m', 'mergeable-file', None, _('add single file mergeable changes')),
102 [('m', 'mergeable-file', None, _('add single file mergeable changes')),
103 ('o', 'overwritten-file', None, _('add single file all revs overwrite')),
103 ('o', 'overwritten-file', None, _('add single file all revs overwrite')),
104 ('n', 'new-file', None, _('add new file at each rev'))],
104 ('n', 'new-file', None, _('add new file at each rev'))],
105 _('[OPTION]... [TEXT]'))
105 _('[OPTION]... [TEXT]'))
106 def debugbuilddag(ui, repo, text=None,
106 def debugbuilddag(ui, repo, text=None,
107 mergeable_file=False,
107 mergeable_file=False,
108 overwritten_file=False,
108 overwritten_file=False,
109 new_file=False):
109 new_file=False):
110 """builds a repo with a given DAG from scratch in the current empty repo
110 """builds a repo with a given DAG from scratch in the current empty repo
111
111
112 The description of the DAG is read from stdin if not given on the
112 The description of the DAG is read from stdin if not given on the
113 command line.
113 command line.
114
114
115 Elements:
115 Elements:
116
116
117 - "+n" is a linear run of n nodes based on the current default parent
117 - "+n" is a linear run of n nodes based on the current default parent
118 - "." is a single node based on the current default parent
118 - "." is a single node based on the current default parent
119 - "$" resets the default parent to null (implied at the start);
119 - "$" resets the default parent to null (implied at the start);
120 otherwise the default parent is always the last node created
120 otherwise the default parent is always the last node created
121 - "<p" sets the default parent to the backref p
121 - "<p" sets the default parent to the backref p
122 - "*p" is a fork at parent p, which is a backref
122 - "*p" is a fork at parent p, which is a backref
123 - "*p1/p2" is a merge of parents p1 and p2, which are backrefs
123 - "*p1/p2" is a merge of parents p1 and p2, which are backrefs
124 - "/p2" is a merge of the preceding node and p2
124 - "/p2" is a merge of the preceding node and p2
125 - ":tag" defines a local tag for the preceding node
125 - ":tag" defines a local tag for the preceding node
126 - "@branch" sets the named branch for subsequent nodes
126 - "@branch" sets the named branch for subsequent nodes
127 - "#...\\n" is a comment up to the end of the line
127 - "#...\\n" is a comment up to the end of the line
128
128
129 Whitespace between the above elements is ignored.
129 Whitespace between the above elements is ignored.
130
130
131 A backref is either
131 A backref is either
132
132
133 - a number n, which references the node curr-n, where curr is the current
133 - a number n, which references the node curr-n, where curr is the current
134 node, or
134 node, or
135 - the name of a local tag you placed earlier using ":tag", or
135 - the name of a local tag you placed earlier using ":tag", or
136 - empty to denote the default parent.
136 - empty to denote the default parent.
137
137
138 All string valued-elements are either strictly alphanumeric, or must
138 All string valued-elements are either strictly alphanumeric, or must
139 be enclosed in double quotes ("..."), with "\\" as escape character.
139 be enclosed in double quotes ("..."), with "\\" as escape character.
140 """
140 """
141
141
142 if text is None:
142 if text is None:
143 ui.status(_("reading DAG from stdin\n"))
143 ui.status(_("reading DAG from stdin\n"))
144 text = ui.fin.read()
144 text = ui.fin.read()
145
145
146 cl = repo.changelog
146 cl = repo.changelog
147 if len(cl) > 0:
147 if len(cl) > 0:
148 raise error.Abort(_('repository is not empty'))
148 raise error.Abort(_('repository is not empty'))
149
149
150 # determine number of revs in DAG
150 # determine number of revs in DAG
151 total = 0
151 total = 0
152 for type, data in dagparser.parsedag(text):
152 for type, data in dagparser.parsedag(text):
153 if type == 'n':
153 if type == 'n':
154 total += 1
154 total += 1
155
155
156 if mergeable_file:
156 if mergeable_file:
157 linesperrev = 2
157 linesperrev = 2
158 # make a file with k lines per rev
158 # make a file with k lines per rev
159 initialmergedlines = [str(i) for i in xrange(0, total * linesperrev)]
159 initialmergedlines = [str(i) for i in xrange(0, total * linesperrev)]
160 initialmergedlines.append("")
160 initialmergedlines.append("")
161
161
162 tags = []
162 tags = []
163
163
164 wlock = lock = tr = None
164 wlock = lock = tr = None
165 try:
165 try:
166 wlock = repo.wlock()
166 wlock = repo.wlock()
167 lock = repo.lock()
167 lock = repo.lock()
168 tr = repo.transaction("builddag")
168 tr = repo.transaction("builddag")
169
169
170 at = -1
170 at = -1
171 atbranch = 'default'
171 atbranch = 'default'
172 nodeids = []
172 nodeids = []
173 id = 0
173 id = 0
174 ui.progress(_('building'), id, unit=_('revisions'), total=total)
174 ui.progress(_('building'), id, unit=_('revisions'), total=total)
175 for type, data in dagparser.parsedag(text):
175 for type, data in dagparser.parsedag(text):
176 if type == 'n':
176 if type == 'n':
177 ui.note(('node %s\n' % str(data)))
177 ui.note(('node %s\n' % str(data)))
178 id, ps = data
178 id, ps = data
179
179
180 files = []
180 files = []
181 fctxs = {}
181 fctxs = {}
182
182
183 p2 = None
183 p2 = None
184 if mergeable_file:
184 if mergeable_file:
185 fn = "mf"
185 fn = "mf"
186 p1 = repo[ps[0]]
186 p1 = repo[ps[0]]
187 if len(ps) > 1:
187 if len(ps) > 1:
188 p2 = repo[ps[1]]
188 p2 = repo[ps[1]]
189 pa = p1.ancestor(p2)
189 pa = p1.ancestor(p2)
190 base, local, other = [x[fn].data() for x in (pa, p1,
190 base, local, other = [x[fn].data() for x in (pa, p1,
191 p2)]
191 p2)]
192 m3 = simplemerge.Merge3Text(base, local, other)
192 m3 = simplemerge.Merge3Text(base, local, other)
193 ml = [l.strip() for l in m3.merge_lines()]
193 ml = [l.strip() for l in m3.merge_lines()]
194 ml.append("")
194 ml.append("")
195 elif at > 0:
195 elif at > 0:
196 ml = p1[fn].data().split("\n")
196 ml = p1[fn].data().split("\n")
197 else:
197 else:
198 ml = initialmergedlines
198 ml = initialmergedlines
199 ml[id * linesperrev] += " r%i" % id
199 ml[id * linesperrev] += " r%i" % id
200 mergedtext = "\n".join(ml)
200 mergedtext = "\n".join(ml)
201 files.append(fn)
201 files.append(fn)
202 fctxs[fn] = context.memfilectx(repo, fn, mergedtext)
202 fctxs[fn] = context.memfilectx(repo, fn, mergedtext)
203
203
204 if overwritten_file:
204 if overwritten_file:
205 fn = "of"
205 fn = "of"
206 files.append(fn)
206 files.append(fn)
207 fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
207 fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
208
208
209 if new_file:
209 if new_file:
210 fn = "nf%i" % id
210 fn = "nf%i" % id
211 files.append(fn)
211 files.append(fn)
212 fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
212 fctxs[fn] = context.memfilectx(repo, fn, "r%i\n" % id)
213 if len(ps) > 1:
213 if len(ps) > 1:
214 if not p2:
214 if not p2:
215 p2 = repo[ps[1]]
215 p2 = repo[ps[1]]
216 for fn in p2:
216 for fn in p2:
217 if fn.startswith("nf"):
217 if fn.startswith("nf"):
218 files.append(fn)
218 files.append(fn)
219 fctxs[fn] = p2[fn]
219 fctxs[fn] = p2[fn]
220
220
221 def fctxfn(repo, cx, path):
221 def fctxfn(repo, cx, path):
222 return fctxs.get(path)
222 return fctxs.get(path)
223
223
224 if len(ps) == 0 or ps[0] < 0:
224 if len(ps) == 0 or ps[0] < 0:
225 pars = [None, None]
225 pars = [None, None]
226 elif len(ps) == 1:
226 elif len(ps) == 1:
227 pars = [nodeids[ps[0]], None]
227 pars = [nodeids[ps[0]], None]
228 else:
228 else:
229 pars = [nodeids[p] for p in ps]
229 pars = [nodeids[p] for p in ps]
230 cx = context.memctx(repo, pars, "r%i" % id, files, fctxfn,
230 cx = context.memctx(repo, pars, "r%i" % id, files, fctxfn,
231 date=(id, 0),
231 date=(id, 0),
232 user="debugbuilddag",
232 user="debugbuilddag",
233 extra={'branch': atbranch})
233 extra={'branch': atbranch})
234 nodeid = repo.commitctx(cx)
234 nodeid = repo.commitctx(cx)
235 nodeids.append(nodeid)
235 nodeids.append(nodeid)
236 at = id
236 at = id
237 elif type == 'l':
237 elif type == 'l':
238 id, name = data
238 id, name = data
239 ui.note(('tag %s\n' % name))
239 ui.note(('tag %s\n' % name))
240 tags.append("%s %s\n" % (hex(repo.changelog.node(id)), name))
240 tags.append("%s %s\n" % (hex(repo.changelog.node(id)), name))
241 elif type == 'a':
241 elif type == 'a':
242 ui.note(('branch %s\n' % data))
242 ui.note(('branch %s\n' % data))
243 atbranch = data
243 atbranch = data
244 ui.progress(_('building'), id, unit=_('revisions'), total=total)
244 ui.progress(_('building'), id, unit=_('revisions'), total=total)
245 tr.close()
245 tr.close()
246
246
247 if tags:
247 if tags:
248 repo.vfs.write("localtags", "".join(tags))
248 repo.vfs.write("localtags", "".join(tags))
249 finally:
249 finally:
250 ui.progress(_('building'), None)
250 ui.progress(_('building'), None)
251 release(tr, lock, wlock)
251 release(tr, lock, wlock)
252
252
253 def _debugchangegroup(ui, gen, all=None, indent=0, **opts):
253 def _debugchangegroup(ui, gen, all=None, indent=0, **opts):
254 indent_string = ' ' * indent
254 indent_string = ' ' * indent
255 if all:
255 if all:
256 ui.write(("%sformat: id, p1, p2, cset, delta base, len(delta)\n")
256 ui.write(("%sformat: id, p1, p2, cset, delta base, len(delta)\n")
257 % indent_string)
257 % indent_string)
258
258
259 def showchunks(named):
259 def showchunks(named):
260 ui.write("\n%s%s\n" % (indent_string, named))
260 ui.write("\n%s%s\n" % (indent_string, named))
261 chain = None
261 chain = None
262 for chunkdata in iter(lambda: gen.deltachunk(chain), {}):
262 for chunkdata in iter(lambda: gen.deltachunk(chain), {}):
263 node = chunkdata['node']
263 node = chunkdata['node']
264 p1 = chunkdata['p1']
264 p1 = chunkdata['p1']
265 p2 = chunkdata['p2']
265 p2 = chunkdata['p2']
266 cs = chunkdata['cs']
266 cs = chunkdata['cs']
267 deltabase = chunkdata['deltabase']
267 deltabase = chunkdata['deltabase']
268 delta = chunkdata['delta']
268 delta = chunkdata['delta']
269 ui.write("%s%s %s %s %s %s %s\n" %
269 ui.write("%s%s %s %s %s %s %s\n" %
270 (indent_string, hex(node), hex(p1), hex(p2),
270 (indent_string, hex(node), hex(p1), hex(p2),
271 hex(cs), hex(deltabase), len(delta)))
271 hex(cs), hex(deltabase), len(delta)))
272 chain = node
272 chain = node
273
273
274 chunkdata = gen.changelogheader()
274 chunkdata = gen.changelogheader()
275 showchunks("changelog")
275 showchunks("changelog")
276 chunkdata = gen.manifestheader()
276 chunkdata = gen.manifestheader()
277 showchunks("manifest")
277 showchunks("manifest")
278 for chunkdata in iter(gen.filelogheader, {}):
278 for chunkdata in iter(gen.filelogheader, {}):
279 fname = chunkdata['filename']
279 fname = chunkdata['filename']
280 showchunks(fname)
280 showchunks(fname)
281 else:
281 else:
282 if isinstance(gen, bundle2.unbundle20):
282 if isinstance(gen, bundle2.unbundle20):
283 raise error.Abort(_('use debugbundle2 for this file'))
283 raise error.Abort(_('use debugbundle2 for this file'))
284 chunkdata = gen.changelogheader()
284 chunkdata = gen.changelogheader()
285 chain = None
285 chain = None
286 for chunkdata in iter(lambda: gen.deltachunk(chain), {}):
286 for chunkdata in iter(lambda: gen.deltachunk(chain), {}):
287 node = chunkdata['node']
287 node = chunkdata['node']
288 ui.write("%s%s\n" % (indent_string, hex(node)))
288 ui.write("%s%s\n" % (indent_string, hex(node)))
289 chain = node
289 chain = node
290
290
291 def _debugobsmarkers(ui, data, all=None, indent=0, **opts):
291 def _debugobsmarkers(ui, data, all=None, indent=0, **opts):
292 """display version and markers contained in 'data'"""
292 """display version and markers contained in 'data'"""
293 indent_string = ' ' * indent
293 indent_string = ' ' * indent
294 try:
294 try:
295 version, markers = obsolete._readmarkers(data)
295 version, markers = obsolete._readmarkers(data)
296 except error.UnknownVersion as exc:
296 except error.UnknownVersion as exc:
297 msg = "%sunsupported version: %s (%d bytes)\n"
297 msg = "%sunsupported version: %s (%d bytes)\n"
298 msg %= indent_string, exc.version, len(data)
298 msg %= indent_string, exc.version, len(data)
299 ui.write(msg)
299 ui.write(msg)
300 else:
300 else:
301 msg = "%sversion: %s (%d bytes)\n"
301 msg = "%sversion: %s (%d bytes)\n"
302 msg %= indent_string, version, len(data)
302 msg %= indent_string, version, len(data)
303 ui.write(msg)
303 ui.write(msg)
304 fm = ui.formatter('debugobsolete', opts)
304 fm = ui.formatter('debugobsolete', opts)
305 for rawmarker in sorted(markers):
305 for rawmarker in sorted(markers):
306 m = obsolete.marker(None, rawmarker)
306 m = obsolete.marker(None, rawmarker)
307 fm.startitem()
307 fm.startitem()
308 fm.plain(indent_string)
308 fm.plain(indent_string)
309 cmdutil.showmarker(fm, m)
309 cmdutil.showmarker(fm, m)
310 fm.end()
310 fm.end()
311
311
312 def _debugbundle2(ui, gen, all=None, **opts):
312 def _debugbundle2(ui, gen, all=None, **opts):
313 """lists the contents of a bundle2"""
313 """lists the contents of a bundle2"""
314 if not isinstance(gen, bundle2.unbundle20):
314 if not isinstance(gen, bundle2.unbundle20):
315 raise error.Abort(_('not a bundle2 file'))
315 raise error.Abort(_('not a bundle2 file'))
316 ui.write(('Stream params: %s\n' % repr(gen.params)))
316 ui.write(('Stream params: %s\n' % repr(gen.params)))
317 parttypes = opts.get('part_type', [])
317 for part in gen.iterparts():
318 for part in gen.iterparts():
319 if parttypes and part.type not in parttypes:
320 continue
318 ui.write('%s -- %r\n' % (part.type, repr(part.params)))
321 ui.write('%s -- %r\n' % (part.type, repr(part.params)))
319 if part.type == 'changegroup':
322 if part.type == 'changegroup':
320 version = part.params.get('version', '01')
323 version = part.params.get('version', '01')
321 cg = changegroup.getunbundler(version, part, 'UN')
324 cg = changegroup.getunbundler(version, part, 'UN')
322 _debugchangegroup(ui, cg, all=all, indent=4, **opts)
325 _debugchangegroup(ui, cg, all=all, indent=4, **opts)
323 if part.type == 'obsmarkers':
326 if part.type == 'obsmarkers':
324 _debugobsmarkers(ui, part.read(), all=all, indent=4, **opts)
327 _debugobsmarkers(ui, part.read(), all=all, indent=4, **opts)
325
328
326 @command('debugbundle',
329 @command('debugbundle',
327 [('a', 'all', None, _('show all details')),
330 [('a', 'all', None, _('show all details')),
331 ('', 'part-type', [], _('show only the named part type')),
328 ('', 'spec', None, _('print the bundlespec of the bundle'))],
332 ('', 'spec', None, _('print the bundlespec of the bundle'))],
329 _('FILE'),
333 _('FILE'),
330 norepo=True)
334 norepo=True)
331 def debugbundle(ui, bundlepath, all=None, spec=None, **opts):
335 def debugbundle(ui, bundlepath, all=None, spec=None, **opts):
332 """lists the contents of a bundle"""
336 """lists the contents of a bundle"""
333 with hg.openpath(ui, bundlepath) as f:
337 with hg.openpath(ui, bundlepath) as f:
334 if spec:
338 if spec:
335 spec = exchange.getbundlespec(ui, f)
339 spec = exchange.getbundlespec(ui, f)
336 ui.write('%s\n' % spec)
340 ui.write('%s\n' % spec)
337 return
341 return
338
342
339 gen = exchange.readbundle(ui, f, bundlepath)
343 gen = exchange.readbundle(ui, f, bundlepath)
340 if isinstance(gen, bundle2.unbundle20):
344 if isinstance(gen, bundle2.unbundle20):
341 return _debugbundle2(ui, gen, all=all, **opts)
345 return _debugbundle2(ui, gen, all=all, **opts)
342 _debugchangegroup(ui, gen, all=all, **opts)
346 _debugchangegroup(ui, gen, all=all, **opts)
343
347
344 @command('debugcheckstate', [], '')
348 @command('debugcheckstate', [], '')
345 def debugcheckstate(ui, repo):
349 def debugcheckstate(ui, repo):
346 """validate the correctness of the current dirstate"""
350 """validate the correctness of the current dirstate"""
347 parent1, parent2 = repo.dirstate.parents()
351 parent1, parent2 = repo.dirstate.parents()
348 m1 = repo[parent1].manifest()
352 m1 = repo[parent1].manifest()
349 m2 = repo[parent2].manifest()
353 m2 = repo[parent2].manifest()
350 errors = 0
354 errors = 0
351 for f in repo.dirstate:
355 for f in repo.dirstate:
352 state = repo.dirstate[f]
356 state = repo.dirstate[f]
353 if state in "nr" and f not in m1:
357 if state in "nr" and f not in m1:
354 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
358 ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
355 errors += 1
359 errors += 1
356 if state in "a" and f in m1:
360 if state in "a" and f in m1:
357 ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
361 ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
358 errors += 1
362 errors += 1
359 if state in "m" and f not in m1 and f not in m2:
363 if state in "m" and f not in m1 and f not in m2:
360 ui.warn(_("%s in state %s, but not in either manifest\n") %
364 ui.warn(_("%s in state %s, but not in either manifest\n") %
361 (f, state))
365 (f, state))
362 errors += 1
366 errors += 1
363 for f in m1:
367 for f in m1:
364 state = repo.dirstate[f]
368 state = repo.dirstate[f]
365 if state not in "nrm":
369 if state not in "nrm":
366 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
370 ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
367 errors += 1
371 errors += 1
368 if errors:
372 if errors:
369 error = _(".hg/dirstate inconsistent with current parent's manifest")
373 error = _(".hg/dirstate inconsistent with current parent's manifest")
370 raise error.Abort(error)
374 raise error.Abort(error)
371
375
372 @command('debugcolor',
376 @command('debugcolor',
373 [('', 'style', None, _('show all configured styles'))],
377 [('', 'style', None, _('show all configured styles'))],
374 'hg debugcolor')
378 'hg debugcolor')
375 def debugcolor(ui, repo, **opts):
379 def debugcolor(ui, repo, **opts):
376 """show available color, effects or style"""
380 """show available color, effects or style"""
377 ui.write(('color mode: %s\n') % ui._colormode)
381 ui.write(('color mode: %s\n') % ui._colormode)
378 if opts.get('style'):
382 if opts.get('style'):
379 return _debugdisplaystyle(ui)
383 return _debugdisplaystyle(ui)
380 else:
384 else:
381 return _debugdisplaycolor(ui)
385 return _debugdisplaycolor(ui)
382
386
383 def _debugdisplaycolor(ui):
387 def _debugdisplaycolor(ui):
384 ui = ui.copy()
388 ui = ui.copy()
385 ui._styles.clear()
389 ui._styles.clear()
386 for effect in color._activeeffects(ui).keys():
390 for effect in color._activeeffects(ui).keys():
387 ui._styles[effect] = effect
391 ui._styles[effect] = effect
388 if ui._terminfoparams:
392 if ui._terminfoparams:
389 for k, v in ui.configitems('color'):
393 for k, v in ui.configitems('color'):
390 if k.startswith('color.'):
394 if k.startswith('color.'):
391 ui._styles[k] = k[6:]
395 ui._styles[k] = k[6:]
392 elif k.startswith('terminfo.'):
396 elif k.startswith('terminfo.'):
393 ui._styles[k] = k[9:]
397 ui._styles[k] = k[9:]
394 ui.write(_('available colors:\n'))
398 ui.write(_('available colors:\n'))
395 # sort label with a '_' after the other to group '_background' entry.
399 # sort label with a '_' after the other to group '_background' entry.
396 items = sorted(ui._styles.items(),
400 items = sorted(ui._styles.items(),
397 key=lambda i: ('_' in i[0], i[0], i[1]))
401 key=lambda i: ('_' in i[0], i[0], i[1]))
398 for colorname, label in items:
402 for colorname, label in items:
399 ui.write(('%s\n') % colorname, label=label)
403 ui.write(('%s\n') % colorname, label=label)
400
404
401 def _debugdisplaystyle(ui):
405 def _debugdisplaystyle(ui):
402 ui.write(_('available style:\n'))
406 ui.write(_('available style:\n'))
403 width = max(len(s) for s in ui._styles)
407 width = max(len(s) for s in ui._styles)
404 for label, effects in sorted(ui._styles.items()):
408 for label, effects in sorted(ui._styles.items()):
405 ui.write('%s' % label, label=label)
409 ui.write('%s' % label, label=label)
406 if effects:
410 if effects:
407 # 50
411 # 50
408 ui.write(': ')
412 ui.write(': ')
409 ui.write(' ' * (max(0, width - len(label))))
413 ui.write(' ' * (max(0, width - len(label))))
410 ui.write(', '.join(ui.label(e, e) for e in effects.split()))
414 ui.write(', '.join(ui.label(e, e) for e in effects.split()))
411 ui.write('\n')
415 ui.write('\n')
412
416
413 @command('debugcreatestreamclonebundle', [], 'FILE')
417 @command('debugcreatestreamclonebundle', [], 'FILE')
414 def debugcreatestreamclonebundle(ui, repo, fname):
418 def debugcreatestreamclonebundle(ui, repo, fname):
415 """create a stream clone bundle file
419 """create a stream clone bundle file
416
420
417 Stream bundles are special bundles that are essentially archives of
421 Stream bundles are special bundles that are essentially archives of
418 revlog files. They are commonly used for cloning very quickly.
422 revlog files. They are commonly used for cloning very quickly.
419 """
423 """
420 requirements, gen = streamclone.generatebundlev1(repo)
424 requirements, gen = streamclone.generatebundlev1(repo)
421 changegroup.writechunks(ui, gen, fname)
425 changegroup.writechunks(ui, gen, fname)
422
426
423 ui.write(_('bundle requirements: %s\n') % ', '.join(sorted(requirements)))
427 ui.write(_('bundle requirements: %s\n') % ', '.join(sorted(requirements)))
424
428
425 @command('debugdag',
429 @command('debugdag',
426 [('t', 'tags', None, _('use tags as labels')),
430 [('t', 'tags', None, _('use tags as labels')),
427 ('b', 'branches', None, _('annotate with branch names')),
431 ('b', 'branches', None, _('annotate with branch names')),
428 ('', 'dots', None, _('use dots for runs')),
432 ('', 'dots', None, _('use dots for runs')),
429 ('s', 'spaces', None, _('separate elements by spaces'))],
433 ('s', 'spaces', None, _('separate elements by spaces'))],
430 _('[OPTION]... [FILE [REV]...]'),
434 _('[OPTION]... [FILE [REV]...]'),
431 optionalrepo=True)
435 optionalrepo=True)
432 def debugdag(ui, repo, file_=None, *revs, **opts):
436 def debugdag(ui, repo, file_=None, *revs, **opts):
433 """format the changelog or an index DAG as a concise textual description
437 """format the changelog or an index DAG as a concise textual description
434
438
435 If you pass a revlog index, the revlog's DAG is emitted. If you list
439 If you pass a revlog index, the revlog's DAG is emitted. If you list
436 revision numbers, they get labeled in the output as rN.
440 revision numbers, they get labeled in the output as rN.
437
441
438 Otherwise, the changelog DAG of the current repo is emitted.
442 Otherwise, the changelog DAG of the current repo is emitted.
439 """
443 """
440 spaces = opts.get('spaces')
444 spaces = opts.get('spaces')
441 dots = opts.get('dots')
445 dots = opts.get('dots')
442 if file_:
446 if file_:
443 rlog = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False),
447 rlog = revlog.revlog(vfsmod.vfs(pycompat.getcwd(), audit=False),
444 file_)
448 file_)
445 revs = set((int(r) for r in revs))
449 revs = set((int(r) for r in revs))
446 def events():
450 def events():
447 for r in rlog:
451 for r in rlog:
448 yield 'n', (r, list(p for p in rlog.parentrevs(r)
452 yield 'n', (r, list(p for p in rlog.parentrevs(r)
449 if p != -1))
453 if p != -1))
450 if r in revs:
454 if r in revs:
451 yield 'l', (r, "r%i" % r)
455 yield 'l', (r, "r%i" % r)
452 elif repo:
456 elif repo:
453 cl = repo.changelog
457 cl = repo.changelog
454 tags = opts.get('tags')
458 tags = opts.get('tags')
455 branches = opts.get('branches')
459 branches = opts.get('branches')
456 if tags:
460 if tags:
457 labels = {}
461 labels = {}
458 for l, n in repo.tags().items():
462 for l, n in repo.tags().items():
459 labels.setdefault(cl.rev(n), []).append(l)
463 labels.setdefault(cl.rev(n), []).append(l)
460 def events():
464 def events():
461 b = "default"
465 b = "default"
462 for r in cl:
466 for r in cl:
463 if branches:
467 if branches:
464 newb = cl.read(cl.node(r))[5]['branch']
468 newb = cl.read(cl.node(r))[5]['branch']
465 if newb != b:
469 if newb != b:
466 yield 'a', newb
470 yield 'a', newb
467 b = newb
471 b = newb
468 yield 'n', (r, list(p for p in cl.parentrevs(r)
472 yield 'n', (r, list(p for p in cl.parentrevs(r)
469 if p != -1))
473 if p != -1))
470 if tags:
474 if tags:
471 ls = labels.get(r)
475 ls = labels.get(r)
472 if ls:
476 if ls:
473 for l in ls:
477 for l in ls:
474 yield 'l', (r, l)
478 yield 'l', (r, l)
475 else:
479 else:
476 raise error.Abort(_('need repo for changelog dag'))
480 raise error.Abort(_('need repo for changelog dag'))
477
481
478 for line in dagparser.dagtextlines(events(),
482 for line in dagparser.dagtextlines(events(),
479 addspaces=spaces,
483 addspaces=spaces,
480 wraplabels=True,
484 wraplabels=True,
481 wrapannotations=True,
485 wrapannotations=True,
482 wrapnonlinear=dots,
486 wrapnonlinear=dots,
483 usedots=dots,
487 usedots=dots,
484 maxlinewidth=70):
488 maxlinewidth=70):
485 ui.write(line)
489 ui.write(line)
486 ui.write("\n")
490 ui.write("\n")
487
491
488 @command('debugdata', cmdutil.debugrevlogopts, _('-c|-m|FILE REV'))
492 @command('debugdata', cmdutil.debugrevlogopts, _('-c|-m|FILE REV'))
489 def debugdata(ui, repo, file_, rev=None, **opts):
493 def debugdata(ui, repo, file_, rev=None, **opts):
490 """dump the contents of a data file revision"""
494 """dump the contents of a data file revision"""
491 if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
495 if opts.get('changelog') or opts.get('manifest') or opts.get('dir'):
492 if rev is not None:
496 if rev is not None:
493 raise error.CommandError('debugdata', _('invalid arguments'))
497 raise error.CommandError('debugdata', _('invalid arguments'))
494 file_, rev = None, file_
498 file_, rev = None, file_
495 elif rev is None:
499 elif rev is None:
496 raise error.CommandError('debugdata', _('invalid arguments'))
500 raise error.CommandError('debugdata', _('invalid arguments'))
497 r = cmdutil.openrevlog(repo, 'debugdata', file_, opts)
501 r = cmdutil.openrevlog(repo, 'debugdata', file_, opts)
498 try:
502 try:
499 ui.write(r.revision(r.lookup(rev), raw=True))
503 ui.write(r.revision(r.lookup(rev), raw=True))
500 except KeyError:
504 except KeyError:
501 raise error.Abort(_('invalid revision identifier %s') % rev)
505 raise error.Abort(_('invalid revision identifier %s') % rev)
502
506
503 @command('debugdate',
507 @command('debugdate',
504 [('e', 'extended', None, _('try extended date formats'))],
508 [('e', 'extended', None, _('try extended date formats'))],
505 _('[-e] DATE [RANGE]'),
509 _('[-e] DATE [RANGE]'),
506 norepo=True, optionalrepo=True)
510 norepo=True, optionalrepo=True)
507 def debugdate(ui, date, range=None, **opts):
511 def debugdate(ui, date, range=None, **opts):
508 """parse and display a date"""
512 """parse and display a date"""
509 if opts["extended"]:
513 if opts["extended"]:
510 d = util.parsedate(date, util.extendeddateformats)
514 d = util.parsedate(date, util.extendeddateformats)
511 else:
515 else:
512 d = util.parsedate(date)
516 d = util.parsedate(date)
513 ui.write(("internal: %s %s\n") % d)
517 ui.write(("internal: %s %s\n") % d)
514 ui.write(("standard: %s\n") % util.datestr(d))
518 ui.write(("standard: %s\n") % util.datestr(d))
515 if range:
519 if range:
516 m = util.matchdate(range)
520 m = util.matchdate(range)
517 ui.write(("match: %s\n") % m(d[0]))
521 ui.write(("match: %s\n") % m(d[0]))
518
522
519 @command('debugdeltachain',
523 @command('debugdeltachain',
520 cmdutil.debugrevlogopts + cmdutil.formatteropts,
524 cmdutil.debugrevlogopts + cmdutil.formatteropts,
521 _('-c|-m|FILE'),
525 _('-c|-m|FILE'),
522 optionalrepo=True)
526 optionalrepo=True)
523 def debugdeltachain(ui, repo, file_=None, **opts):
527 def debugdeltachain(ui, repo, file_=None, **opts):
524 """dump information about delta chains in a revlog
528 """dump information about delta chains in a revlog
525
529
526 Output can be templatized. Available template keywords are:
530 Output can be templatized. Available template keywords are:
527
531
528 :``rev``: revision number
532 :``rev``: revision number
529 :``chainid``: delta chain identifier (numbered by unique base)
533 :``chainid``: delta chain identifier (numbered by unique base)
530 :``chainlen``: delta chain length to this revision
534 :``chainlen``: delta chain length to this revision
531 :``prevrev``: previous revision in delta chain
535 :``prevrev``: previous revision in delta chain
532 :``deltatype``: role of delta / how it was computed
536 :``deltatype``: role of delta / how it was computed
533 :``compsize``: compressed size of revision
537 :``compsize``: compressed size of revision
534 :``uncompsize``: uncompressed size of revision
538 :``uncompsize``: uncompressed size of revision
535 :``chainsize``: total size of compressed revisions in chain
539 :``chainsize``: total size of compressed revisions in chain
536 :``chainratio``: total chain size divided by uncompressed revision size
540 :``chainratio``: total chain size divided by uncompressed revision size
537 (new delta chains typically start at ratio 2.00)
541 (new delta chains typically start at ratio 2.00)
538 :``lindist``: linear distance from base revision in delta chain to end
542 :``lindist``: linear distance from base revision in delta chain to end
539 of this revision
543 of this revision
540 :``extradist``: total size of revisions not part of this delta chain from
544 :``extradist``: total size of revisions not part of this delta chain from
541 base of delta chain to end of this revision; a measurement
545 base of delta chain to end of this revision; a measurement
542 of how much extra data we need to read/seek across to read
546 of how much extra data we need to read/seek across to read
543 the delta chain for this revision
547 the delta chain for this revision
544 :``extraratio``: extradist divided by chainsize; another representation of
548 :``extraratio``: extradist divided by chainsize; another representation of
545 how much unrelated data is needed to load this delta chain
549 how much unrelated data is needed to load this delta chain
546 """
550 """
547 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts)
551 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts)
548 index = r.index
552 index = r.index
549 generaldelta = r.version & revlog.FLAG_GENERALDELTA
553 generaldelta = r.version & revlog.FLAG_GENERALDELTA
550
554
551 def revinfo(rev):
555 def revinfo(rev):
552 e = index[rev]
556 e = index[rev]
553 compsize = e[1]
557 compsize = e[1]
554 uncompsize = e[2]
558 uncompsize = e[2]
555 chainsize = 0
559 chainsize = 0
556
560
557 if generaldelta:
561 if generaldelta:
558 if e[3] == e[5]:
562 if e[3] == e[5]:
559 deltatype = 'p1'
563 deltatype = 'p1'
560 elif e[3] == e[6]:
564 elif e[3] == e[6]:
561 deltatype = 'p2'
565 deltatype = 'p2'
562 elif e[3] == rev - 1:
566 elif e[3] == rev - 1:
563 deltatype = 'prev'
567 deltatype = 'prev'
564 elif e[3] == rev:
568 elif e[3] == rev:
565 deltatype = 'base'
569 deltatype = 'base'
566 else:
570 else:
567 deltatype = 'other'
571 deltatype = 'other'
568 else:
572 else:
569 if e[3] == rev:
573 if e[3] == rev:
570 deltatype = 'base'
574 deltatype = 'base'
571 else:
575 else:
572 deltatype = 'prev'
576 deltatype = 'prev'
573
577
574 chain = r._deltachain(rev)[0]
578 chain = r._deltachain(rev)[0]
575 for iterrev in chain:
579 for iterrev in chain:
576 e = index[iterrev]
580 e = index[iterrev]
577 chainsize += e[1]
581 chainsize += e[1]
578
582
579 return compsize, uncompsize, deltatype, chain, chainsize
583 return compsize, uncompsize, deltatype, chain, chainsize
580
584
581 fm = ui.formatter('debugdeltachain', opts)
585 fm = ui.formatter('debugdeltachain', opts)
582
586
583 fm.plain(' rev chain# chainlen prev delta '
587 fm.plain(' rev chain# chainlen prev delta '
584 'size rawsize chainsize ratio lindist extradist '
588 'size rawsize chainsize ratio lindist extradist '
585 'extraratio\n')
589 'extraratio\n')
586
590
587 chainbases = {}
591 chainbases = {}
588 for rev in r:
592 for rev in r:
589 comp, uncomp, deltatype, chain, chainsize = revinfo(rev)
593 comp, uncomp, deltatype, chain, chainsize = revinfo(rev)
590 chainbase = chain[0]
594 chainbase = chain[0]
591 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
595 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
592 basestart = r.start(chainbase)
596 basestart = r.start(chainbase)
593 revstart = r.start(rev)
597 revstart = r.start(rev)
594 lineardist = revstart + comp - basestart
598 lineardist = revstart + comp - basestart
595 extradist = lineardist - chainsize
599 extradist = lineardist - chainsize
596 try:
600 try:
597 prevrev = chain[-2]
601 prevrev = chain[-2]
598 except IndexError:
602 except IndexError:
599 prevrev = -1
603 prevrev = -1
600
604
601 chainratio = float(chainsize) / float(uncomp)
605 chainratio = float(chainsize) / float(uncomp)
602 extraratio = float(extradist) / float(chainsize)
606 extraratio = float(extradist) / float(chainsize)
603
607
604 fm.startitem()
608 fm.startitem()
605 fm.write('rev chainid chainlen prevrev deltatype compsize '
609 fm.write('rev chainid chainlen prevrev deltatype compsize '
606 'uncompsize chainsize chainratio lindist extradist '
610 'uncompsize chainsize chainratio lindist extradist '
607 'extraratio',
611 'extraratio',
608 '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f\n',
612 '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f\n',
609 rev, chainid, len(chain), prevrev, deltatype, comp,
613 rev, chainid, len(chain), prevrev, deltatype, comp,
610 uncomp, chainsize, chainratio, lineardist, extradist,
614 uncomp, chainsize, chainratio, lineardist, extradist,
611 extraratio,
615 extraratio,
612 rev=rev, chainid=chainid, chainlen=len(chain),
616 rev=rev, chainid=chainid, chainlen=len(chain),
613 prevrev=prevrev, deltatype=deltatype, compsize=comp,
617 prevrev=prevrev, deltatype=deltatype, compsize=comp,
614 uncompsize=uncomp, chainsize=chainsize,
618 uncompsize=uncomp, chainsize=chainsize,
615 chainratio=chainratio, lindist=lineardist,
619 chainratio=chainratio, lindist=lineardist,
616 extradist=extradist, extraratio=extraratio)
620 extradist=extradist, extraratio=extraratio)
617
621
618 fm.end()
622 fm.end()
619
623
620 @command('debugdirstate|debugstate',
624 @command('debugdirstate|debugstate',
621 [('', 'nodates', None, _('do not display the saved mtime')),
625 [('', 'nodates', None, _('do not display the saved mtime')),
622 ('', 'datesort', None, _('sort by saved mtime'))],
626 ('', 'datesort', None, _('sort by saved mtime'))],
623 _('[OPTION]...'))
627 _('[OPTION]...'))
624 def debugstate(ui, repo, **opts):
628 def debugstate(ui, repo, **opts):
625 """show the contents of the current dirstate"""
629 """show the contents of the current dirstate"""
626
630
627 nodates = opts.get('nodates')
631 nodates = opts.get('nodates')
628 datesort = opts.get('datesort')
632 datesort = opts.get('datesort')
629
633
630 timestr = ""
634 timestr = ""
631 if datesort:
635 if datesort:
632 keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename
636 keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename
633 else:
637 else:
634 keyfunc = None # sort by filename
638 keyfunc = None # sort by filename
635 for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc):
639 for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc):
636 if ent[3] == -1:
640 if ent[3] == -1:
637 timestr = 'unset '
641 timestr = 'unset '
638 elif nodates:
642 elif nodates:
639 timestr = 'set '
643 timestr = 'set '
640 else:
644 else:
641 timestr = time.strftime("%Y-%m-%d %H:%M:%S ",
645 timestr = time.strftime("%Y-%m-%d %H:%M:%S ",
642 time.localtime(ent[3]))
646 time.localtime(ent[3]))
643 if ent[1] & 0o20000:
647 if ent[1] & 0o20000:
644 mode = 'lnk'
648 mode = 'lnk'
645 else:
649 else:
646 mode = '%3o' % (ent[1] & 0o777 & ~util.umask)
650 mode = '%3o' % (ent[1] & 0o777 & ~util.umask)
647 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_))
651 ui.write("%c %s %10d %s%s\n" % (ent[0], mode, ent[2], timestr, file_))
648 for f in repo.dirstate.copies():
652 for f in repo.dirstate.copies():
649 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
653 ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
650
654
651 @command('debugdiscovery',
655 @command('debugdiscovery',
652 [('', 'old', None, _('use old-style discovery')),
656 [('', 'old', None, _('use old-style discovery')),
653 ('', 'nonheads', None,
657 ('', 'nonheads', None,
654 _('use old-style discovery with non-heads included')),
658 _('use old-style discovery with non-heads included')),
655 ] + cmdutil.remoteopts,
659 ] + cmdutil.remoteopts,
656 _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]'))
660 _('[-l REV] [-r REV] [-b BRANCH]... [OTHER]'))
657 def debugdiscovery(ui, repo, remoteurl="default", **opts):
661 def debugdiscovery(ui, repo, remoteurl="default", **opts):
658 """runs the changeset discovery protocol in isolation"""
662 """runs the changeset discovery protocol in isolation"""
659 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl),
663 remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl),
660 opts.get('branch'))
664 opts.get('branch'))
661 remote = hg.peer(repo, opts, remoteurl)
665 remote = hg.peer(repo, opts, remoteurl)
662 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl))
666 ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl))
663
667
664 # make sure tests are repeatable
668 # make sure tests are repeatable
665 random.seed(12323)
669 random.seed(12323)
666
670
667 def doit(localheads, remoteheads, remote=remote):
671 def doit(localheads, remoteheads, remote=remote):
668 if opts.get('old'):
672 if opts.get('old'):
669 if localheads:
673 if localheads:
670 raise error.Abort('cannot use localheads with old style '
674 raise error.Abort('cannot use localheads with old style '
671 'discovery')
675 'discovery')
672 if not util.safehasattr(remote, 'branches'):
676 if not util.safehasattr(remote, 'branches'):
673 # enable in-client legacy support
677 # enable in-client legacy support
674 remote = localrepo.locallegacypeer(remote.local())
678 remote = localrepo.locallegacypeer(remote.local())
675 common, _in, hds = treediscovery.findcommonincoming(repo, remote,
679 common, _in, hds = treediscovery.findcommonincoming(repo, remote,
676 force=True)
680 force=True)
677 common = set(common)
681 common = set(common)
678 if not opts.get('nonheads'):
682 if not opts.get('nonheads'):
679 ui.write(("unpruned common: %s\n") %
683 ui.write(("unpruned common: %s\n") %
680 " ".join(sorted(short(n) for n in common)))
684 " ".join(sorted(short(n) for n in common)))
681 dag = dagutil.revlogdag(repo.changelog)
685 dag = dagutil.revlogdag(repo.changelog)
682 all = dag.ancestorset(dag.internalizeall(common))
686 all = dag.ancestorset(dag.internalizeall(common))
683 common = dag.externalizeall(dag.headsetofconnecteds(all))
687 common = dag.externalizeall(dag.headsetofconnecteds(all))
684 else:
688 else:
685 common, any, hds = setdiscovery.findcommonheads(ui, repo, remote)
689 common, any, hds = setdiscovery.findcommonheads(ui, repo, remote)
686 common = set(common)
690 common = set(common)
687 rheads = set(hds)
691 rheads = set(hds)
688 lheads = set(repo.heads())
692 lheads = set(repo.heads())
689 ui.write(("common heads: %s\n") %
693 ui.write(("common heads: %s\n") %
690 " ".join(sorted(short(n) for n in common)))
694 " ".join(sorted(short(n) for n in common)))
691 if lheads <= common:
695 if lheads <= common:
692 ui.write(("local is subset\n"))
696 ui.write(("local is subset\n"))
693 elif rheads <= common:
697 elif rheads <= common:
694 ui.write(("remote is subset\n"))
698 ui.write(("remote is subset\n"))
695
699
696 serverlogs = opts.get('serverlog')
700 serverlogs = opts.get('serverlog')
697 if serverlogs:
701 if serverlogs:
698 for filename in serverlogs:
702 for filename in serverlogs:
699 with open(filename, 'r') as logfile:
703 with open(filename, 'r') as logfile:
700 line = logfile.readline()
704 line = logfile.readline()
701 while line:
705 while line:
702 parts = line.strip().split(';')
706 parts = line.strip().split(';')
703 op = parts[1]
707 op = parts[1]
704 if op == 'cg':
708 if op == 'cg':
705 pass
709 pass
706 elif op == 'cgss':
710 elif op == 'cgss':
707 doit(parts[2].split(' '), parts[3].split(' '))
711 doit(parts[2].split(' '), parts[3].split(' '))
708 elif op == 'unb':
712 elif op == 'unb':
709 doit(parts[3].split(' '), parts[2].split(' '))
713 doit(parts[3].split(' '), parts[2].split(' '))
710 line = logfile.readline()
714 line = logfile.readline()
711 else:
715 else:
712 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches,
716 remoterevs, _checkout = hg.addbranchrevs(repo, remote, branches,
713 opts.get('remote_head'))
717 opts.get('remote_head'))
714 localrevs = opts.get('local_head')
718 localrevs = opts.get('local_head')
715 doit(localrevs, remoterevs)
719 doit(localrevs, remoterevs)
716
720
717 @command('debugextensions', cmdutil.formatteropts, [], norepo=True)
721 @command('debugextensions', cmdutil.formatteropts, [], norepo=True)
718 def debugextensions(ui, **opts):
722 def debugextensions(ui, **opts):
719 '''show information about active extensions'''
723 '''show information about active extensions'''
720 exts = extensions.extensions(ui)
724 exts = extensions.extensions(ui)
721 hgver = util.version()
725 hgver = util.version()
722 fm = ui.formatter('debugextensions', opts)
726 fm = ui.formatter('debugextensions', opts)
723 for extname, extmod in sorted(exts, key=operator.itemgetter(0)):
727 for extname, extmod in sorted(exts, key=operator.itemgetter(0)):
724 isinternal = extensions.ismoduleinternal(extmod)
728 isinternal = extensions.ismoduleinternal(extmod)
725 extsource = pycompat.fsencode(extmod.__file__)
729 extsource = pycompat.fsencode(extmod.__file__)
726 if isinternal:
730 if isinternal:
727 exttestedwith = [] # never expose magic string to users
731 exttestedwith = [] # never expose magic string to users
728 else:
732 else:
729 exttestedwith = getattr(extmod, 'testedwith', '').split()
733 exttestedwith = getattr(extmod, 'testedwith', '').split()
730 extbuglink = getattr(extmod, 'buglink', None)
734 extbuglink = getattr(extmod, 'buglink', None)
731
735
732 fm.startitem()
736 fm.startitem()
733
737
734 if ui.quiet or ui.verbose:
738 if ui.quiet or ui.verbose:
735 fm.write('name', '%s\n', extname)
739 fm.write('name', '%s\n', extname)
736 else:
740 else:
737 fm.write('name', '%s', extname)
741 fm.write('name', '%s', extname)
738 if isinternal or hgver in exttestedwith:
742 if isinternal or hgver in exttestedwith:
739 fm.plain('\n')
743 fm.plain('\n')
740 elif not exttestedwith:
744 elif not exttestedwith:
741 fm.plain(_(' (untested!)\n'))
745 fm.plain(_(' (untested!)\n'))
742 else:
746 else:
743 lasttestedversion = exttestedwith[-1]
747 lasttestedversion = exttestedwith[-1]
744 fm.plain(' (%s!)\n' % lasttestedversion)
748 fm.plain(' (%s!)\n' % lasttestedversion)
745
749
746 fm.condwrite(ui.verbose and extsource, 'source',
750 fm.condwrite(ui.verbose and extsource, 'source',
747 _(' location: %s\n'), extsource or "")
751 _(' location: %s\n'), extsource or "")
748
752
749 if ui.verbose:
753 if ui.verbose:
750 fm.plain(_(' bundled: %s\n') % ['no', 'yes'][isinternal])
754 fm.plain(_(' bundled: %s\n') % ['no', 'yes'][isinternal])
751 fm.data(bundled=isinternal)
755 fm.data(bundled=isinternal)
752
756
753 fm.condwrite(ui.verbose and exttestedwith, 'testedwith',
757 fm.condwrite(ui.verbose and exttestedwith, 'testedwith',
754 _(' tested with: %s\n'),
758 _(' tested with: %s\n'),
755 fm.formatlist(exttestedwith, name='ver'))
759 fm.formatlist(exttestedwith, name='ver'))
756
760
757 fm.condwrite(ui.verbose and extbuglink, 'buglink',
761 fm.condwrite(ui.verbose and extbuglink, 'buglink',
758 _(' bug reporting: %s\n'), extbuglink or "")
762 _(' bug reporting: %s\n'), extbuglink or "")
759
763
760 fm.end()
764 fm.end()
761
765
762 @command('debugfileset',
766 @command('debugfileset',
763 [('r', 'rev', '', _('apply the filespec on this revision'), _('REV'))],
767 [('r', 'rev', '', _('apply the filespec on this revision'), _('REV'))],
764 _('[-r REV] FILESPEC'))
768 _('[-r REV] FILESPEC'))
765 def debugfileset(ui, repo, expr, **opts):
769 def debugfileset(ui, repo, expr, **opts):
766 '''parse and apply a fileset specification'''
770 '''parse and apply a fileset specification'''
767 ctx = scmutil.revsingle(repo, opts.get('rev'), None)
771 ctx = scmutil.revsingle(repo, opts.get('rev'), None)
768 if ui.verbose:
772 if ui.verbose:
769 tree = fileset.parse(expr)
773 tree = fileset.parse(expr)
770 ui.note(fileset.prettyformat(tree), "\n")
774 ui.note(fileset.prettyformat(tree), "\n")
771
775
772 for f in ctx.getfileset(expr):
776 for f in ctx.getfileset(expr):
773 ui.write("%s\n" % f)
777 ui.write("%s\n" % f)
774
778
775 @command('debugfsinfo', [], _('[PATH]'), norepo=True)
779 @command('debugfsinfo', [], _('[PATH]'), norepo=True)
776 def debugfsinfo(ui, path="."):
780 def debugfsinfo(ui, path="."):
777 """show information detected about current filesystem"""
781 """show information detected about current filesystem"""
778 ui.write(('exec: %s\n') % (util.checkexec(path) and 'yes' or 'no'))
782 ui.write(('exec: %s\n') % (util.checkexec(path) and 'yes' or 'no'))
779 ui.write(('fstype: %s\n') % (util.getfstype(path) or '(unknown)'))
783 ui.write(('fstype: %s\n') % (util.getfstype(path) or '(unknown)'))
780 ui.write(('symlink: %s\n') % (util.checklink(path) and 'yes' or 'no'))
784 ui.write(('symlink: %s\n') % (util.checklink(path) and 'yes' or 'no'))
781 ui.write(('hardlink: %s\n') % (util.checknlink(path) and 'yes' or 'no'))
785 ui.write(('hardlink: %s\n') % (util.checknlink(path) and 'yes' or 'no'))
782 casesensitive = '(unknown)'
786 casesensitive = '(unknown)'
783 try:
787 try:
784 with tempfile.NamedTemporaryFile(prefix='.debugfsinfo', dir=path) as f:
788 with tempfile.NamedTemporaryFile(prefix='.debugfsinfo', dir=path) as f:
785 casesensitive = util.fscasesensitive(f.name) and 'yes' or 'no'
789 casesensitive = util.fscasesensitive(f.name) and 'yes' or 'no'
786 except OSError:
790 except OSError:
787 pass
791 pass
788 ui.write(('case-sensitive: %s\n') % casesensitive)
792 ui.write(('case-sensitive: %s\n') % casesensitive)
789
793
790 @command('debuggetbundle',
794 @command('debuggetbundle',
791 [('H', 'head', [], _('id of head node'), _('ID')),
795 [('H', 'head', [], _('id of head node'), _('ID')),
792 ('C', 'common', [], _('id of common node'), _('ID')),
796 ('C', 'common', [], _('id of common node'), _('ID')),
793 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))],
797 ('t', 'type', 'bzip2', _('bundle compression type to use'), _('TYPE'))],
794 _('REPO FILE [-H|-C ID]...'),
798 _('REPO FILE [-H|-C ID]...'),
795 norepo=True)
799 norepo=True)
796 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts):
800 def debuggetbundle(ui, repopath, bundlepath, head=None, common=None, **opts):
797 """retrieves a bundle from a repo
801 """retrieves a bundle from a repo
798
802
799 Every ID must be a full-length hex node id string. Saves the bundle to the
803 Every ID must be a full-length hex node id string. Saves the bundle to the
800 given file.
804 given file.
801 """
805 """
802 repo = hg.peer(ui, opts, repopath)
806 repo = hg.peer(ui, opts, repopath)
803 if not repo.capable('getbundle'):
807 if not repo.capable('getbundle'):
804 raise error.Abort("getbundle() not supported by target repository")
808 raise error.Abort("getbundle() not supported by target repository")
805 args = {}
809 args = {}
806 if common:
810 if common:
807 args['common'] = [bin(s) for s in common]
811 args['common'] = [bin(s) for s in common]
808 if head:
812 if head:
809 args['heads'] = [bin(s) for s in head]
813 args['heads'] = [bin(s) for s in head]
810 # TODO: get desired bundlecaps from command line.
814 # TODO: get desired bundlecaps from command line.
811 args['bundlecaps'] = None
815 args['bundlecaps'] = None
812 bundle = repo.getbundle('debug', **args)
816 bundle = repo.getbundle('debug', **args)
813
817
814 bundletype = opts.get('type', 'bzip2').lower()
818 bundletype = opts.get('type', 'bzip2').lower()
815 btypes = {'none': 'HG10UN',
819 btypes = {'none': 'HG10UN',
816 'bzip2': 'HG10BZ',
820 'bzip2': 'HG10BZ',
817 'gzip': 'HG10GZ',
821 'gzip': 'HG10GZ',
818 'bundle2': 'HG20'}
822 'bundle2': 'HG20'}
819 bundletype = btypes.get(bundletype)
823 bundletype = btypes.get(bundletype)
820 if bundletype not in bundle2.bundletypes:
824 if bundletype not in bundle2.bundletypes:
821 raise error.Abort(_('unknown bundle type specified with --type'))
825 raise error.Abort(_('unknown bundle type specified with --type'))
822 bundle2.writebundle(ui, bundle, bundlepath, bundletype)
826 bundle2.writebundle(ui, bundle, bundlepath, bundletype)
823
827
824 @command('debugignore', [], '[FILE]')
828 @command('debugignore', [], '[FILE]')
825 def debugignore(ui, repo, *files, **opts):
829 def debugignore(ui, repo, *files, **opts):
826 """display the combined ignore pattern and information about ignored files
830 """display the combined ignore pattern and information about ignored files
827
831
828 With no argument display the combined ignore pattern.
832 With no argument display the combined ignore pattern.
829
833
830 Given space separated file names, shows if the given file is ignored and
834 Given space separated file names, shows if the given file is ignored and
831 if so, show the ignore rule (file and line number) that matched it.
835 if so, show the ignore rule (file and line number) that matched it.
832 """
836 """
833 ignore = repo.dirstate._ignore
837 ignore = repo.dirstate._ignore
834 if not files:
838 if not files:
835 # Show all the patterns
839 # Show all the patterns
836 ui.write("%s\n" % repr(ignore))
840 ui.write("%s\n" % repr(ignore))
837 else:
841 else:
838 for f in files:
842 for f in files:
839 nf = util.normpath(f)
843 nf = util.normpath(f)
840 ignored = None
844 ignored = None
841 ignoredata = None
845 ignoredata = None
842 if nf != '.':
846 if nf != '.':
843 if ignore(nf):
847 if ignore(nf):
844 ignored = nf
848 ignored = nf
845 ignoredata = repo.dirstate._ignorefileandline(nf)
849 ignoredata = repo.dirstate._ignorefileandline(nf)
846 else:
850 else:
847 for p in util.finddirs(nf):
851 for p in util.finddirs(nf):
848 if ignore(p):
852 if ignore(p):
849 ignored = p
853 ignored = p
850 ignoredata = repo.dirstate._ignorefileandline(p)
854 ignoredata = repo.dirstate._ignorefileandline(p)
851 break
855 break
852 if ignored:
856 if ignored:
853 if ignored == nf:
857 if ignored == nf:
854 ui.write(_("%s is ignored\n") % f)
858 ui.write(_("%s is ignored\n") % f)
855 else:
859 else:
856 ui.write(_("%s is ignored because of "
860 ui.write(_("%s is ignored because of "
857 "containing folder %s\n")
861 "containing folder %s\n")
858 % (f, ignored))
862 % (f, ignored))
859 ignorefile, lineno, line = ignoredata
863 ignorefile, lineno, line = ignoredata
860 ui.write(_("(ignore rule in %s, line %d: '%s')\n")
864 ui.write(_("(ignore rule in %s, line %d: '%s')\n")
861 % (ignorefile, lineno, line))
865 % (ignorefile, lineno, line))
862 else:
866 else:
863 ui.write(_("%s is not ignored\n") % f)
867 ui.write(_("%s is not ignored\n") % f)
864
868
865 @command('debugindex', cmdutil.debugrevlogopts +
869 @command('debugindex', cmdutil.debugrevlogopts +
866 [('f', 'format', 0, _('revlog format'), _('FORMAT'))],
870 [('f', 'format', 0, _('revlog format'), _('FORMAT'))],
867 _('[-f FORMAT] -c|-m|FILE'),
871 _('[-f FORMAT] -c|-m|FILE'),
868 optionalrepo=True)
872 optionalrepo=True)
869 def debugindex(ui, repo, file_=None, **opts):
873 def debugindex(ui, repo, file_=None, **opts):
870 """dump the contents of an index file"""
874 """dump the contents of an index file"""
871 r = cmdutil.openrevlog(repo, 'debugindex', file_, opts)
875 r = cmdutil.openrevlog(repo, 'debugindex', file_, opts)
872 format = opts.get('format', 0)
876 format = opts.get('format', 0)
873 if format not in (0, 1):
877 if format not in (0, 1):
874 raise error.Abort(_("unknown format %d") % format)
878 raise error.Abort(_("unknown format %d") % format)
875
879
876 generaldelta = r.version & revlog.FLAG_GENERALDELTA
880 generaldelta = r.version & revlog.FLAG_GENERALDELTA
877 if generaldelta:
881 if generaldelta:
878 basehdr = ' delta'
882 basehdr = ' delta'
879 else:
883 else:
880 basehdr = ' base'
884 basehdr = ' base'
881
885
882 if ui.debugflag:
886 if ui.debugflag:
883 shortfn = hex
887 shortfn = hex
884 else:
888 else:
885 shortfn = short
889 shortfn = short
886
890
887 # There might not be anything in r, so have a sane default
891 # There might not be anything in r, so have a sane default
888 idlen = 12
892 idlen = 12
889 for i in r:
893 for i in r:
890 idlen = len(shortfn(r.node(i)))
894 idlen = len(shortfn(r.node(i)))
891 break
895 break
892
896
893 if format == 0:
897 if format == 0:
894 ui.write((" rev offset length " + basehdr + " linkrev"
898 ui.write((" rev offset length " + basehdr + " linkrev"
895 " %s %s p2\n") % ("nodeid".ljust(idlen), "p1".ljust(idlen)))
899 " %s %s p2\n") % ("nodeid".ljust(idlen), "p1".ljust(idlen)))
896 elif format == 1:
900 elif format == 1:
897 ui.write((" rev flag offset length"
901 ui.write((" rev flag offset length"
898 " size " + basehdr + " link p1 p2"
902 " size " + basehdr + " link p1 p2"
899 " %s\n") % "nodeid".rjust(idlen))
903 " %s\n") % "nodeid".rjust(idlen))
900
904
901 for i in r:
905 for i in r:
902 node = r.node(i)
906 node = r.node(i)
903 if generaldelta:
907 if generaldelta:
904 base = r.deltaparent(i)
908 base = r.deltaparent(i)
905 else:
909 else:
906 base = r.chainbase(i)
910 base = r.chainbase(i)
907 if format == 0:
911 if format == 0:
908 try:
912 try:
909 pp = r.parents(node)
913 pp = r.parents(node)
910 except Exception:
914 except Exception:
911 pp = [nullid, nullid]
915 pp = [nullid, nullid]
912 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
916 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
913 i, r.start(i), r.length(i), base, r.linkrev(i),
917 i, r.start(i), r.length(i), base, r.linkrev(i),
914 shortfn(node), shortfn(pp[0]), shortfn(pp[1])))
918 shortfn(node), shortfn(pp[0]), shortfn(pp[1])))
915 elif format == 1:
919 elif format == 1:
916 pr = r.parentrevs(i)
920 pr = r.parentrevs(i)
917 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % (
921 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % (
918 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i),
922 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i),
919 base, r.linkrev(i), pr[0], pr[1], shortfn(node)))
923 base, r.linkrev(i), pr[0], pr[1], shortfn(node)))
920
924
921 @command('debugindexdot', cmdutil.debugrevlogopts,
925 @command('debugindexdot', cmdutil.debugrevlogopts,
922 _('-c|-m|FILE'), optionalrepo=True)
926 _('-c|-m|FILE'), optionalrepo=True)
923 def debugindexdot(ui, repo, file_=None, **opts):
927 def debugindexdot(ui, repo, file_=None, **opts):
924 """dump an index DAG as a graphviz dot file"""
928 """dump an index DAG as a graphviz dot file"""
925 r = cmdutil.openrevlog(repo, 'debugindexdot', file_, opts)
929 r = cmdutil.openrevlog(repo, 'debugindexdot', file_, opts)
926 ui.write(("digraph G {\n"))
930 ui.write(("digraph G {\n"))
927 for i in r:
931 for i in r:
928 node = r.node(i)
932 node = r.node(i)
929 pp = r.parents(node)
933 pp = r.parents(node)
930 ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
934 ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
931 if pp[1] != nullid:
935 if pp[1] != nullid:
932 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
936 ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
933 ui.write("}\n")
937 ui.write("}\n")
934
938
935 @command('debuginstall', [] + cmdutil.formatteropts, '', norepo=True)
939 @command('debuginstall', [] + cmdutil.formatteropts, '', norepo=True)
936 def debuginstall(ui, **opts):
940 def debuginstall(ui, **opts):
937 '''test Mercurial installation
941 '''test Mercurial installation
938
942
939 Returns 0 on success.
943 Returns 0 on success.
940 '''
944 '''
941
945
942 def writetemp(contents):
946 def writetemp(contents):
943 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
947 (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
944 f = os.fdopen(fd, pycompat.sysstr("wb"))
948 f = os.fdopen(fd, pycompat.sysstr("wb"))
945 f.write(contents)
949 f.write(contents)
946 f.close()
950 f.close()
947 return name
951 return name
948
952
949 problems = 0
953 problems = 0
950
954
951 fm = ui.formatter('debuginstall', opts)
955 fm = ui.formatter('debuginstall', opts)
952 fm.startitem()
956 fm.startitem()
953
957
954 # encoding
958 # encoding
955 fm.write('encoding', _("checking encoding (%s)...\n"), encoding.encoding)
959 fm.write('encoding', _("checking encoding (%s)...\n"), encoding.encoding)
956 err = None
960 err = None
957 try:
961 try:
958 encoding.fromlocal("test")
962 encoding.fromlocal("test")
959 except error.Abort as inst:
963 except error.Abort as inst:
960 err = inst
964 err = inst
961 problems += 1
965 problems += 1
962 fm.condwrite(err, 'encodingerror', _(" %s\n"
966 fm.condwrite(err, 'encodingerror', _(" %s\n"
963 " (check that your locale is properly set)\n"), err)
967 " (check that your locale is properly set)\n"), err)
964
968
965 # Python
969 # Python
966 fm.write('pythonexe', _("checking Python executable (%s)\n"),
970 fm.write('pythonexe', _("checking Python executable (%s)\n"),
967 pycompat.sysexecutable)
971 pycompat.sysexecutable)
968 fm.write('pythonver', _("checking Python version (%s)\n"),
972 fm.write('pythonver', _("checking Python version (%s)\n"),
969 ("%d.%d.%d" % sys.version_info[:3]))
973 ("%d.%d.%d" % sys.version_info[:3]))
970 fm.write('pythonlib', _("checking Python lib (%s)...\n"),
974 fm.write('pythonlib', _("checking Python lib (%s)...\n"),
971 os.path.dirname(pycompat.fsencode(os.__file__)))
975 os.path.dirname(pycompat.fsencode(os.__file__)))
972
976
973 security = set(sslutil.supportedprotocols)
977 security = set(sslutil.supportedprotocols)
974 if sslutil.hassni:
978 if sslutil.hassni:
975 security.add('sni')
979 security.add('sni')
976
980
977 fm.write('pythonsecurity', _("checking Python security support (%s)\n"),
981 fm.write('pythonsecurity', _("checking Python security support (%s)\n"),
978 fm.formatlist(sorted(security), name='protocol',
982 fm.formatlist(sorted(security), name='protocol',
979 fmt='%s', sep=','))
983 fmt='%s', sep=','))
980
984
981 # These are warnings, not errors. So don't increment problem count. This
985 # These are warnings, not errors. So don't increment problem count. This
982 # may change in the future.
986 # may change in the future.
983 if 'tls1.2' not in security:
987 if 'tls1.2' not in security:
984 fm.plain(_(' TLS 1.2 not supported by Python install; '
988 fm.plain(_(' TLS 1.2 not supported by Python install; '
985 'network connections lack modern security\n'))
989 'network connections lack modern security\n'))
986 if 'sni' not in security:
990 if 'sni' not in security:
987 fm.plain(_(' SNI not supported by Python install; may have '
991 fm.plain(_(' SNI not supported by Python install; may have '
988 'connectivity issues with some servers\n'))
992 'connectivity issues with some servers\n'))
989
993
990 # TODO print CA cert info
994 # TODO print CA cert info
991
995
992 # hg version
996 # hg version
993 hgver = util.version()
997 hgver = util.version()
994 fm.write('hgver', _("checking Mercurial version (%s)\n"),
998 fm.write('hgver', _("checking Mercurial version (%s)\n"),
995 hgver.split('+')[0])
999 hgver.split('+')[0])
996 fm.write('hgverextra', _("checking Mercurial custom build (%s)\n"),
1000 fm.write('hgverextra', _("checking Mercurial custom build (%s)\n"),
997 '+'.join(hgver.split('+')[1:]))
1001 '+'.join(hgver.split('+')[1:]))
998
1002
999 # compiled modules
1003 # compiled modules
1000 fm.write('hgmodulepolicy', _("checking module policy (%s)\n"),
1004 fm.write('hgmodulepolicy', _("checking module policy (%s)\n"),
1001 policy.policy)
1005 policy.policy)
1002 fm.write('hgmodules', _("checking installed modules (%s)...\n"),
1006 fm.write('hgmodules', _("checking installed modules (%s)...\n"),
1003 os.path.dirname(pycompat.fsencode(__file__)))
1007 os.path.dirname(pycompat.fsencode(__file__)))
1004
1008
1005 if policy.policy in ('c', 'allow'):
1009 if policy.policy in ('c', 'allow'):
1006 err = None
1010 err = None
1007 try:
1011 try:
1008 from .cext import (
1012 from .cext import (
1009 base85,
1013 base85,
1010 bdiff,
1014 bdiff,
1011 mpatch,
1015 mpatch,
1012 osutil,
1016 osutil,
1013 )
1017 )
1014 dir(bdiff), dir(mpatch), dir(base85), dir(osutil) # quiet pyflakes
1018 dir(bdiff), dir(mpatch), dir(base85), dir(osutil) # quiet pyflakes
1015 except Exception as inst:
1019 except Exception as inst:
1016 err = inst
1020 err = inst
1017 problems += 1
1021 problems += 1
1018 fm.condwrite(err, 'extensionserror', " %s\n", err)
1022 fm.condwrite(err, 'extensionserror', " %s\n", err)
1019
1023
1020 compengines = util.compengines._engines.values()
1024 compengines = util.compengines._engines.values()
1021 fm.write('compengines', _('checking registered compression engines (%s)\n'),
1025 fm.write('compengines', _('checking registered compression engines (%s)\n'),
1022 fm.formatlist(sorted(e.name() for e in compengines),
1026 fm.formatlist(sorted(e.name() for e in compengines),
1023 name='compengine', fmt='%s', sep=', '))
1027 name='compengine', fmt='%s', sep=', '))
1024 fm.write('compenginesavail', _('checking available compression engines '
1028 fm.write('compenginesavail', _('checking available compression engines '
1025 '(%s)\n'),
1029 '(%s)\n'),
1026 fm.formatlist(sorted(e.name() for e in compengines
1030 fm.formatlist(sorted(e.name() for e in compengines
1027 if e.available()),
1031 if e.available()),
1028 name='compengine', fmt='%s', sep=', '))
1032 name='compengine', fmt='%s', sep=', '))
1029 wirecompengines = util.compengines.supportedwireengines(util.SERVERROLE)
1033 wirecompengines = util.compengines.supportedwireengines(util.SERVERROLE)
1030 fm.write('compenginesserver', _('checking available compression engines '
1034 fm.write('compenginesserver', _('checking available compression engines '
1031 'for wire protocol (%s)\n'),
1035 'for wire protocol (%s)\n'),
1032 fm.formatlist([e.name() for e in wirecompengines
1036 fm.formatlist([e.name() for e in wirecompengines
1033 if e.wireprotosupport()],
1037 if e.wireprotosupport()],
1034 name='compengine', fmt='%s', sep=', '))
1038 name='compengine', fmt='%s', sep=', '))
1035
1039
1036 # templates
1040 # templates
1037 p = templater.templatepaths()
1041 p = templater.templatepaths()
1038 fm.write('templatedirs', 'checking templates (%s)...\n', ' '.join(p))
1042 fm.write('templatedirs', 'checking templates (%s)...\n', ' '.join(p))
1039 fm.condwrite(not p, '', _(" no template directories found\n"))
1043 fm.condwrite(not p, '', _(" no template directories found\n"))
1040 if p:
1044 if p:
1041 m = templater.templatepath("map-cmdline.default")
1045 m = templater.templatepath("map-cmdline.default")
1042 if m:
1046 if m:
1043 # template found, check if it is working
1047 # template found, check if it is working
1044 err = None
1048 err = None
1045 try:
1049 try:
1046 templater.templater.frommapfile(m)
1050 templater.templater.frommapfile(m)
1047 except Exception as inst:
1051 except Exception as inst:
1048 err = inst
1052 err = inst
1049 p = None
1053 p = None
1050 fm.condwrite(err, 'defaulttemplateerror', " %s\n", err)
1054 fm.condwrite(err, 'defaulttemplateerror', " %s\n", err)
1051 else:
1055 else:
1052 p = None
1056 p = None
1053 fm.condwrite(p, 'defaulttemplate',
1057 fm.condwrite(p, 'defaulttemplate',
1054 _("checking default template (%s)\n"), m)
1058 _("checking default template (%s)\n"), m)
1055 fm.condwrite(not m, 'defaulttemplatenotfound',
1059 fm.condwrite(not m, 'defaulttemplatenotfound',
1056 _(" template '%s' not found\n"), "default")
1060 _(" template '%s' not found\n"), "default")
1057 if not p:
1061 if not p:
1058 problems += 1
1062 problems += 1
1059 fm.condwrite(not p, '',
1063 fm.condwrite(not p, '',
1060 _(" (templates seem to have been installed incorrectly)\n"))
1064 _(" (templates seem to have been installed incorrectly)\n"))
1061
1065
1062 # editor
1066 # editor
1063 editor = ui.geteditor()
1067 editor = ui.geteditor()
1064 editor = util.expandpath(editor)
1068 editor = util.expandpath(editor)
1065 fm.write('editor', _("checking commit editor... (%s)\n"), editor)
1069 fm.write('editor', _("checking commit editor... (%s)\n"), editor)
1066 cmdpath = util.findexe(pycompat.shlexsplit(editor)[0])
1070 cmdpath = util.findexe(pycompat.shlexsplit(editor)[0])
1067 fm.condwrite(not cmdpath and editor == 'vi', 'vinotfound',
1071 fm.condwrite(not cmdpath and editor == 'vi', 'vinotfound',
1068 _(" No commit editor set and can't find %s in PATH\n"
1072 _(" No commit editor set and can't find %s in PATH\n"
1069 " (specify a commit editor in your configuration"
1073 " (specify a commit editor in your configuration"
1070 " file)\n"), not cmdpath and editor == 'vi' and editor)
1074 " file)\n"), not cmdpath and editor == 'vi' and editor)
1071 fm.condwrite(not cmdpath and editor != 'vi', 'editornotfound',
1075 fm.condwrite(not cmdpath and editor != 'vi', 'editornotfound',
1072 _(" Can't find editor '%s' in PATH\n"
1076 _(" Can't find editor '%s' in PATH\n"
1073 " (specify a commit editor in your configuration"
1077 " (specify a commit editor in your configuration"
1074 " file)\n"), not cmdpath and editor)
1078 " file)\n"), not cmdpath and editor)
1075 if not cmdpath and editor != 'vi':
1079 if not cmdpath and editor != 'vi':
1076 problems += 1
1080 problems += 1
1077
1081
1078 # check username
1082 # check username
1079 username = None
1083 username = None
1080 err = None
1084 err = None
1081 try:
1085 try:
1082 username = ui.username()
1086 username = ui.username()
1083 except error.Abort as e:
1087 except error.Abort as e:
1084 err = e
1088 err = e
1085 problems += 1
1089 problems += 1
1086
1090
1087 fm.condwrite(username, 'username', _("checking username (%s)\n"), username)
1091 fm.condwrite(username, 'username', _("checking username (%s)\n"), username)
1088 fm.condwrite(err, 'usernameerror', _("checking username...\n %s\n"
1092 fm.condwrite(err, 'usernameerror', _("checking username...\n %s\n"
1089 " (specify a username in your configuration file)\n"), err)
1093 " (specify a username in your configuration file)\n"), err)
1090
1094
1091 fm.condwrite(not problems, '',
1095 fm.condwrite(not problems, '',
1092 _("no problems detected\n"))
1096 _("no problems detected\n"))
1093 if not problems:
1097 if not problems:
1094 fm.data(problems=problems)
1098 fm.data(problems=problems)
1095 fm.condwrite(problems, 'problems',
1099 fm.condwrite(problems, 'problems',
1096 _("%d problems detected,"
1100 _("%d problems detected,"
1097 " please check your install!\n"), problems)
1101 " please check your install!\n"), problems)
1098 fm.end()
1102 fm.end()
1099
1103
1100 return problems
1104 return problems
1101
1105
1102 @command('debugknown', [], _('REPO ID...'), norepo=True)
1106 @command('debugknown', [], _('REPO ID...'), norepo=True)
1103 def debugknown(ui, repopath, *ids, **opts):
1107 def debugknown(ui, repopath, *ids, **opts):
1104 """test whether node ids are known to a repo
1108 """test whether node ids are known to a repo
1105
1109
1106 Every ID must be a full-length hex node id string. Returns a list of 0s
1110 Every ID must be a full-length hex node id string. Returns a list of 0s
1107 and 1s indicating unknown/known.
1111 and 1s indicating unknown/known.
1108 """
1112 """
1109 repo = hg.peer(ui, opts, repopath)
1113 repo = hg.peer(ui, opts, repopath)
1110 if not repo.capable('known'):
1114 if not repo.capable('known'):
1111 raise error.Abort("known() not supported by target repository")
1115 raise error.Abort("known() not supported by target repository")
1112 flags = repo.known([bin(s) for s in ids])
1116 flags = repo.known([bin(s) for s in ids])
1113 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags])))
1117 ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags])))
1114
1118
1115 @command('debuglabelcomplete', [], _('LABEL...'))
1119 @command('debuglabelcomplete', [], _('LABEL...'))
1116 def debuglabelcomplete(ui, repo, *args):
1120 def debuglabelcomplete(ui, repo, *args):
1117 '''backwards compatibility with old bash completion scripts (DEPRECATED)'''
1121 '''backwards compatibility with old bash completion scripts (DEPRECATED)'''
1118 debugnamecomplete(ui, repo, *args)
1122 debugnamecomplete(ui, repo, *args)
1119
1123
1120 @command('debuglocks',
1124 @command('debuglocks',
1121 [('L', 'force-lock', None, _('free the store lock (DANGEROUS)')),
1125 [('L', 'force-lock', None, _('free the store lock (DANGEROUS)')),
1122 ('W', 'force-wlock', None,
1126 ('W', 'force-wlock', None,
1123 _('free the working state lock (DANGEROUS)'))],
1127 _('free the working state lock (DANGEROUS)'))],
1124 _('[OPTION]...'))
1128 _('[OPTION]...'))
1125 def debuglocks(ui, repo, **opts):
1129 def debuglocks(ui, repo, **opts):
1126 """show or modify state of locks
1130 """show or modify state of locks
1127
1131
1128 By default, this command will show which locks are held. This
1132 By default, this command will show which locks are held. This
1129 includes the user and process holding the lock, the amount of time
1133 includes the user and process holding the lock, the amount of time
1130 the lock has been held, and the machine name where the process is
1134 the lock has been held, and the machine name where the process is
1131 running if it's not local.
1135 running if it's not local.
1132
1136
1133 Locks protect the integrity of Mercurial's data, so should be
1137 Locks protect the integrity of Mercurial's data, so should be
1134 treated with care. System crashes or other interruptions may cause
1138 treated with care. System crashes or other interruptions may cause
1135 locks to not be properly released, though Mercurial will usually
1139 locks to not be properly released, though Mercurial will usually
1136 detect and remove such stale locks automatically.
1140 detect and remove such stale locks automatically.
1137
1141
1138 However, detecting stale locks may not always be possible (for
1142 However, detecting stale locks may not always be possible (for
1139 instance, on a shared filesystem). Removing locks may also be
1143 instance, on a shared filesystem). Removing locks may also be
1140 blocked by filesystem permissions.
1144 blocked by filesystem permissions.
1141
1145
1142 Returns 0 if no locks are held.
1146 Returns 0 if no locks are held.
1143
1147
1144 """
1148 """
1145
1149
1146 if opts.get('force_lock'):
1150 if opts.get('force_lock'):
1147 repo.svfs.unlink('lock')
1151 repo.svfs.unlink('lock')
1148 if opts.get('force_wlock'):
1152 if opts.get('force_wlock'):
1149 repo.vfs.unlink('wlock')
1153 repo.vfs.unlink('wlock')
1150 if opts.get('force_lock') or opts.get('force_lock'):
1154 if opts.get('force_lock') or opts.get('force_lock'):
1151 return 0
1155 return 0
1152
1156
1153 now = time.time()
1157 now = time.time()
1154 held = 0
1158 held = 0
1155
1159
1156 def report(vfs, name, method):
1160 def report(vfs, name, method):
1157 # this causes stale locks to get reaped for more accurate reporting
1161 # this causes stale locks to get reaped for more accurate reporting
1158 try:
1162 try:
1159 l = method(False)
1163 l = method(False)
1160 except error.LockHeld:
1164 except error.LockHeld:
1161 l = None
1165 l = None
1162
1166
1163 if l:
1167 if l:
1164 l.release()
1168 l.release()
1165 else:
1169 else:
1166 try:
1170 try:
1167 stat = vfs.lstat(name)
1171 stat = vfs.lstat(name)
1168 age = now - stat.st_mtime
1172 age = now - stat.st_mtime
1169 user = util.username(stat.st_uid)
1173 user = util.username(stat.st_uid)
1170 locker = vfs.readlock(name)
1174 locker = vfs.readlock(name)
1171 if ":" in locker:
1175 if ":" in locker:
1172 host, pid = locker.split(':')
1176 host, pid = locker.split(':')
1173 if host == socket.gethostname():
1177 if host == socket.gethostname():
1174 locker = 'user %s, process %s' % (user, pid)
1178 locker = 'user %s, process %s' % (user, pid)
1175 else:
1179 else:
1176 locker = 'user %s, process %s, host %s' \
1180 locker = 'user %s, process %s, host %s' \
1177 % (user, pid, host)
1181 % (user, pid, host)
1178 ui.write(("%-6s %s (%ds)\n") % (name + ":", locker, age))
1182 ui.write(("%-6s %s (%ds)\n") % (name + ":", locker, age))
1179 return 1
1183 return 1
1180 except OSError as e:
1184 except OSError as e:
1181 if e.errno != errno.ENOENT:
1185 if e.errno != errno.ENOENT:
1182 raise
1186 raise
1183
1187
1184 ui.write(("%-6s free\n") % (name + ":"))
1188 ui.write(("%-6s free\n") % (name + ":"))
1185 return 0
1189 return 0
1186
1190
1187 held += report(repo.svfs, "lock", repo.lock)
1191 held += report(repo.svfs, "lock", repo.lock)
1188 held += report(repo.vfs, "wlock", repo.wlock)
1192 held += report(repo.vfs, "wlock", repo.wlock)
1189
1193
1190 return held
1194 return held
1191
1195
1192 @command('debugmergestate', [], '')
1196 @command('debugmergestate', [], '')
1193 def debugmergestate(ui, repo, *args):
1197 def debugmergestate(ui, repo, *args):
1194 """print merge state
1198 """print merge state
1195
1199
1196 Use --verbose to print out information about whether v1 or v2 merge state
1200 Use --verbose to print out information about whether v1 or v2 merge state
1197 was chosen."""
1201 was chosen."""
1198 def _hashornull(h):
1202 def _hashornull(h):
1199 if h == nullhex:
1203 if h == nullhex:
1200 return 'null'
1204 return 'null'
1201 else:
1205 else:
1202 return h
1206 return h
1203
1207
1204 def printrecords(version):
1208 def printrecords(version):
1205 ui.write(('* version %s records\n') % version)
1209 ui.write(('* version %s records\n') % version)
1206 if version == 1:
1210 if version == 1:
1207 records = v1records
1211 records = v1records
1208 else:
1212 else:
1209 records = v2records
1213 records = v2records
1210
1214
1211 for rtype, record in records:
1215 for rtype, record in records:
1212 # pretty print some record types
1216 # pretty print some record types
1213 if rtype == 'L':
1217 if rtype == 'L':
1214 ui.write(('local: %s\n') % record)
1218 ui.write(('local: %s\n') % record)
1215 elif rtype == 'O':
1219 elif rtype == 'O':
1216 ui.write(('other: %s\n') % record)
1220 ui.write(('other: %s\n') % record)
1217 elif rtype == 'm':
1221 elif rtype == 'm':
1218 driver, mdstate = record.split('\0', 1)
1222 driver, mdstate = record.split('\0', 1)
1219 ui.write(('merge driver: %s (state "%s")\n')
1223 ui.write(('merge driver: %s (state "%s")\n')
1220 % (driver, mdstate))
1224 % (driver, mdstate))
1221 elif rtype in 'FDC':
1225 elif rtype in 'FDC':
1222 r = record.split('\0')
1226 r = record.split('\0')
1223 f, state, hash, lfile, afile, anode, ofile = r[0:7]
1227 f, state, hash, lfile, afile, anode, ofile = r[0:7]
1224 if version == 1:
1228 if version == 1:
1225 onode = 'not stored in v1 format'
1229 onode = 'not stored in v1 format'
1226 flags = r[7]
1230 flags = r[7]
1227 else:
1231 else:
1228 onode, flags = r[7:9]
1232 onode, flags = r[7:9]
1229 ui.write(('file: %s (record type "%s", state "%s", hash %s)\n')
1233 ui.write(('file: %s (record type "%s", state "%s", hash %s)\n')
1230 % (f, rtype, state, _hashornull(hash)))
1234 % (f, rtype, state, _hashornull(hash)))
1231 ui.write((' local path: %s (flags "%s")\n') % (lfile, flags))
1235 ui.write((' local path: %s (flags "%s")\n') % (lfile, flags))
1232 ui.write((' ancestor path: %s (node %s)\n')
1236 ui.write((' ancestor path: %s (node %s)\n')
1233 % (afile, _hashornull(anode)))
1237 % (afile, _hashornull(anode)))
1234 ui.write((' other path: %s (node %s)\n')
1238 ui.write((' other path: %s (node %s)\n')
1235 % (ofile, _hashornull(onode)))
1239 % (ofile, _hashornull(onode)))
1236 elif rtype == 'f':
1240 elif rtype == 'f':
1237 filename, rawextras = record.split('\0', 1)
1241 filename, rawextras = record.split('\0', 1)
1238 extras = rawextras.split('\0')
1242 extras = rawextras.split('\0')
1239 i = 0
1243 i = 0
1240 extrastrings = []
1244 extrastrings = []
1241 while i < len(extras):
1245 while i < len(extras):
1242 extrastrings.append('%s = %s' % (extras[i], extras[i + 1]))
1246 extrastrings.append('%s = %s' % (extras[i], extras[i + 1]))
1243 i += 2
1247 i += 2
1244
1248
1245 ui.write(('file extras: %s (%s)\n')
1249 ui.write(('file extras: %s (%s)\n')
1246 % (filename, ', '.join(extrastrings)))
1250 % (filename, ', '.join(extrastrings)))
1247 elif rtype == 'l':
1251 elif rtype == 'l':
1248 labels = record.split('\0', 2)
1252 labels = record.split('\0', 2)
1249 labels = [l for l in labels if len(l) > 0]
1253 labels = [l for l in labels if len(l) > 0]
1250 ui.write(('labels:\n'))
1254 ui.write(('labels:\n'))
1251 ui.write((' local: %s\n' % labels[0]))
1255 ui.write((' local: %s\n' % labels[0]))
1252 ui.write((' other: %s\n' % labels[1]))
1256 ui.write((' other: %s\n' % labels[1]))
1253 if len(labels) > 2:
1257 if len(labels) > 2:
1254 ui.write((' base: %s\n' % labels[2]))
1258 ui.write((' base: %s\n' % labels[2]))
1255 else:
1259 else:
1256 ui.write(('unrecognized entry: %s\t%s\n')
1260 ui.write(('unrecognized entry: %s\t%s\n')
1257 % (rtype, record.replace('\0', '\t')))
1261 % (rtype, record.replace('\0', '\t')))
1258
1262
1259 # Avoid mergestate.read() since it may raise an exception for unsupported
1263 # Avoid mergestate.read() since it may raise an exception for unsupported
1260 # merge state records. We shouldn't be doing this, but this is OK since this
1264 # merge state records. We shouldn't be doing this, but this is OK since this
1261 # command is pretty low-level.
1265 # command is pretty low-level.
1262 ms = mergemod.mergestate(repo)
1266 ms = mergemod.mergestate(repo)
1263
1267
1264 # sort so that reasonable information is on top
1268 # sort so that reasonable information is on top
1265 v1records = ms._readrecordsv1()
1269 v1records = ms._readrecordsv1()
1266 v2records = ms._readrecordsv2()
1270 v2records = ms._readrecordsv2()
1267 order = 'LOml'
1271 order = 'LOml'
1268 def key(r):
1272 def key(r):
1269 idx = order.find(r[0])
1273 idx = order.find(r[0])
1270 if idx == -1:
1274 if idx == -1:
1271 return (1, r[1])
1275 return (1, r[1])
1272 else:
1276 else:
1273 return (0, idx)
1277 return (0, idx)
1274 v1records.sort(key=key)
1278 v1records.sort(key=key)
1275 v2records.sort(key=key)
1279 v2records.sort(key=key)
1276
1280
1277 if not v1records and not v2records:
1281 if not v1records and not v2records:
1278 ui.write(('no merge state found\n'))
1282 ui.write(('no merge state found\n'))
1279 elif not v2records:
1283 elif not v2records:
1280 ui.note(('no version 2 merge state\n'))
1284 ui.note(('no version 2 merge state\n'))
1281 printrecords(1)
1285 printrecords(1)
1282 elif ms._v1v2match(v1records, v2records):
1286 elif ms._v1v2match(v1records, v2records):
1283 ui.note(('v1 and v2 states match: using v2\n'))
1287 ui.note(('v1 and v2 states match: using v2\n'))
1284 printrecords(2)
1288 printrecords(2)
1285 else:
1289 else:
1286 ui.note(('v1 and v2 states mismatch: using v1\n'))
1290 ui.note(('v1 and v2 states mismatch: using v1\n'))
1287 printrecords(1)
1291 printrecords(1)
1288 if ui.verbose:
1292 if ui.verbose:
1289 printrecords(2)
1293 printrecords(2)
1290
1294
1291 @command('debugnamecomplete', [], _('NAME...'))
1295 @command('debugnamecomplete', [], _('NAME...'))
1292 def debugnamecomplete(ui, repo, *args):
1296 def debugnamecomplete(ui, repo, *args):
1293 '''complete "names" - tags, open branch names, bookmark names'''
1297 '''complete "names" - tags, open branch names, bookmark names'''
1294
1298
1295 names = set()
1299 names = set()
1296 # since we previously only listed open branches, we will handle that
1300 # since we previously only listed open branches, we will handle that
1297 # specially (after this for loop)
1301 # specially (after this for loop)
1298 for name, ns in repo.names.iteritems():
1302 for name, ns in repo.names.iteritems():
1299 if name != 'branches':
1303 if name != 'branches':
1300 names.update(ns.listnames(repo))
1304 names.update(ns.listnames(repo))
1301 names.update(tag for (tag, heads, tip, closed)
1305 names.update(tag for (tag, heads, tip, closed)
1302 in repo.branchmap().iterbranches() if not closed)
1306 in repo.branchmap().iterbranches() if not closed)
1303 completions = set()
1307 completions = set()
1304 if not args:
1308 if not args:
1305 args = ['']
1309 args = ['']
1306 for a in args:
1310 for a in args:
1307 completions.update(n for n in names if n.startswith(a))
1311 completions.update(n for n in names if n.startswith(a))
1308 ui.write('\n'.join(sorted(completions)))
1312 ui.write('\n'.join(sorted(completions)))
1309 ui.write('\n')
1313 ui.write('\n')
1310
1314
1311 @command('debugobsolete',
1315 @command('debugobsolete',
1312 [('', 'flags', 0, _('markers flag')),
1316 [('', 'flags', 0, _('markers flag')),
1313 ('', 'record-parents', False,
1317 ('', 'record-parents', False,
1314 _('record parent information for the precursor')),
1318 _('record parent information for the precursor')),
1315 ('r', 'rev', [], _('display markers relevant to REV')),
1319 ('r', 'rev', [], _('display markers relevant to REV')),
1316 ('', 'exclusive', False, _('restrict display to markers only '
1320 ('', 'exclusive', False, _('restrict display to markers only '
1317 'relevant to REV')),
1321 'relevant to REV')),
1318 ('', 'index', False, _('display index of the marker')),
1322 ('', 'index', False, _('display index of the marker')),
1319 ('', 'delete', [], _('delete markers specified by indices')),
1323 ('', 'delete', [], _('delete markers specified by indices')),
1320 ] + cmdutil.commitopts2 + cmdutil.formatteropts,
1324 ] + cmdutil.commitopts2 + cmdutil.formatteropts,
1321 _('[OBSOLETED [REPLACEMENT ...]]'))
1325 _('[OBSOLETED [REPLACEMENT ...]]'))
1322 def debugobsolete(ui, repo, precursor=None, *successors, **opts):
1326 def debugobsolete(ui, repo, precursor=None, *successors, **opts):
1323 """create arbitrary obsolete marker
1327 """create arbitrary obsolete marker
1324
1328
1325 With no arguments, displays the list of obsolescence markers."""
1329 With no arguments, displays the list of obsolescence markers."""
1326
1330
1327 def parsenodeid(s):
1331 def parsenodeid(s):
1328 try:
1332 try:
1329 # We do not use revsingle/revrange functions here to accept
1333 # We do not use revsingle/revrange functions here to accept
1330 # arbitrary node identifiers, possibly not present in the
1334 # arbitrary node identifiers, possibly not present in the
1331 # local repository.
1335 # local repository.
1332 n = bin(s)
1336 n = bin(s)
1333 if len(n) != len(nullid):
1337 if len(n) != len(nullid):
1334 raise TypeError()
1338 raise TypeError()
1335 return n
1339 return n
1336 except TypeError:
1340 except TypeError:
1337 raise error.Abort('changeset references must be full hexadecimal '
1341 raise error.Abort('changeset references must be full hexadecimal '
1338 'node identifiers')
1342 'node identifiers')
1339
1343
1340 if opts.get('delete'):
1344 if opts.get('delete'):
1341 indices = []
1345 indices = []
1342 for v in opts.get('delete'):
1346 for v in opts.get('delete'):
1343 try:
1347 try:
1344 indices.append(int(v))
1348 indices.append(int(v))
1345 except ValueError:
1349 except ValueError:
1346 raise error.Abort(_('invalid index value: %r') % v,
1350 raise error.Abort(_('invalid index value: %r') % v,
1347 hint=_('use integers for indices'))
1351 hint=_('use integers for indices'))
1348
1352
1349 if repo.currenttransaction():
1353 if repo.currenttransaction():
1350 raise error.Abort(_('cannot delete obsmarkers in the middle '
1354 raise error.Abort(_('cannot delete obsmarkers in the middle '
1351 'of transaction.'))
1355 'of transaction.'))
1352
1356
1353 with repo.lock():
1357 with repo.lock():
1354 n = repair.deleteobsmarkers(repo.obsstore, indices)
1358 n = repair.deleteobsmarkers(repo.obsstore, indices)
1355 ui.write(_('deleted %i obsolescence markers\n') % n)
1359 ui.write(_('deleted %i obsolescence markers\n') % n)
1356
1360
1357 return
1361 return
1358
1362
1359 if precursor is not None:
1363 if precursor is not None:
1360 if opts['rev']:
1364 if opts['rev']:
1361 raise error.Abort('cannot select revision when creating marker')
1365 raise error.Abort('cannot select revision when creating marker')
1362 metadata = {}
1366 metadata = {}
1363 metadata['user'] = opts['user'] or ui.username()
1367 metadata['user'] = opts['user'] or ui.username()
1364 succs = tuple(parsenodeid(succ) for succ in successors)
1368 succs = tuple(parsenodeid(succ) for succ in successors)
1365 l = repo.lock()
1369 l = repo.lock()
1366 try:
1370 try:
1367 tr = repo.transaction('debugobsolete')
1371 tr = repo.transaction('debugobsolete')
1368 try:
1372 try:
1369 date = opts.get('date')
1373 date = opts.get('date')
1370 if date:
1374 if date:
1371 date = util.parsedate(date)
1375 date = util.parsedate(date)
1372 else:
1376 else:
1373 date = None
1377 date = None
1374 prec = parsenodeid(precursor)
1378 prec = parsenodeid(precursor)
1375 parents = None
1379 parents = None
1376 if opts['record_parents']:
1380 if opts['record_parents']:
1377 if prec not in repo.unfiltered():
1381 if prec not in repo.unfiltered():
1378 raise error.Abort('cannot used --record-parents on '
1382 raise error.Abort('cannot used --record-parents on '
1379 'unknown changesets')
1383 'unknown changesets')
1380 parents = repo.unfiltered()[prec].parents()
1384 parents = repo.unfiltered()[prec].parents()
1381 parents = tuple(p.node() for p in parents)
1385 parents = tuple(p.node() for p in parents)
1382 repo.obsstore.create(tr, prec, succs, opts['flags'],
1386 repo.obsstore.create(tr, prec, succs, opts['flags'],
1383 parents=parents, date=date,
1387 parents=parents, date=date,
1384 metadata=metadata, ui=ui)
1388 metadata=metadata, ui=ui)
1385 tr.close()
1389 tr.close()
1386 except ValueError as exc:
1390 except ValueError as exc:
1387 raise error.Abort(_('bad obsmarker input: %s') % exc)
1391 raise error.Abort(_('bad obsmarker input: %s') % exc)
1388 finally:
1392 finally:
1389 tr.release()
1393 tr.release()
1390 finally:
1394 finally:
1391 l.release()
1395 l.release()
1392 else:
1396 else:
1393 if opts['rev']:
1397 if opts['rev']:
1394 revs = scmutil.revrange(repo, opts['rev'])
1398 revs = scmutil.revrange(repo, opts['rev'])
1395 nodes = [repo[r].node() for r in revs]
1399 nodes = [repo[r].node() for r in revs]
1396 markers = list(obsolete.getmarkers(repo, nodes=nodes,
1400 markers = list(obsolete.getmarkers(repo, nodes=nodes,
1397 exclusive=opts['exclusive']))
1401 exclusive=opts['exclusive']))
1398 markers.sort(key=lambda x: x._data)
1402 markers.sort(key=lambda x: x._data)
1399 else:
1403 else:
1400 markers = obsolete.getmarkers(repo)
1404 markers = obsolete.getmarkers(repo)
1401
1405
1402 markerstoiter = markers
1406 markerstoiter = markers
1403 isrelevant = lambda m: True
1407 isrelevant = lambda m: True
1404 if opts.get('rev') and opts.get('index'):
1408 if opts.get('rev') and opts.get('index'):
1405 markerstoiter = obsolete.getmarkers(repo)
1409 markerstoiter = obsolete.getmarkers(repo)
1406 markerset = set(markers)
1410 markerset = set(markers)
1407 isrelevant = lambda m: m in markerset
1411 isrelevant = lambda m: m in markerset
1408
1412
1409 fm = ui.formatter('debugobsolete', opts)
1413 fm = ui.formatter('debugobsolete', opts)
1410 for i, m in enumerate(markerstoiter):
1414 for i, m in enumerate(markerstoiter):
1411 if not isrelevant(m):
1415 if not isrelevant(m):
1412 # marker can be irrelevant when we're iterating over a set
1416 # marker can be irrelevant when we're iterating over a set
1413 # of markers (markerstoiter) which is bigger than the set
1417 # of markers (markerstoiter) which is bigger than the set
1414 # of markers we want to display (markers)
1418 # of markers we want to display (markers)
1415 # this can happen if both --index and --rev options are
1419 # this can happen if both --index and --rev options are
1416 # provided and thus we need to iterate over all of the markers
1420 # provided and thus we need to iterate over all of the markers
1417 # to get the correct indices, but only display the ones that
1421 # to get the correct indices, but only display the ones that
1418 # are relevant to --rev value
1422 # are relevant to --rev value
1419 continue
1423 continue
1420 fm.startitem()
1424 fm.startitem()
1421 ind = i if opts.get('index') else None
1425 ind = i if opts.get('index') else None
1422 cmdutil.showmarker(fm, m, index=ind)
1426 cmdutil.showmarker(fm, m, index=ind)
1423 fm.end()
1427 fm.end()
1424
1428
1425 @command('debugpathcomplete',
1429 @command('debugpathcomplete',
1426 [('f', 'full', None, _('complete an entire path')),
1430 [('f', 'full', None, _('complete an entire path')),
1427 ('n', 'normal', None, _('show only normal files')),
1431 ('n', 'normal', None, _('show only normal files')),
1428 ('a', 'added', None, _('show only added files')),
1432 ('a', 'added', None, _('show only added files')),
1429 ('r', 'removed', None, _('show only removed files'))],
1433 ('r', 'removed', None, _('show only removed files'))],
1430 _('FILESPEC...'))
1434 _('FILESPEC...'))
1431 def debugpathcomplete(ui, repo, *specs, **opts):
1435 def debugpathcomplete(ui, repo, *specs, **opts):
1432 '''complete part or all of a tracked path
1436 '''complete part or all of a tracked path
1433
1437
1434 This command supports shells that offer path name completion. It
1438 This command supports shells that offer path name completion. It
1435 currently completes only files already known to the dirstate.
1439 currently completes only files already known to the dirstate.
1436
1440
1437 Completion extends only to the next path segment unless
1441 Completion extends only to the next path segment unless
1438 --full is specified, in which case entire paths are used.'''
1442 --full is specified, in which case entire paths are used.'''
1439
1443
1440 def complete(path, acceptable):
1444 def complete(path, acceptable):
1441 dirstate = repo.dirstate
1445 dirstate = repo.dirstate
1442 spec = os.path.normpath(os.path.join(pycompat.getcwd(), path))
1446 spec = os.path.normpath(os.path.join(pycompat.getcwd(), path))
1443 rootdir = repo.root + pycompat.ossep
1447 rootdir = repo.root + pycompat.ossep
1444 if spec != repo.root and not spec.startswith(rootdir):
1448 if spec != repo.root and not spec.startswith(rootdir):
1445 return [], []
1449 return [], []
1446 if os.path.isdir(spec):
1450 if os.path.isdir(spec):
1447 spec += '/'
1451 spec += '/'
1448 spec = spec[len(rootdir):]
1452 spec = spec[len(rootdir):]
1449 fixpaths = pycompat.ossep != '/'
1453 fixpaths = pycompat.ossep != '/'
1450 if fixpaths:
1454 if fixpaths:
1451 spec = spec.replace(pycompat.ossep, '/')
1455 spec = spec.replace(pycompat.ossep, '/')
1452 speclen = len(spec)
1456 speclen = len(spec)
1453 fullpaths = opts['full']
1457 fullpaths = opts['full']
1454 files, dirs = set(), set()
1458 files, dirs = set(), set()
1455 adddir, addfile = dirs.add, files.add
1459 adddir, addfile = dirs.add, files.add
1456 for f, st in dirstate.iteritems():
1460 for f, st in dirstate.iteritems():
1457 if f.startswith(spec) and st[0] in acceptable:
1461 if f.startswith(spec) and st[0] in acceptable:
1458 if fixpaths:
1462 if fixpaths:
1459 f = f.replace('/', pycompat.ossep)
1463 f = f.replace('/', pycompat.ossep)
1460 if fullpaths:
1464 if fullpaths:
1461 addfile(f)
1465 addfile(f)
1462 continue
1466 continue
1463 s = f.find(pycompat.ossep, speclen)
1467 s = f.find(pycompat.ossep, speclen)
1464 if s >= 0:
1468 if s >= 0:
1465 adddir(f[:s])
1469 adddir(f[:s])
1466 else:
1470 else:
1467 addfile(f)
1471 addfile(f)
1468 return files, dirs
1472 return files, dirs
1469
1473
1470 acceptable = ''
1474 acceptable = ''
1471 if opts['normal']:
1475 if opts['normal']:
1472 acceptable += 'nm'
1476 acceptable += 'nm'
1473 if opts['added']:
1477 if opts['added']:
1474 acceptable += 'a'
1478 acceptable += 'a'
1475 if opts['removed']:
1479 if opts['removed']:
1476 acceptable += 'r'
1480 acceptable += 'r'
1477 cwd = repo.getcwd()
1481 cwd = repo.getcwd()
1478 if not specs:
1482 if not specs:
1479 specs = ['.']
1483 specs = ['.']
1480
1484
1481 files, dirs = set(), set()
1485 files, dirs = set(), set()
1482 for spec in specs:
1486 for spec in specs:
1483 f, d = complete(spec, acceptable or 'nmar')
1487 f, d = complete(spec, acceptable or 'nmar')
1484 files.update(f)
1488 files.update(f)
1485 dirs.update(d)
1489 dirs.update(d)
1486 files.update(dirs)
1490 files.update(dirs)
1487 ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files)))
1491 ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files)))
1488 ui.write('\n')
1492 ui.write('\n')
1489
1493
1490 @command('debugpickmergetool',
1494 @command('debugpickmergetool',
1491 [('r', 'rev', '', _('check for files in this revision'), _('REV')),
1495 [('r', 'rev', '', _('check for files in this revision'), _('REV')),
1492 ('', 'changedelete', None, _('emulate merging change and delete')),
1496 ('', 'changedelete', None, _('emulate merging change and delete')),
1493 ] + cmdutil.walkopts + cmdutil.mergetoolopts,
1497 ] + cmdutil.walkopts + cmdutil.mergetoolopts,
1494 _('[PATTERN]...'),
1498 _('[PATTERN]...'),
1495 inferrepo=True)
1499 inferrepo=True)
1496 def debugpickmergetool(ui, repo, *pats, **opts):
1500 def debugpickmergetool(ui, repo, *pats, **opts):
1497 """examine which merge tool is chosen for specified file
1501 """examine which merge tool is chosen for specified file
1498
1502
1499 As described in :hg:`help merge-tools`, Mercurial examines
1503 As described in :hg:`help merge-tools`, Mercurial examines
1500 configurations below in this order to decide which merge tool is
1504 configurations below in this order to decide which merge tool is
1501 chosen for specified file.
1505 chosen for specified file.
1502
1506
1503 1. ``--tool`` option
1507 1. ``--tool`` option
1504 2. ``HGMERGE`` environment variable
1508 2. ``HGMERGE`` environment variable
1505 3. configurations in ``merge-patterns`` section
1509 3. configurations in ``merge-patterns`` section
1506 4. configuration of ``ui.merge``
1510 4. configuration of ``ui.merge``
1507 5. configurations in ``merge-tools`` section
1511 5. configurations in ``merge-tools`` section
1508 6. ``hgmerge`` tool (for historical reason only)
1512 6. ``hgmerge`` tool (for historical reason only)
1509 7. default tool for fallback (``:merge`` or ``:prompt``)
1513 7. default tool for fallback (``:merge`` or ``:prompt``)
1510
1514
1511 This command writes out examination result in the style below::
1515 This command writes out examination result in the style below::
1512
1516
1513 FILE = MERGETOOL
1517 FILE = MERGETOOL
1514
1518
1515 By default, all files known in the first parent context of the
1519 By default, all files known in the first parent context of the
1516 working directory are examined. Use file patterns and/or -I/-X
1520 working directory are examined. Use file patterns and/or -I/-X
1517 options to limit target files. -r/--rev is also useful to examine
1521 options to limit target files. -r/--rev is also useful to examine
1518 files in another context without actual updating to it.
1522 files in another context without actual updating to it.
1519
1523
1520 With --debug, this command shows warning messages while matching
1524 With --debug, this command shows warning messages while matching
1521 against ``merge-patterns`` and so on, too. It is recommended to
1525 against ``merge-patterns`` and so on, too. It is recommended to
1522 use this option with explicit file patterns and/or -I/-X options,
1526 use this option with explicit file patterns and/or -I/-X options,
1523 because this option increases amount of output per file according
1527 because this option increases amount of output per file according
1524 to configurations in hgrc.
1528 to configurations in hgrc.
1525
1529
1526 With -v/--verbose, this command shows configurations below at
1530 With -v/--verbose, this command shows configurations below at
1527 first (only if specified).
1531 first (only if specified).
1528
1532
1529 - ``--tool`` option
1533 - ``--tool`` option
1530 - ``HGMERGE`` environment variable
1534 - ``HGMERGE`` environment variable
1531 - configuration of ``ui.merge``
1535 - configuration of ``ui.merge``
1532
1536
1533 If merge tool is chosen before matching against
1537 If merge tool is chosen before matching against
1534 ``merge-patterns``, this command can't show any helpful
1538 ``merge-patterns``, this command can't show any helpful
1535 information, even with --debug. In such case, information above is
1539 information, even with --debug. In such case, information above is
1536 useful to know why a merge tool is chosen.
1540 useful to know why a merge tool is chosen.
1537 """
1541 """
1538 overrides = {}
1542 overrides = {}
1539 if opts['tool']:
1543 if opts['tool']:
1540 overrides[('ui', 'forcemerge')] = opts['tool']
1544 overrides[('ui', 'forcemerge')] = opts['tool']
1541 ui.note(('with --tool %r\n') % (opts['tool']))
1545 ui.note(('with --tool %r\n') % (opts['tool']))
1542
1546
1543 with ui.configoverride(overrides, 'debugmergepatterns'):
1547 with ui.configoverride(overrides, 'debugmergepatterns'):
1544 hgmerge = encoding.environ.get("HGMERGE")
1548 hgmerge = encoding.environ.get("HGMERGE")
1545 if hgmerge is not None:
1549 if hgmerge is not None:
1546 ui.note(('with HGMERGE=%r\n') % (hgmerge))
1550 ui.note(('with HGMERGE=%r\n') % (hgmerge))
1547 uimerge = ui.config("ui", "merge")
1551 uimerge = ui.config("ui", "merge")
1548 if uimerge:
1552 if uimerge:
1549 ui.note(('with ui.merge=%r\n') % (uimerge))
1553 ui.note(('with ui.merge=%r\n') % (uimerge))
1550
1554
1551 ctx = scmutil.revsingle(repo, opts.get('rev'))
1555 ctx = scmutil.revsingle(repo, opts.get('rev'))
1552 m = scmutil.match(ctx, pats, opts)
1556 m = scmutil.match(ctx, pats, opts)
1553 changedelete = opts['changedelete']
1557 changedelete = opts['changedelete']
1554 for path in ctx.walk(m):
1558 for path in ctx.walk(m):
1555 fctx = ctx[path]
1559 fctx = ctx[path]
1556 try:
1560 try:
1557 if not ui.debugflag:
1561 if not ui.debugflag:
1558 ui.pushbuffer(error=True)
1562 ui.pushbuffer(error=True)
1559 tool, toolpath = filemerge._picktool(repo, ui, path,
1563 tool, toolpath = filemerge._picktool(repo, ui, path,
1560 fctx.isbinary(),
1564 fctx.isbinary(),
1561 'l' in fctx.flags(),
1565 'l' in fctx.flags(),
1562 changedelete)
1566 changedelete)
1563 finally:
1567 finally:
1564 if not ui.debugflag:
1568 if not ui.debugflag:
1565 ui.popbuffer()
1569 ui.popbuffer()
1566 ui.write(('%s = %s\n') % (path, tool))
1570 ui.write(('%s = %s\n') % (path, tool))
1567
1571
1568 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True)
1572 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True)
1569 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts):
1573 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts):
1570 '''access the pushkey key/value protocol
1574 '''access the pushkey key/value protocol
1571
1575
1572 With two args, list the keys in the given namespace.
1576 With two args, list the keys in the given namespace.
1573
1577
1574 With five args, set a key to new if it currently is set to old.
1578 With five args, set a key to new if it currently is set to old.
1575 Reports success or failure.
1579 Reports success or failure.
1576 '''
1580 '''
1577
1581
1578 target = hg.peer(ui, {}, repopath)
1582 target = hg.peer(ui, {}, repopath)
1579 if keyinfo:
1583 if keyinfo:
1580 key, old, new = keyinfo
1584 key, old, new = keyinfo
1581 r = target.pushkey(namespace, key, old, new)
1585 r = target.pushkey(namespace, key, old, new)
1582 ui.status(str(r) + '\n')
1586 ui.status(str(r) + '\n')
1583 return not r
1587 return not r
1584 else:
1588 else:
1585 for k, v in sorted(target.listkeys(namespace).iteritems()):
1589 for k, v in sorted(target.listkeys(namespace).iteritems()):
1586 ui.write("%s\t%s\n" % (util.escapestr(k),
1590 ui.write("%s\t%s\n" % (util.escapestr(k),
1587 util.escapestr(v)))
1591 util.escapestr(v)))
1588
1592
1589 @command('debugpvec', [], _('A B'))
1593 @command('debugpvec', [], _('A B'))
1590 def debugpvec(ui, repo, a, b=None):
1594 def debugpvec(ui, repo, a, b=None):
1591 ca = scmutil.revsingle(repo, a)
1595 ca = scmutil.revsingle(repo, a)
1592 cb = scmutil.revsingle(repo, b)
1596 cb = scmutil.revsingle(repo, b)
1593 pa = pvec.ctxpvec(ca)
1597 pa = pvec.ctxpvec(ca)
1594 pb = pvec.ctxpvec(cb)
1598 pb = pvec.ctxpvec(cb)
1595 if pa == pb:
1599 if pa == pb:
1596 rel = "="
1600 rel = "="
1597 elif pa > pb:
1601 elif pa > pb:
1598 rel = ">"
1602 rel = ">"
1599 elif pa < pb:
1603 elif pa < pb:
1600 rel = "<"
1604 rel = "<"
1601 elif pa | pb:
1605 elif pa | pb:
1602 rel = "|"
1606 rel = "|"
1603 ui.write(_("a: %s\n") % pa)
1607 ui.write(_("a: %s\n") % pa)
1604 ui.write(_("b: %s\n") % pb)
1608 ui.write(_("b: %s\n") % pb)
1605 ui.write(_("depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth))
1609 ui.write(_("depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth))
1606 ui.write(_("delta: %d hdist: %d distance: %d relation: %s\n") %
1610 ui.write(_("delta: %d hdist: %d distance: %d relation: %s\n") %
1607 (abs(pa._depth - pb._depth), pvec._hamming(pa._vec, pb._vec),
1611 (abs(pa._depth - pb._depth), pvec._hamming(pa._vec, pb._vec),
1608 pa.distance(pb), rel))
1612 pa.distance(pb), rel))
1609
1613
1610 @command('debugrebuilddirstate|debugrebuildstate',
1614 @command('debugrebuilddirstate|debugrebuildstate',
1611 [('r', 'rev', '', _('revision to rebuild to'), _('REV')),
1615 [('r', 'rev', '', _('revision to rebuild to'), _('REV')),
1612 ('', 'minimal', None, _('only rebuild files that are inconsistent with '
1616 ('', 'minimal', None, _('only rebuild files that are inconsistent with '
1613 'the working copy parent')),
1617 'the working copy parent')),
1614 ],
1618 ],
1615 _('[-r REV]'))
1619 _('[-r REV]'))
1616 def debugrebuilddirstate(ui, repo, rev, **opts):
1620 def debugrebuilddirstate(ui, repo, rev, **opts):
1617 """rebuild the dirstate as it would look like for the given revision
1621 """rebuild the dirstate as it would look like for the given revision
1618
1622
1619 If no revision is specified the first current parent will be used.
1623 If no revision is specified the first current parent will be used.
1620
1624
1621 The dirstate will be set to the files of the given revision.
1625 The dirstate will be set to the files of the given revision.
1622 The actual working directory content or existing dirstate
1626 The actual working directory content or existing dirstate
1623 information such as adds or removes is not considered.
1627 information such as adds or removes is not considered.
1624
1628
1625 ``minimal`` will only rebuild the dirstate status for files that claim to be
1629 ``minimal`` will only rebuild the dirstate status for files that claim to be
1626 tracked but are not in the parent manifest, or that exist in the parent
1630 tracked but are not in the parent manifest, or that exist in the parent
1627 manifest but are not in the dirstate. It will not change adds, removes, or
1631 manifest but are not in the dirstate. It will not change adds, removes, or
1628 modified files that are in the working copy parent.
1632 modified files that are in the working copy parent.
1629
1633
1630 One use of this command is to make the next :hg:`status` invocation
1634 One use of this command is to make the next :hg:`status` invocation
1631 check the actual file content.
1635 check the actual file content.
1632 """
1636 """
1633 ctx = scmutil.revsingle(repo, rev)
1637 ctx = scmutil.revsingle(repo, rev)
1634 with repo.wlock():
1638 with repo.wlock():
1635 dirstate = repo.dirstate
1639 dirstate = repo.dirstate
1636 changedfiles = None
1640 changedfiles = None
1637 # See command doc for what minimal does.
1641 # See command doc for what minimal does.
1638 if opts.get('minimal'):
1642 if opts.get('minimal'):
1639 manifestfiles = set(ctx.manifest().keys())
1643 manifestfiles = set(ctx.manifest().keys())
1640 dirstatefiles = set(dirstate)
1644 dirstatefiles = set(dirstate)
1641 manifestonly = manifestfiles - dirstatefiles
1645 manifestonly = manifestfiles - dirstatefiles
1642 dsonly = dirstatefiles - manifestfiles
1646 dsonly = dirstatefiles - manifestfiles
1643 dsnotadded = set(f for f in dsonly if dirstate[f] != 'a')
1647 dsnotadded = set(f for f in dsonly if dirstate[f] != 'a')
1644 changedfiles = manifestonly | dsnotadded
1648 changedfiles = manifestonly | dsnotadded
1645
1649
1646 dirstate.rebuild(ctx.node(), ctx.manifest(), changedfiles)
1650 dirstate.rebuild(ctx.node(), ctx.manifest(), changedfiles)
1647
1651
1648 @command('debugrebuildfncache', [], '')
1652 @command('debugrebuildfncache', [], '')
1649 def debugrebuildfncache(ui, repo):
1653 def debugrebuildfncache(ui, repo):
1650 """rebuild the fncache file"""
1654 """rebuild the fncache file"""
1651 repair.rebuildfncache(ui, repo)
1655 repair.rebuildfncache(ui, repo)
1652
1656
1653 @command('debugrename',
1657 @command('debugrename',
1654 [('r', 'rev', '', _('revision to debug'), _('REV'))],
1658 [('r', 'rev', '', _('revision to debug'), _('REV'))],
1655 _('[-r REV] FILE'))
1659 _('[-r REV] FILE'))
1656 def debugrename(ui, repo, file1, *pats, **opts):
1660 def debugrename(ui, repo, file1, *pats, **opts):
1657 """dump rename information"""
1661 """dump rename information"""
1658
1662
1659 ctx = scmutil.revsingle(repo, opts.get('rev'))
1663 ctx = scmutil.revsingle(repo, opts.get('rev'))
1660 m = scmutil.match(ctx, (file1,) + pats, opts)
1664 m = scmutil.match(ctx, (file1,) + pats, opts)
1661 for abs in ctx.walk(m):
1665 for abs in ctx.walk(m):
1662 fctx = ctx[abs]
1666 fctx = ctx[abs]
1663 o = fctx.filelog().renamed(fctx.filenode())
1667 o = fctx.filelog().renamed(fctx.filenode())
1664 rel = m.rel(abs)
1668 rel = m.rel(abs)
1665 if o:
1669 if o:
1666 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1])))
1670 ui.write(_("%s renamed from %s:%s\n") % (rel, o[0], hex(o[1])))
1667 else:
1671 else:
1668 ui.write(_("%s not renamed\n") % rel)
1672 ui.write(_("%s not renamed\n") % rel)
1669
1673
1670 @command('debugrevlog', cmdutil.debugrevlogopts +
1674 @command('debugrevlog', cmdutil.debugrevlogopts +
1671 [('d', 'dump', False, _('dump index data'))],
1675 [('d', 'dump', False, _('dump index data'))],
1672 _('-c|-m|FILE'),
1676 _('-c|-m|FILE'),
1673 optionalrepo=True)
1677 optionalrepo=True)
1674 def debugrevlog(ui, repo, file_=None, **opts):
1678 def debugrevlog(ui, repo, file_=None, **opts):
1675 """show data and statistics about a revlog"""
1679 """show data and statistics about a revlog"""
1676 r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts)
1680 r = cmdutil.openrevlog(repo, 'debugrevlog', file_, opts)
1677
1681
1678 if opts.get("dump"):
1682 if opts.get("dump"):
1679 numrevs = len(r)
1683 numrevs = len(r)
1680 ui.write(("# rev p1rev p2rev start end deltastart base p1 p2"
1684 ui.write(("# rev p1rev p2rev start end deltastart base p1 p2"
1681 " rawsize totalsize compression heads chainlen\n"))
1685 " rawsize totalsize compression heads chainlen\n"))
1682 ts = 0
1686 ts = 0
1683 heads = set()
1687 heads = set()
1684
1688
1685 for rev in xrange(numrevs):
1689 for rev in xrange(numrevs):
1686 dbase = r.deltaparent(rev)
1690 dbase = r.deltaparent(rev)
1687 if dbase == -1:
1691 if dbase == -1:
1688 dbase = rev
1692 dbase = rev
1689 cbase = r.chainbase(rev)
1693 cbase = r.chainbase(rev)
1690 clen = r.chainlen(rev)
1694 clen = r.chainlen(rev)
1691 p1, p2 = r.parentrevs(rev)
1695 p1, p2 = r.parentrevs(rev)
1692 rs = r.rawsize(rev)
1696 rs = r.rawsize(rev)
1693 ts = ts + rs
1697 ts = ts + rs
1694 heads -= set(r.parentrevs(rev))
1698 heads -= set(r.parentrevs(rev))
1695 heads.add(rev)
1699 heads.add(rev)
1696 try:
1700 try:
1697 compression = ts / r.end(rev)
1701 compression = ts / r.end(rev)
1698 except ZeroDivisionError:
1702 except ZeroDivisionError:
1699 compression = 0
1703 compression = 0
1700 ui.write("%5d %5d %5d %5d %5d %10d %4d %4d %4d %7d %9d "
1704 ui.write("%5d %5d %5d %5d %5d %10d %4d %4d %4d %7d %9d "
1701 "%11d %5d %8d\n" %
1705 "%11d %5d %8d\n" %
1702 (rev, p1, p2, r.start(rev), r.end(rev),
1706 (rev, p1, p2, r.start(rev), r.end(rev),
1703 r.start(dbase), r.start(cbase),
1707 r.start(dbase), r.start(cbase),
1704 r.start(p1), r.start(p2),
1708 r.start(p1), r.start(p2),
1705 rs, ts, compression, len(heads), clen))
1709 rs, ts, compression, len(heads), clen))
1706 return 0
1710 return 0
1707
1711
1708 v = r.version
1712 v = r.version
1709 format = v & 0xFFFF
1713 format = v & 0xFFFF
1710 flags = []
1714 flags = []
1711 gdelta = False
1715 gdelta = False
1712 if v & revlog.FLAG_INLINE_DATA:
1716 if v & revlog.FLAG_INLINE_DATA:
1713 flags.append('inline')
1717 flags.append('inline')
1714 if v & revlog.FLAG_GENERALDELTA:
1718 if v & revlog.FLAG_GENERALDELTA:
1715 gdelta = True
1719 gdelta = True
1716 flags.append('generaldelta')
1720 flags.append('generaldelta')
1717 if not flags:
1721 if not flags:
1718 flags = ['(none)']
1722 flags = ['(none)']
1719
1723
1720 nummerges = 0
1724 nummerges = 0
1721 numfull = 0
1725 numfull = 0
1722 numprev = 0
1726 numprev = 0
1723 nump1 = 0
1727 nump1 = 0
1724 nump2 = 0
1728 nump2 = 0
1725 numother = 0
1729 numother = 0
1726 nump1prev = 0
1730 nump1prev = 0
1727 nump2prev = 0
1731 nump2prev = 0
1728 chainlengths = []
1732 chainlengths = []
1729
1733
1730 datasize = [None, 0, 0]
1734 datasize = [None, 0, 0]
1731 fullsize = [None, 0, 0]
1735 fullsize = [None, 0, 0]
1732 deltasize = [None, 0, 0]
1736 deltasize = [None, 0, 0]
1733 chunktypecounts = {}
1737 chunktypecounts = {}
1734 chunktypesizes = {}
1738 chunktypesizes = {}
1735
1739
1736 def addsize(size, l):
1740 def addsize(size, l):
1737 if l[0] is None or size < l[0]:
1741 if l[0] is None or size < l[0]:
1738 l[0] = size
1742 l[0] = size
1739 if size > l[1]:
1743 if size > l[1]:
1740 l[1] = size
1744 l[1] = size
1741 l[2] += size
1745 l[2] += size
1742
1746
1743 numrevs = len(r)
1747 numrevs = len(r)
1744 for rev in xrange(numrevs):
1748 for rev in xrange(numrevs):
1745 p1, p2 = r.parentrevs(rev)
1749 p1, p2 = r.parentrevs(rev)
1746 delta = r.deltaparent(rev)
1750 delta = r.deltaparent(rev)
1747 if format > 0:
1751 if format > 0:
1748 addsize(r.rawsize(rev), datasize)
1752 addsize(r.rawsize(rev), datasize)
1749 if p2 != nullrev:
1753 if p2 != nullrev:
1750 nummerges += 1
1754 nummerges += 1
1751 size = r.length(rev)
1755 size = r.length(rev)
1752 if delta == nullrev:
1756 if delta == nullrev:
1753 chainlengths.append(0)
1757 chainlengths.append(0)
1754 numfull += 1
1758 numfull += 1
1755 addsize(size, fullsize)
1759 addsize(size, fullsize)
1756 else:
1760 else:
1757 chainlengths.append(chainlengths[delta] + 1)
1761 chainlengths.append(chainlengths[delta] + 1)
1758 addsize(size, deltasize)
1762 addsize(size, deltasize)
1759 if delta == rev - 1:
1763 if delta == rev - 1:
1760 numprev += 1
1764 numprev += 1
1761 if delta == p1:
1765 if delta == p1:
1762 nump1prev += 1
1766 nump1prev += 1
1763 elif delta == p2:
1767 elif delta == p2:
1764 nump2prev += 1
1768 nump2prev += 1
1765 elif delta == p1:
1769 elif delta == p1:
1766 nump1 += 1
1770 nump1 += 1
1767 elif delta == p2:
1771 elif delta == p2:
1768 nump2 += 1
1772 nump2 += 1
1769 elif delta != nullrev:
1773 elif delta != nullrev:
1770 numother += 1
1774 numother += 1
1771
1775
1772 # Obtain data on the raw chunks in the revlog.
1776 # Obtain data on the raw chunks in the revlog.
1773 segment = r._getsegmentforrevs(rev, rev)[1]
1777 segment = r._getsegmentforrevs(rev, rev)[1]
1774 if segment:
1778 if segment:
1775 chunktype = segment[0]
1779 chunktype = segment[0]
1776 else:
1780 else:
1777 chunktype = 'empty'
1781 chunktype = 'empty'
1778
1782
1779 if chunktype not in chunktypecounts:
1783 if chunktype not in chunktypecounts:
1780 chunktypecounts[chunktype] = 0
1784 chunktypecounts[chunktype] = 0
1781 chunktypesizes[chunktype] = 0
1785 chunktypesizes[chunktype] = 0
1782
1786
1783 chunktypecounts[chunktype] += 1
1787 chunktypecounts[chunktype] += 1
1784 chunktypesizes[chunktype] += size
1788 chunktypesizes[chunktype] += size
1785
1789
1786 # Adjust size min value for empty cases
1790 # Adjust size min value for empty cases
1787 for size in (datasize, fullsize, deltasize):
1791 for size in (datasize, fullsize, deltasize):
1788 if size[0] is None:
1792 if size[0] is None:
1789 size[0] = 0
1793 size[0] = 0
1790
1794
1791 numdeltas = numrevs - numfull
1795 numdeltas = numrevs - numfull
1792 numoprev = numprev - nump1prev - nump2prev
1796 numoprev = numprev - nump1prev - nump2prev
1793 totalrawsize = datasize[2]
1797 totalrawsize = datasize[2]
1794 datasize[2] /= numrevs
1798 datasize[2] /= numrevs
1795 fulltotal = fullsize[2]
1799 fulltotal = fullsize[2]
1796 fullsize[2] /= numfull
1800 fullsize[2] /= numfull
1797 deltatotal = deltasize[2]
1801 deltatotal = deltasize[2]
1798 if numrevs - numfull > 0:
1802 if numrevs - numfull > 0:
1799 deltasize[2] /= numrevs - numfull
1803 deltasize[2] /= numrevs - numfull
1800 totalsize = fulltotal + deltatotal
1804 totalsize = fulltotal + deltatotal
1801 avgchainlen = sum(chainlengths) / numrevs
1805 avgchainlen = sum(chainlengths) / numrevs
1802 maxchainlen = max(chainlengths)
1806 maxchainlen = max(chainlengths)
1803 compratio = 1
1807 compratio = 1
1804 if totalsize:
1808 if totalsize:
1805 compratio = totalrawsize / totalsize
1809 compratio = totalrawsize / totalsize
1806
1810
1807 basedfmtstr = '%%%dd\n'
1811 basedfmtstr = '%%%dd\n'
1808 basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
1812 basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
1809
1813
1810 def dfmtstr(max):
1814 def dfmtstr(max):
1811 return basedfmtstr % len(str(max))
1815 return basedfmtstr % len(str(max))
1812 def pcfmtstr(max, padding=0):
1816 def pcfmtstr(max, padding=0):
1813 return basepcfmtstr % (len(str(max)), ' ' * padding)
1817 return basepcfmtstr % (len(str(max)), ' ' * padding)
1814
1818
1815 def pcfmt(value, total):
1819 def pcfmt(value, total):
1816 if total:
1820 if total:
1817 return (value, 100 * float(value) / total)
1821 return (value, 100 * float(value) / total)
1818 else:
1822 else:
1819 return value, 100.0
1823 return value, 100.0
1820
1824
1821 ui.write(('format : %d\n') % format)
1825 ui.write(('format : %d\n') % format)
1822 ui.write(('flags : %s\n') % ', '.join(flags))
1826 ui.write(('flags : %s\n') % ', '.join(flags))
1823
1827
1824 ui.write('\n')
1828 ui.write('\n')
1825 fmt = pcfmtstr(totalsize)
1829 fmt = pcfmtstr(totalsize)
1826 fmt2 = dfmtstr(totalsize)
1830 fmt2 = dfmtstr(totalsize)
1827 ui.write(('revisions : ') + fmt2 % numrevs)
1831 ui.write(('revisions : ') + fmt2 % numrevs)
1828 ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs))
1832 ui.write((' merges : ') + fmt % pcfmt(nummerges, numrevs))
1829 ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
1833 ui.write((' normal : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
1830 ui.write(('revisions : ') + fmt2 % numrevs)
1834 ui.write(('revisions : ') + fmt2 % numrevs)
1831 ui.write((' full : ') + fmt % pcfmt(numfull, numrevs))
1835 ui.write((' full : ') + fmt % pcfmt(numfull, numrevs))
1832 ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs))
1836 ui.write((' deltas : ') + fmt % pcfmt(numdeltas, numrevs))
1833 ui.write(('revision size : ') + fmt2 % totalsize)
1837 ui.write(('revision size : ') + fmt2 % totalsize)
1834 ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize))
1838 ui.write((' full : ') + fmt % pcfmt(fulltotal, totalsize))
1835 ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize))
1839 ui.write((' deltas : ') + fmt % pcfmt(deltatotal, totalsize))
1836
1840
1837 def fmtchunktype(chunktype):
1841 def fmtchunktype(chunktype):
1838 if chunktype == 'empty':
1842 if chunktype == 'empty':
1839 return ' %s : ' % chunktype
1843 return ' %s : ' % chunktype
1840 elif chunktype in string.ascii_letters:
1844 elif chunktype in string.ascii_letters:
1841 return ' 0x%s (%s) : ' % (hex(chunktype), chunktype)
1845 return ' 0x%s (%s) : ' % (hex(chunktype), chunktype)
1842 else:
1846 else:
1843 return ' 0x%s : ' % hex(chunktype)
1847 return ' 0x%s : ' % hex(chunktype)
1844
1848
1845 ui.write('\n')
1849 ui.write('\n')
1846 ui.write(('chunks : ') + fmt2 % numrevs)
1850 ui.write(('chunks : ') + fmt2 % numrevs)
1847 for chunktype in sorted(chunktypecounts):
1851 for chunktype in sorted(chunktypecounts):
1848 ui.write(fmtchunktype(chunktype))
1852 ui.write(fmtchunktype(chunktype))
1849 ui.write(fmt % pcfmt(chunktypecounts[chunktype], numrevs))
1853 ui.write(fmt % pcfmt(chunktypecounts[chunktype], numrevs))
1850 ui.write(('chunks size : ') + fmt2 % totalsize)
1854 ui.write(('chunks size : ') + fmt2 % totalsize)
1851 for chunktype in sorted(chunktypecounts):
1855 for chunktype in sorted(chunktypecounts):
1852 ui.write(fmtchunktype(chunktype))
1856 ui.write(fmtchunktype(chunktype))
1853 ui.write(fmt % pcfmt(chunktypesizes[chunktype], totalsize))
1857 ui.write(fmt % pcfmt(chunktypesizes[chunktype], totalsize))
1854
1858
1855 ui.write('\n')
1859 ui.write('\n')
1856 fmt = dfmtstr(max(avgchainlen, compratio))
1860 fmt = dfmtstr(max(avgchainlen, compratio))
1857 ui.write(('avg chain length : ') + fmt % avgchainlen)
1861 ui.write(('avg chain length : ') + fmt % avgchainlen)
1858 ui.write(('max chain length : ') + fmt % maxchainlen)
1862 ui.write(('max chain length : ') + fmt % maxchainlen)
1859 ui.write(('compression ratio : ') + fmt % compratio)
1863 ui.write(('compression ratio : ') + fmt % compratio)
1860
1864
1861 if format > 0:
1865 if format > 0:
1862 ui.write('\n')
1866 ui.write('\n')
1863 ui.write(('uncompressed data size (min/max/avg) : %d / %d / %d\n')
1867 ui.write(('uncompressed data size (min/max/avg) : %d / %d / %d\n')
1864 % tuple(datasize))
1868 % tuple(datasize))
1865 ui.write(('full revision size (min/max/avg) : %d / %d / %d\n')
1869 ui.write(('full revision size (min/max/avg) : %d / %d / %d\n')
1866 % tuple(fullsize))
1870 % tuple(fullsize))
1867 ui.write(('delta size (min/max/avg) : %d / %d / %d\n')
1871 ui.write(('delta size (min/max/avg) : %d / %d / %d\n')
1868 % tuple(deltasize))
1872 % tuple(deltasize))
1869
1873
1870 if numdeltas > 0:
1874 if numdeltas > 0:
1871 ui.write('\n')
1875 ui.write('\n')
1872 fmt = pcfmtstr(numdeltas)
1876 fmt = pcfmtstr(numdeltas)
1873 fmt2 = pcfmtstr(numdeltas, 4)
1877 fmt2 = pcfmtstr(numdeltas, 4)
1874 ui.write(('deltas against prev : ') + fmt % pcfmt(numprev, numdeltas))
1878 ui.write(('deltas against prev : ') + fmt % pcfmt(numprev, numdeltas))
1875 if numprev > 0:
1879 if numprev > 0:
1876 ui.write((' where prev = p1 : ') + fmt2 % pcfmt(nump1prev,
1880 ui.write((' where prev = p1 : ') + fmt2 % pcfmt(nump1prev,
1877 numprev))
1881 numprev))
1878 ui.write((' where prev = p2 : ') + fmt2 % pcfmt(nump2prev,
1882 ui.write((' where prev = p2 : ') + fmt2 % pcfmt(nump2prev,
1879 numprev))
1883 numprev))
1880 ui.write((' other : ') + fmt2 % pcfmt(numoprev,
1884 ui.write((' other : ') + fmt2 % pcfmt(numoprev,
1881 numprev))
1885 numprev))
1882 if gdelta:
1886 if gdelta:
1883 ui.write(('deltas against p1 : ')
1887 ui.write(('deltas against p1 : ')
1884 + fmt % pcfmt(nump1, numdeltas))
1888 + fmt % pcfmt(nump1, numdeltas))
1885 ui.write(('deltas against p2 : ')
1889 ui.write(('deltas against p2 : ')
1886 + fmt % pcfmt(nump2, numdeltas))
1890 + fmt % pcfmt(nump2, numdeltas))
1887 ui.write(('deltas against other : ') + fmt % pcfmt(numother,
1891 ui.write(('deltas against other : ') + fmt % pcfmt(numother,
1888 numdeltas))
1892 numdeltas))
1889
1893
1890 @command('debugrevspec',
1894 @command('debugrevspec',
1891 [('', 'optimize', None,
1895 [('', 'optimize', None,
1892 _('print parsed tree after optimizing (DEPRECATED)')),
1896 _('print parsed tree after optimizing (DEPRECATED)')),
1893 ('p', 'show-stage', [],
1897 ('p', 'show-stage', [],
1894 _('print parsed tree at the given stage'), _('NAME')),
1898 _('print parsed tree at the given stage'), _('NAME')),
1895 ('', 'no-optimized', False, _('evaluate tree without optimization')),
1899 ('', 'no-optimized', False, _('evaluate tree without optimization')),
1896 ('', 'verify-optimized', False, _('verify optimized result')),
1900 ('', 'verify-optimized', False, _('verify optimized result')),
1897 ],
1901 ],
1898 ('REVSPEC'))
1902 ('REVSPEC'))
1899 def debugrevspec(ui, repo, expr, **opts):
1903 def debugrevspec(ui, repo, expr, **opts):
1900 """parse and apply a revision specification
1904 """parse and apply a revision specification
1901
1905
1902 Use -p/--show-stage option to print the parsed tree at the given stages.
1906 Use -p/--show-stage option to print the parsed tree at the given stages.
1903 Use -p all to print tree at every stage.
1907 Use -p all to print tree at every stage.
1904
1908
1905 Use --verify-optimized to compare the optimized result with the unoptimized
1909 Use --verify-optimized to compare the optimized result with the unoptimized
1906 one. Returns 1 if the optimized result differs.
1910 one. Returns 1 if the optimized result differs.
1907 """
1911 """
1908 stages = [
1912 stages = [
1909 ('parsed', lambda tree: tree),
1913 ('parsed', lambda tree: tree),
1910 ('expanded', lambda tree: revsetlang.expandaliases(ui, tree)),
1914 ('expanded', lambda tree: revsetlang.expandaliases(ui, tree)),
1911 ('concatenated', revsetlang.foldconcat),
1915 ('concatenated', revsetlang.foldconcat),
1912 ('analyzed', revsetlang.analyze),
1916 ('analyzed', revsetlang.analyze),
1913 ('optimized', revsetlang.optimize),
1917 ('optimized', revsetlang.optimize),
1914 ]
1918 ]
1915 if opts['no_optimized']:
1919 if opts['no_optimized']:
1916 stages = stages[:-1]
1920 stages = stages[:-1]
1917 if opts['verify_optimized'] and opts['no_optimized']:
1921 if opts['verify_optimized'] and opts['no_optimized']:
1918 raise error.Abort(_('cannot use --verify-optimized with '
1922 raise error.Abort(_('cannot use --verify-optimized with '
1919 '--no-optimized'))
1923 '--no-optimized'))
1920 stagenames = set(n for n, f in stages)
1924 stagenames = set(n for n, f in stages)
1921
1925
1922 showalways = set()
1926 showalways = set()
1923 showchanged = set()
1927 showchanged = set()
1924 if ui.verbose and not opts['show_stage']:
1928 if ui.verbose and not opts['show_stage']:
1925 # show parsed tree by --verbose (deprecated)
1929 # show parsed tree by --verbose (deprecated)
1926 showalways.add('parsed')
1930 showalways.add('parsed')
1927 showchanged.update(['expanded', 'concatenated'])
1931 showchanged.update(['expanded', 'concatenated'])
1928 if opts['optimize']:
1932 if opts['optimize']:
1929 showalways.add('optimized')
1933 showalways.add('optimized')
1930 if opts['show_stage'] and opts['optimize']:
1934 if opts['show_stage'] and opts['optimize']:
1931 raise error.Abort(_('cannot use --optimize with --show-stage'))
1935 raise error.Abort(_('cannot use --optimize with --show-stage'))
1932 if opts['show_stage'] == ['all']:
1936 if opts['show_stage'] == ['all']:
1933 showalways.update(stagenames)
1937 showalways.update(stagenames)
1934 else:
1938 else:
1935 for n in opts['show_stage']:
1939 for n in opts['show_stage']:
1936 if n not in stagenames:
1940 if n not in stagenames:
1937 raise error.Abort(_('invalid stage name: %s') % n)
1941 raise error.Abort(_('invalid stage name: %s') % n)
1938 showalways.update(opts['show_stage'])
1942 showalways.update(opts['show_stage'])
1939
1943
1940 treebystage = {}
1944 treebystage = {}
1941 printedtree = None
1945 printedtree = None
1942 tree = revsetlang.parse(expr, lookup=repo.__contains__)
1946 tree = revsetlang.parse(expr, lookup=repo.__contains__)
1943 for n, f in stages:
1947 for n, f in stages:
1944 treebystage[n] = tree = f(tree)
1948 treebystage[n] = tree = f(tree)
1945 if n in showalways or (n in showchanged and tree != printedtree):
1949 if n in showalways or (n in showchanged and tree != printedtree):
1946 if opts['show_stage'] or n != 'parsed':
1950 if opts['show_stage'] or n != 'parsed':
1947 ui.write(("* %s:\n") % n)
1951 ui.write(("* %s:\n") % n)
1948 ui.write(revsetlang.prettyformat(tree), "\n")
1952 ui.write(revsetlang.prettyformat(tree), "\n")
1949 printedtree = tree
1953 printedtree = tree
1950
1954
1951 if opts['verify_optimized']:
1955 if opts['verify_optimized']:
1952 arevs = revset.makematcher(treebystage['analyzed'])(repo)
1956 arevs = revset.makematcher(treebystage['analyzed'])(repo)
1953 brevs = revset.makematcher(treebystage['optimized'])(repo)
1957 brevs = revset.makematcher(treebystage['optimized'])(repo)
1954 if ui.verbose:
1958 if ui.verbose:
1955 ui.note(("* analyzed set:\n"), smartset.prettyformat(arevs), "\n")
1959 ui.note(("* analyzed set:\n"), smartset.prettyformat(arevs), "\n")
1956 ui.note(("* optimized set:\n"), smartset.prettyformat(brevs), "\n")
1960 ui.note(("* optimized set:\n"), smartset.prettyformat(brevs), "\n")
1957 arevs = list(arevs)
1961 arevs = list(arevs)
1958 brevs = list(brevs)
1962 brevs = list(brevs)
1959 if arevs == brevs:
1963 if arevs == brevs:
1960 return 0
1964 return 0
1961 ui.write(('--- analyzed\n'), label='diff.file_a')
1965 ui.write(('--- analyzed\n'), label='diff.file_a')
1962 ui.write(('+++ optimized\n'), label='diff.file_b')
1966 ui.write(('+++ optimized\n'), label='diff.file_b')
1963 sm = difflib.SequenceMatcher(None, arevs, brevs)
1967 sm = difflib.SequenceMatcher(None, arevs, brevs)
1964 for tag, alo, ahi, blo, bhi in sm.get_opcodes():
1968 for tag, alo, ahi, blo, bhi in sm.get_opcodes():
1965 if tag in ('delete', 'replace'):
1969 if tag in ('delete', 'replace'):
1966 for c in arevs[alo:ahi]:
1970 for c in arevs[alo:ahi]:
1967 ui.write('-%s\n' % c, label='diff.deleted')
1971 ui.write('-%s\n' % c, label='diff.deleted')
1968 if tag in ('insert', 'replace'):
1972 if tag in ('insert', 'replace'):
1969 for c in brevs[blo:bhi]:
1973 for c in brevs[blo:bhi]:
1970 ui.write('+%s\n' % c, label='diff.inserted')
1974 ui.write('+%s\n' % c, label='diff.inserted')
1971 if tag == 'equal':
1975 if tag == 'equal':
1972 for c in arevs[alo:ahi]:
1976 for c in arevs[alo:ahi]:
1973 ui.write(' %s\n' % c)
1977 ui.write(' %s\n' % c)
1974 return 1
1978 return 1
1975
1979
1976 func = revset.makematcher(tree)
1980 func = revset.makematcher(tree)
1977 revs = func(repo)
1981 revs = func(repo)
1978 if ui.verbose:
1982 if ui.verbose:
1979 ui.note(("* set:\n"), smartset.prettyformat(revs), "\n")
1983 ui.note(("* set:\n"), smartset.prettyformat(revs), "\n")
1980 for c in revs:
1984 for c in revs:
1981 ui.write("%s\n" % c)
1985 ui.write("%s\n" % c)
1982
1986
1983 @command('debugsetparents', [], _('REV1 [REV2]'))
1987 @command('debugsetparents', [], _('REV1 [REV2]'))
1984 def debugsetparents(ui, repo, rev1, rev2=None):
1988 def debugsetparents(ui, repo, rev1, rev2=None):
1985 """manually set the parents of the current working directory
1989 """manually set the parents of the current working directory
1986
1990
1987 This is useful for writing repository conversion tools, but should
1991 This is useful for writing repository conversion tools, but should
1988 be used with care. For example, neither the working directory nor the
1992 be used with care. For example, neither the working directory nor the
1989 dirstate is updated, so file status may be incorrect after running this
1993 dirstate is updated, so file status may be incorrect after running this
1990 command.
1994 command.
1991
1995
1992 Returns 0 on success.
1996 Returns 0 on success.
1993 """
1997 """
1994
1998
1995 r1 = scmutil.revsingle(repo, rev1).node()
1999 r1 = scmutil.revsingle(repo, rev1).node()
1996 r2 = scmutil.revsingle(repo, rev2, 'null').node()
2000 r2 = scmutil.revsingle(repo, rev2, 'null').node()
1997
2001
1998 with repo.wlock():
2002 with repo.wlock():
1999 repo.setparents(r1, r2)
2003 repo.setparents(r1, r2)
2000
2004
2001 @command('debugsub',
2005 @command('debugsub',
2002 [('r', 'rev', '',
2006 [('r', 'rev', '',
2003 _('revision to check'), _('REV'))],
2007 _('revision to check'), _('REV'))],
2004 _('[-r REV] [REV]'))
2008 _('[-r REV] [REV]'))
2005 def debugsub(ui, repo, rev=None):
2009 def debugsub(ui, repo, rev=None):
2006 ctx = scmutil.revsingle(repo, rev, None)
2010 ctx = scmutil.revsingle(repo, rev, None)
2007 for k, v in sorted(ctx.substate.items()):
2011 for k, v in sorted(ctx.substate.items()):
2008 ui.write(('path %s\n') % k)
2012 ui.write(('path %s\n') % k)
2009 ui.write((' source %s\n') % v[0])
2013 ui.write((' source %s\n') % v[0])
2010 ui.write((' revision %s\n') % v[1])
2014 ui.write((' revision %s\n') % v[1])
2011
2015
2012 @command('debugsuccessorssets',
2016 @command('debugsuccessorssets',
2013 [],
2017 [],
2014 _('[REV]'))
2018 _('[REV]'))
2015 def debugsuccessorssets(ui, repo, *revs):
2019 def debugsuccessorssets(ui, repo, *revs):
2016 """show set of successors for revision
2020 """show set of successors for revision
2017
2021
2018 A successors set of changeset A is a consistent group of revisions that
2022 A successors set of changeset A is a consistent group of revisions that
2019 succeed A. It contains non-obsolete changesets only.
2023 succeed A. It contains non-obsolete changesets only.
2020
2024
2021 In most cases a changeset A has a single successors set containing a single
2025 In most cases a changeset A has a single successors set containing a single
2022 successor (changeset A replaced by A').
2026 successor (changeset A replaced by A').
2023
2027
2024 A changeset that is made obsolete with no successors are called "pruned".
2028 A changeset that is made obsolete with no successors are called "pruned".
2025 Such changesets have no successors sets at all.
2029 Such changesets have no successors sets at all.
2026
2030
2027 A changeset that has been "split" will have a successors set containing
2031 A changeset that has been "split" will have a successors set containing
2028 more than one successor.
2032 more than one successor.
2029
2033
2030 A changeset that has been rewritten in multiple different ways is called
2034 A changeset that has been rewritten in multiple different ways is called
2031 "divergent". Such changesets have multiple successor sets (each of which
2035 "divergent". Such changesets have multiple successor sets (each of which
2032 may also be split, i.e. have multiple successors).
2036 may also be split, i.e. have multiple successors).
2033
2037
2034 Results are displayed as follows::
2038 Results are displayed as follows::
2035
2039
2036 <rev1>
2040 <rev1>
2037 <successors-1A>
2041 <successors-1A>
2038 <rev2>
2042 <rev2>
2039 <successors-2A>
2043 <successors-2A>
2040 <successors-2B1> <successors-2B2> <successors-2B3>
2044 <successors-2B1> <successors-2B2> <successors-2B3>
2041
2045
2042 Here rev2 has two possible (i.e. divergent) successors sets. The first
2046 Here rev2 has two possible (i.e. divergent) successors sets. The first
2043 holds one element, whereas the second holds three (i.e. the changeset has
2047 holds one element, whereas the second holds three (i.e. the changeset has
2044 been split).
2048 been split).
2045 """
2049 """
2046 # passed to successorssets caching computation from one call to another
2050 # passed to successorssets caching computation from one call to another
2047 cache = {}
2051 cache = {}
2048 ctx2str = str
2052 ctx2str = str
2049 node2str = short
2053 node2str = short
2050 if ui.debug():
2054 if ui.debug():
2051 def ctx2str(ctx):
2055 def ctx2str(ctx):
2052 return ctx.hex()
2056 return ctx.hex()
2053 node2str = hex
2057 node2str = hex
2054 for rev in scmutil.revrange(repo, revs):
2058 for rev in scmutil.revrange(repo, revs):
2055 ctx = repo[rev]
2059 ctx = repo[rev]
2056 ui.write('%s\n'% ctx2str(ctx))
2060 ui.write('%s\n'% ctx2str(ctx))
2057 for succsset in obsolete.successorssets(repo, ctx.node(), cache):
2061 for succsset in obsolete.successorssets(repo, ctx.node(), cache):
2058 if succsset:
2062 if succsset:
2059 ui.write(' ')
2063 ui.write(' ')
2060 ui.write(node2str(succsset[0]))
2064 ui.write(node2str(succsset[0]))
2061 for node in succsset[1:]:
2065 for node in succsset[1:]:
2062 ui.write(' ')
2066 ui.write(' ')
2063 ui.write(node2str(node))
2067 ui.write(node2str(node))
2064 ui.write('\n')
2068 ui.write('\n')
2065
2069
2066 @command('debugtemplate',
2070 @command('debugtemplate',
2067 [('r', 'rev', [], _('apply template on changesets'), _('REV')),
2071 [('r', 'rev', [], _('apply template on changesets'), _('REV')),
2068 ('D', 'define', [], _('define template keyword'), _('KEY=VALUE'))],
2072 ('D', 'define', [], _('define template keyword'), _('KEY=VALUE'))],
2069 _('[-r REV]... [-D KEY=VALUE]... TEMPLATE'),
2073 _('[-r REV]... [-D KEY=VALUE]... TEMPLATE'),
2070 optionalrepo=True)
2074 optionalrepo=True)
2071 def debugtemplate(ui, repo, tmpl, **opts):
2075 def debugtemplate(ui, repo, tmpl, **opts):
2072 """parse and apply a template
2076 """parse and apply a template
2073
2077
2074 If -r/--rev is given, the template is processed as a log template and
2078 If -r/--rev is given, the template is processed as a log template and
2075 applied to the given changesets. Otherwise, it is processed as a generic
2079 applied to the given changesets. Otherwise, it is processed as a generic
2076 template.
2080 template.
2077
2081
2078 Use --verbose to print the parsed tree.
2082 Use --verbose to print the parsed tree.
2079 """
2083 """
2080 revs = None
2084 revs = None
2081 if opts['rev']:
2085 if opts['rev']:
2082 if repo is None:
2086 if repo is None:
2083 raise error.RepoError(_('there is no Mercurial repository here '
2087 raise error.RepoError(_('there is no Mercurial repository here '
2084 '(.hg not found)'))
2088 '(.hg not found)'))
2085 revs = scmutil.revrange(repo, opts['rev'])
2089 revs = scmutil.revrange(repo, opts['rev'])
2086
2090
2087 props = {}
2091 props = {}
2088 for d in opts['define']:
2092 for d in opts['define']:
2089 try:
2093 try:
2090 k, v = (e.strip() for e in d.split('=', 1))
2094 k, v = (e.strip() for e in d.split('=', 1))
2091 if not k or k == 'ui':
2095 if not k or k == 'ui':
2092 raise ValueError
2096 raise ValueError
2093 props[k] = v
2097 props[k] = v
2094 except ValueError:
2098 except ValueError:
2095 raise error.Abort(_('malformed keyword definition: %s') % d)
2099 raise error.Abort(_('malformed keyword definition: %s') % d)
2096
2100
2097 if ui.verbose:
2101 if ui.verbose:
2098 aliases = ui.configitems('templatealias')
2102 aliases = ui.configitems('templatealias')
2099 tree = templater.parse(tmpl)
2103 tree = templater.parse(tmpl)
2100 ui.note(templater.prettyformat(tree), '\n')
2104 ui.note(templater.prettyformat(tree), '\n')
2101 newtree = templater.expandaliases(tree, aliases)
2105 newtree = templater.expandaliases(tree, aliases)
2102 if newtree != tree:
2106 if newtree != tree:
2103 ui.note(("* expanded:\n"), templater.prettyformat(newtree), '\n')
2107 ui.note(("* expanded:\n"), templater.prettyformat(newtree), '\n')
2104
2108
2105 mapfile = None
2109 mapfile = None
2106 if revs is None:
2110 if revs is None:
2107 k = 'debugtemplate'
2111 k = 'debugtemplate'
2108 t = formatter.maketemplater(ui, k, tmpl)
2112 t = formatter.maketemplater(ui, k, tmpl)
2109 ui.write(templater.stringify(t(k, ui=ui, **props)))
2113 ui.write(templater.stringify(t(k, ui=ui, **props)))
2110 else:
2114 else:
2111 displayer = cmdutil.changeset_templater(ui, repo, None, opts, tmpl,
2115 displayer = cmdutil.changeset_templater(ui, repo, None, opts, tmpl,
2112 mapfile, buffered=False)
2116 mapfile, buffered=False)
2113 for r in revs:
2117 for r in revs:
2114 displayer.show(repo[r], **props)
2118 displayer.show(repo[r], **props)
2115 displayer.close()
2119 displayer.close()
2116
2120
2117 @command('debugupdatecaches', [])
2121 @command('debugupdatecaches', [])
2118 def debugupdatecaches(ui, repo, *pats, **opts):
2122 def debugupdatecaches(ui, repo, *pats, **opts):
2119 """warm all known caches in the repository"""
2123 """warm all known caches in the repository"""
2120 with repo.wlock():
2124 with repo.wlock():
2121 with repo.lock():
2125 with repo.lock():
2122 repo.updatecaches()
2126 repo.updatecaches()
2123
2127
2124 @command('debugupgraderepo', [
2128 @command('debugupgraderepo', [
2125 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
2129 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
2126 ('', 'run', False, _('performs an upgrade')),
2130 ('', 'run', False, _('performs an upgrade')),
2127 ])
2131 ])
2128 def debugupgraderepo(ui, repo, run=False, optimize=None):
2132 def debugupgraderepo(ui, repo, run=False, optimize=None):
2129 """upgrade a repository to use different features
2133 """upgrade a repository to use different features
2130
2134
2131 If no arguments are specified, the repository is evaluated for upgrade
2135 If no arguments are specified, the repository is evaluated for upgrade
2132 and a list of problems and potential optimizations is printed.
2136 and a list of problems and potential optimizations is printed.
2133
2137
2134 With ``--run``, a repository upgrade is performed. Behavior of the upgrade
2138 With ``--run``, a repository upgrade is performed. Behavior of the upgrade
2135 can be influenced via additional arguments. More details will be provided
2139 can be influenced via additional arguments. More details will be provided
2136 by the command output when run without ``--run``.
2140 by the command output when run without ``--run``.
2137
2141
2138 During the upgrade, the repository will be locked and no writes will be
2142 During the upgrade, the repository will be locked and no writes will be
2139 allowed.
2143 allowed.
2140
2144
2141 At the end of the upgrade, the repository may not be readable while new
2145 At the end of the upgrade, the repository may not be readable while new
2142 repository data is swapped in. This window will be as long as it takes to
2146 repository data is swapped in. This window will be as long as it takes to
2143 rename some directories inside the ``.hg`` directory. On most machines, this
2147 rename some directories inside the ``.hg`` directory. On most machines, this
2144 should complete almost instantaneously and the chances of a consumer being
2148 should complete almost instantaneously and the chances of a consumer being
2145 unable to access the repository should be low.
2149 unable to access the repository should be low.
2146 """
2150 """
2147 return upgrade.upgraderepo(ui, repo, run=run, optimize=optimize)
2151 return upgrade.upgraderepo(ui, repo, run=run, optimize=optimize)
2148
2152
2149 @command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'),
2153 @command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'),
2150 inferrepo=True)
2154 inferrepo=True)
2151 def debugwalk(ui, repo, *pats, **opts):
2155 def debugwalk(ui, repo, *pats, **opts):
2152 """show how files match on given patterns"""
2156 """show how files match on given patterns"""
2153 m = scmutil.match(repo[None], pats, opts)
2157 m = scmutil.match(repo[None], pats, opts)
2154 ui.write(('matcher: %r\n' % m))
2158 ui.write(('matcher: %r\n' % m))
2155 items = list(repo[None].walk(m))
2159 items = list(repo[None].walk(m))
2156 if not items:
2160 if not items:
2157 return
2161 return
2158 f = lambda fn: fn
2162 f = lambda fn: fn
2159 if ui.configbool('ui', 'slash') and pycompat.ossep != '/':
2163 if ui.configbool('ui', 'slash') and pycompat.ossep != '/':
2160 f = lambda fn: util.normpath(fn)
2164 f = lambda fn: util.normpath(fn)
2161 fmt = 'f %%-%ds %%-%ds %%s' % (
2165 fmt = 'f %%-%ds %%-%ds %%s' % (
2162 max([len(abs) for abs in items]),
2166 max([len(abs) for abs in items]),
2163 max([len(m.rel(abs)) for abs in items]))
2167 max([len(m.rel(abs)) for abs in items]))
2164 for abs in items:
2168 for abs in items:
2165 line = fmt % (abs, f(m.rel(abs)), m.exact(abs) and 'exact' or '')
2169 line = fmt % (abs, f(m.rel(abs)), m.exact(abs) and 'exact' or '')
2166 ui.write("%s\n" % line.rstrip())
2170 ui.write("%s\n" % line.rstrip())
2167
2171
2168 @command('debugwireargs',
2172 @command('debugwireargs',
2169 [('', 'three', '', 'three'),
2173 [('', 'three', '', 'three'),
2170 ('', 'four', '', 'four'),
2174 ('', 'four', '', 'four'),
2171 ('', 'five', '', 'five'),
2175 ('', 'five', '', 'five'),
2172 ] + cmdutil.remoteopts,
2176 ] + cmdutil.remoteopts,
2173 _('REPO [OPTIONS]... [ONE [TWO]]'),
2177 _('REPO [OPTIONS]... [ONE [TWO]]'),
2174 norepo=True)
2178 norepo=True)
2175 def debugwireargs(ui, repopath, *vals, **opts):
2179 def debugwireargs(ui, repopath, *vals, **opts):
2176 repo = hg.peer(ui, opts, repopath)
2180 repo = hg.peer(ui, opts, repopath)
2177 for opt in cmdutil.remoteopts:
2181 for opt in cmdutil.remoteopts:
2178 del opts[opt[1]]
2182 del opts[opt[1]]
2179 args = {}
2183 args = {}
2180 for k, v in opts.iteritems():
2184 for k, v in opts.iteritems():
2181 if v:
2185 if v:
2182 args[k] = v
2186 args[k] = v
2183 # run twice to check that we don't mess up the stream for the next command
2187 # run twice to check that we don't mess up the stream for the next command
2184 res1 = repo.debugwireargs(*vals, **args)
2188 res1 = repo.debugwireargs(*vals, **args)
2185 res2 = repo.debugwireargs(*vals, **args)
2189 res2 = repo.debugwireargs(*vals, **args)
2186 ui.write("%s\n" % res1)
2190 ui.write("%s\n" % res1)
2187 if res1 != res2:
2191 if res1 != res2:
2188 ui.warn("%s\n" % res2)
2192 ui.warn("%s\n" % res2)
@@ -1,381 +1,381
1 Show all commands except debug commands
1 Show all commands except debug commands
2 $ hg debugcomplete
2 $ hg debugcomplete
3 add
3 add
4 addremove
4 addremove
5 annotate
5 annotate
6 archive
6 archive
7 backout
7 backout
8 bisect
8 bisect
9 bookmarks
9 bookmarks
10 branch
10 branch
11 branches
11 branches
12 bundle
12 bundle
13 cat
13 cat
14 clone
14 clone
15 commit
15 commit
16 config
16 config
17 copy
17 copy
18 diff
18 diff
19 export
19 export
20 files
20 files
21 forget
21 forget
22 graft
22 graft
23 grep
23 grep
24 heads
24 heads
25 help
25 help
26 identify
26 identify
27 import
27 import
28 incoming
28 incoming
29 init
29 init
30 locate
30 locate
31 log
31 log
32 manifest
32 manifest
33 merge
33 merge
34 outgoing
34 outgoing
35 parents
35 parents
36 paths
36 paths
37 phase
37 phase
38 pull
38 pull
39 push
39 push
40 recover
40 recover
41 remove
41 remove
42 rename
42 rename
43 resolve
43 resolve
44 revert
44 revert
45 rollback
45 rollback
46 root
46 root
47 serve
47 serve
48 status
48 status
49 summary
49 summary
50 tag
50 tag
51 tags
51 tags
52 tip
52 tip
53 unbundle
53 unbundle
54 update
54 update
55 verify
55 verify
56 version
56 version
57
57
58 Show all commands that start with "a"
58 Show all commands that start with "a"
59 $ hg debugcomplete a
59 $ hg debugcomplete a
60 add
60 add
61 addremove
61 addremove
62 annotate
62 annotate
63 archive
63 archive
64
64
65 Do not show debug commands if there are other candidates
65 Do not show debug commands if there are other candidates
66 $ hg debugcomplete d
66 $ hg debugcomplete d
67 diff
67 diff
68
68
69 Show debug commands if there are no other candidates
69 Show debug commands if there are no other candidates
70 $ hg debugcomplete debug
70 $ hg debugcomplete debug
71 debugancestor
71 debugancestor
72 debugapplystreamclonebundle
72 debugapplystreamclonebundle
73 debugbuilddag
73 debugbuilddag
74 debugbundle
74 debugbundle
75 debugcheckstate
75 debugcheckstate
76 debugcolor
76 debugcolor
77 debugcommands
77 debugcommands
78 debugcomplete
78 debugcomplete
79 debugconfig
79 debugconfig
80 debugcreatestreamclonebundle
80 debugcreatestreamclonebundle
81 debugdag
81 debugdag
82 debugdata
82 debugdata
83 debugdate
83 debugdate
84 debugdeltachain
84 debugdeltachain
85 debugdirstate
85 debugdirstate
86 debugdiscovery
86 debugdiscovery
87 debugextensions
87 debugextensions
88 debugfileset
88 debugfileset
89 debugfsinfo
89 debugfsinfo
90 debuggetbundle
90 debuggetbundle
91 debugignore
91 debugignore
92 debugindex
92 debugindex
93 debugindexdot
93 debugindexdot
94 debuginstall
94 debuginstall
95 debugknown
95 debugknown
96 debuglabelcomplete
96 debuglabelcomplete
97 debuglocks
97 debuglocks
98 debugmergestate
98 debugmergestate
99 debugnamecomplete
99 debugnamecomplete
100 debugobsolete
100 debugobsolete
101 debugpathcomplete
101 debugpathcomplete
102 debugpickmergetool
102 debugpickmergetool
103 debugpushkey
103 debugpushkey
104 debugpvec
104 debugpvec
105 debugrebuilddirstate
105 debugrebuilddirstate
106 debugrebuildfncache
106 debugrebuildfncache
107 debugrename
107 debugrename
108 debugrevlog
108 debugrevlog
109 debugrevspec
109 debugrevspec
110 debugsetparents
110 debugsetparents
111 debugsub
111 debugsub
112 debugsuccessorssets
112 debugsuccessorssets
113 debugtemplate
113 debugtemplate
114 debugupdatecaches
114 debugupdatecaches
115 debugupgraderepo
115 debugupgraderepo
116 debugwalk
116 debugwalk
117 debugwireargs
117 debugwireargs
118
118
119 Do not show the alias of a debug command if there are other candidates
119 Do not show the alias of a debug command if there are other candidates
120 (this should hide rawcommit)
120 (this should hide rawcommit)
121 $ hg debugcomplete r
121 $ hg debugcomplete r
122 recover
122 recover
123 remove
123 remove
124 rename
124 rename
125 resolve
125 resolve
126 revert
126 revert
127 rollback
127 rollback
128 root
128 root
129 Show the alias of a debug command if there are no other candidates
129 Show the alias of a debug command if there are no other candidates
130 $ hg debugcomplete rawc
130 $ hg debugcomplete rawc
131
131
132
132
133 Show the global options
133 Show the global options
134 $ hg debugcomplete --options | sort
134 $ hg debugcomplete --options | sort
135 --color
135 --color
136 --config
136 --config
137 --cwd
137 --cwd
138 --debug
138 --debug
139 --debugger
139 --debugger
140 --encoding
140 --encoding
141 --encodingmode
141 --encodingmode
142 --help
142 --help
143 --hidden
143 --hidden
144 --noninteractive
144 --noninteractive
145 --pager
145 --pager
146 --profile
146 --profile
147 --quiet
147 --quiet
148 --repository
148 --repository
149 --time
149 --time
150 --traceback
150 --traceback
151 --verbose
151 --verbose
152 --version
152 --version
153 -R
153 -R
154 -h
154 -h
155 -q
155 -q
156 -v
156 -v
157 -y
157 -y
158
158
159 Show the options for the "serve" command
159 Show the options for the "serve" command
160 $ hg debugcomplete --options serve | sort
160 $ hg debugcomplete --options serve | sort
161 --accesslog
161 --accesslog
162 --address
162 --address
163 --certificate
163 --certificate
164 --cmdserver
164 --cmdserver
165 --color
165 --color
166 --config
166 --config
167 --cwd
167 --cwd
168 --daemon
168 --daemon
169 --daemon-postexec
169 --daemon-postexec
170 --debug
170 --debug
171 --debugger
171 --debugger
172 --encoding
172 --encoding
173 --encodingmode
173 --encodingmode
174 --errorlog
174 --errorlog
175 --help
175 --help
176 --hidden
176 --hidden
177 --ipv6
177 --ipv6
178 --name
178 --name
179 --noninteractive
179 --noninteractive
180 --pager
180 --pager
181 --pid-file
181 --pid-file
182 --port
182 --port
183 --prefix
183 --prefix
184 --profile
184 --profile
185 --quiet
185 --quiet
186 --repository
186 --repository
187 --stdio
187 --stdio
188 --style
188 --style
189 --subrepos
189 --subrepos
190 --templates
190 --templates
191 --time
191 --time
192 --traceback
192 --traceback
193 --verbose
193 --verbose
194 --version
194 --version
195 --web-conf
195 --web-conf
196 -6
196 -6
197 -A
197 -A
198 -E
198 -E
199 -R
199 -R
200 -S
200 -S
201 -a
201 -a
202 -d
202 -d
203 -h
203 -h
204 -n
204 -n
205 -p
205 -p
206 -q
206 -q
207 -t
207 -t
208 -v
208 -v
209 -y
209 -y
210
210
211 Show an error if we use --options with an ambiguous abbreviation
211 Show an error if we use --options with an ambiguous abbreviation
212 $ hg debugcomplete --options s
212 $ hg debugcomplete --options s
213 hg: command 's' is ambiguous:
213 hg: command 's' is ambiguous:
214 serve showconfig status summary
214 serve showconfig status summary
215 [255]
215 [255]
216
216
217 Show all commands + options
217 Show all commands + options
218 $ hg debugcommands
218 $ hg debugcommands
219 add: include, exclude, subrepos, dry-run
219 add: include, exclude, subrepos, dry-run
220 annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude, template
220 annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude, template
221 clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure
221 clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure
222 commit: addremove, close-branch, amend, secret, edit, interactive, include, exclude, message, logfile, date, user, subrepos
222 commit: addremove, close-branch, amend, secret, edit, interactive, include, exclude, message, logfile, date, user, subrepos
223 diff: rev, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, root, include, exclude, subrepos
223 diff: rev, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, root, include, exclude, subrepos
224 export: output, switch-parent, rev, text, git, binary, nodates
224 export: output, switch-parent, rev, text, git, binary, nodates
225 forget: include, exclude
225 forget: include, exclude
226 init: ssh, remotecmd, insecure
226 init: ssh, remotecmd, insecure
227 log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, patch, git, limit, no-merges, stat, graph, style, template, include, exclude
227 log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, branch, prune, patch, git, limit, no-merges, stat, graph, style, template, include, exclude
228 merge: force, rev, preview, tool
228 merge: force, rev, preview, tool
229 pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
229 pull: update, force, rev, bookmark, branch, ssh, remotecmd, insecure
230 push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
230 push: force, rev, bookmark, branch, new-branch, ssh, remotecmd, insecure
231 remove: after, force, subrepos, include, exclude
231 remove: after, force, subrepos, include, exclude
232 serve: accesslog, daemon, daemon-postexec, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, cmdserver, templates, style, ipv6, certificate, subrepos
232 serve: accesslog, daemon, daemon-postexec, errorlog, port, address, prefix, name, web-conf, webdir-conf, pid-file, stdio, cmdserver, templates, style, ipv6, certificate, subrepos
233 status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, change, include, exclude, subrepos, template
233 status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, change, include, exclude, subrepos, template
234 summary: remote
234 summary: remote
235 update: clean, check, merge, date, rev, tool
235 update: clean, check, merge, date, rev, tool
236 addremove: similarity, subrepos, include, exclude, dry-run
236 addremove: similarity, subrepos, include, exclude, dry-run
237 archive: no-decode, prefix, rev, type, subrepos, include, exclude
237 archive: no-decode, prefix, rev, type, subrepos, include, exclude
238 backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
238 backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
239 bisect: reset, good, bad, skip, extend, command, noupdate
239 bisect: reset, good, bad, skip, extend, command, noupdate
240 bookmarks: force, rev, delete, rename, inactive, template
240 bookmarks: force, rev, delete, rename, inactive, template
241 branch: force, clean
241 branch: force, clean
242 branches: active, closed, template
242 branches: active, closed, template
243 bundle: force, rev, branch, base, all, type, ssh, remotecmd, insecure
243 bundle: force, rev, branch, base, all, type, ssh, remotecmd, insecure
244 cat: output, rev, decode, include, exclude, template
244 cat: output, rev, decode, include, exclude, template
245 config: untrusted, edit, local, global, template
245 config: untrusted, edit, local, global, template
246 copy: after, force, include, exclude, dry-run
246 copy: after, force, include, exclude, dry-run
247 debugancestor:
247 debugancestor:
248 debugapplystreamclonebundle:
248 debugapplystreamclonebundle:
249 debugbuilddag: mergeable-file, overwritten-file, new-file
249 debugbuilddag: mergeable-file, overwritten-file, new-file
250 debugbundle: all, spec
250 debugbundle: all, part-type, spec
251 debugcheckstate:
251 debugcheckstate:
252 debugcolor: style
252 debugcolor: style
253 debugcommands:
253 debugcommands:
254 debugcomplete: options
254 debugcomplete: options
255 debugcreatestreamclonebundle:
255 debugcreatestreamclonebundle:
256 debugdag: tags, branches, dots, spaces
256 debugdag: tags, branches, dots, spaces
257 debugdata: changelog, manifest, dir
257 debugdata: changelog, manifest, dir
258 debugdate: extended
258 debugdate: extended
259 debugdeltachain: changelog, manifest, dir, template
259 debugdeltachain: changelog, manifest, dir, template
260 debugdirstate: nodates, datesort
260 debugdirstate: nodates, datesort
261 debugdiscovery: old, nonheads, ssh, remotecmd, insecure
261 debugdiscovery: old, nonheads, ssh, remotecmd, insecure
262 debugextensions: template
262 debugextensions: template
263 debugfileset: rev
263 debugfileset: rev
264 debugfsinfo:
264 debugfsinfo:
265 debuggetbundle: head, common, type
265 debuggetbundle: head, common, type
266 debugignore:
266 debugignore:
267 debugindex: changelog, manifest, dir, format
267 debugindex: changelog, manifest, dir, format
268 debugindexdot: changelog, manifest, dir
268 debugindexdot: changelog, manifest, dir
269 debuginstall: template
269 debuginstall: template
270 debugknown:
270 debugknown:
271 debuglabelcomplete:
271 debuglabelcomplete:
272 debuglocks: force-lock, force-wlock
272 debuglocks: force-lock, force-wlock
273 debugmergestate:
273 debugmergestate:
274 debugnamecomplete:
274 debugnamecomplete:
275 debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template
275 debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template
276 debugpathcomplete: full, normal, added, removed
276 debugpathcomplete: full, normal, added, removed
277 debugpickmergetool: rev, changedelete, include, exclude, tool
277 debugpickmergetool: rev, changedelete, include, exclude, tool
278 debugpushkey:
278 debugpushkey:
279 debugpvec:
279 debugpvec:
280 debugrebuilddirstate: rev, minimal
280 debugrebuilddirstate: rev, minimal
281 debugrebuildfncache:
281 debugrebuildfncache:
282 debugrename: rev
282 debugrename: rev
283 debugrevlog: changelog, manifest, dir, dump
283 debugrevlog: changelog, manifest, dir, dump
284 debugrevspec: optimize, show-stage, no-optimized, verify-optimized
284 debugrevspec: optimize, show-stage, no-optimized, verify-optimized
285 debugsetparents:
285 debugsetparents:
286 debugsub: rev
286 debugsub: rev
287 debugsuccessorssets:
287 debugsuccessorssets:
288 debugtemplate: rev, define
288 debugtemplate: rev, define
289 debugupdatecaches:
289 debugupdatecaches:
290 debugupgraderepo: optimize, run
290 debugupgraderepo: optimize, run
291 debugwalk: include, exclude
291 debugwalk: include, exclude
292 debugwireargs: three, four, five, ssh, remotecmd, insecure
292 debugwireargs: three, four, five, ssh, remotecmd, insecure
293 files: rev, print0, include, exclude, template, subrepos
293 files: rev, print0, include, exclude, template, subrepos
294 graft: rev, continue, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
294 graft: rev, continue, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
295 grep: print0, all, text, follow, ignore-case, files-with-matches, line-number, rev, user, date, template, include, exclude
295 grep: print0, all, text, follow, ignore-case, files-with-matches, line-number, rev, user, date, template, include, exclude
296 heads: rev, topo, active, closed, style, template
296 heads: rev, topo, active, closed, style, template
297 help: extension, command, keyword, system
297 help: extension, command, keyword, system
298 identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure
298 identify: rev, num, id, branch, tags, bookmarks, ssh, remotecmd, insecure
299 import: strip, base, edit, force, no-commit, bypass, partial, exact, prefix, import-branch, message, logfile, date, user, similarity
299 import: strip, base, edit, force, no-commit, bypass, partial, exact, prefix, import-branch, message, logfile, date, user, similarity
300 incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
300 incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
301 locate: rev, print0, fullpath, include, exclude
301 locate: rev, print0, fullpath, include, exclude
302 manifest: rev, all, template
302 manifest: rev, all, template
303 outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
303 outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, graph, style, template, ssh, remotecmd, insecure, subrepos
304 parents: rev, style, template
304 parents: rev, style, template
305 paths: template
305 paths: template
306 phase: public, draft, secret, force, rev
306 phase: public, draft, secret, force, rev
307 recover:
307 recover:
308 rename: after, force, include, exclude, dry-run
308 rename: after, force, include, exclude, dry-run
309 resolve: all, list, mark, unmark, no-status, tool, include, exclude, template
309 resolve: all, list, mark, unmark, no-status, tool, include, exclude, template
310 revert: all, date, rev, no-backup, interactive, include, exclude, dry-run
310 revert: all, date, rev, no-backup, interactive, include, exclude, dry-run
311 rollback: dry-run, force
311 rollback: dry-run, force
312 root:
312 root:
313 tag: force, local, rev, remove, edit, message, date, user
313 tag: force, local, rev, remove, edit, message, date, user
314 tags: template
314 tags: template
315 tip: patch, git, style, template
315 tip: patch, git, style, template
316 unbundle: update
316 unbundle: update
317 verify:
317 verify:
318 version: template
318 version: template
319
319
320 $ hg init a
320 $ hg init a
321 $ cd a
321 $ cd a
322 $ echo fee > fee
322 $ echo fee > fee
323 $ hg ci -q -Amfee
323 $ hg ci -q -Amfee
324 $ hg tag fee
324 $ hg tag fee
325 $ mkdir fie
325 $ mkdir fie
326 $ echo dead > fie/dead
326 $ echo dead > fie/dead
327 $ echo live > fie/live
327 $ echo live > fie/live
328 $ hg bookmark fo
328 $ hg bookmark fo
329 $ hg branch -q fie
329 $ hg branch -q fie
330 $ hg ci -q -Amfie
330 $ hg ci -q -Amfie
331 $ echo fo > fo
331 $ echo fo > fo
332 $ hg branch -qf default
332 $ hg branch -qf default
333 $ hg ci -q -Amfo
333 $ hg ci -q -Amfo
334 $ echo Fum > Fum
334 $ echo Fum > Fum
335 $ hg ci -q -AmFum
335 $ hg ci -q -AmFum
336 $ hg bookmark Fum
336 $ hg bookmark Fum
337
337
338 Test debugpathcomplete
338 Test debugpathcomplete
339
339
340 $ hg debugpathcomplete f
340 $ hg debugpathcomplete f
341 fee
341 fee
342 fie
342 fie
343 fo
343 fo
344 $ hg debugpathcomplete -f f
344 $ hg debugpathcomplete -f f
345 fee
345 fee
346 fie/dead
346 fie/dead
347 fie/live
347 fie/live
348 fo
348 fo
349
349
350 $ hg rm Fum
350 $ hg rm Fum
351 $ hg debugpathcomplete -r F
351 $ hg debugpathcomplete -r F
352 Fum
352 Fum
353
353
354 Test debugnamecomplete
354 Test debugnamecomplete
355
355
356 $ hg debugnamecomplete
356 $ hg debugnamecomplete
357 Fum
357 Fum
358 default
358 default
359 fee
359 fee
360 fie
360 fie
361 fo
361 fo
362 tip
362 tip
363 $ hg debugnamecomplete f
363 $ hg debugnamecomplete f
364 fee
364 fee
365 fie
365 fie
366 fo
366 fo
367
367
368 Test debuglabelcomplete, a deprecated name for debugnamecomplete that is still
368 Test debuglabelcomplete, a deprecated name for debugnamecomplete that is still
369 used for completions in some shells.
369 used for completions in some shells.
370
370
371 $ hg debuglabelcomplete
371 $ hg debuglabelcomplete
372 Fum
372 Fum
373 default
373 default
374 fee
374 fee
375 fie
375 fie
376 fo
376 fo
377 tip
377 tip
378 $ hg debuglabelcomplete f
378 $ hg debuglabelcomplete f
379 fee
379 fee
380 fie
380 fie
381 fo
381 fo
@@ -1,1366 +1,1366
1 ==================================================
1 ==================================================
2 Test obsmarkers interaction with bundle and strip
2 Test obsmarkers interaction with bundle and strip
3 ==================================================
3 ==================================================
4
4
5 Setup a repository with various case
5 Setup a repository with various case
6 ====================================
6 ====================================
7
7
8 Config setup
8 Config setup
9 ------------
9 ------------
10
10
11 $ cat >> $HGRCPATH <<EOF
11 $ cat >> $HGRCPATH <<EOF
12 > [ui]
12 > [ui]
13 > # simpler log output
13 > # simpler log output
14 > logtemplate = "{node|short}: {desc}\n"
14 > logtemplate = "{node|short}: {desc}\n"
15 >
15 >
16 > [experimental]
16 > [experimental]
17 > # enable evolution
17 > # enable evolution
18 > evolution = all
18 > evolution = all
19 >
19 >
20 > # include obsmarkers in bundle
20 > # include obsmarkers in bundle
21 > evolution.bundle-obsmarker = yes
21 > evolution.bundle-obsmarker = yes
22 >
22 >
23 > [extensions]
23 > [extensions]
24 > # needed for some tests
24 > # needed for some tests
25 > strip =
25 > strip =
26 > [defaults]
26 > [defaults]
27 > # we'll query many hidden changeset
27 > # we'll query many hidden changeset
28 > debugobsolete = --hidden
28 > debugobsolete = --hidden
29 > EOF
29 > EOF
30
30
31 $ mkcommit() {
31 $ mkcommit() {
32 > echo "$1" > "$1"
32 > echo "$1" > "$1"
33 > hg add "$1"
33 > hg add "$1"
34 > hg ci -m "$1"
34 > hg ci -m "$1"
35 > }
35 > }
36
36
37 $ getid() {
37 $ getid() {
38 > hg log --hidden --template '{node}\n' --rev "$1"
38 > hg log --hidden --template '{node}\n' --rev "$1"
39 > }
39 > }
40
40
41 $ mktestrepo () {
41 $ mktestrepo () {
42 > [ -n "$1" ] || exit 1
42 > [ -n "$1" ] || exit 1
43 > cd $TESTTMP
43 > cd $TESTTMP
44 > hg init $1
44 > hg init $1
45 > cd $1
45 > cd $1
46 > mkcommit ROOT
46 > mkcommit ROOT
47 > }
47 > }
48
48
49 Function to compare the expected bundled obsmarkers with the actually bundled
49 Function to compare the expected bundled obsmarkers with the actually bundled
50 obsmarkers. It also check the obsmarkers backed up during strip.
50 obsmarkers. It also check the obsmarkers backed up during strip.
51
51
52 $ testrevs () {
52 $ testrevs () {
53 > revs="$1"
53 > revs="$1"
54 > testname=`basename \`pwd\``
54 > testname=`basename \`pwd\``
55 > revsname=`hg --hidden log -T '-{desc}' --rev "${revs}"`
55 > revsname=`hg --hidden log -T '-{desc}' --rev "${revs}"`
56 > prefix="${TESTTMP}/${testname}${revsname}"
56 > prefix="${TESTTMP}/${testname}${revsname}"
57 > markersfile="${prefix}-relevant-markers.txt"
57 > markersfile="${prefix}-relevant-markers.txt"
58 > exclufile="${prefix}-exclusive-markers.txt"
58 > exclufile="${prefix}-exclusive-markers.txt"
59 > bundlefile="${prefix}-bundle.hg"
59 > bundlefile="${prefix}-bundle.hg"
60 > contentfile="${prefix}-bundle-markers.hg"
60 > contentfile="${prefix}-bundle-markers.hg"
61 > stripcontentfile="${prefix}-bundle-markers.hg"
61 > stripcontentfile="${prefix}-bundle-markers.hg"
62 > hg debugobsolete --hidden --rev "${revs}" | sed 's/^/ /' > "${markersfile}"
62 > hg debugobsolete --hidden --rev "${revs}" | sed 's/^/ /' > "${markersfile}"
63 > hg debugobsolete --hidden --rev "${revs}" --exclusive | sed 's/^/ /' > "${exclufile}"
63 > hg debugobsolete --hidden --rev "${revs}" --exclusive | sed 's/^/ /' > "${exclufile}"
64 > echo '### Matched revisions###'
64 > echo '### Matched revisions###'
65 > hg log --hidden --rev "${revs}" | sort
65 > hg log --hidden --rev "${revs}" | sort
66 > echo '### Relevant markers ###'
66 > echo '### Relevant markers ###'
67 > cat "${markersfile}"
67 > cat "${markersfile}"
68 > printf "# bundling: "
68 > printf "# bundling: "
69 > hg bundle --hidden --base "parents(roots(${revs}))" --rev "${revs}" "${bundlefile}"
69 > hg bundle --hidden --base "parents(roots(${revs}))" --rev "${revs}" "${bundlefile}"
70 > hg debugbundle "${bundlefile}" | grep "obsmarkers --" -A 100 | sed 1,2d > "${contentfile}"
70 > hg debugbundle --part-type obsmarkers "${bundlefile}" | sed 1,3d > "${contentfile}"
71 > echo '### Bundled markers ###'
71 > echo '### Bundled markers ###'
72 > cat "${contentfile}"
72 > cat "${contentfile}"
73 > echo '### diff <relevant> <bundled> ###'
73 > echo '### diff <relevant> <bundled> ###'
74 > cmp "${markersfile}" "${contentfile}" || diff -u "${markersfile}" "${contentfile}"
74 > cmp "${markersfile}" "${contentfile}" || diff -u "${markersfile}" "${contentfile}"
75 > echo '#################################'
75 > echo '#################################'
76 > echo '### Exclusive markers ###'
76 > echo '### Exclusive markers ###'
77 > cat "${exclufile}"
77 > cat "${exclufile}"
78 > # if the matched revs do not have children, we also check the result of strip
78 > # if the matched revs do not have children, we also check the result of strip
79 > children=`hg log --hidden --rev "((${revs})::) - (${revs})"`
79 > children=`hg log --hidden --rev "((${revs})::) - (${revs})"`
80 > if [ -z "$children" ];
80 > if [ -z "$children" ];
81 > then
81 > then
82 > printf "# stripping: "
82 > printf "# stripping: "
83 > prestripfile="${prefix}-pre-strip.txt"
83 > prestripfile="${prefix}-pre-strip.txt"
84 > poststripfile="${prefix}-post-strip.txt"
84 > poststripfile="${prefix}-post-strip.txt"
85 > strippedfile="${prefix}-stripped-markers.txt"
85 > strippedfile="${prefix}-stripped-markers.txt"
86 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${prestripfile}"
86 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${prestripfile}"
87 > hg strip --hidden --rev "${revs}"
87 > hg strip --hidden --rev "${revs}"
88 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${poststripfile}"
88 > hg debugobsolete --hidden | sort | sed 's/^/ /' > "${poststripfile}"
89 > hg debugbundle .hg/strip-backup/* | grep "obsmarkers --" -A 100 | sed 1,2d > "${stripcontentfile}"
89 > hg debugbundle --part-type obsmarkers .hg/strip-backup/* | sed 1,3d > "${stripcontentfile}"
90 > echo '### Backup markers ###'
90 > echo '### Backup markers ###'
91 > cat "${stripcontentfile}"
91 > cat "${stripcontentfile}"
92 > echo '### diff <relevant> <backed-up> ###'
92 > echo '### diff <relevant> <backed-up> ###'
93 > cmp "${markersfile}" "${stripcontentfile}" || diff -u "${markersfile}" "${stripcontentfile}"
93 > cmp "${markersfile}" "${stripcontentfile}" || diff -u "${markersfile}" "${stripcontentfile}"
94 > echo '#################################'
94 > echo '#################################'
95 > cat "${prestripfile}" "${poststripfile}" | sort | uniq -u > "${strippedfile}"
95 > cat "${prestripfile}" "${poststripfile}" | sort | uniq -u > "${strippedfile}"
96 > echo '### Stripped markers ###'
96 > echo '### Stripped markers ###'
97 > cat "${strippedfile}"
97 > cat "${strippedfile}"
98 > echo '### diff <exclusive> <stripped> ###'
98 > echo '### diff <exclusive> <stripped> ###'
99 > cmp "${exclufile}" "${strippedfile}" || diff -u "${exclufile}" "${strippedfile}"
99 > cmp "${exclufile}" "${strippedfile}" || diff -u "${exclufile}" "${strippedfile}"
100 > echo '#################################'
100 > echo '#################################'
101 > # restore and clean up repo for the next test
101 > # restore and clean up repo for the next test
102 > hg unbundle .hg/strip-backup/* | sed 's/^/# unbundling: /'
102 > hg unbundle .hg/strip-backup/* | sed 's/^/# unbundling: /'
103 > # clean up directory for the next test
103 > # clean up directory for the next test
104 > rm .hg/strip-backup/*
104 > rm .hg/strip-backup/*
105 > fi
105 > fi
106 > }
106 > }
107
107
108 root setup
108 root setup
109 -------------
109 -------------
110
110
111 simple chain
111 simple chain
112 ============
112 ============
113
113
114 . A0
114 . A0
115 . β‡ ΓΈβ‡ β—” A1
115 . β‡ ΓΈβ‡ β—” A1
116 . |/
116 . |/
117 . ●
117 . ●
118
118
119 setup
119 setup
120 -----
120 -----
121
121
122 $ mktestrepo simple-chain
122 $ mktestrepo simple-chain
123 $ mkcommit 'C-A0'
123 $ mkcommit 'C-A0'
124 $ hg up 'desc("ROOT")'
124 $ hg up 'desc("ROOT")'
125 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
125 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
126 $ mkcommit 'C-A1'
126 $ mkcommit 'C-A1'
127 created new head
127 created new head
128 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
128 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
129 $ hg debugobsolete `getid 'desc("C-A0")'` a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1
129 $ hg debugobsolete `getid 'desc("C-A0")'` a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1
130 $ hg debugobsolete a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 `getid 'desc("C-A1")'`
130 $ hg debugobsolete a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 `getid 'desc("C-A1")'`
131
131
132 $ hg up 'desc("ROOT")'
132 $ hg up 'desc("ROOT")'
133 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
133 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
134 $ hg log --hidden -G
134 $ hg log --hidden -G
135 o cf2c22470d67: C-A1
135 o cf2c22470d67: C-A1
136 |
136 |
137 | x 84fcb0dfe17b: C-A0
137 | x 84fcb0dfe17b: C-A0
138 |/
138 |/
139 @ ea207398892e: ROOT
139 @ ea207398892e: ROOT
140
140
141 $ hg debugobsolete
141 $ hg debugobsolete
142 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
142 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
143 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
143 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
144 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
144 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
145
145
146 Actual testing
146 Actual testing
147 --------------
147 --------------
148
148
149 $ testrevs 'desc("C-A0")'
149 $ testrevs 'desc("C-A0")'
150 ### Matched revisions###
150 ### Matched revisions###
151 84fcb0dfe17b: C-A0
151 84fcb0dfe17b: C-A0
152 ### Relevant markers ###
152 ### Relevant markers ###
153 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
153 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
154 # bundling: 1 changesets found
154 # bundling: 1 changesets found
155 ### Bundled markers ###
155 ### Bundled markers ###
156 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
156 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
157 ### diff <relevant> <bundled> ###
157 ### diff <relevant> <bundled> ###
158 #################################
158 #################################
159 ### Exclusive markers ###
159 ### Exclusive markers ###
160 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg (glob)
160 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg (glob)
161 ### Backup markers ###
161 ### Backup markers ###
162 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
162 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
163 ### diff <relevant> <backed-up> ###
163 ### diff <relevant> <backed-up> ###
164 #################################
164 #################################
165 ### Stripped markers ###
165 ### Stripped markers ###
166 ### diff <exclusive> <stripped> ###
166 ### diff <exclusive> <stripped> ###
167 #################################
167 #################################
168 # unbundling: adding changesets
168 # unbundling: adding changesets
169 # unbundling: adding manifests
169 # unbundling: adding manifests
170 # unbundling: adding file changes
170 # unbundling: adding file changes
171 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
171 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
172 # unbundling: (run 'hg heads' to see heads)
172 # unbundling: (run 'hg heads' to see heads)
173
173
174 $ testrevs 'desc("C-A1")'
174 $ testrevs 'desc("C-A1")'
175 ### Matched revisions###
175 ### Matched revisions###
176 cf2c22470d67: C-A1
176 cf2c22470d67: C-A1
177 ### Relevant markers ###
177 ### Relevant markers ###
178 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
178 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
179 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
179 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
180 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
180 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
181 # bundling: 1 changesets found
181 # bundling: 1 changesets found
182 ### Bundled markers ###
182 ### Bundled markers ###
183 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
183 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
184 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
184 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
185 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
185 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
186 ### diff <relevant> <bundled> ###
186 ### diff <relevant> <bundled> ###
187 #################################
187 #################################
188 ### Exclusive markers ###
188 ### Exclusive markers ###
189 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
189 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
190 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
190 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
191 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
191 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
192 ### Backup markers ###
192 ### Backup markers ###
193 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
193 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
194 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
194 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
195 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
195 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
196 ### diff <relevant> <backed-up> ###
196 ### diff <relevant> <backed-up> ###
197 #################################
197 #################################
198 ### Stripped markers ###
198 ### Stripped markers ###
199 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
199 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
200 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
200 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
201 ### diff <exclusive> <stripped> ###
201 ### diff <exclusive> <stripped> ###
202 #################################
202 #################################
203 # unbundling: adding changesets
203 # unbundling: adding changesets
204 # unbundling: adding manifests
204 # unbundling: adding manifests
205 # unbundling: adding file changes
205 # unbundling: adding file changes
206 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
206 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
207 # unbundling: 2 new obsolescence markers
207 # unbundling: 2 new obsolescence markers
208 # unbundling: (run 'hg heads' to see heads)
208 # unbundling: (run 'hg heads' to see heads)
209
209
210 $ testrevs 'desc("C-A")'
210 $ testrevs 'desc("C-A")'
211 ### Matched revisions###
211 ### Matched revisions###
212 84fcb0dfe17b: C-A0
212 84fcb0dfe17b: C-A0
213 cf2c22470d67: C-A1
213 cf2c22470d67: C-A1
214 ### Relevant markers ###
214 ### Relevant markers ###
215 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
215 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
216 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
216 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
217 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
217 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
218 # bundling: 2 changesets found
218 # bundling: 2 changesets found
219 ### Bundled markers ###
219 ### Bundled markers ###
220 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
220 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
221 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
221 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
222 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
222 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
223 ### diff <relevant> <bundled> ###
223 ### diff <relevant> <bundled> ###
224 #################################
224 #################################
225 ### Exclusive markers ###
225 ### Exclusive markers ###
226 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
226 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
227 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
227 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
228 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
228 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
229 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg (glob)
229 # stripping: saved backup bundle to $TESTTMP/simple-chain/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg (glob)
230 ### Backup markers ###
230 ### Backup markers ###
231 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
231 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
232 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
232 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
233 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
233 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
234 ### diff <relevant> <backed-up> ###
234 ### diff <relevant> <backed-up> ###
235 #################################
235 #################################
236 ### Stripped markers ###
236 ### Stripped markers ###
237 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
237 84fcb0dfe17b256ebae52e05572993b9194c018a a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
238 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
238 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
239 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
239 a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1 cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
240 ### diff <exclusive> <stripped> ###
240 ### diff <exclusive> <stripped> ###
241 #################################
241 #################################
242 # unbundling: adding changesets
242 # unbundling: adding changesets
243 # unbundling: adding manifests
243 # unbundling: adding manifests
244 # unbundling: adding file changes
244 # unbundling: adding file changes
245 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
245 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
246 # unbundling: 3 new obsolescence markers
246 # unbundling: 3 new obsolescence markers
247 # unbundling: (run 'hg heads' to see heads)
247 # unbundling: (run 'hg heads' to see heads)
248
248
249 chain with prune children
249 chain with prune children
250 =========================
250 =========================
251
251
252 . β‡ βŠ— B0
252 . β‡ βŠ— B0
253 . |
253 . |
254 . β‡ ΓΈβ‡ β—” A1
254 . β‡ ΓΈβ‡ β—” A1
255 . |
255 . |
256 . ●
256 . ●
257
257
258 setup
258 setup
259 -----
259 -----
260
260
261 $ mktestrepo prune
261 $ mktestrepo prune
262 $ mkcommit 'C-A0'
262 $ mkcommit 'C-A0'
263 $ mkcommit 'C-B0'
263 $ mkcommit 'C-B0'
264 $ hg up 'desc("ROOT")'
264 $ hg up 'desc("ROOT")'
265 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
265 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
266 $ mkcommit 'C-A1'
266 $ mkcommit 'C-A1'
267 created new head
267 created new head
268 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
268 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
269 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
269 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
270 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
270 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
271 $ hg up 'desc("ROOT")'
271 $ hg up 'desc("ROOT")'
272 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
272 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
273 $ hg log --hidden -G
273 $ hg log --hidden -G
274 o cf2c22470d67: C-A1
274 o cf2c22470d67: C-A1
275 |
275 |
276 | x 29f93b1df87b: C-B0
276 | x 29f93b1df87b: C-B0
277 | |
277 | |
278 | x 84fcb0dfe17b: C-A0
278 | x 84fcb0dfe17b: C-A0
279 |/
279 |/
280 @ ea207398892e: ROOT
280 @ ea207398892e: ROOT
281
281
282 $ hg debugobsolete
282 $ hg debugobsolete
283 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
283 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
284 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
284 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
285 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
285 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
286
286
287 Actual testing
287 Actual testing
288 --------------
288 --------------
289
289
290 $ testrevs 'desc("C-A0")'
290 $ testrevs 'desc("C-A0")'
291 ### Matched revisions###
291 ### Matched revisions###
292 84fcb0dfe17b: C-A0
292 84fcb0dfe17b: C-A0
293 ### Relevant markers ###
293 ### Relevant markers ###
294 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
294 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
295 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
295 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
296 # bundling: 1 changesets found
296 # bundling: 1 changesets found
297 ### Bundled markers ###
297 ### Bundled markers ###
298 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
298 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
299 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
299 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
300 ### diff <relevant> <bundled> ###
300 ### diff <relevant> <bundled> ###
301 #################################
301 #################################
302 ### Exclusive markers ###
302 ### Exclusive markers ###
303
303
304 (The strip markers is considered exclusive to the pruned changeset even if it
304 (The strip markers is considered exclusive to the pruned changeset even if it
305 is also considered "relevant" to its parent. This allows to strip prune
305 is also considered "relevant" to its parent. This allows to strip prune
306 markers. This avoid leaving prune markers from dead-end that could be
306 markers. This avoid leaving prune markers from dead-end that could be
307 problematic)
307 problematic)
308
308
309 $ testrevs 'desc("C-B0")'
309 $ testrevs 'desc("C-B0")'
310 ### Matched revisions###
310 ### Matched revisions###
311 29f93b1df87b: C-B0
311 29f93b1df87b: C-B0
312 ### Relevant markers ###
312 ### Relevant markers ###
313 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
313 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
314 # bundling: 1 changesets found
314 # bundling: 1 changesets found
315 ### Bundled markers ###
315 ### Bundled markers ###
316 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
316 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
317 ### diff <relevant> <bundled> ###
317 ### diff <relevant> <bundled> ###
318 #################################
318 #################################
319 ### Exclusive markers ###
319 ### Exclusive markers ###
320 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
320 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
321 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/29f93b1df87b-7fb32101-backup.hg (glob)
321 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/29f93b1df87b-7fb32101-backup.hg (glob)
322 ### Backup markers ###
322 ### Backup markers ###
323 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
323 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
324 ### diff <relevant> <backed-up> ###
324 ### diff <relevant> <backed-up> ###
325 #################################
325 #################################
326 ### Stripped markers ###
326 ### Stripped markers ###
327 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
327 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
328 ### diff <exclusive> <stripped> ###
328 ### diff <exclusive> <stripped> ###
329 #################################
329 #################################
330 # unbundling: adding changesets
330 # unbundling: adding changesets
331 # unbundling: adding manifests
331 # unbundling: adding manifests
332 # unbundling: adding file changes
332 # unbundling: adding file changes
333 # unbundling: added 1 changesets with 1 changes to 1 files
333 # unbundling: added 1 changesets with 1 changes to 1 files
334 # unbundling: 1 new obsolescence markers
334 # unbundling: 1 new obsolescence markers
335 # unbundling: (run 'hg update' to get a working copy)
335 # unbundling: (run 'hg update' to get a working copy)
336
336
337 $ testrevs 'desc("C-A1")'
337 $ testrevs 'desc("C-A1")'
338 ### Matched revisions###
338 ### Matched revisions###
339 cf2c22470d67: C-A1
339 cf2c22470d67: C-A1
340 ### Relevant markers ###
340 ### Relevant markers ###
341 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
341 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
342 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
342 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
343 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
343 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
344 # bundling: 1 changesets found
344 # bundling: 1 changesets found
345 ### Bundled markers ###
345 ### Bundled markers ###
346 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
346 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
347 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
347 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
348 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
348 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
349 ### diff <relevant> <bundled> ###
349 ### diff <relevant> <bundled> ###
350 #################################
350 #################################
351 ### Exclusive markers ###
351 ### Exclusive markers ###
352 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
352 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
353 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
353 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
354 ### Backup markers ###
354 ### Backup markers ###
355 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
355 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
356 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
356 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
357 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
357 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
358 ### diff <relevant> <backed-up> ###
358 ### diff <relevant> <backed-up> ###
359 #################################
359 #################################
360 ### Stripped markers ###
360 ### Stripped markers ###
361 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
361 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
362 ### diff <exclusive> <stripped> ###
362 ### diff <exclusive> <stripped> ###
363 #################################
363 #################################
364 # unbundling: adding changesets
364 # unbundling: adding changesets
365 # unbundling: adding manifests
365 # unbundling: adding manifests
366 # unbundling: adding file changes
366 # unbundling: adding file changes
367 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
367 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
368 # unbundling: 1 new obsolescence markers
368 # unbundling: 1 new obsolescence markers
369 # unbundling: (run 'hg heads' to see heads)
369 # unbundling: (run 'hg heads' to see heads)
370
370
371 bundling multiple revisions
371 bundling multiple revisions
372
372
373 $ testrevs 'desc("C-A")'
373 $ testrevs 'desc("C-A")'
374 ### Matched revisions###
374 ### Matched revisions###
375 84fcb0dfe17b: C-A0
375 84fcb0dfe17b: C-A0
376 cf2c22470d67: C-A1
376 cf2c22470d67: C-A1
377 ### Relevant markers ###
377 ### Relevant markers ###
378 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
378 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
379 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
379 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
380 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
380 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
381 # bundling: 2 changesets found
381 # bundling: 2 changesets found
382 ### Bundled markers ###
382 ### Bundled markers ###
383 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
383 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
384 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
384 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
385 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
385 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
386 ### diff <relevant> <bundled> ###
386 ### diff <relevant> <bundled> ###
387 #################################
387 #################################
388 ### Exclusive markers ###
388 ### Exclusive markers ###
389 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
389 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
390 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
390 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
391
391
392 $ testrevs 'desc("C-")'
392 $ testrevs 'desc("C-")'
393 ### Matched revisions###
393 ### Matched revisions###
394 29f93b1df87b: C-B0
394 29f93b1df87b: C-B0
395 84fcb0dfe17b: C-A0
395 84fcb0dfe17b: C-A0
396 cf2c22470d67: C-A1
396 cf2c22470d67: C-A1
397 ### Relevant markers ###
397 ### Relevant markers ###
398 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
398 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
399 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
399 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
400 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
400 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
401 # bundling: 3 changesets found
401 # bundling: 3 changesets found
402 ### Bundled markers ###
402 ### Bundled markers ###
403 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
403 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
404 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
404 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
405 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
405 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
406 ### diff <relevant> <bundled> ###
406 ### diff <relevant> <bundled> ###
407 #################################
407 #################################
408 ### Exclusive markers ###
408 ### Exclusive markers ###
409 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
409 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
410 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
410 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
411 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
411 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
412 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-884c33b0-backup.hg (glob)
412 # stripping: saved backup bundle to $TESTTMP/prune/.hg/strip-backup/cf2c22470d67-884c33b0-backup.hg (glob)
413 ### Backup markers ###
413 ### Backup markers ###
414 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
414 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
415 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
415 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
416 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
416 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
417 ### diff <relevant> <backed-up> ###
417 ### diff <relevant> <backed-up> ###
418 #################################
418 #################################
419 ### Stripped markers ###
419 ### Stripped markers ###
420 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
420 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
421 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
421 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
422 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
422 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
423 ### diff <exclusive> <stripped> ###
423 ### diff <exclusive> <stripped> ###
424 #################################
424 #################################
425 # unbundling: adding changesets
425 # unbundling: adding changesets
426 # unbundling: adding manifests
426 # unbundling: adding manifests
427 # unbundling: adding file changes
427 # unbundling: adding file changes
428 # unbundling: added 3 changesets with 3 changes to 3 files (+1 heads)
428 # unbundling: added 3 changesets with 3 changes to 3 files (+1 heads)
429 # unbundling: 3 new obsolescence markers
429 # unbundling: 3 new obsolescence markers
430 # unbundling: (run 'hg heads' to see heads)
430 # unbundling: (run 'hg heads' to see heads)
431
431
432 chain with precursors also pruned
432 chain with precursors also pruned
433 =================================
433 =================================
434
434
435 . A0 (also pruned)
435 . A0 (also pruned)
436 . β‡ ΓΈβ‡ β—” A1
436 . β‡ ΓΈβ‡ β—” A1
437 . |
437 . |
438 . ●
438 . ●
439
439
440 setup
440 setup
441 -----
441 -----
442
442
443 $ mktestrepo prune-inline
443 $ mktestrepo prune-inline
444 $ mkcommit 'C-A0'
444 $ mkcommit 'C-A0'
445 $ hg up 'desc("ROOT")'
445 $ hg up 'desc("ROOT")'
446 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
446 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
447 $ mkcommit 'C-A1'
447 $ mkcommit 'C-A1'
448 created new head
448 created new head
449 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
449 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
450 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
450 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
451 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
451 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
452 $ hg up 'desc("ROOT")'
452 $ hg up 'desc("ROOT")'
453 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
453 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
454 $ hg log --hidden -G
454 $ hg log --hidden -G
455 o cf2c22470d67: C-A1
455 o cf2c22470d67: C-A1
456 |
456 |
457 | x 84fcb0dfe17b: C-A0
457 | x 84fcb0dfe17b: C-A0
458 |/
458 |/
459 @ ea207398892e: ROOT
459 @ ea207398892e: ROOT
460
460
461 $ hg debugobsolete
461 $ hg debugobsolete
462 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
462 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
463 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
463 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
464 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
464 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
465
465
466 Actual testing
466 Actual testing
467 --------------
467 --------------
468
468
469 $ testrevs 'desc("C-A0")'
469 $ testrevs 'desc("C-A0")'
470 ### Matched revisions###
470 ### Matched revisions###
471 84fcb0dfe17b: C-A0
471 84fcb0dfe17b: C-A0
472 ### Relevant markers ###
472 ### Relevant markers ###
473 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
473 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
474 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
474 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
475 # bundling: 1 changesets found
475 # bundling: 1 changesets found
476 ### Bundled markers ###
476 ### Bundled markers ###
477 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
477 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
478 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
478 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
479 ### diff <relevant> <bundled> ###
479 ### diff <relevant> <bundled> ###
480 #################################
480 #################################
481 ### Exclusive markers ###
481 ### Exclusive markers ###
482 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg (glob)
482 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/84fcb0dfe17b-6454bbdc-backup.hg (glob)
483 ### Backup markers ###
483 ### Backup markers ###
484 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
484 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
485 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
485 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
486 ### diff <relevant> <backed-up> ###
486 ### diff <relevant> <backed-up> ###
487 #################################
487 #################################
488 ### Stripped markers ###
488 ### Stripped markers ###
489 ### diff <exclusive> <stripped> ###
489 ### diff <exclusive> <stripped> ###
490 #################################
490 #################################
491 # unbundling: adding changesets
491 # unbundling: adding changesets
492 # unbundling: adding manifests
492 # unbundling: adding manifests
493 # unbundling: adding file changes
493 # unbundling: adding file changes
494 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
494 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
495 # unbundling: (run 'hg heads' to see heads)
495 # unbundling: (run 'hg heads' to see heads)
496
496
497 $ testrevs 'desc("C-A1")'
497 $ testrevs 'desc("C-A1")'
498 ### Matched revisions###
498 ### Matched revisions###
499 cf2c22470d67: C-A1
499 cf2c22470d67: C-A1
500 ### Relevant markers ###
500 ### Relevant markers ###
501 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
501 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
502 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
502 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
503 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
503 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
504 # bundling: 1 changesets found
504 # bundling: 1 changesets found
505 ### Bundled markers ###
505 ### Bundled markers ###
506 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
506 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
507 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
507 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
508 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
508 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
509 ### diff <relevant> <bundled> ###
509 ### diff <relevant> <bundled> ###
510 #################################
510 #################################
511 ### Exclusive markers ###
511 ### Exclusive markers ###
512 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
512 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
513 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
513 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
514 ### Backup markers ###
514 ### Backup markers ###
515 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
515 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
516 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
516 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
517 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
517 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
518 ### diff <relevant> <backed-up> ###
518 ### diff <relevant> <backed-up> ###
519 #################################
519 #################################
520 ### Stripped markers ###
520 ### Stripped markers ###
521 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
521 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
522 ### diff <exclusive> <stripped> ###
522 ### diff <exclusive> <stripped> ###
523 #################################
523 #################################
524 # unbundling: adding changesets
524 # unbundling: adding changesets
525 # unbundling: adding manifests
525 # unbundling: adding manifests
526 # unbundling: adding file changes
526 # unbundling: adding file changes
527 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
527 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
528 # unbundling: 1 new obsolescence markers
528 # unbundling: 1 new obsolescence markers
529 # unbundling: (run 'hg heads' to see heads)
529 # unbundling: (run 'hg heads' to see heads)
530
530
531 $ testrevs 'desc("C-A")'
531 $ testrevs 'desc("C-A")'
532 ### Matched revisions###
532 ### Matched revisions###
533 84fcb0dfe17b: C-A0
533 84fcb0dfe17b: C-A0
534 cf2c22470d67: C-A1
534 cf2c22470d67: C-A1
535 ### Relevant markers ###
535 ### Relevant markers ###
536 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
536 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
537 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
537 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
538 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
538 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
539 # bundling: 2 changesets found
539 # bundling: 2 changesets found
540 ### Bundled markers ###
540 ### Bundled markers ###
541 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
541 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
542 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
542 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
543 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
543 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
544 ### diff <relevant> <bundled> ###
544 ### diff <relevant> <bundled> ###
545 #################################
545 #################################
546 ### Exclusive markers ###
546 ### Exclusive markers ###
547 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
547 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
548 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
548 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
549 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
549 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
550 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg (glob)
550 # stripping: saved backup bundle to $TESTTMP/prune-inline/.hg/strip-backup/cf2c22470d67-fce4fc64-backup.hg (glob)
551 ### Backup markers ###
551 ### Backup markers ###
552 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
552 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
553 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
553 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
554 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
554 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
555 ### diff <relevant> <backed-up> ###
555 ### diff <relevant> <backed-up> ###
556 #################################
556 #################################
557 ### Stripped markers ###
557 ### Stripped markers ###
558 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
558 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
559 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
559 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
560 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
560 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
561 ### diff <exclusive> <stripped> ###
561 ### diff <exclusive> <stripped> ###
562 #################################
562 #################################
563 # unbundling: adding changesets
563 # unbundling: adding changesets
564 # unbundling: adding manifests
564 # unbundling: adding manifests
565 # unbundling: adding file changes
565 # unbundling: adding file changes
566 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
566 # unbundling: added 2 changesets with 2 changes to 2 files (+1 heads)
567 # unbundling: 3 new obsolescence markers
567 # unbundling: 3 new obsolescence markers
568 # unbundling: (run 'hg heads' to see heads)
568 # unbundling: (run 'hg heads' to see heads)
569
569
570 chain with missing prune
570 chain with missing prune
571 ========================
571 ========================
572
572
573 . βŠ— B
573 . βŠ— B
574 . |
574 . |
575 . β‡ β—Œβ‡ β—” A1
575 . β‡ β—Œβ‡ β—” A1
576 . |
576 . |
577 . ●
577 . ●
578
578
579 setup
579 setup
580 -----
580 -----
581
581
582 $ mktestrepo missing-prune
582 $ mktestrepo missing-prune
583 $ mkcommit 'C-A0'
583 $ mkcommit 'C-A0'
584 $ mkcommit 'C-B0'
584 $ mkcommit 'C-B0'
585 $ hg up 'desc("ROOT")'
585 $ hg up 'desc("ROOT")'
586 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
586 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
587 $ mkcommit 'C-A1'
587 $ mkcommit 'C-A1'
588 created new head
588 created new head
589 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
589 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
590 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
590 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
591 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
591 $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
592
592
593 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
593 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
594
594
595 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
595 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
596
596
597 $ hg up 'desc("ROOT")'
597 $ hg up 'desc("ROOT")'
598 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
598 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
599 $ hg log --hidden -G
599 $ hg log --hidden -G
600 o cf2c22470d67: C-A1
600 o cf2c22470d67: C-A1
601 |
601 |
602 @ ea207398892e: ROOT
602 @ ea207398892e: ROOT
603
603
604 $ hg debugobsolete
604 $ hg debugobsolete
605 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
605 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
606 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
606 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
607 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
607 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
608
608
609 Actual testing
609 Actual testing
610 --------------
610 --------------
611
611
612 $ testrevs 'desc("C-A1")'
612 $ testrevs 'desc("C-A1")'
613 ### Matched revisions###
613 ### Matched revisions###
614 cf2c22470d67: C-A1
614 cf2c22470d67: C-A1
615 ### Relevant markers ###
615 ### Relevant markers ###
616 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
616 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
617 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
617 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
618 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
618 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
619 # bundling: 1 changesets found
619 # bundling: 1 changesets found
620 ### Bundled markers ###
620 ### Bundled markers ###
621 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
621 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
622 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
622 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
623 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
623 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
624 ### diff <relevant> <bundled> ###
624 ### diff <relevant> <bundled> ###
625 #################################
625 #################################
626 ### Exclusive markers ###
626 ### Exclusive markers ###
627 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
627 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
628 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
628 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
629 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
629 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
630 # stripping: saved backup bundle to $TESTTMP/missing-prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
630 # stripping: saved backup bundle to $TESTTMP/missing-prune/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
631 ### Backup markers ###
631 ### Backup markers ###
632 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
632 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
633 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
633 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
634 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
634 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
635 ### diff <relevant> <backed-up> ###
635 ### diff <relevant> <backed-up> ###
636 #################################
636 #################################
637 ### Stripped markers ###
637 ### Stripped markers ###
638 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
638 29f93b1df87baee1824e014080d8adf145f81783 0 {84fcb0dfe17b256ebae52e05572993b9194c018a} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
639 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
639 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
640 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
640 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
641 ### diff <exclusive> <stripped> ###
641 ### diff <exclusive> <stripped> ###
642 #################################
642 #################################
643 # unbundling: adding changesets
643 # unbundling: adding changesets
644 # unbundling: adding manifests
644 # unbundling: adding manifests
645 # unbundling: adding file changes
645 # unbundling: adding file changes
646 # unbundling: added 1 changesets with 1 changes to 1 files
646 # unbundling: added 1 changesets with 1 changes to 1 files
647 # unbundling: 3 new obsolescence markers
647 # unbundling: 3 new obsolescence markers
648 # unbundling: (run 'hg update' to get a working copy)
648 # unbundling: (run 'hg update' to get a working copy)
649
649
650 chain with precursors also pruned
650 chain with precursors also pruned
651 =================================
651 =================================
652
652
653 . A0 (also pruned)
653 . A0 (also pruned)
654 . β‡ β—Œβ‡ β—” A1
654 . β‡ β—Œβ‡ β—” A1
655 . |
655 . |
656 . ●
656 . ●
657
657
658 setup
658 setup
659 -----
659 -----
660
660
661 $ mktestrepo prune-inline-missing
661 $ mktestrepo prune-inline-missing
662 $ mkcommit 'C-A0'
662 $ mkcommit 'C-A0'
663 $ hg up 'desc("ROOT")'
663 $ hg up 'desc("ROOT")'
664 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
664 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
665 $ mkcommit 'C-A1'
665 $ mkcommit 'C-A1'
666 created new head
666 created new head
667 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
667 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
668 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
668 $ hg debugobsolete --record-parents `getid 'desc("C-A0")'`
669 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
669 $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
670
670
671 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
671 (it is annoying to create prune with parent data without the changeset, so we strip it after the fact)
672
672
673 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
673 $ hg strip --hidden --rev 'desc("C-A0")::' --no-backup --config devel.strip-obsmarkers=no
674
674
675 $ hg up 'desc("ROOT")'
675 $ hg up 'desc("ROOT")'
676 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
676 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
677 $ hg log --hidden -G
677 $ hg log --hidden -G
678 o cf2c22470d67: C-A1
678 o cf2c22470d67: C-A1
679 |
679 |
680 @ ea207398892e: ROOT
680 @ ea207398892e: ROOT
681
681
682 $ hg debugobsolete
682 $ hg debugobsolete
683 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
683 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
684 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
684 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
685 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
685 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
686
686
687 Actual testing
687 Actual testing
688 --------------
688 --------------
689
689
690 $ testrevs 'desc("C-A1")'
690 $ testrevs 'desc("C-A1")'
691 ### Matched revisions###
691 ### Matched revisions###
692 cf2c22470d67: C-A1
692 cf2c22470d67: C-A1
693 ### Relevant markers ###
693 ### Relevant markers ###
694 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
694 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
695 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
695 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
696 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
696 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
697 # bundling: 1 changesets found
697 # bundling: 1 changesets found
698 ### Bundled markers ###
698 ### Bundled markers ###
699 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
699 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
700 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
700 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
701 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
701 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
702 ### diff <relevant> <bundled> ###
702 ### diff <relevant> <bundled> ###
703 #################################
703 #################################
704 ### Exclusive markers ###
704 ### Exclusive markers ###
705 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
705 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
706 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
706 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
707 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
707 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
708 # stripping: saved backup bundle to $TESTTMP/prune-inline-missing/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
708 # stripping: saved backup bundle to $TESTTMP/prune-inline-missing/.hg/strip-backup/cf2c22470d67-fa0f07b0-backup.hg (glob)
709 ### Backup markers ###
709 ### Backup markers ###
710 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
710 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
711 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
711 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
712 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
712 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
713 ### diff <relevant> <backed-up> ###
713 ### diff <relevant> <backed-up> ###
714 #################################
714 #################################
715 ### Stripped markers ###
715 ### Stripped markers ###
716 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
716 84fcb0dfe17b256ebae52e05572993b9194c018a 0 {ea207398892eb49e06441f10dda2a731f0450f20} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
717 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
717 84fcb0dfe17b256ebae52e05572993b9194c018a cf2c22470d67233004e934a31184ac2b35389914 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
718 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
718 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 84fcb0dfe17b256ebae52e05572993b9194c018a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
719 ### diff <exclusive> <stripped> ###
719 ### diff <exclusive> <stripped> ###
720 #################################
720 #################################
721 # unbundling: adding changesets
721 # unbundling: adding changesets
722 # unbundling: adding manifests
722 # unbundling: adding manifests
723 # unbundling: adding file changes
723 # unbundling: adding file changes
724 # unbundling: added 1 changesets with 1 changes to 1 files
724 # unbundling: added 1 changesets with 1 changes to 1 files
725 # unbundling: 3 new obsolescence markers
725 # unbundling: 3 new obsolescence markers
726 # unbundling: (run 'hg update' to get a working copy)
726 # unbundling: (run 'hg update' to get a working copy)
727
727
728 Chain with fold and split
728 Chain with fold and split
729 =========================
729 =========================
730
730
731 setup
731 setup
732 -----
732 -----
733
733
734 $ mktestrepo split-fold
734 $ mktestrepo split-fold
735 $ mkcommit 'C-A'
735 $ mkcommit 'C-A'
736 $ hg up 'desc("ROOT")'
736 $ hg up 'desc("ROOT")'
737 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
737 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
738 $ mkcommit 'C-B'
738 $ mkcommit 'C-B'
739 created new head
739 created new head
740 $ hg up 'desc("ROOT")'
740 $ hg up 'desc("ROOT")'
741 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
741 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
742 $ mkcommit 'C-C'
742 $ mkcommit 'C-C'
743 created new head
743 created new head
744 $ hg up 'desc("ROOT")'
744 $ hg up 'desc("ROOT")'
745 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
745 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
746 $ mkcommit 'C-D'
746 $ mkcommit 'C-D'
747 created new head
747 created new head
748 $ hg up 'desc("ROOT")'
748 $ hg up 'desc("ROOT")'
749 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
749 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
750 $ mkcommit 'C-E'
750 $ mkcommit 'C-E'
751 created new head
751 created new head
752 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A")'`
752 $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A")'`
753 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-B")'` `getid 'desc("C-C")'` # record split
753 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-B")'` `getid 'desc("C-C")'` # record split
754 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-D")'` # other divergent
754 $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-D")'` # other divergent
755 $ hg debugobsolete `getid 'desc("C-A")'` b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0
755 $ hg debugobsolete `getid 'desc("C-A")'` b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0
756 $ hg debugobsolete b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 `getid 'desc("C-E")'`
756 $ hg debugobsolete b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 `getid 'desc("C-E")'`
757 $ hg debugobsolete `getid 'desc("C-B")'` `getid 'desc("C-E")'`
757 $ hg debugobsolete `getid 'desc("C-B")'` `getid 'desc("C-E")'`
758 $ hg debugobsolete `getid 'desc("C-C")'` `getid 'desc("C-E")'`
758 $ hg debugobsolete `getid 'desc("C-C")'` `getid 'desc("C-E")'`
759 $ hg debugobsolete `getid 'desc("C-D")'` `getid 'desc("C-E")'`
759 $ hg debugobsolete `getid 'desc("C-D")'` `getid 'desc("C-E")'`
760 $ hg debugobsolete c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 `getid 'desc("C-E")'`
760 $ hg debugobsolete c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 `getid 'desc("C-E")'`
761
761
762 $ hg up 'desc("ROOT")'
762 $ hg up 'desc("ROOT")'
763 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
763 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
764 $ hg log --hidden -G
764 $ hg log --hidden -G
765 o 2f20ff6509f0: C-E
765 o 2f20ff6509f0: C-E
766 |
766 |
767 | x 06dc9da25ef0: C-D
767 | x 06dc9da25ef0: C-D
768 |/
768 |/
769 | x 27ec657ca21d: C-C
769 | x 27ec657ca21d: C-C
770 |/
770 |/
771 | x a9b9da38ed96: C-B
771 | x a9b9da38ed96: C-B
772 |/
772 |/
773 | x 9ac430e15fca: C-A
773 | x 9ac430e15fca: C-A
774 |/
774 |/
775 @ ea207398892e: ROOT
775 @ ea207398892e: ROOT
776
776
777 $ hg debugobsolete
777 $ hg debugobsolete
778 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
778 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
779 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
779 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
780 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
780 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
781 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
781 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
782 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
782 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
783 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
783 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
784 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
784 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
785 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
785 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
786 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
786 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
787
787
788 Actual testing
788 Actual testing
789 --------------
789 --------------
790
790
791 $ testrevs 'desc("C-A")'
791 $ testrevs 'desc("C-A")'
792 ### Matched revisions###
792 ### Matched revisions###
793 9ac430e15fca: C-A
793 9ac430e15fca: C-A
794 ### Relevant markers ###
794 ### Relevant markers ###
795 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
795 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
796 # bundling: 1 changesets found
796 # bundling: 1 changesets found
797 ### Bundled markers ###
797 ### Bundled markers ###
798 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
798 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
799 ### diff <relevant> <bundled> ###
799 ### diff <relevant> <bundled> ###
800 #################################
800 #################################
801 ### Exclusive markers ###
801 ### Exclusive markers ###
802 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-81204eba-backup.hg (glob)
802 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-81204eba-backup.hg (glob)
803 ### Backup markers ###
803 ### Backup markers ###
804 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
804 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
805 ### diff <relevant> <backed-up> ###
805 ### diff <relevant> <backed-up> ###
806 #################################
806 #################################
807 ### Stripped markers ###
807 ### Stripped markers ###
808 ### diff <exclusive> <stripped> ###
808 ### diff <exclusive> <stripped> ###
809 #################################
809 #################################
810 # unbundling: adding changesets
810 # unbundling: adding changesets
811 # unbundling: adding manifests
811 # unbundling: adding manifests
812 # unbundling: adding file changes
812 # unbundling: adding file changes
813 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
813 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
814 # unbundling: (run 'hg heads' to see heads)
814 # unbundling: (run 'hg heads' to see heads)
815
815
816 $ testrevs 'desc("C-B")'
816 $ testrevs 'desc("C-B")'
817 ### Matched revisions###
817 ### Matched revisions###
818 a9b9da38ed96: C-B
818 a9b9da38ed96: C-B
819 ### Relevant markers ###
819 ### Relevant markers ###
820 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
820 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
821 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
821 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
822 # bundling: 1 changesets found
822 # bundling: 1 changesets found
823 ### Bundled markers ###
823 ### Bundled markers ###
824 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
824 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
825 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
825 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
826 ### diff <relevant> <bundled> ###
826 ### diff <relevant> <bundled> ###
827 #################################
827 #################################
828 ### Exclusive markers ###
828 ### Exclusive markers ###
829 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-7465d6e9-backup.hg (glob)
829 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-7465d6e9-backup.hg (glob)
830 ### Backup markers ###
830 ### Backup markers ###
831 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
831 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
832 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
832 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
833 ### diff <relevant> <backed-up> ###
833 ### diff <relevant> <backed-up> ###
834 #################################
834 #################################
835 ### Stripped markers ###
835 ### Stripped markers ###
836 ### diff <exclusive> <stripped> ###
836 ### diff <exclusive> <stripped> ###
837 #################################
837 #################################
838 # unbundling: adding changesets
838 # unbundling: adding changesets
839 # unbundling: adding manifests
839 # unbundling: adding manifests
840 # unbundling: adding file changes
840 # unbundling: adding file changes
841 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
841 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
842 # unbundling: (run 'hg heads' to see heads)
842 # unbundling: (run 'hg heads' to see heads)
843
843
844 $ testrevs 'desc("C-C")'
844 $ testrevs 'desc("C-C")'
845 ### Matched revisions###
845 ### Matched revisions###
846 27ec657ca21d: C-C
846 27ec657ca21d: C-C
847 ### Relevant markers ###
847 ### Relevant markers ###
848 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
848 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
849 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
849 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
850 # bundling: 1 changesets found
850 # bundling: 1 changesets found
851 ### Bundled markers ###
851 ### Bundled markers ###
852 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
852 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
853 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
853 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
854 ### diff <relevant> <bundled> ###
854 ### diff <relevant> <bundled> ###
855 #################################
855 #################################
856 ### Exclusive markers ###
856 ### Exclusive markers ###
857 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/27ec657ca21d-d5dd1c7c-backup.hg (glob)
857 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/27ec657ca21d-d5dd1c7c-backup.hg (glob)
858 ### Backup markers ###
858 ### Backup markers ###
859 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
859 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
860 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
860 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
861 ### diff <relevant> <backed-up> ###
861 ### diff <relevant> <backed-up> ###
862 #################################
862 #################################
863 ### Stripped markers ###
863 ### Stripped markers ###
864 ### diff <exclusive> <stripped> ###
864 ### diff <exclusive> <stripped> ###
865 #################################
865 #################################
866 # unbundling: adding changesets
866 # unbundling: adding changesets
867 # unbundling: adding manifests
867 # unbundling: adding manifests
868 # unbundling: adding file changes
868 # unbundling: adding file changes
869 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
869 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
870 # unbundling: (run 'hg heads' to see heads)
870 # unbundling: (run 'hg heads' to see heads)
871
871
872 $ testrevs 'desc("C-D")'
872 $ testrevs 'desc("C-D")'
873 ### Matched revisions###
873 ### Matched revisions###
874 06dc9da25ef0: C-D
874 06dc9da25ef0: C-D
875 ### Relevant markers ###
875 ### Relevant markers ###
876 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
876 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
877 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
877 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
878 # bundling: 1 changesets found
878 # bundling: 1 changesets found
879 ### Bundled markers ###
879 ### Bundled markers ###
880 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
880 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
881 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
881 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
882 ### diff <relevant> <bundled> ###
882 ### diff <relevant> <bundled> ###
883 #################################
883 #################################
884 ### Exclusive markers ###
884 ### Exclusive markers ###
885 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/06dc9da25ef0-9b1c0a91-backup.hg (glob)
885 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/06dc9da25ef0-9b1c0a91-backup.hg (glob)
886 ### Backup markers ###
886 ### Backup markers ###
887 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
887 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
888 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
888 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
889 ### diff <relevant> <backed-up> ###
889 ### diff <relevant> <backed-up> ###
890 #################################
890 #################################
891 ### Stripped markers ###
891 ### Stripped markers ###
892 ### diff <exclusive> <stripped> ###
892 ### diff <exclusive> <stripped> ###
893 #################################
893 #################################
894 # unbundling: adding changesets
894 # unbundling: adding changesets
895 # unbundling: adding manifests
895 # unbundling: adding manifests
896 # unbundling: adding file changes
896 # unbundling: adding file changes
897 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
897 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
898 # unbundling: (run 'hg heads' to see heads)
898 # unbundling: (run 'hg heads' to see heads)
899
899
900 $ testrevs 'desc("C-E")'
900 $ testrevs 'desc("C-E")'
901 ### Matched revisions###
901 ### Matched revisions###
902 2f20ff6509f0: C-E
902 2f20ff6509f0: C-E
903 ### Relevant markers ###
903 ### Relevant markers ###
904 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
904 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
905 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
905 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
906 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
906 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
907 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
907 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
908 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
908 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
909 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
909 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
910 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
910 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
911 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
911 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
912 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
912 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
913 # bundling: 1 changesets found
913 # bundling: 1 changesets found
914 ### Bundled markers ###
914 ### Bundled markers ###
915 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
915 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
916 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
916 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
917 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
917 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
918 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
918 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
919 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
919 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
920 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
920 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
921 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
921 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
922 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
922 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
923 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
923 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
924 ### diff <relevant> <bundled> ###
924 ### diff <relevant> <bundled> ###
925 #################################
925 #################################
926 ### Exclusive markers ###
926 ### Exclusive markers ###
927 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
927 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
928 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
928 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
929 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
929 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
930 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
930 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
931 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
931 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
932 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
932 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
933 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-8adeb22d-backup.hg (glob)
933 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-8adeb22d-backup.hg (glob)
934 ### Backup markers ###
934 ### Backup markers ###
935 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
935 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
936 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
936 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
937 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
937 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
938 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
938 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
939 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
939 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
940 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
940 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
941 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
941 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
942 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
942 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
943 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
943 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
944 ### diff <relevant> <backed-up> ###
944 ### diff <relevant> <backed-up> ###
945 #################################
945 #################################
946 ### Stripped markers ###
946 ### Stripped markers ###
947 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
947 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
948 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
948 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
949 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
949 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
950 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
950 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
951 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
951 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
952 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
952 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
953 ### diff <exclusive> <stripped> ###
953 ### diff <exclusive> <stripped> ###
954 #################################
954 #################################
955 # unbundling: adding changesets
955 # unbundling: adding changesets
956 # unbundling: adding manifests
956 # unbundling: adding manifests
957 # unbundling: adding file changes
957 # unbundling: adding file changes
958 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
958 # unbundling: added 1 changesets with 1 changes to 1 files (+1 heads)
959 # unbundling: 6 new obsolescence markers
959 # unbundling: 6 new obsolescence markers
960 # unbundling: (run 'hg heads' to see heads)
960 # unbundling: (run 'hg heads' to see heads)
961
961
962 Bundle multiple revisions
962 Bundle multiple revisions
963
963
964 * each part of the split
964 * each part of the split
965
965
966 $ testrevs 'desc("C-B") + desc("C-C")'
966 $ testrevs 'desc("C-B") + desc("C-C")'
967 ### Matched revisions###
967 ### Matched revisions###
968 27ec657ca21d: C-C
968 27ec657ca21d: C-C
969 a9b9da38ed96: C-B
969 a9b9da38ed96: C-B
970 ### Relevant markers ###
970 ### Relevant markers ###
971 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
971 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
972 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
972 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
973 # bundling: 2 changesets found
973 # bundling: 2 changesets found
974 ### Bundled markers ###
974 ### Bundled markers ###
975 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
975 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
976 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
976 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
977 ### diff <relevant> <bundled> ###
977 ### diff <relevant> <bundled> ###
978 #################################
978 #################################
979 ### Exclusive markers ###
979 ### Exclusive markers ###
980 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-0daf625a-backup.hg (glob)
980 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-0daf625a-backup.hg (glob)
981 ### Backup markers ###
981 ### Backup markers ###
982 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
982 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
983 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
983 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
984 ### diff <relevant> <backed-up> ###
984 ### diff <relevant> <backed-up> ###
985 #################################
985 #################################
986 ### Stripped markers ###
986 ### Stripped markers ###
987 ### diff <exclusive> <stripped> ###
987 ### diff <exclusive> <stripped> ###
988 #################################
988 #################################
989 # unbundling: adding changesets
989 # unbundling: adding changesets
990 # unbundling: adding manifests
990 # unbundling: adding manifests
991 # unbundling: adding file changes
991 # unbundling: adding file changes
992 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
992 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
993 # unbundling: (run 'hg heads' to see heads)
993 # unbundling: (run 'hg heads' to see heads)
994
994
995 * top one and other divergent
995 * top one and other divergent
996
996
997 $ testrevs 'desc("C-E") + desc("C-D")'
997 $ testrevs 'desc("C-E") + desc("C-D")'
998 ### Matched revisions###
998 ### Matched revisions###
999 06dc9da25ef0: C-D
999 06dc9da25ef0: C-D
1000 2f20ff6509f0: C-E
1000 2f20ff6509f0: C-E
1001 ### Relevant markers ###
1001 ### Relevant markers ###
1002 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1002 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1003 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1003 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1004 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1004 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1005 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1005 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1006 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1006 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1007 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1007 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1008 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1008 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1009 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1009 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1010 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1010 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1011 # bundling: 2 changesets found
1011 # bundling: 2 changesets found
1012 ### Bundled markers ###
1012 ### Bundled markers ###
1013 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1013 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1014 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1014 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1015 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1015 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1016 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1016 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1017 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1017 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1018 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1018 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1019 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1019 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1020 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1020 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1021 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1021 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1022 ### diff <relevant> <bundled> ###
1022 ### diff <relevant> <bundled> ###
1023 #################################
1023 #################################
1024 ### Exclusive markers ###
1024 ### Exclusive markers ###
1025 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1025 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1026 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1026 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1027 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1027 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1028 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1028 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1029 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1029 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1030 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1030 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1031 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1031 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1032 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-bf1b80f4-backup.hg (glob)
1032 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-bf1b80f4-backup.hg (glob)
1033 ### Backup markers ###
1033 ### Backup markers ###
1034 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1034 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1035 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1035 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1036 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1036 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1037 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1037 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1038 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1038 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1039 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1039 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1040 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1040 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1041 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1041 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1042 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1042 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1043 ### diff <relevant> <backed-up> ###
1043 ### diff <relevant> <backed-up> ###
1044 #################################
1044 #################################
1045 ### Stripped markers ###
1045 ### Stripped markers ###
1046 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1046 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1047 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1047 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1048 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1048 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1049 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1049 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1050 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1050 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1051 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1051 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1052 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1052 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1053 ### diff <exclusive> <stripped> ###
1053 ### diff <exclusive> <stripped> ###
1054 #################################
1054 #################################
1055 # unbundling: adding changesets
1055 # unbundling: adding changesets
1056 # unbundling: adding manifests
1056 # unbundling: adding manifests
1057 # unbundling: adding file changes
1057 # unbundling: adding file changes
1058 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1058 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1059 # unbundling: 7 new obsolescence markers
1059 # unbundling: 7 new obsolescence markers
1060 # unbundling: (run 'hg heads' to see heads)
1060 # unbundling: (run 'hg heads' to see heads)
1061
1061
1062 * top one and initial precursors
1062 * top one and initial precursors
1063
1063
1064 $ testrevs 'desc("C-E") + desc("C-A")'
1064 $ testrevs 'desc("C-E") + desc("C-A")'
1065 ### Matched revisions###
1065 ### Matched revisions###
1066 2f20ff6509f0: C-E
1066 2f20ff6509f0: C-E
1067 9ac430e15fca: C-A
1067 9ac430e15fca: C-A
1068 ### Relevant markers ###
1068 ### Relevant markers ###
1069 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1069 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1070 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1070 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1071 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1071 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1072 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1072 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1073 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1073 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1074 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1074 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1075 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1075 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1076 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1076 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1077 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1077 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1078 # bundling: 2 changesets found
1078 # bundling: 2 changesets found
1079 ### Bundled markers ###
1079 ### Bundled markers ###
1080 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1080 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1081 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1081 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1082 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1082 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1083 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1083 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1084 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1084 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1085 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1085 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1086 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1086 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1087 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1087 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1088 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1088 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1089 ### diff <relevant> <bundled> ###
1089 ### diff <relevant> <bundled> ###
1090 #################################
1090 #################################
1091 ### Exclusive markers ###
1091 ### Exclusive markers ###
1092 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1092 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1093 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1093 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1094 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1094 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1095 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1095 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1096 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1096 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1097 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1097 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1098 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-36b6476a-backup.hg (glob)
1098 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-36b6476a-backup.hg (glob)
1099 ### Backup markers ###
1099 ### Backup markers ###
1100 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1100 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1101 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1101 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1102 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1102 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1103 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1103 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1104 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1104 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1105 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1105 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1106 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1106 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1107 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1107 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1108 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1108 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1109 ### diff <relevant> <backed-up> ###
1109 ### diff <relevant> <backed-up> ###
1110 #################################
1110 #################################
1111 ### Stripped markers ###
1111 ### Stripped markers ###
1112 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1112 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1113 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1113 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1114 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1114 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1115 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1115 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1116 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1116 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1117 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1117 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1118 ### diff <exclusive> <stripped> ###
1118 ### diff <exclusive> <stripped> ###
1119 #################################
1119 #################################
1120 # unbundling: adding changesets
1120 # unbundling: adding changesets
1121 # unbundling: adding manifests
1121 # unbundling: adding manifests
1122 # unbundling: adding file changes
1122 # unbundling: adding file changes
1123 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1123 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1124 # unbundling: 6 new obsolescence markers
1124 # unbundling: 6 new obsolescence markers
1125 # unbundling: (run 'hg heads' to see heads)
1125 # unbundling: (run 'hg heads' to see heads)
1126
1126
1127 * top one and one of the split
1127 * top one and one of the split
1128
1128
1129 $ testrevs 'desc("C-E") + desc("C-C")'
1129 $ testrevs 'desc("C-E") + desc("C-C")'
1130 ### Matched revisions###
1130 ### Matched revisions###
1131 27ec657ca21d: C-C
1131 27ec657ca21d: C-C
1132 2f20ff6509f0: C-E
1132 2f20ff6509f0: C-E
1133 ### Relevant markers ###
1133 ### Relevant markers ###
1134 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1134 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1135 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1135 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1136 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1136 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1137 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1137 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1138 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1138 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1139 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1139 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1140 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1140 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1141 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1141 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1142 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1142 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1143 # bundling: 2 changesets found
1143 # bundling: 2 changesets found
1144 ### Bundled markers ###
1144 ### Bundled markers ###
1145 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1145 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1146 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1146 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1147 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1147 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1148 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1148 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1149 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1149 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1150 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1150 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1151 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1151 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1152 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1152 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1153 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1153 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1154 ### diff <relevant> <bundled> ###
1154 ### diff <relevant> <bundled> ###
1155 #################################
1155 #################################
1156 ### Exclusive markers ###
1156 ### Exclusive markers ###
1157 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1157 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1158 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1158 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1159 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1159 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1160 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1160 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1161 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1161 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1162 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1162 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1163 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1163 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1164 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-5fdfcd7d-backup.hg (glob)
1164 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-5fdfcd7d-backup.hg (glob)
1165 ### Backup markers ###
1165 ### Backup markers ###
1166 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1166 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1167 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1167 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1168 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1168 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1169 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1169 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1170 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1170 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1171 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1171 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1172 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1172 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1173 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1173 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1174 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1174 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1175 ### diff <relevant> <backed-up> ###
1175 ### diff <relevant> <backed-up> ###
1176 #################################
1176 #################################
1177 ### Stripped markers ###
1177 ### Stripped markers ###
1178 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1178 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1179 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1179 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1180 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1180 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1181 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1181 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1182 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1182 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1183 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1183 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1184 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1184 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1185 ### diff <exclusive> <stripped> ###
1185 ### diff <exclusive> <stripped> ###
1186 #################################
1186 #################################
1187 # unbundling: adding changesets
1187 # unbundling: adding changesets
1188 # unbundling: adding manifests
1188 # unbundling: adding manifests
1189 # unbundling: adding file changes
1189 # unbundling: adding file changes
1190 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1190 # unbundling: added 2 changesets with 2 changes to 2 files (+2 heads)
1191 # unbundling: 7 new obsolescence markers
1191 # unbundling: 7 new obsolescence markers
1192 # unbundling: (run 'hg heads' to see heads)
1192 # unbundling: (run 'hg heads' to see heads)
1193
1193
1194 * all
1194 * all
1195
1195
1196 $ testrevs 'desc("C-")'
1196 $ testrevs 'desc("C-")'
1197 ### Matched revisions###
1197 ### Matched revisions###
1198 06dc9da25ef0: C-D
1198 06dc9da25ef0: C-D
1199 27ec657ca21d: C-C
1199 27ec657ca21d: C-C
1200 2f20ff6509f0: C-E
1200 2f20ff6509f0: C-E
1201 9ac430e15fca: C-A
1201 9ac430e15fca: C-A
1202 a9b9da38ed96: C-B
1202 a9b9da38ed96: C-B
1203 ### Relevant markers ###
1203 ### Relevant markers ###
1204 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1204 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1205 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1205 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1206 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1206 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1207 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1207 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1208 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1208 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1209 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1209 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1210 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1210 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1211 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1211 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1212 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1212 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1213 # bundling: 5 changesets found
1213 # bundling: 5 changesets found
1214 ### Bundled markers ###
1214 ### Bundled markers ###
1215 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1215 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1216 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1216 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1217 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1217 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1218 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1218 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1219 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1219 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1220 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1220 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1221 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1221 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1222 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1222 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1223 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1223 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1224 ### diff <relevant> <bundled> ###
1224 ### diff <relevant> <bundled> ###
1225 #################################
1225 #################################
1226 ### Exclusive markers ###
1226 ### Exclusive markers ###
1227 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1227 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1228 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1228 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1229 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1229 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1230 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1230 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1231 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1231 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1232 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1232 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1233 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1233 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1234 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1234 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1235 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1235 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1236 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-eeb4258f-backup.hg (glob)
1236 # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/a9b9da38ed96-eeb4258f-backup.hg (glob)
1237 ### Backup markers ###
1237 ### Backup markers ###
1238 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1238 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1239 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1239 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1240 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1240 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1241 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1241 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1242 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1242 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1243 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1243 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1244 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1244 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1245 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1245 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1246 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1246 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1247 ### diff <relevant> <backed-up> ###
1247 ### diff <relevant> <backed-up> ###
1248 #################################
1248 #################################
1249 ### Stripped markers ###
1249 ### Stripped markers ###
1250 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1250 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1251 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1251 27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1252 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1252 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1253 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1253 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c a9b9da38ed96f8c6c14f429441f625a344eb4696 27ec657ca21dd27c36c99fa75586f72ff0d442f1 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1254 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1254 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1255 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1255 a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 9ac430e15fca923b0ba027ca85d4d75c5c9cb73c 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1256 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1256 a9b9da38ed96f8c6c14f429441f625a344eb4696 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1257 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1257 b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1258 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1258 c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1259 ### diff <exclusive> <stripped> ###
1259 ### diff <exclusive> <stripped> ###
1260 #################################
1260 #################################
1261 # unbundling: adding changesets
1261 # unbundling: adding changesets
1262 # unbundling: adding manifests
1262 # unbundling: adding manifests
1263 # unbundling: adding file changes
1263 # unbundling: adding file changes
1264 # unbundling: added 5 changesets with 5 changes to 5 files (+4 heads)
1264 # unbundling: added 5 changesets with 5 changes to 5 files (+4 heads)
1265 # unbundling: 9 new obsolescence markers
1265 # unbundling: 9 new obsolescence markers
1266 # unbundling: (run 'hg heads' to see heads)
1266 # unbundling: (run 'hg heads' to see heads)
1267
1267
1268 changeset pruned on its own
1268 changeset pruned on its own
1269 ===========================
1269 ===========================
1270
1270
1271 . βŠ— B
1271 . βŠ— B
1272 . |
1272 . |
1273 . β—• A
1273 . β—• A
1274 . |
1274 . |
1275 . ●
1275 . ●
1276
1276
1277 setup
1277 setup
1278 -----
1278 -----
1279
1279
1280 $ mktestrepo lonely-prune
1280 $ mktestrepo lonely-prune
1281 $ hg up 'desc("ROOT")'
1281 $ hg up 'desc("ROOT")'
1282 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1282 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1283 $ mkcommit 'C-A'
1283 $ mkcommit 'C-A'
1284 $ mkcommit 'C-B'
1284 $ mkcommit 'C-B'
1285 $ hg debugobsolete --record-parent `getid 'desc("C-B")'`
1285 $ hg debugobsolete --record-parent `getid 'desc("C-B")'`
1286
1286
1287 $ hg up 'desc("ROOT")'
1287 $ hg up 'desc("ROOT")'
1288 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1288 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1289 $ hg log --hidden -G
1289 $ hg log --hidden -G
1290 x cefb651fc2fd: C-B
1290 x cefb651fc2fd: C-B
1291 |
1291 |
1292 o 9ac430e15fca: C-A
1292 o 9ac430e15fca: C-A
1293 |
1293 |
1294 @ ea207398892e: ROOT
1294 @ ea207398892e: ROOT
1295
1295
1296 $ hg debugobsolete
1296 $ hg debugobsolete
1297 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1297 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1298
1298
1299 Actual testing
1299 Actual testing
1300 --------------
1300 --------------
1301 $ testrevs 'desc("C-A")'
1301 $ testrevs 'desc("C-A")'
1302 ### Matched revisions###
1302 ### Matched revisions###
1303 9ac430e15fca: C-A
1303 9ac430e15fca: C-A
1304 ### Relevant markers ###
1304 ### Relevant markers ###
1305 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1305 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1306 # bundling: 1 changesets found
1306 # bundling: 1 changesets found
1307 ### Bundled markers ###
1307 ### Bundled markers ###
1308 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1308 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1309 ### diff <relevant> <bundled> ###
1309 ### diff <relevant> <bundled> ###
1310 #################################
1310 #################################
1311 ### Exclusive markers ###
1311 ### Exclusive markers ###
1312 $ testrevs 'desc("C-B")'
1312 $ testrevs 'desc("C-B")'
1313 ### Matched revisions###
1313 ### Matched revisions###
1314 cefb651fc2fd: C-B
1314 cefb651fc2fd: C-B
1315 ### Relevant markers ###
1315 ### Relevant markers ###
1316 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1316 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1317 # bundling: 1 changesets found
1317 # bundling: 1 changesets found
1318 ### Bundled markers ###
1318 ### Bundled markers ###
1319 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1319 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1320 ### diff <relevant> <bundled> ###
1320 ### diff <relevant> <bundled> ###
1321 #################################
1321 #################################
1322 ### Exclusive markers ###
1322 ### Exclusive markers ###
1323 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1323 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1324 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/cefb651fc2fd-345c8dfa-backup.hg (glob)
1324 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/cefb651fc2fd-345c8dfa-backup.hg (glob)
1325 ### Backup markers ###
1325 ### Backup markers ###
1326 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1326 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1327 ### diff <relevant> <backed-up> ###
1327 ### diff <relevant> <backed-up> ###
1328 #################################
1328 #################################
1329 ### Stripped markers ###
1329 ### Stripped markers ###
1330 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1330 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1331 ### diff <exclusive> <stripped> ###
1331 ### diff <exclusive> <stripped> ###
1332 #################################
1332 #################################
1333 # unbundling: adding changesets
1333 # unbundling: adding changesets
1334 # unbundling: adding manifests
1334 # unbundling: adding manifests
1335 # unbundling: adding file changes
1335 # unbundling: adding file changes
1336 # unbundling: added 1 changesets with 1 changes to 1 files
1336 # unbundling: added 1 changesets with 1 changes to 1 files
1337 # unbundling: 1 new obsolescence markers
1337 # unbundling: 1 new obsolescence markers
1338 # unbundling: (run 'hg update' to get a working copy)
1338 # unbundling: (run 'hg update' to get a working copy)
1339 $ testrevs 'desc("C-")'
1339 $ testrevs 'desc("C-")'
1340 ### Matched revisions###
1340 ### Matched revisions###
1341 9ac430e15fca: C-A
1341 9ac430e15fca: C-A
1342 cefb651fc2fd: C-B
1342 cefb651fc2fd: C-B
1343 ### Relevant markers ###
1343 ### Relevant markers ###
1344 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1344 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1345 # bundling: 2 changesets found
1345 # bundling: 2 changesets found
1346 ### Bundled markers ###
1346 ### Bundled markers ###
1347 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1347 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1348 ### diff <relevant> <bundled> ###
1348 ### diff <relevant> <bundled> ###
1349 #################################
1349 #################################
1350 ### Exclusive markers ###
1350 ### Exclusive markers ###
1351 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1351 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1352 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/9ac430e15fca-b9855b02-backup.hg (glob)
1352 # stripping: saved backup bundle to $TESTTMP/lonely-prune/.hg/strip-backup/9ac430e15fca-b9855b02-backup.hg (glob)
1353 ### Backup markers ###
1353 ### Backup markers ###
1354 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1354 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1355 ### diff <relevant> <backed-up> ###
1355 ### diff <relevant> <backed-up> ###
1356 #################################
1356 #################################
1357 ### Stripped markers ###
1357 ### Stripped markers ###
1358 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1358 cefb651fc2fdc7bb75e588781de5e432c134e8a5 0 {9ac430e15fca923b0ba027ca85d4d75c5c9cb73c} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
1359 ### diff <exclusive> <stripped> ###
1359 ### diff <exclusive> <stripped> ###
1360 #################################
1360 #################################
1361 # unbundling: adding changesets
1361 # unbundling: adding changesets
1362 # unbundling: adding manifests
1362 # unbundling: adding manifests
1363 # unbundling: adding file changes
1363 # unbundling: adding file changes
1364 # unbundling: added 2 changesets with 2 changes to 2 files
1364 # unbundling: added 2 changesets with 2 changes to 2 files
1365 # unbundling: 1 new obsolescence markers
1365 # unbundling: 1 new obsolescence markers
1366 # unbundling: (run 'hg update' to get a working copy)
1366 # unbundling: (run 'hg update' to get a working copy)
General Comments 0
You need to be logged in to leave comments. Login now