Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 41447:189e06b2d719 stable
revlog: make sure we never use sparserevlog without general delta (issue6056)
We are getting user report where the delta code tries to use `sparse-revlog`
logic on repository where `generaldelta` is disabled. This can't work so we
ensure the two booleans have a consistent value.
Creating this kind of repository is not expected to be possible the current bug
report point at a clonebundle related bug that is still to be properly isolated
(Yuya Nishihara seems to a have done it).
Corrupting a repository to reproduce the issue is possible. A test using this
method is included in this fix.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 24 Jan 2019 18:22:47 -0500 |
parents | ab0d762d89ef |
children | 13a6dd952ffe |
comparison
equal
deleted
inserted
replaced
41446:261d37b94d31 | 41447:189e06b2d719 |
---|---|
495 self._generaldelta = True | 495 self._generaldelta = True |
496 | 496 |
497 else: | 497 else: |
498 raise error.RevlogError(_('unknown version (%d) in revlog %s') % | 498 raise error.RevlogError(_('unknown version (%d) in revlog %s') % |
499 (fmt, self.indexfile)) | 499 (fmt, self.indexfile)) |
500 # sparse-revlog can't be on without general-delta (issue6056) | |
501 if not self._generaldelta: | |
502 self._sparserevlog = False | |
500 | 503 |
501 self._storedeltachains = True | 504 self._storedeltachains = True |
502 | 505 |
503 self._io = revlogio() | 506 self._io = revlogio() |
504 if self.version == REVLOGV0: | 507 if self.version == REVLOGV0: |