in build/fbcode_builder/getdeps/manifest.py [0:0]
def create_fetcher(self, build_options, ctx):
use_real_shipit = (
ShipitTransformerFetcher.available() and build_options.use_shipit
)
if (
not use_real_shipit
and self.fbsource_path
and build_options.fbsource_dir
and self.shipit_project
):
return SimpleShipitTransformerFetcher(build_options, self, ctx)
if (
self.fbsource_path
and build_options.fbsource_dir
and self.shipit_project
and ShipitTransformerFetcher.available()
):
# We can use the code from fbsource
return ShipitTransformerFetcher(build_options, self.shipit_project)
# Can we satisfy this dep with system packages?
if build_options.allow_system_packages:
if self._is_satisfied_by_preinstalled_environment(ctx):
return PreinstalledNopFetcher()
packages = self.get_required_system_packages(ctx)
package_fetcher = SystemPackageFetcher(build_options, packages)
if package_fetcher.packages_are_installed():
return package_fetcher
repo_url = self.get_repo_url(ctx)
if repo_url:
rev = self.get("git", "rev")
depth = self.get("git", "depth")
return GitFetcher(build_options, self, repo_url, rev, depth)
url = self.get("download", "url", ctx=ctx)
if url:
# We need to defer this import until now to avoid triggering
# a cycle when the facebook/__init__.py is loaded.
try:
from .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(
"project %s has no fetcher configuration matching %s" % (self.name, ctx)
)