##// END OF EJS Templates
compression: introduce a `storage.revlog.zlib.level` configuration...
marmoute -
r42210:1fac9b93 default
parent child Browse files
Show More
@@ -992,6 +992,9 b" coreconfigitem('storage', 'revlog.reuse-"
992 coreconfigitem('storage', 'revlog.reuse-external-delta-parent',
992 coreconfigitem('storage', 'revlog.reuse-external-delta-parent',
993 default=None,
993 default=None,
994 )
994 )
995 coreconfigitem('storage', 'revlog.zlib.level',
996 default=None,
997 )
995 coreconfigitem('server', 'bookmarks-pushkey-compat',
998 coreconfigitem('server', 'bookmarks-pushkey-compat',
996 default=True,
999 default=True,
997 )
1000 )
@@ -1881,6 +1881,11 b' category impact performance and reposito'
1881 This option is enabled by default. When disabled, it also disables the
1881 This option is enabled by default. When disabled, it also disables the
1882 related ``storage.revlog.reuse-external-delta-parent`` option.
1882 related ``storage.revlog.reuse-external-delta-parent`` option.
1883
1883
1884 ``revlog.zlib.level``
1885 Zlib compression level used when storing data into the repository. Accepted
1886 Value range from 1 (lowest compression) to 9 (highest compression). Zlib
1887 default value is 6.
1888
1884 ``server``
1889 ``server``
1885 ----------
1890 ----------
1886
1891
@@ -797,6 +797,12 b' def resolverevlogstorevfsoptions(ui, req'
797 if r.startswith(b'exp-compression-'):
797 if r.startswith(b'exp-compression-'):
798 options[b'compengine'] = r[len(b'exp-compression-'):]
798 options[b'compengine'] = r[len(b'exp-compression-'):]
799
799
800 options[b'zlib.level'] = ui.configint(b'storage', b'revlog.zlib.level')
801 if options[b'zlib.level'] is not None:
802 if not (0 <= options[b'zlib.level'] <= 9):
803 msg = _('invalid value for `storage.revlog.zlib.level` config: %d')
804 raise error.Abort(msg % options[b'zlib.level'])
805
800 if repository.NARROW_REQUIREMENT in requirements:
806 if repository.NARROW_REQUIREMENT in requirements:
801 options[b'enableellipsis'] = True
807 options[b'enableellipsis'] = True
802
808
@@ -371,6 +371,7 b' class revlog(object):'
371 self._nodecache = {nullid: nullrev}
371 self._nodecache = {nullid: nullrev}
372 self._nodepos = None
372 self._nodepos = None
373 self._compengine = 'zlib'
373 self._compengine = 'zlib'
374 self._compengineopts = {}
374 self._maxdeltachainspan = -1
375 self._maxdeltachainspan = -1
375 self._withsparseread = False
376 self._withsparseread = False
376 self._sparserevlog = False
377 self._sparserevlog = False
@@ -416,6 +417,8 b' class revlog(object):'
416 self._lazydeltabase = bool(opts.get('lazydeltabase', False))
417 self._lazydeltabase = bool(opts.get('lazydeltabase', False))
417 if 'compengine' in opts:
418 if 'compengine' in opts:
418 self._compengine = opts['compengine']
419 self._compengine = opts['compengine']
420 if 'zlib.level' in opts:
421 self._compengineopts['zlib.level'] = opts['zlib.level']
419 if 'maxdeltachainspan' in opts:
422 if 'maxdeltachainspan' in opts:
420 self._maxdeltachainspan = opts['maxdeltachainspan']
423 self._maxdeltachainspan = opts['maxdeltachainspan']
421 if self._mmaplargeindex and 'mmapindexthreshold' in opts:
424 if self._mmaplargeindex and 'mmapindexthreshold' in opts:
@@ -526,7 +529,8 b' class revlog(object):'
526
529
527 @util.propertycache
530 @util.propertycache
528 def _compressor(self):
531 def _compressor(self):
529 return util.compengines[self._compengine].revlogcompressor()
532 engine = util.compengines[self._compengine]
533 return engine.revlogcompressor(self._compengineopts)
530
534
531 def _indexfp(self, mode='r'):
535 def _indexfp(self, mode='r'):
532 """file object for the revlog's index file"""
536 """file object for the revlog's index file"""
@@ -1981,7 +1985,7 b' class revlog(object):'
1981 except KeyError:
1985 except KeyError:
1982 try:
1986 try:
1983 engine = util.compengines.forrevlogheader(t)
1987 engine = util.compengines.forrevlogheader(t)
1984 compressor = engine.revlogcompressor()
1988 compressor = engine.revlogcompressor(self._compengineopts)
1985 self._decompressors[t] = compressor
1989 self._decompressors[t] = compressor
1986 except KeyError:
1990 except KeyError:
1987 raise error.RevlogError(_('unknown compression type %r') % t)
1991 raise error.RevlogError(_('unknown compression type %r') % t)
@@ -505,7 +505,10 b' class _zlibengine(compressionengine):'
505 stringutil.forcebytestr(e))
505 stringutil.forcebytestr(e))
506
506
507 def revlogcompressor(self, opts=None):
507 def revlogcompressor(self, opts=None):
508 return self.zlibrevlogcompressor()
508 level = None
509 if opts is not None:
510 level = opts.get('zlib.level')
511 return self.zlibrevlogcompressor(level)
509
512
510 compengines.register(_zlibengine())
513 compengines.register(_zlibengine())
511
514
@@ -82,3 +82,59 b' with that engine or a requirement'
82 0x78 (x) : 199 (100.00%)
82 0x78 (x) : 199 (100.00%)
83
83
84 #endif
84 #endif
85
86 checking zlib options
87 =====================
88
89 $ hg init zlib-level-default
90 $ hg init zlib-level-1
91 $ cat << EOF >> zlib-level-1/.hg/hgrc
92 > [storage]
93 > revlog.zlib.level=1
94 > EOF
95 $ hg init zlib-level-9
96 $ cat << EOF >> zlib-level-9/.hg/hgrc
97 > [storage]
98 > revlog.zlib.level=9
99 > EOF
100
101
102 $ commitone() {
103 > repo=$1
104 > cp $RUNTESTDIR/bundles/issue4438-r1.hg $repo/a
105 > hg -R $repo add $repo/a
106 > hg -R $repo commit -m some-commit
107 > }
108
109 $ for repo in zlib-level-default zlib-level-1 zlib-level-9; do
110 > commitone $repo
111 > done
112
113 $ $RUNTESTDIR/f -s */.hg/store/data/*
114 zlib-level-1/.hg/store/data/a.i: size=4146
115 zlib-level-9/.hg/store/data/a.i: size=4138
116 zlib-level-default/.hg/store/data/a.i: size=4138
117
118 Test error cases
119
120 $ hg init zlib-level-invalid
121 $ cat << EOF >> zlib-level-invalid/.hg/hgrc
122 > [storage]
123 > revlog.zlib.level=foobar
124 > EOF
125 $ commitone zlib-level-invalid
126 abort: storage.revlog.zlib.level is not a valid integer ('foobar')
127 abort: storage.revlog.zlib.level is not a valid integer ('foobar')
128 [255]
129
130 $ hg init zlib-level-out-of-range
131 $ cat << EOF >> zlib-level-out-of-range/.hg/hgrc
132 > [storage]
133 > revlog.zlib.level=42
134 > EOF
135
136 $ commitone zlib-level-out-of-range
137 abort: invalid value for `storage.revlog.zlib.level` config: 42
138 abort: invalid value for `storage.revlog.zlib.level` config: 42
139 [255]
140
General Comments 0
You need to be logged in to leave comments. Login now