summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2014-06-14 11:51:18 +0100
committerSam Thursfield <sam@afuera.me.uk>2014-06-14 11:54:52 +0100
commit0a8b830cf19c1b0c290c73a0100f15620a7e6c48 (patch)
treeb43088100b1f9fa349c940db05e96ec17ee91808
parent8033de59fa79f7828ddcc9cb66e73338786dc6c6 (diff)
downloadmorph-0a8b830cf19c1b0c290c73a0100f15620a7e6c48.tar.gz
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.
-rw-r--r--morphlib/morphologyfactory.py54
1 files 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.'''