comparison mercurial/debugcommands.py @ 30514:625ccc95fa96

debugcommands: move 'debugdag' into the new module
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 17 Aug 2016 20:41:54 -0700
parents 158b41842fd2
children cdd1885d0f2f
comparison
equal deleted inserted replaced
30513:ff7df4bb75de 30514:625ccc95fa96
355 355
356 cmdlist, unused_allcmds = cmdutil.findpossible(cmd, commands.table) 356 cmdlist, unused_allcmds = cmdutil.findpossible(cmd, commands.table)
357 if ui.verbose: 357 if ui.verbose:
358 cmdlist = [' '.join(c[0]) for c in cmdlist.values()] 358 cmdlist = [' '.join(c[0]) for c in cmdlist.values()]
359 ui.write("%s\n" % "\n".join(sorted(cmdlist))) 359 ui.write("%s\n" % "\n".join(sorted(cmdlist)))
360
361 @command('debugdag',
362 [('t', 'tags', None, _('use tags as labels')),
363 ('b', 'branches', None, _('annotate with branch names')),
364 ('', 'dots', None, _('use dots for runs')),
365 ('s', 'spaces', None, _('separate elements by spaces'))],
366 _('[OPTION]... [FILE [REV]...]'),
367 optionalrepo=True)
368 def debugdag(ui, repo, file_=None, *revs, **opts):
369 """format the changelog or an index DAG as a concise textual description
370
371 If you pass a revlog index, the revlog's DAG is emitted. If you list
372 revision numbers, they get labeled in the output as rN.
373
374 Otherwise, the changelog DAG of the current repo is emitted.
375 """
376 spaces = opts.get('spaces')
377 dots = opts.get('dots')
378 if file_:
379 rlog = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), file_)
380 revs = set((int(r) for r in revs))
381 def events():
382 for r in rlog:
383 yield 'n', (r, list(p for p in rlog.parentrevs(r)
384 if p != -1))
385 if r in revs:
386 yield 'l', (r, "r%i" % r)
387 elif repo:
388 cl = repo.changelog
389 tags = opts.get('tags')
390 branches = opts.get('branches')
391 if tags:
392 labels = {}
393 for l, n in repo.tags().items():
394 labels.setdefault(cl.rev(n), []).append(l)
395 def events():
396 b = "default"
397 for r in cl:
398 if branches:
399 newb = cl.read(cl.node(r))[5]['branch']
400 if newb != b:
401 yield 'a', newb
402 b = newb
403 yield 'n', (r, list(p for p in cl.parentrevs(r)
404 if p != -1))
405 if tags:
406 ls = labels.get(r)
407 if ls:
408 for l in ls:
409 yield 'l', (r, l)
410 else:
411 raise error.Abort(_('need repo for changelog dag'))
412
413 for line in dagparser.dagtextlines(events(),
414 addspaces=spaces,
415 wraplabels=True,
416 wrapannotations=True,
417 wrapnonlinear=dots,
418 usedots=dots,
419 maxlinewidth=70):
420 ui.write(line)
421 ui.write("\n")