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