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