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 |
|
|
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