Mercurial > evolve
view hgext3rd/evolve/obshistory.py @ 2406:31255706b591
obshistory: import 'node' as 'nodemod'
This simplify the next changeset.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 18 May 2017 11:29:23 +0200 |
parents | c07f752137f4 |
children | 783a74c60a5e |
line wrap: on
line source
# Code dedicated to display and exploration of the obsolescence history # # This module content aims at being upstreamed enventually. # # Copyright 2017 Octobus SAS <contact@octobus.net> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from mercurial import ( node as nodemod, ) def _debugobshistorysingle(fm, repo, revs): """ Display the obsolescence history for a single revision """ precursors = repo.obsstore.precursors successors = repo.obsstore.successors nodec = repo.changelog.node nodes = [nodec(r) for r in revs] seen = set(nodes) while nodes: ctxnode = nodes.pop() _debugobshistorydisplaynode(fm, repo, ctxnode) succs = successors.get(ctxnode, ()) markerfm = fm.nested("debugobshistory.markers") for successor in sorted(succs): _debugobshistorydisplaymarker(markerfm, repo, successor) markerfm.end() precs = precursors.get(ctxnode, ()) for p in sorted(precs): # Only show nodes once if p[0] not in seen: seen.add(p[0]) nodes.append(p[0]) def _debugobshistorydisplaynode(fm, repo, node): if node in repo.unfiltered(): _debugobshistorydisplayctx(fm, repo.unfiltered()[node]) else: _debugobshistorydisplaymissingctx(fm, node) def _debugobshistorydisplayctx(fm, ctx): shortdescription = ctx.description().splitlines()[0] fm.startitem() fm.write('debugobshistory.node', '%s', str(ctx), label="evolve.node") fm.plain(' ') fm.write('debugobshistory.rev', '(%d)', int(ctx), label="evolve.rev") fm.plain(' ') fm.write('debugobshistory.shortdescription', '%s', shortdescription, label="evolve.short_description") fm.plain('\n') def _debugobshistorydisplaymissingctx(fm, nodewithoutctx): hexnode = nodemod.short(nodewithoutctx) fm.startitem() fm.write('debugobshistory.node', '%s', hexnode, label="evolve.node evolve.missing_change_ctx") fm.plain('\n') def _debugobshistorydisplaymarker(fm, repo, marker): succnodes = marker[1] date = marker[4] metadata = dict(marker[3]) fm.startitem() fm.plain(' ') # Detect pruned revisions if len(succnodes) == 0: verb = 'pruned' else: verb = 'rewritten' fm.write('debugobshistory.verb', '%s', verb, label="evolve.verb") fm.plain(' by ') fm.write('debugobshistory.marker_user', '%s', metadata['user'], label="evolve.user") fm.plain(' ') fm.write('debugobshistory.marker_date', '(%s)', fm.formatdate(date), label="evolve.date") if len(succnodes) > 0: fm.plain(' as ') shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes)) nodes = fm.formatlist(shortsnodes, 'debugobshistory.succnodes', sep=', ') fm.write('debugobshistory.succnodes', '%s', nodes, label="evolve.node") fm.plain("\n")