Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlogutils/debug.py @ 50689:47b44d80d836
debug-revlog-stats: make it use the new store entry API
This give use free tree manifest support in the process.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 02 Jun 2023 15:12:05 +0200 |
parents | b1e4c74beb6f |
children | d718eddf01d9 |
comparison
equal
deleted
inserted
replaced
50688:e324329fc97e | 50689:47b44d80d836 |
---|---|
661 | 661 |
662 fh = revlog._datafp() | 662 fh = revlog._datafp() |
663 deltacomputer.finddeltainfo(revinfo, fh, target_rev=rev) | 663 deltacomputer.finddeltainfo(revinfo, fh, target_rev=rev) |
664 | 664 |
665 | 665 |
666 def _get_revlogs(repo, changelog: bool, manifest: bool, filelogs: bool): | |
667 """yield revlogs from this repository""" | |
668 if changelog: | |
669 yield repo.changelog | |
670 | |
671 if manifest: | |
672 # XXX: Handle tree manifest | |
673 root_mf = repo.manifestlog.getstorage(b'') | |
674 assert not root_mf._treeondisk | |
675 yield root_mf._revlog | |
676 | |
677 if filelogs: | |
678 files = set() | |
679 for rev in repo: | |
680 ctx = repo[rev] | |
681 files |= set(ctx.files()) | |
682 | |
683 for f in sorted(files): | |
684 yield repo.file(f)._revlog | |
685 | |
686 | |
687 def debug_revlog_stats( | 666 def debug_revlog_stats( |
688 repo, fm, changelog: bool, manifest: bool, filelogs: bool | 667 repo, fm, changelog: bool, manifest: bool, filelogs: bool |
689 ): | 668 ): |
690 """Format revlog statistics for debugging purposes | 669 """Format revlog statistics for debugging purposes |
691 | 670 |
692 fm: the output formatter. | 671 fm: the output formatter. |
693 """ | 672 """ |
694 fm.plain(b'rev-count data-size inl type target \n') | 673 fm.plain(b'rev-count data-size inl type target \n') |
695 | 674 |
696 for rlog in _get_revlogs(repo, changelog, manifest, filelogs): | 675 revlog_entries = [e for e in repo.store.walk() if e.is_revlog] |
676 revlog_entries.sort(key=lambda e: (e.revlog_type, e.target_id)) | |
677 | |
678 for entry in revlog_entries: | |
679 if not changelog and entry.is_changelog: | |
680 continue | |
681 elif not manifest and entry.is_manifestlog: | |
682 continue | |
683 elif not filelogs and entry.is_filelog: | |
684 continue | |
685 rlog = entry.get_revlog_instance(repo).get_revlog() | |
697 fm.startitem() | 686 fm.startitem() |
698 nb_rev = len(rlog) | 687 nb_rev = len(rlog) |
699 inline = rlog._inline | 688 inline = rlog._inline |
700 data_size = rlog._get_data_offset(nb_rev - 1) | 689 data_size = rlog._get_data_offset(nb_rev - 1) |
701 | 690 |