mirror of
https://github.com/facebook/proxygen.git
synced 2025-08-07 07:02:53 +03:00
fbcode_builder: getdeps: add LFS caching for ArchiveFetcher
Summary: When running in FB infra, prefer to download from our local LFS server rather than going out to the internet. Fall back to a normal internet download if the LFS get fails for some reason. Upload to LFS after successfully verifying the hash for the downloaded archive. Add a subcommand that performs a fetch for all possible platforms so that it is easier to ensure that the lfs-pointers file is up to date. Reviewed By: simpkins Differential Revision: D14978660 fbshipit-source-id: 240fc32fc7003d1e06c88b80d85054dae36e2f31
This commit is contained in:
committed by
Facebook Github Bot
parent
5879f91323
commit
7919050c9a
@@ -583,13 +583,16 @@ class ArchiveFetcher(Fetcher):
|
|||||||
"%s: expected sha256 %s but got %s" % (self.url, self.sha256, digest)
|
"%s: expected sha256 %s but got %s" % (self.url, self.sha256, digest)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _download(self):
|
def _download_dir(self):
|
||||||
|
""" returns the download dir, creating it if it doesn't already exist """
|
||||||
download_dir = os.path.dirname(self.file_name)
|
download_dir = os.path.dirname(self.file_name)
|
||||||
if not os.path.exists(download_dir):
|
if not os.path.exists(download_dir):
|
||||||
os.makedirs(download_dir)
|
os.makedirs(download_dir)
|
||||||
|
return download_dir
|
||||||
|
|
||||||
|
def _download(self):
|
||||||
|
self._download_dir()
|
||||||
download_url_to_file_with_progress(self.url, self.file_name)
|
download_url_to_file_with_progress(self.url, self.file_name)
|
||||||
|
|
||||||
self._verify_hash()
|
self._verify_hash()
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
|
@@ -329,9 +329,20 @@ class ManifestParser(object):
|
|||||||
|
|
||||||
url = self.get("download", "url", ctx=ctx)
|
url = self.get("download", "url", ctx=ctx)
|
||||||
if url:
|
if url:
|
||||||
return ArchiveFetcher(
|
# We need to defer this import until now to avoid triggering
|
||||||
build_options, self, url, self.get("download", "sha256", ctx=ctx)
|
# a cycle when the facebook/__init__.py is loaded.
|
||||||
)
|
try:
|
||||||
|
from getdeps.facebook.lfs import LFSCachingArchiveFetcher
|
||||||
|
|
||||||
|
return LFSCachingArchiveFetcher(
|
||||||
|
build_options, self, url, self.get("download", "sha256", ctx=ctx)
|
||||||
|
)
|
||||||
|
except ImportError:
|
||||||
|
# This FB internal module isn't shippped to github,
|
||||||
|
# so just use its base class
|
||||||
|
return ArchiveFetcher(
|
||||||
|
build_options, self, url, self.get("download", "sha256", ctx=ctx)
|
||||||
|
)
|
||||||
|
|
||||||
raise KeyError(
|
raise KeyError(
|
||||||
"project %s has no fetcher configuration matching %r" % (self.name, ctx)
|
"project %s has no fetcher configuration matching %r" % (self.name, ctx)
|
||||||
|
Reference in New Issue
Block a user