summaryrefslogtreecommitdiff
path: root/morphlib/remoterepocache.py
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2014-08-19 10:40:53 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2014-08-19 10:40:53 +0000
commite86a598553e96dab2dc4111aedefcb6b0a60c50d (patch)
tree04e193878bbd4bcfb0992a4aeb488715e50cbe36 /morphlib/remoterepocache.py
parent7aec8c2eb0f8ce0dae70559d11db8e84115f8ba6 (diff)
downloadmorph-e86a598553e96dab2dc4111aedefcb6b0a60c50d.tar.gz
Only autodetect morphology when result is 404baserock/richardmaw/bugfix/http-fail
The MorphologyFactory class will use a RemoteRepoCache to see if a morphology file exists, and if it doesn't, uses a file listing to see if it can detect what build-system is uses, hence what the default morphology should be. However, it was overly generic in what error cases it would accept as the morphology not being found, so if the RemoteRepoCache was suddenly un-resolvable for a brief period, then it would assume the morphology didn't exist, and use the default one. This happened to a user, and the result was a full rebuild. So we now fix this by only raising the exception that means the file didn't exist, if we got a HTTP 404.
Diffstat (limited to 'morphlib/remoterepocache.py')
-rw-r--r--morphlib/remoterepocache.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/morphlib/remoterepocache.py b/morphlib/remoterepocache.py
index b1544b03..004ba86e 100644
--- a/morphlib/remoterepocache.py
+++ b/morphlib/remoterepocache.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2013 Codethink Limited
+# Copyright (C) 2012-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -63,9 +63,11 @@ class RemoteRepoCache(object):
repo_url = self._resolver.pull_url(repo_name)
try:
return self._cat_file_for_repo_url(repo_url, ref, filename)
- except BaseException, e:
+ except urllib2.HTTPError as e:
logging.error('Caught exception: %s' % str(e))
- raise CatFileError(repo_name, ref, filename)
+ if e.code == 404:
+ raise CatFileError(repo_name, ref, filename)
+ raise # pragma: no cover
def ls_tree(self, repo_name, ref):
repo_url = self._resolver.pull_url(repo_name)