##// END OF EJS Templates
debug-delta-chain: add options to control what we compute...
marmoute -
r51966:752e380c default
parent child Browse files
Show More
@@ -753,6 +753,24 b' def debugdate(ui, date, range=None, **op'
753 [],
753 [],
754 _('restrict processing to these revlog revisions'),
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 + cmdutil.debugrevlogopts
775 + cmdutil.debugrevlogopts
758 + cmdutil.formatteropts,
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 revs = None
866 revs = None
810 revs_opt = opts.pop('rev', [])
867 revs_opt = opts.pop('rev', [])
811 if revs_opt:
868 if revs_opt:
812 revs = [int(r) for r in revs_opt]
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 revlog = cmdutil.openrevlog(
875 revlog = cmdutil.openrevlog(
814 repo, b'debugdeltachain', file_, pycompat.byteskwargs(opts)
876 repo, b'debugdeltachain', file_, pycompat.byteskwargs(opts)
815 )
877 )
816 fm = ui.formatter(b'debugdeltachain', pycompat.byteskwargs(opts))
878 fm = ui.formatter(b'debugdeltachain', pycompat.byteskwargs(opts))
817
879
818 lines = revlog_debug.debug_delta_chain(revlog, revs=revs)
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 # first entry is the header
887 # first entry is the header
820 header = next(lines)
888 header = next(lines)
821 fm.plain(header)
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(revlog, revs=None):
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