stream: open volatile file through the manager
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 01 Oct 2024 15:55:29 +0200
changeset 52013 0ad269e24075
parent 52012 e308439339e2
child 52014 4801fde72cc2
stream: open volatile file through the manager To do more subtle things, we need more control.
mercurial/store.py
mercurial/streamclone.py
--- a/mercurial/store.py	Mon Oct 14 15:11:49 2024 +0200
+++ b/mercurial/store.py	Tue Oct 01 15:55:29 2024 +0200
@@ -485,8 +485,8 @@
         size = self.file_size(None)
 
         def get_stream():
-            actual_path = volatiles[vfs.join(self.unencoded_path)]
-            with open(actual_path, 'rb') as fp:
+            path = vfs.join(self.unencoded_path)
+            with volatiles.open(path) as fp:
                 yield None  # ready to stream
                 if size <= 65536:
                     yield fp.read(size)
--- a/mercurial/streamclone.py	Mon Oct 14 15:11:49 2024 +0200
+++ b/mercurial/streamclone.py	Tue Oct 01 15:55:29 2024 +0200
@@ -608,6 +608,12 @@
         unmodified."""
         return self._copies.get(src, src)
 
+    @contextlib.contextmanager
+    def open(self, src):
+        actual_path = self._copies.get(src, src)
+        with open(actual_path, 'rb') as fp:
+            yield fp
+
     def __exit__(self, *args, **kwars):
         """discard all backups"""
         for tmp in self._copies.values():