summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-09-04 14:56:35 +0100
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-09-11 13:26:27 +0100
commit9f81631e9a74941457d3c07298b9260719a9296b (patch)
tree7037df3659984a5515e83795e73e43537fdb82cb
parent0c65063d049d22cc78ed9ae5cb664c0ab524d825 (diff)
downloadmorph-9f81631e9a74941457d3c07298b9260719a9296b.tar.gz
import: Improve error reporting
-rw-r--r--import/main.py66
-rwxr-xr-ximport/rubygem.to_lorry20
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)