Mercurial > hg
changeset 44272:06de4a673f48
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
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 21 Jan 2020 10:34:15 -0500 |
parents | c791ed6a2154 |
children | 43eea17ae7b3 |
files | hgext/lfs/blobstore.py |
diffstat | 1 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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,