diff hgext/lfs/blobstore.py @ 37563:be1cc65bdb1c

lfs: infer the blob store URL from an explicit pull source I don't see any easier way to do this because the update part of `hg pull -u` happens outside exchange.pull(), and commands.postincoming() doesn't take a path. So (ab)use the mechanism used by subrepos to redirect where subrepos are pulled from when an explicit path is given. As a bonus, this should allow lfs blobs to be pulled into a subrepo when it is checked out. An explicit push path can be handled within exchange.push(). That can be done next, outside of this dirty hack.
author Matt Harbison <matt_harbison@yahoo.com>
date Sun, 08 Apr 2018 01:23:39 -0400
parents e5cd8d1a094d
children 31a4ea773369
line wrap: on
line diff
--- a/hgext/lfs/blobstore.py	Wed Apr 11 17:29:55 2018 -0400
+++ b/hgext/lfs/blobstore.py	Sun Apr 08 01:23:39 2018 -0400
@@ -541,9 +541,15 @@
     """
     url = util.url(repo.ui.config('lfs', 'url') or '')
     if url.scheme is None:
-        # TODO: investigate 'paths.remote:lfsurl' style path customization,
-        # and fall back to inferring from 'paths.remote' if unspecified.
-        defaulturl = util.url(repo.ui.config('paths', 'default') or b'')
+        if util.safehasattr(repo, '_subtoppath'):
+            # The pull command sets this during the optional update phase, which
+            # tells exactly where the pull originated, whether 'paths.default'
+            # or explicit.
+            defaulturl = util.url(repo._subtoppath)
+        else:
+            # TODO: investigate 'paths.remote:lfsurl' style path customization,
+            # and fall back to inferring from 'paths.remote' if unspecified.
+            defaulturl = util.url(repo.ui.config('paths', 'default') or b'')
 
         # TODO: support local paths as well.
         # TODO: consider the ssh -> https transformation that git applies