Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlogutils/debug.py @ 51078:752e380c5702
debug-delta-chain: add options to control what we compute
Currently this mostly controls what we display, but actual computation saving
will come soon.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 19 Sep 2023 01:53:03 +0200 |
parents | 810446d2d5ef |
children | 5b5cb6b833b0 |
comparison
equal
deleted
inserted
replaced
51077:810446d2d5ef | 51078:752e380c5702 |
---|---|
796 break | 796 break |
797 e = self._index[iter_rev] | 797 e = self._index[iter_rev] |
798 chain_size += e[constants.ENTRY_DATA_COMPRESSED_LENGTH] | 798 chain_size += e[constants.ENTRY_DATA_COMPRESSED_LENGTH] |
799 self._chain_size_cache[rev] = chain_size | 799 self._chain_size_cache[rev] = chain_size |
800 | 800 |
801 return p1, p2, compsize, uncompsize, deltatype, chain, chain_size | 801 return { |
802 | 802 'p1': p1, |
803 | 803 'p2': p2, |
804 def debug_delta_chain(revlog, revs=None): | 804 'compressed_size': compsize, |
805 'uncompressed_size': uncompsize, | |
806 'deltatype': deltatype, | |
807 'chain': chain, | |
808 'chain_size': chain_size, | |
809 } | |
810 | |
811 | |
812 def debug_delta_chain( | |
813 revlog, | |
814 revs=None, | |
815 size_info=True, | |
816 dist_info=True, | |
817 sparse_info=True, | |
818 ): | |
805 auditor = DeltaChainAuditor(revlog) | 819 auditor = DeltaChainAuditor(revlog) |
806 r = revlog | 820 r = revlog |
807 start = r.start | 821 start = r.start |
808 length = r.length | 822 length = r.length |
809 withsparseread = revlog.data_config.with_sparse_read | 823 withsparseread = revlog.data_config.with_sparse_read |
810 | 824 |
811 header = ( | 825 header = ( |
812 b' rev p1 p2 chain# chainlen prev delta ' | 826 b' rev' |
813 b'size rawsize chainsize ratio lindist extradist ' | 827 b' p1' |
814 b'extraratio' | 828 b' p2' |
815 ) | 829 b' chain#' |
816 if withsparseread: | 830 b' chainlen' |
817 header += b' readsize largestblk rddensity srchunks' | 831 b' prev' |
832 b' delta' | |
833 ) | |
834 if size_info: | |
835 header += b' size' b' rawsize' b' chainsize' b' ratio' | |
836 if dist_info: | |
837 header += b' lindist' b' extradist' b' extraratio' | |
838 if withsparseread and sparse_info: | |
839 header += b' readsize' b' largestblk' b' rddensity' b' srchunks' | |
818 header += b'\n' | 840 header += b'\n' |
819 yield header | 841 yield header |
820 | 842 |
821 if revs is None: | 843 if revs is None: |
822 all_revs = iter(r) | 844 all_revs = iter(r) |
824 revlog_size = len(r) | 846 revlog_size = len(r) |
825 all_revs = sorted(rev for rev in revs if rev < revlog_size) | 847 all_revs = sorted(rev for rev in revs if rev < revlog_size) |
826 | 848 |
827 chainbases = {} | 849 chainbases = {} |
828 for rev in all_revs: | 850 for rev in all_revs: |
829 p1, p2, comp, uncomp, deltatype, chain, chainsize = auditor.revinfo(rev) | 851 info = auditor.revinfo(rev) |
852 comp = info['compressed_size'] | |
853 uncomp = info['uncompressed_size'] | |
854 chain = info['chain'] | |
830 chainbase = chain[0] | 855 chainbase = chain[0] |
831 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1) | 856 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1) |
832 basestart = start(chainbase) | 857 basestart = start(chainbase) |
833 revstart = start(rev) | 858 revstart = start(rev) |
834 lineardist = revstart + comp - basestart | 859 lineardist = revstart + comp - basestart |
860 chainsize = info['chain_size'] | |
835 extradist = lineardist - chainsize | 861 extradist = lineardist - chainsize |
836 try: | 862 try: |
837 prevrev = chain[-2] | 863 prevrev = chain[-2] |
838 except IndexError: | 864 except IndexError: |
839 prevrev = -1 | 865 prevrev = -1 |
849 extraratio = extradist | 875 extraratio = extradist |
850 | 876 |
851 # label, display-format, data-key, value | 877 # label, display-format, data-key, value |
852 entry = [ | 878 entry = [ |
853 (b'rev', b'%7d', 'rev', rev), | 879 (b'rev', b'%7d', 'rev', rev), |
854 (b'p1', b'%7d', 'p1', p1), | 880 (b'p1', b'%7d', 'p1', info['p1']), |
855 (b'p2', b'%7d', 'p2', p2), | 881 (b'p2', b'%7d', 'p2', info['p2']), |
856 (b'chainid', b'%7d', 'chainid', chainid), | 882 (b'chainid', b'%7d', 'chainid', chainid), |
857 (b'chainlen', b'%8d', 'chainlen', len(chain)), | 883 (b'chainlen', b'%8d', 'chainlen', len(chain)), |
858 (b'prevrev', b'%8d', 'prevrev', prevrev), | 884 (b'prevrev', b'%8d', 'prevrev', prevrev), |
859 (b'deltatype', b'%7s', 'deltatype', deltatype), | 885 (b'deltatype', b'%7s', 'deltatype', info['deltatype']), |
860 (b'compsize', b'%10d', 'compsize', comp), | |
861 (b'uncompsize', b'%10d', 'uncompsize', uncomp), | |
862 (b'chainsize', b'%10d', 'chainsize', chainsize), | |
863 (b'chainratio', b'%9.5f', 'chainratio', chainratio), | |
864 (b'lindist', b'%9d', 'lindist', lineardist), | |
865 (b'extradist', b'%9d', 'extradist', extradist), | |
866 (b'extraratio', b'%10.5f', 'extraratio', extraratio), | |
867 ] | 886 ] |
868 if withsparseread: | 887 if size_info: |
888 entry.extend( | |
889 [ | |
890 (b'compsize', b'%10d', 'compsize', comp), | |
891 (b'uncompsize', b'%10d', 'uncompsize', uncomp), | |
892 (b'chainsize', b'%10d', 'chainsize', chainsize), | |
893 (b'chainratio', b'%9.5f', 'chainratio', chainratio), | |
894 ] | |
895 ) | |
896 if dist_info: | |
897 entry.extend( | |
898 [ | |
899 (b'lindist', b'%9d', 'lindist', lineardist), | |
900 (b'extradist', b'%9d', 'extradist', extradist), | |
901 (b'extraratio', b'%10.5f', 'extraratio', extraratio), | |
902 ] | |
903 ) | |
904 if withsparseread and sparse_info: | |
869 readsize = 0 | 905 readsize = 0 |
870 largestblock = 0 | 906 largestblock = 0 |
871 srchunks = 0 | 907 srchunks = 0 |
872 | 908 |
873 for revschunk in deltautil.slicechunk(r, chain): | 909 for revschunk in deltautil.slicechunk(r, chain): |