Patchwork D7961: lfs: add a method to the local blobstore to convert OIDs to file paths

login
register
mail settings
Submitter phabricator
Date Jan. 21, 2020, 6:38 p.m.
Message ID <differential-rev-PHID-DREV-ikkalazbtmzynnim4y4m-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/44558/
State Superseded
Headers show

Comments

phabricator - Jan. 21, 2020, 6:38 p.m.
mharbison72 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This is less ugly than passing an open callback to the `httpsendfile`
  constuctor.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7961

AFFECTED FILES
  hgext/lfs/blobstore.py

CHANGE DETAILS




To: mharbison72, #hg-reviewers
Cc: mercurial-devel
phabricator - Feb. 5, 2020, 11:15 p.m.
marmoute added a comment.
marmoute accepted this revision.


  looks like a clear win.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D7961/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D7961

To: mharbison72, #hg-reviewers, marmoute
Cc: marmoute, mercurial-devel
phabricator - Feb. 8, 2020, 11:43 a.m.
marmoute added a comment.


  This change seems to break on python3:
  
  https://foss.heptapod.net/octobus/mercurial-devel/-/jobs/56838

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D7961/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D7961

To: mharbison72, #hg-reviewers, marmoute
Cc: marmoute, mercurial-devel

Patch

diff --git a/hgext/lfs/blobstore.py b/hgext/lfs/blobstore.py
--- a/hgext/lfs/blobstore.py
+++ b/hgext/lfs/blobstore.py
@@ -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,