[PATCH STABLE] revlog: make sure we never use sparserevlog without general delta (issue6056)

Yuya Nishihara yuya at tcha.org
Tue Jan 29 06:41:19 EST 2019


On Mon, 28 Jan 2019 21:20:07 +0900, Yuya Nishihara wrote:
> On Fri, 25 Jan 2019 15:00:52 -0500, Boris Feld wrote:
> > # HG changeset patch
> > # User Boris Feld <boris.feld at octobus.net>
> > # Date 1548372167 18000
> > #      Thu Jan 24 18:22:47 2019 -0500
> > # Branch stable
> > # Node ID c7661fdcaeac457aa5b8ae6b6a10b259713934b9
> > # Parent  26ee61c33dee366576a0f7266fea9834985e78ec
> > # EXP-Topic issue6056
> > # Available At https://bitbucket.org/octobus/mercurial-devel/
> > #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r c7661fdcaeac
> > 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 and we weren't
> > able to create one for testing purpose. But if users run into this, we better
> > put stronger protection.

> > --- a/mercurial/revlog.py
> > +++ b/mercurial/revlog.py
> > @@ -497,6 +497,9 @@ class revlog(object):
> >          else:
> >              raise error.RevlogError(_('unknown version (%d) in revlog %s') %
> >                                      (fmt, self.indexfile))
> > +        # sparse-revlog can't be on without general-delta (issue6056)
> > +        if not self._generaldelta:
> > +            self._sparserevlog = False
> 
> Maybe this can be handled at localrepo.ensurerequirements*() or
> esolverevlogstorevfsoptions(), where ui is available so we can add
> some debug/warning messages.

Okay, it doesn't work since generaldelta is a revlog flag, whereas sparserevlog
is a global requirement. I don't know if sparserevlog should be a revlog flag
or not, but anyway only thing we can do here is to turn off the sparse, as your
patch does.

Can you add some tests with crafted repo?

Also, I noticed format.sparse-revlog isn't documented. Since it's incompatible
with older versions, it needs some doc.


More information about the Mercurial-devel mailing list