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) 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("git", "repo_url", ctx=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 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( "project %s has no fetcher configuration matching %s" % (self.name, ctx) )
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) 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) repo_url = self.get("git", "repo_url", ctx=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 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( "project %s has no fetcher configuration matching %s" % (self.name, ctx) )