# HG changeset patch # User Pierre-Yves David # Date 1498955284 -7200 # Node ID 15e9cbe6ae49113d4a88631157d77f81483e4262 # Parent 4ea0b7a613f9f869c1a5fd23ab25c380022af837 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. diff -r 4ea0b7a613f9 -r 15e9cbe6ae49 mercurial/streamclone.py --- 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 diff -r 4ea0b7a613f9 -r 15e9cbe6ae49 mercurial/vfs.py --- 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: