# HG changeset patch # User Pierre-Yves David <pierre-yves.david@octobus.net> # Date 1569554250 -7200 # Fri Sep 27 05:17:30 2019 +0200 # Node ID 3518da5043032c41ade95e9e6832059e815abbbb # Parent 188476e48f51055e4c35209cc72b16622c6e14e1 vfs: give all vfs an options attribute by default Multiple code path assume vfs have an options attribute, including the vfs module itself. So for consistency we explicitly add one to all vfs. This will prevent various crash in the next changesets. Differential Revision: https://phab.mercurial-scm.org/D6935 diff --git a/contrib/dumprevlog b/contrib/dumprevlog --- a/contrib/dumprevlog +++ b/contrib/dumprevlog @@ -22,6 +22,7 @@ if b'b' not in mode: mode = mode + b'b' return open(path, pycompat.sysstr(mode)) +binopen.options = {} def printb(data, end=b'\n'): sys.stdout.flush() diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -355,7 +355,7 @@ def _loadindex(self): mmapindexthreshold = None - opts = getattr(self.opener, 'options', {}) or {} + opts = self.opener.options if 'revlogv2' in opts: newversionflags = REVLOGV2 | FLAG_INLINE_DATA @@ -363,7 +363,7 @@ newversionflags = REVLOGV1 | FLAG_INLINE_DATA if 'generaldelta' in opts: newversionflags |= FLAG_GENERALDELTA - elif 'revlogv0' in getattr(self.opener, 'options', {}): + elif 'revlogv0' in self.opener.options: newversionflags = REVLOGV0 else: newversionflags = REVLOG_DEFAULT_VERSION diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -115,6 +115,7 @@ class statichttpvfs(vfsmod.abstractvfs): def __init__(self, base): self.base = base + self.options = {} def __call__(self, path, mode='r', *args, **kw): if mode not in ('r', 'rb'): diff --git a/mercurial/vfs.py b/mercurial/vfs.py --- a/mercurial/vfs.py +++ b/mercurial/vfs.py @@ -327,6 +327,7 @@ self.audit = (lambda path, mode=None: True) self.createmode = None self._trustnlink = None + self.options = {} @util.propertycache def _cansymlink(self): diff --git a/tests/test-parseindex.t b/tests/test-parseindex.t --- a/tests/test-parseindex.t +++ b/tests/test-parseindex.t @@ -53,6 +53,7 @@ > def wrapper(*a, **kwargs): > f = o(*a, **kwargs) > return singlebyteread(f) + > wrapper.options = o.options > return wrapper > > cl = changelog.changelog(opener(b'.hg/store'))