##// END OF EJS Templates
debugdeltachain: output information about sparse read if enabled
Paul Morelle -
r35050:5cbbef8d default
parent child Browse files
Show More
@@ -587,11 +587,22 b' def debugdeltachain(ui, repo, file_=None'
587 the delta chain for this revision
587 the delta chain for this revision
588 :``extraratio``: extradist divided by chainsize; another representation of
588 :``extraratio``: extradist divided by chainsize; another representation of
589 how much unrelated data is needed to load this delta chain
589 how much unrelated data is needed to load this delta chain
590
591 If the repository is configured to use the sparse read, additional keywords
592 are available:
593
594 :``readsize``: total size of data read from the disk for a revision
595 (sum of the sizes of all the blocks)
596 :``largestblock``: size of the largest block of data read from the disk
597 :``readdensity``: density of useful bytes in the data read from the disk
598
599 The sparse read can be enabled with experimental.sparse-read = True
590 """
600 """
591 opts = pycompat.byteskwargs(opts)
601 opts = pycompat.byteskwargs(opts)
592 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts)
602 r = cmdutil.openrevlog(repo, 'debugdeltachain', file_, opts)
593 index = r.index
603 index = r.index
594 generaldelta = r.version & revlog.FLAG_GENERALDELTA
604 generaldelta = r.version & revlog.FLAG_GENERALDELTA
605 withsparseread = getattr(r, '_withsparseread', False)
595
606
596 def revinfo(rev):
607 def revinfo(rev):
597 e = index[rev]
608 e = index[rev]
@@ -627,15 +638,20 b' def debugdeltachain(ui, repo, file_=None'
627
638
628 fm.plain(' rev chain# chainlen prev delta '
639 fm.plain(' rev chain# chainlen prev delta '
629 'size rawsize chainsize ratio lindist extradist '
640 'size rawsize chainsize ratio lindist extradist '
630 'extraratio\n')
641 'extraratio')
642 if withsparseread:
643 fm.plain(' readsize largestblk rddensity')
644 fm.plain('\n')
631
645
632 chainbases = {}
646 chainbases = {}
633 for rev in r:
647 for rev in r:
634 comp, uncomp, deltatype, chain, chainsize = revinfo(rev)
648 comp, uncomp, deltatype, chain, chainsize = revinfo(rev)
635 chainbase = chain[0]
649 chainbase = chain[0]
636 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
650 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
637 basestart = r.start(chainbase)
651 start = r.start
638 revstart = r.start(rev)
652 length = r.length
653 basestart = start(chainbase)
654 revstart = start(rev)
639 lineardist = revstart + comp - basestart
655 lineardist = revstart + comp - basestart
640 extradist = lineardist - chainsize
656 extradist = lineardist - chainsize
641 try:
657 try:
@@ -650,7 +666,7 b' def debugdeltachain(ui, repo, file_=None'
650 fm.write('rev chainid chainlen prevrev deltatype compsize '
666 fm.write('rev chainid chainlen prevrev deltatype compsize '
651 'uncompsize chainsize chainratio lindist extradist '
667 'uncompsize chainsize chainratio lindist extradist '
652 'extraratio',
668 'extraratio',
653 '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f\n',
669 '%7d %7d %8d %8d %7s %10d %10d %10d %9.5f %9d %9d %10.5f',
654 rev, chainid, len(chain), prevrev, deltatype, comp,
670 rev, chainid, len(chain), prevrev, deltatype, comp,
655 uncomp, chainsize, chainratio, lineardist, extradist,
671 uncomp, chainsize, chainratio, lineardist, extradist,
656 extraratio,
672 extraratio,
@@ -659,6 +675,26 b' def debugdeltachain(ui, repo, file_=None'
659 uncompsize=uncomp, chainsize=chainsize,
675 uncompsize=uncomp, chainsize=chainsize,
660 chainratio=chainratio, lindist=lineardist,
676 chainratio=chainratio, lindist=lineardist,
661 extradist=extradist, extraratio=extraratio)
677 extradist=extradist, extraratio=extraratio)
678 if withsparseread:
679 readsize = 0
680 largestblock = 0
681 for revschunk in revlog._slicechunk(r, chain):
682 blkend = start(revschunk[-1]) + length(revschunk[-1])
683 blksize = blkend - start(revschunk[0])
684
685 readsize += blksize
686 if largestblock < blksize:
687 largestblock = blksize
688
689 readdensity = float(chainsize) / float(readsize)
690
691 fm.write('readsize largestblock readdensity',
692 ' %10d %10d %9.5f',
693 readsize, largestblock, readdensity,
694 readsize=readsize, largestblock=largestblock,
695 readdensity=readdensity)
696
697 fm.plain('\n')
662
698
663 fm.end()
699 fm.end()
664
700
@@ -77,6 +77,40 b' debugdelta chain basic output'
77 }
77 }
78 ]
78 ]
79
79
80 debugdelta chain with sparse read enabled
81
82 $ cat >> $HGRCPATH <<EOF
83 > [experimental]
84 > sparse-read = True
85 > EOF
86 $ hg debugdeltachain -m
87 rev chain# chainlen prev delta size rawsize chainsize ratio lindist extradist extraratio readsize largestblk rddensity
88 0 1 1 -1 base 44 43 44 1.02326 44 0 0.00000 44 44 1.00000
89
90 $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen} {readsize} {largestblock} {readdensity}\n'
91 0 1 1 44 44 1.0
92
93 $ hg debugdeltachain -m -Tjson
94 [
95 {
96 "chainid": 1,
97 "chainlen": 1,
98 "chainratio": 1.02325581395,
99 "chainsize": 44,
100 "compsize": 44,
101 "deltatype": "base",
102 "extradist": 0,
103 "extraratio": 0.0,
104 "largestblock": 44,
105 "lindist": 44,
106 "prevrev": -1,
107 "readdensity": 1.0,
108 "readsize": 44,
109 "rev": 0,
110 "uncompsize": 43
111 }
112 ]
113
80 Test max chain len
114 Test max chain len
81 $ cat >> $HGRCPATH << EOF
115 $ cat >> $HGRCPATH << EOF
82 > [format]
116 > [format]
General Comments 0
You need to be logged in to leave comments. Login now