summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2015-06-01 12:53:08 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2015-06-03 14:57:17 +0000
commiteb3eb4702c59f643dd2369514e5ade0fa7b7174a (patch)
treeb93f359ad2f9238d432470521b6677c5db916518
parente7027e591c4fea5235a33bbe2cda809ddbe6bbf0 (diff)
downloadmorph-eb3eb4702c59f643dd2369514e5ade0fa7b7174a.tar.gz
sourceresolver: Pass build system directly to morphology creation
We cache based on the name, but to get the name we acutally loaded the build system, so it's a waste of effort to cache by the name only to reload it later. Change-Id: Ia77e1c73d27005cd4cc6a3bb5553b44e8dfc75c1
-rw-r--r--morphlib/sourceresolver.py13
-rw-r--r--morphlib/sourceresolver_tests.py24
2 files changed, 19 insertions, 18 deletions
diff --git a/morphlib/sourceresolver.py b/morphlib/sourceresolver.py
index 07a0b395..150dc49b 100644
--- a/morphlib/sourceresolver.py
+++ b/morphlib/sourceresolver.py
@@ -348,13 +348,12 @@ class SourceResolver(object):
# error.
raise MorphologyNotFoundError(expected_filename)
- return buildsystem.name
+ return buildsystem
- def _create_morphology_for_build_system(self, buildsystem_name,
+ def _create_morphology_for_build_system(self, buildsystem,
morph_name): # pragma: no cover
- bs = morphlib.buildsystem.lookup_build_system(buildsystem_name)
loader = morphlib.morphloader.MorphologyLoader()
- morph = bs.get_morphology(morph_name)
+ morph = buildsystem.get_morphology(morph_name)
loader.validate(morph)
loader.set_commands(morph)
loader.set_defaults(morph)
@@ -478,7 +477,7 @@ class SourceResolver(object):
morph_name): # pragma: no cover
logging.debug('Caching build system for chunk with key %s', chunk_key)
- self._resolved_buildsystems[chunk_key] = buildsystem
+ self._resolved_buildsystems[chunk_key] = buildsystem.name
morphology = self._create_morphology_for_build_system(buildsystem,
morph_name)
@@ -511,7 +510,9 @@ class SourceResolver(object):
self.status(msg='Build system for %(chunk)s is cached',
chunk=str(chunk_key),
chatty=True)
- buildsystem = self._resolved_buildsystems[chunk_key]
+ buildsystem_name = self._resolved_buildsystems[chunk_key]
+ buildsystem = morphlib.buildsystem.lookup_build_system(
+ buildsystem_name)
# If the build system for this chunk is cached then:
# * the chunk does not have a chunk morph
diff --git a/morphlib/sourceresolver_tests.py b/morphlib/sourceresolver_tests.py
index 298dae5d..8af8d262 100644
--- a/morphlib/sourceresolver_tests.py
+++ b/morphlib/sourceresolver_tests.py
@@ -235,26 +235,26 @@ class SourceResolverTests(unittest.TestCase):
def test_autodetects_local_morphology(self):
self.lr.read_file = self.nolocalmorph
self.lr.list_files = self.autotoolsbuildsystem
- name = self.sr._detect_build_system('reponame', 'sha1',
- 'assumed-local.morph')
- self.assertEqual('autotools', name)
+ bs = self.sr._detect_build_system('reponame', 'sha1',
+ 'assumed-local.morph')
+ self.assertEqual('autotools', bs.name)
def test_cache_repo_if_not_in_either_cache(self):
self.lrc.has_repo = self.doesnothaverepo
self.lr.read_file = self.nolocalmorph
self.lr.list_files = self.autotoolsbuildsystem
self.rrc.ls_tree = self.noremoterepo
- name = self.sr._detect_build_system('reponame', 'sha1',
- 'assumed-local.morph')
- self.assertEqual('autotools', name)
+ bs = self.sr._detect_build_system('reponame', 'sha1',
+ 'assumed-local.morph')
+ self.assertEqual('autotools', bs.name)
def test_autodetects_remote_morphology(self):
self.lrc.has_repo = self.doesnothaverepo
self.rrc.cat_file = self.noremotemorph
self.rrc.ls_tree = self.autotoolsbuildsystem
- name = self.sr._detect_build_system('reponame', 'sha1',
- 'assumed-remote.morph')
- self.assertEqual('autotools', name)
+ bs = self.sr._detect_build_system('reponame', 'sha1',
+ 'assumed-remote.morph')
+ self.assertEqual('autotools', bs.name)
def test_returns_none_when_no_local_morph(self):
self.lr.read_file = self.nolocalfile
@@ -293,9 +293,9 @@ class SourceResolverTests(unittest.TestCase):
def test_autodetects_locally_with_no_remote(self):
self.lr.read_file = self.nolocalmorph
self.lr.list_files = self.autotoolsbuildsystem
- name = self.sr._detect_build_system('reponame', 'sha1',
- 'assumed-local.morph')
- self.assertEqual('autotools', name)
+ bs = self.sr._detect_build_system('reponame', 'sha1',
+ 'assumed-local.morph')
+ self.assertEqual('autotools', bs.name)
def test_succeeds_when_local_not_cached_and_no_remote(self):
self.lrc.has_repo = self.doesnothaverepo