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: