Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/debug.py @ 49819:b1e4c74beb6f
debug: add debug-revlog-stats command
Display statistics about revlogs in the store. Useful to get an approximate
size of a repository, etc. More statistics will be added in the future.
author | Franck Bret <franck.bret@octobus.net> |
---|---|
date | Mon, 19 Dec 2022 16:22:01 +0100 |
parents | 05db41701ece |
children | 47b44d80d836 |
comparison
equal
deleted
inserted
replaced
49818:3fd5824f1177 | 49819:b1e4c74beb6f |
---|---|
659 flags, | 659 flags, |
660 ) | 660 ) |
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 | |
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( | |
688 repo, fm, changelog: bool, manifest: bool, filelogs: bool | |
689 ): | |
690 """Format revlog statistics for debugging purposes | |
691 | |
692 fm: the output formatter. | |
693 """ | |
694 fm.plain(b'rev-count data-size inl type target \n') | |
695 | |
696 for rlog in _get_revlogs(repo, changelog, manifest, filelogs): | |
697 fm.startitem() | |
698 nb_rev = len(rlog) | |
699 inline = rlog._inline | |
700 data_size = rlog._get_data_offset(nb_rev - 1) | |
701 | |
702 target = rlog.target | |
703 revlog_type = b'unknown' | |
704 revlog_target = b'' | |
705 if target[0] == constants.KIND_CHANGELOG: | |
706 revlog_type = b'changelog' | |
707 elif target[0] == constants.KIND_MANIFESTLOG: | |
708 revlog_type = b'manifest' | |
709 revlog_target = target[1] | |
710 elif target[0] == constants.KIND_FILELOG: | |
711 revlog_type = b'file' | |
712 revlog_target = target[1] | |
713 | |
714 fm.write(b'revlog.rev-count', b'%9d', nb_rev) | |
715 fm.write(b'revlog.data-size', b'%12d', data_size) | |
716 | |
717 fm.write(b'revlog.inline', b' %-3s', b'yes' if inline else b'no') | |
718 fm.write(b'revlog.type', b' %-9s', revlog_type) | |
719 fm.write(b'revlog.target', b' %s', revlog_target) | |
720 | |
721 fm.plain(b'\n') |