From cd2f01952f799af096bf7885b6aef55c1f584f77 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Fri, 10 Oct 2014 11:16:44 +0100 Subject: squash! import: Allow a mix of dependency types in one import process Different tools require different arguments, so they must now be 'enabled' explicitly, giving an opportunity to pass in 'extra_args' for each one. --- import/main.py | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/import/main.py b/import/main.py index e075e2f3..ccb955b6 100644 --- a/import/main.py +++ b/import/main.py @@ -370,6 +370,14 @@ class ImportLoop(object): self.morphloader = morphlib.morphloader.MorphologyLoader() + self.importers = {} + + def enable_importer(self, kind, extra_args=[]): + assert kind not in self.importers + self.importers[kind] = { + 'extra_args': extra_args + } + def run(self): '''Process the goal package and all of its dependencies.''' start_time = time.time() @@ -538,8 +546,11 @@ class ImportLoop(object): def _generate_lorry_for_package(self, kind, name): tool = '%s.to_lorry' % kind + if kind not in self.importers: + raise Exception('Importer for %s was not enabled.' % kind) + extra_args = self.importers[kind]['extra_args'] self.app.status('Calling %s to generate lorry for %s', tool, name) - lorry_text = run_extension(tool, self.extra_args + [name]) + lorry_text = run_extension(tool, extra_args + [name]) try: lorry = json.loads(lorry_text) except ValueError as e: @@ -669,11 +680,16 @@ class ImportLoop(object): def _generate_chunk_morph_for_package(self, source_repo, kind, name, version, filename): tool = '%s.to_chunk' % kind + + if kind not in self.importers: + raise Exception('Importer for %s was not enabled.' % kind) + extra_args = self.importers[kind]['extra_args'] + self.app.status( 'Calling %s to generate chunk morph for %s %s', tool, name, version) - args = self.extra_args + [source_repo.dirname, name] + args = extra_args + [source_repo.dirname, name] if version != 'master': args.append(version) text = run_extension(tool, args) @@ -881,13 +897,13 @@ class BaserockImportApplication(cliapp.Application): definitions_dir = args[0] project_name = args[1] - ImportLoop( + loop = ImportLoop( app=self, - goal_kind='omnibus', - goal_name=args[2], - goal_version='master', - extra_args=[definitions_dir, project_name] - ).run() + goal_kind='omnibus', goal_name=args[2], goal_version='master') + loop.enable_importer('omnibus', + extra_args=[definitions_dir, project_name]) + loop.enable_importer('rubygems') + loop.run() def import_rubygems(self, args): '''Import one or more RubyGems.''' @@ -895,12 +911,11 @@ class BaserockImportApplication(cliapp.Application): raise cliapp.AppException( 'Please pass the name of a RubyGem on the commandline.') - ImportLoop( + loop = ImportLoop( app=self, - goal_kind='rubygems', - goal_name=args[0], - goal_version='master' - ).run() + goal_kind='rubygems', goal_name=args[0], goal_version='master') + loop.enable_importer('rubygems') + loop.run() app = BaserockImportApplication(progname='import') -- cgit v1.2.1