From 0a8b830cf19c1b0c290c73a0100f15620a7e6c48 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Sat, 14 Jun 2014 11:51:18 +0100 Subject: Split up morphology fetching code into functions The logic of this is still rather twisted, but now it can be shared by a batched get_morphologies() function. --- morphlib/morphologyfactory.py | 54 ++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py index 8a0b047a..1de42d57 100644 --- a/morphlib/morphologyfactory.py +++ b/morphlib/morphologyfactory.py @@ -74,25 +74,30 @@ class MorphologyFactory(object): if self._app is not None: self._app.status(*args, **kwargs) - def get_morphology(self, reponame, sha1, filename): - + def _read_local_repo(self, reponame, sha1, filename): + '''Fetch file list and maybe morphology text from local repo cache.''' text = None - if self._lrc.has_repo(reponame): - repo = self._lrc.get_repo(reponame) - file_list = repo.ls_tree(sha1) - if filename in file_list: - text = repo.cat(sha1, filename) - elif self._rrc is not None: - file_list = self._rrc.ls_tree(reponame, sha1) - if filename in file_list: - self.status(msg="Retrieving %(reponame)s %(sha1)s %(filename)s" - " from the remote artifact cache.", - reponame=reponame, sha1=sha1, filename=filename, - chatty=True) - text = self._rrc.cat_file(reponame, sha1, filename) - else: - raise NotcachedError(reponame) - + repo = self._lrc.get_repo(reponame) + file_list = repo.ls_tree(sha1) + if filename in file_list: + text = repo.cat(sha1, filename) + return file_list, text + + def _read_remote_repo(self, reponame, sha1, filename): + '''Fetch file list and maybe morphology text from remote repo cache.''' + text = None + file_list = self._rrc.ls_tree(reponame, sha1) + if filename in file_list: + self.status(msg="Retrieving %(reponame)s %(sha1)s %(filename)s" + " from the remote artifact cache.", + reponame=reponame, sha1=sha1, filename=filename, + chatty=True) + text = self._rrc.cat_file(reponame, sha1, filename) + return file_list, text + + def _parse_or_generate_morphology(self, reponame, sha1, filename, + file_list, text): + '''Parse text or autodetect morphology contents based on file list.''' if text is None: bs = morphlib.buildsystem.detect_build_system(file_list) if bs is None: @@ -123,6 +128,19 @@ class MorphologyFactory(object): return morphology + def get_morphology(self, reponame, sha1, filename): + if self._lrc.has_repo(reponame): + file_list, text = self._read_local_repo(reponame, sha1, filename) + elif self._rrc is not None: + file_list, text = self._read_remote_repo(reponame, sha1, filename) + else: + raise NotcachedError(reponame) + + morphology = self._parse_or_generate_morphology(reponame, sha1, + filename, file_list, + text) + return morphology + def _check_and_tweak_system(self, morphology, reponame, sha1, filename): '''Check and tweak a system morphology.''' -- cgit v1.2.1