Mercurial > public > mercurial-scm > hg
comparison mercurial/obsutil.py @ 33996:98fa777cd7a1
template: better prune support in obsfate
successorssets don't returns good results for pruned commit, add a workaround
for simple cases.
A proper fix would require a large rework of successorssets algorithm, I will
send a separate series for this refactoring.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 03 Jul 2017 17:38:56 +0200 |
parents | c35c0f54f420 |
children | 7cdc8c5a481a |
comparison
equal
deleted
inserted
replaced
33995:c35c0f54f420 | 33996:98fa777cd7a1 |
---|---|
583 if not ctx.obsolete(): | 583 if not ctx.obsolete(): |
584 return None | 584 return None |
585 | 585 |
586 ssets = successorssets(repo, ctx.node(), closest=True) | 586 ssets = successorssets(repo, ctx.node(), closest=True) |
587 | 587 |
588 # closestsuccessors returns an empty list for pruned revisions, remap it | |
589 # into a list containing an empty list for future processing | |
590 if ssets == []: | |
591 ssets = [[]] | |
592 | |
593 # Try to recover pruned markers | |
594 succsmap = repo.obsstore.successors | |
595 fullsuccessorsets = [] # successor set + markers | |
596 for sset in ssets: | |
597 if sset: | |
598 fullsuccessorsets.append(sset) | |
599 else: | |
600 # successorsset return an empty set() when ctx or one of its | |
601 # successors is pruned. | |
602 # In this case, walk the obs-markers tree again starting with ctx | |
603 # and find the relevant pruning obs-makers, the ones without | |
604 # successors. | |
605 # Having these markers allow us to compute some information about | |
606 # its fate, like who pruned this changeset and when. | |
607 | |
608 # XXX we do not catch all prune markers (eg rewritten then pruned) | |
609 # (fix me later) | |
610 foundany = False | |
611 for mark in succsmap.get(ctx.node(), ()): | |
612 if not mark[1]: | |
613 foundany = True | |
614 sset = _succs() | |
615 sset.markers.add(mark) | |
616 fullsuccessorsets.append(sset) | |
617 if not foundany: | |
618 fullsuccessorsets.append(_succs()) | |
619 | |
588 values = [] | 620 values = [] |
589 for sset in ssets: | 621 for sset in fullsuccessorsets: |
590 values.append({'successors': sset, 'markers': sset.markers}) | 622 values.append({'successors': sset, 'markers': sset.markers}) |
591 | 623 |
592 return values | 624 return values |
593 | 625 |
594 def successorsetverb(successorset): | 626 def successorsetverb(successorset): |