diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-09-04 14:56:35 +0100 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-09-11 13:26:27 +0100 |
commit | 9f81631e9a74941457d3c07298b9260719a9296b (patch) | |
tree | 7037df3659984a5515e83795e73e43537fdb82cb | |
parent | 0c65063d049d22cc78ed9ae5cb664c0ab524d825 (diff) | |
download | morph-9f81631e9a74941457d3c07298b9260719a9296b.tar.gz |
import: Improve error reporting
-rw-r--r-- | import/main.py | 66 | ||||
-rwxr-xr-x | import/rubygem.to_lorry | 20 |
2 files changed, 49 insertions, 37 deletions
diff --git a/import/main.py b/import/main.py index b781f47a..b4d30ad2 100644 --- a/import/main.py +++ b/import/main.py @@ -397,47 +397,46 @@ class BaserockImportApplication(cliapp.Application): source_repo, url = self.fetch_or_update_source(lorry) - try: - checked_out_version, ref = self.checkout_source_version( - source_repo, name, version) - current_item.set_version_in_use(checked_out_version) - chunk_morph = self.find_or_create_chunk_morph( - morph_set, goal_name, kind, name, checked_out_version, - source_repo, url, ref) - - current_item.set_morphology(chunk_morph) - - build_deps = chunk_morph['x-build-dependencies-%s' % kind] - runtime_deps = chunk_morph['x-runtime-dependencies-%s' % kind] - except BaserockImportException as e: - errors[current_item] = e - build_deps = runtime_deps = {} - - processed.add_node(current_item) - - self.process_dependency_list( - current_item, build_deps, to_process, processed, True) - self.process_dependency_list( - current_item, runtime_deps, to_process, processed, False) - except BaserockImportException: - sys.stderr.write('Error processing package %s\n' % - current_item) - raise + checked_out_version, ref = self.checkout_source_version( + source_repo, name, version) + current_item.set_version_in_use(checked_out_version) + chunk_morph = self.find_or_create_chunk_morph( + morph_set, goal_name, kind, name, checked_out_version, + source_repo, url, ref) + + current_item.set_morphology(chunk_morph) + + build_deps = chunk_morph['x-build-dependencies-%s' % kind] + runtime_deps = chunk_morph['x-runtime-dependencies-%s' % kind] + except BaserockImportException as e: + self.status('%s', e) + errors[current_item] = e + build_deps = runtime_deps = {} + + processed.add_node(current_item) + + self.process_dependency_list( + current_item, build_deps, to_process, processed, True) + self.process_dependency_list( + current_item, runtime_deps, to_process, processed, False) if len(errors) > 0: self.status( - 'Errors encountered, not generating a stratum morphology. You ' - 'may want to manually create chunk morphologies for the ' + '\nErrors encountered, not generating a stratum morphology. ' + 'You may want to manually create chunk morphologies for the ' 'following items, then rerun the script.') for package, exception in errors.iteritems(): - self.status('%s: %s', package, exception) + self.status('\n%s: %s', package.name, exception) else: self.generate_stratum_morph_if_none_exists(processed, goal_name) def generate_lorry_for_package(self, kind, name): tool = '%s.to_lorry' % kind self.status('Calling %s to generate lorry for %s', tool, name) - lorry_text = cliapp.runcmd([os.path.abspath(tool), name]) + try: + lorry_text = cliapp.runcmd([os.path.abspath(tool), name]) + except cliapp.AppException as e: + raise BaserockImportException(e.msg.rstrip()) lorry = json.loads(lorry_text) return lorry @@ -483,7 +482,10 @@ class BaserockImportApplication(cliapp.Application): # cwd=repopath) else: self.status('Cloning repo %s', url) - cliapp.runcmd(['git', 'clone', url, repopath]) + try: + cliapp.runcmd(['git', 'clone', '--quiet', url, repopath]) + except cliapp.AppException as e: + raise BaserockImportException(e.msg.rstrip()) repo = GitDirectory(repopath) if repo.dirname != repopath: @@ -529,7 +531,7 @@ class BaserockImportApplication(cliapp.Application): text = cliapp.runcmd( [os.path.abspath(tool), source_repo.dirname, name]) except cliapp.AppException as e: - raise BaserockImportException(e.message) + raise BaserockImportException(e.msg.rstrip()) loader = MorphologyLoader() return loader.load_from_string(text, filename) diff --git a/import/rubygem.to_lorry b/import/rubygem.to_lorry index bb381da3..f8f646ff 100755 --- a/import/rubygem.to_lorry +++ b/import/rubygem.to_lorry @@ -29,6 +29,9 @@ import sys import urlparse +class GenerateLorryException(Exception): + pass + class RubyGemsWebServiceClient(object): def __init__(self): # Save hammering the rubygems.org API: 'requests' API calls are @@ -40,7 +43,8 @@ class RubyGemsWebServiceClient(object): if r.ok: return json.loads(r.text) else: - raise Exception('Request to %s failed: %s' % (r.url, r.reason)) + raise GenerateLorryException( + 'Request to %s failed: %s' % (r.url, r.reason)) def get_gem_info(self, gem_name): info = self._request( @@ -48,8 +52,9 @@ class RubyGemsWebServiceClient(object): if info['name'] != gem_name: # Sanity check - raise Exception('Received info for Gem "%s", requested "%s"' % - info['name'], gem_name) + raise GenerateLorryException( + 'Received info for Gem "%s", requested "%s"' % info['name'], + gem_name) return info @@ -96,7 +101,7 @@ class RubyGemLorryGenerator(object): # https://github.com/search?q=$gemname -> often the first result is # the correct one, but you can never know. - raise Exception( + raise GenerateLorryException( "Did not manage to find the upstream source URL for Gem '%s'. " "Please manually create a .lorry file, or add the Gem to " "known-source-uris in rubygems.yaml." % gem_name) @@ -164,4 +169,9 @@ def main(): if __name__ == '__main__': - main() + try: + main() + except GenerateLorryException as e: + sys.stderr.write(e.message) + sys.stderr.write('\n') + sys.exit(1) |