vfs: simplify path audit disabling in stream clone
The whole 'mustaudit' API is quite complex compared to its actual usage by its
unique user in stream clone.
Instead we add a "auditpath" parameter to 'vfs.__call_'. The stream clone code
then explicitly open files with path auditing disabled.
The 'mustaudit' API will be cleaned up in the next changeset.
--- a/mercurial/streamclone.py Sun Jul 02 02:19:05 2017 +0200
+++ b/mercurial/streamclone.py Sun Jul 02 02:28:04 2017 +0200
@@ -225,10 +225,11 @@
# partially encode name over the wire for backwards compat
yield '%s\0%d\n' % (store.encodedir(name), size)
if size <= 65536:
- with svfs(name, 'rb') as fp:
+ with svfs(name, 'rb', auditpath=False) as fp:
yield fp.read(size)
else:
- for chunk in util.filechunkiter(svfs(name), limit=size):
+ data = svfs(name, auditpath=False)
+ for chunk in util.filechunkiter(data, limit=size):
yield chunk
finally:
svfs.mustaudit = oldaudit
--- a/mercurial/vfs.py Sun Jul 02 02:19:05 2017 +0200
+++ b/mercurial/vfs.py Sun Jul 02 02:28:04 2017 +0200
@@ -320,7 +320,8 @@
os.chmod(name, self.createmode & 0o666)
def __call__(self, path, mode="r", text=False, atomictemp=False,
- notindexed=False, backgroundclose=False, checkambig=False):
+ notindexed=False, backgroundclose=False, checkambig=False,
+ auditpath=True):
'''Open ``path`` file, which is relative to vfs root.
Newly created directories are marked as "not to be indexed by
@@ -344,11 +345,12 @@
only for writing), and is useful only if target file is
guarded by any lock (e.g. repo.lock or repo.wlock).
'''
- if self._audit:
- r = util.checkosfilename(path)
- if r:
- raise error.Abort("%s: %r" % (r, path))
- self.audit(path)
+ if auditpath:
+ if self._audit:
+ r = util.checkosfilename(path)
+ if r:
+ raise error.Abort("%s: %r" % (r, path))
+ self.audit(path)
f = self.join(path)
if not text and "b" not in mode: