lfs: add a method to the local blobstore to convert OIDs to file paths
authorMatt Harbison <matt_harbison@yahoo.com>
Tue, 21 Jan 2020 10:34:15 -0500
changeset 44319 06de4a673f48
parent 44318 c791ed6a2154
child 44320 43eea17ae7b3
lfs: add a method to the local blobstore to convert OIDs to file paths This is less ugly than passing an open callback to the `httpsendfile` constuctor. Differential Revision: https://phab.mercurial-scm.org/D7961
hgext/lfs/blobstore.py
--- a/hgext/lfs/blobstore.py	Wed Jan 15 14:47:38 2020 -0800
+++ b/hgext/lfs/blobstore.py	Tue Jan 21 10:34:15 2020 -0500
@@ -139,6 +139,17 @@
     def open(self, oid):
         """Open a read-only file descriptor to the named blob, in either the
         usercache or the local store."""
+        return open(self.path(oid), b'rb')
+
+    def path(self, oid):
+        """Build the path for the given blob ``oid``.
+
+        If the blob exists locally, the path may point to either the usercache
+        or the local store.  If it doesn't, it will point to the local store.
+        This is meant for situations where existing code that isn't LFS aware
+        needs to open a blob.  Generally, prefer the ``open`` method on this
+        class.
+        """
         # The usercache is the most likely place to hold the file.  Commit will
         # write to both it and the local store, as will anything that downloads
         # the blobs.  However, things like clone without an update won't
@@ -146,9 +157,9 @@
         # the usercache is the only place it _could_ be.  If not present, the
         # missing file msg here will indicate the local repo, not the usercache.
         if self.cachevfs.exists(oid):
-            return self.cachevfs(oid, b'rb')
+            return self.cachevfs.join(oid)
 
-        return self.vfs(oid, b'rb')
+        return self.vfs.join(oid)
 
     def download(self, oid, src, content_length):
         """Read the blob from the remote source in chunks, verify the content,