Show More
@@ -753,6 +753,24 b' def debugdate(ui, date, range=None, **op' | |||||
753 |
|
|
753 | [], | |
754 |
|
|
754 | _('restrict processing to these revlog revisions'), | |
755 |
|
|
755 | ), | |
|
756 | ( | |||
|
757 | b'', | |||
|
758 | b'size-info', | |||
|
759 | True, | |||
|
760 | _('compute information related to deltas size'), | |||
|
761 | ), | |||
|
762 | ( | |||
|
763 | b'', | |||
|
764 | b'dist-info', | |||
|
765 | True, | |||
|
766 | _('compute information related to base distance'), | |||
|
767 | ), | |||
|
768 | ( | |||
|
769 | b'', | |||
|
770 | b'sparse-info', | |||
|
771 | True, | |||
|
772 | _('compute information related to sparse read'), | |||
|
773 | ), | |||
756 |
|
|
774 | ] | |
757 |
|
|
775 | + cmdutil.debugrevlogopts | |
758 |
|
|
776 | + cmdutil.formatteropts, | |
@@ -767,8 +785,10 b' def debugdeltachain(ui, repo, file_=None' | |||||
767 | :``rev``: revision number |
|
785 | :``rev``: revision number | |
768 | :``p1``: parent 1 revision number (for reference) |
|
786 | :``p1``: parent 1 revision number (for reference) | |
769 | :``p2``: parent 2 revision number (for reference) |
|
787 | :``p2``: parent 2 revision number (for reference) | |
|
788 | ||||
770 | :``chainid``: delta chain identifier (numbered by unique base) |
|
789 | :``chainid``: delta chain identifier (numbered by unique base) | |
771 | :``chainlen``: delta chain length to this revision |
|
790 | :``chainlen``: delta chain length to this revision | |
|
791 | ||||
772 | :``prevrev``: previous revision in delta chain |
|
792 | :``prevrev``: previous revision in delta chain | |
773 | :``deltatype``: role of delta / how it was computed |
|
793 | :``deltatype``: role of delta / how it was computed | |
774 | - base: a full snapshot |
|
794 | - base: a full snapshot | |
@@ -781,11 +801,13 b' def debugdeltachain(ui, repo, file_=None' | |||||
781 | (when p2 has empty delta |
|
801 | (when p2 has empty delta | |
782 | - prev: a delta against the previous revision |
|
802 | - prev: a delta against the previous revision | |
783 | - other: a delta against an arbitrary revision |
|
803 | - other: a delta against an arbitrary revision | |
|
804 | ||||
784 | :``compsize``: compressed size of revision |
|
805 | :``compsize``: compressed size of revision | |
785 | :``uncompsize``: uncompressed size of revision |
|
806 | :``uncompsize``: uncompressed size of revision | |
786 | :``chainsize``: total size of compressed revisions in chain |
|
807 | :``chainsize``: total size of compressed revisions in chain | |
787 | :``chainratio``: total chain size divided by uncompressed revision size |
|
808 | :``chainratio``: total chain size divided by uncompressed revision size | |
788 | (new delta chains typically start at ratio 2.00) |
|
809 | (new delta chains typically start at ratio 2.00) | |
|
810 | ||||
789 | :``lindist``: linear distance from base revision in delta chain to end |
|
811 | :``lindist``: linear distance from base revision in delta chain to end | |
790 | of this revision |
|
812 | of this revision | |
791 | :``extradist``: total size of revisions not part of this delta chain from |
|
813 | :``extradist``: total size of revisions not part of this delta chain from | |
@@ -804,18 +826,64 b' def debugdeltachain(ui, repo, file_=None' | |||||
804 | :``readdensity``: density of useful bytes in the data read from the disk |
|
826 | :``readdensity``: density of useful bytes in the data read from the disk | |
805 | :``srchunks``: in how many data hunks the whole revision would be read |
|
827 | :``srchunks``: in how many data hunks the whole revision would be read | |
806 |
|
828 | |||
|
829 | It is possible to select the information to be computed, this can provide a | |||
|
830 | noticeable speedup to the command in some cases. | |||
|
831 | ||||
|
832 | Always computed: | |||
|
833 | ||||
|
834 | - ``rev`` | |||
|
835 | - ``p1`` | |||
|
836 | - ``p2`` | |||
|
837 | - ``chainid`` | |||
|
838 | - ``chainlen`` | |||
|
839 | - ``prevrev`` | |||
|
840 | - ``deltatype`` | |||
|
841 | ||||
|
842 | Computed with --no-size-info | |||
|
843 | ||||
|
844 | - ``compsize`` | |||
|
845 | - ``uncompsize`` | |||
|
846 | - ``chainsize`` | |||
|
847 | - ``chainratio`` | |||
|
848 | ||||
|
849 | Computed with --no-dist-info | |||
|
850 | ||||
|
851 | - ``lindist`` | |||
|
852 | - ``extradist`` | |||
|
853 | - ``extraratio`` | |||
|
854 | ||||
|
855 | Skipped with --no-sparse-info | |||
|
856 | ||||
|
857 | - ``readsize`` | |||
|
858 | - ``largestblock`` | |||
|
859 | - ``readdensity`` | |||
|
860 | - ``srchunks`` | |||
|
861 | ||||
|
862 | -- | |||
|
863 | ||||
807 | The sparse read can be enabled with experimental.sparse-read = True |
|
864 | The sparse read can be enabled with experimental.sparse-read = True | |
808 | """ |
|
865 | """ | |
809 |
|
|
866 | revs = None | |
810 |
|
|
867 | revs_opt = opts.pop('rev', []) | |
811 |
|
|
868 | if revs_opt: | |
812 |
|
|
869 | revs = [int(r) for r in revs_opt] | |
|
870 | ||||
|
871 | size_info = opts.pop('size_info', True) | |||
|
872 | dist_info = opts.pop('dist_info', True) | |||
|
873 | sparse_info = opts.pop('sparse_info', True) | |||
|
874 | ||||
813 |
|
|
875 | revlog = cmdutil.openrevlog( | |
814 |
|
|
876 | repo, b'debugdeltachain', file_, pycompat.byteskwargs(opts) | |
815 |
|
|
877 | ) | |
816 |
|
|
878 | fm = ui.formatter(b'debugdeltachain', pycompat.byteskwargs(opts)) | |
817 |
|
879 | |||
818 |
|
|
880 | lines = revlog_debug.debug_delta_chain( | |
|
881 | revlog, | |||
|
882 | revs=revs, | |||
|
883 | size_info=size_info, | |||
|
884 | dist_info=dist_info, | |||
|
885 | sparse_info=sparse_info, | |||
|
886 | ) | |||
819 |
|
|
887 | # first entry is the header | |
820 |
|
|
888 | header = next(lines) | |
821 |
|
|
889 | fm.plain(header) |
@@ -798,10 +798,24 b' class DeltaChainAuditor:' | |||||
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 | 'p1': p1, | |||
|
803 | 'p2': p2, | |||
|
804 | 'compressed_size': compsize, | |||
|
805 | 'uncompressed_size': uncompsize, | |||
|
806 | 'deltatype': deltatype, | |||
|
807 | 'chain': chain, | |||
|
808 | 'chain_size': chain_size, | |||
|
809 | } | |||
802 |
|
810 | |||
803 |
|
811 | |||
804 |
def debug_delta_chain( |
|
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 | |
@@ -809,12 +823,20 b' def debug_delta_chain(revlog, revs=None)' | |||||
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' | |
|
829 | b' chain#' | |||
|
830 | b' chainlen' | |||
|
831 | b' prev' | |||
|
832 | b' delta' | |||
815 | ) |
|
833 | ) | |
816 | if withsparseread: |
|
834 | if size_info: | |
817 | header += b' readsize largestblk rddensity srchunks' |
|
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 | |||
@@ -826,12 +848,16 b' def debug_delta_chain(revlog, revs=None)' | |||||
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] | |
@@ -851,21 +877,31 b' def debug_delta_chain(revlog, revs=None)' | |||||
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 |
@@ -296,7 +296,7 b' Show all commands + options' | |||||
296 | debugdag: tags, branches, dots, spaces |
|
296 | debugdag: tags, branches, dots, spaces | |
297 | debugdata: changelog, manifest, dir |
|
297 | debugdata: changelog, manifest, dir | |
298 | debugdate: extended |
|
298 | debugdate: extended | |
299 | debugdeltachain: rev, changelog, manifest, dir, template |
|
299 | debugdeltachain: rev, size-info, dist-info, sparse-info, changelog, manifest, dir, template | |
300 | debugdirstateignorepatternshash: |
|
300 | debugdirstateignorepatternshash: | |
301 | debugdirstate: nodates, dates, datesort, docket, all |
|
301 | debugdirstate: nodates, dates, datesort, docket, all | |
302 | debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template |
|
302 | debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template |
General Comments 0
You need to be logged in to leave comments.
Login now