comparison mercurial/revlogutils/deltas.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 3e1960e23e6b
children 688fc33e105d
comparison
equal deleted inserted replaced
41446:261d37b94d31 41447:189e06b2d719
753 without looking it any practical details. 753 without looking it any practical details.
754 754
755 The group order aims at providing fast or small candidates first. 755 The group order aims at providing fast or small candidates first.
756 """ 756 """
757 gdelta = revlog._generaldelta 757 gdelta = revlog._generaldelta
758 sparse = revlog._sparserevlog 758 # gate sparse behind general-delta because of issue6056
759 sparse = gdelta and revlog._sparserevlog
759 curr = len(revlog) 760 curr = len(revlog)
760 prev = curr - 1 761 prev = curr - 1
761 deltachain = lambda rev: revlog._deltachain(rev)[0] 762 deltachain = lambda rev: revlog._deltachain(rev)[0]
762 763
763 if gdelta: 764 if gdelta: