Mercurial > public > mercurial-scm > hg
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: |