diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2014-08-19 10:40:53 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2014-08-19 10:40:53 +0000 |
commit | e86a598553e96dab2dc4111aedefcb6b0a60c50d (patch) | |
tree | 04e193878bbd4bcfb0992a4aeb488715e50cbe36 /morphlib/remoterepocache_tests.py | |
parent | 7aec8c2eb0f8ce0dae70559d11db8e84115f8ba6 (diff) | |
download | morph-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_tests.py')
-rw-r--r-- | morphlib/remoterepocache_tests.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/morphlib/remoterepocache_tests.py b/morphlib/remoterepocache_tests.py index 0b1a183b..ef81506f 100644 --- a/morphlib/remoterepocache_tests.py +++ b/morphlib/remoterepocache_tests.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 @@ -16,6 +16,7 @@ import json import unittest +import urllib2 import morphlib @@ -26,7 +27,11 @@ class RemoteRepoCacheTests(unittest.TestCase): return self.sha1s[repo_url][ref] def _cat_file_for_repo_url(self, repo_url, sha1, filename): - return self.files[repo_url][sha1][filename] + try: + return self.files[repo_url][sha1][filename] + except KeyError: + raise urllib2.HTTPError(url='', code=404, msg='Not found', + hdrs={}, fp=None) def _ls_tree_for_repo_url(self, repo_url, sha1): return json.dumps({ |