summaryrefslogtreecommitdiff
path: root/morphlib/morphologyloader.py
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-01-19 15:32:58 +0000
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-01-20 18:31:51 +0000
commitc73ca82e0c67ba3d05f47f61766f8838d0e9d8d4 (patch)
treefb3fb2f063af4167da1c287d67e4ae2d818e7748 /morphlib/morphologyloader.py
parent55751d6de5927c3bbcdd21321f7c3a6655e87a76 (diff)
downloadmorph-c73ca82e0c67ba3d05f47f61766f8838d0e9d8d4.tar.gz
Port everything to using Treeish objects instead of (repo, ref).
This affects pretty much every part of morph, so this might not be fully working and stable yet. This commit also introduces the "update-gits" command that can be used to update all cached repositories from the list of base URLs. The tree walk when resolving the Treeish objects in Builder.get_cache_id() is a bit similar to what we do in BuildDependencyGraph, maybe we can merge that one day.
Diffstat (limited to 'morphlib/morphologyloader.py')
-rw-r--r--morphlib/morphologyloader.py35
1 files changed, 11 insertions, 24 deletions
diff --git a/morphlib/morphologyloader.py b/morphlib/morphologyloader.py
index 5a975a60..f59a8ddf 100644
--- a/morphlib/morphologyloader.py
+++ b/morphlib/morphologyloader.py
@@ -14,14 +14,12 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-import os
import StringIO
import urlparse
import morphlib
-#FIXME should use Treeishes everywhere and get stuff from the SourceManager
class MorphologyLoader(object):
'''Load morphologies from git and parse them into Morphology objects.'''
@@ -30,31 +28,20 @@ class MorphologyLoader(object):
self.settings = settings
self.morphologies = {}
- def load(self, repo, ref, filename):
- base_url = self.settings['git-base-url']
- if not base_url.endswith('/'):
- base_url += '/'
- repo = urlparse.urljoin(base_url, repo)
-
- key = (repo, ref, filename)
-
+ def load(self, treeish, filename):
+ key = (treeish, filename)
if key in self.morphologies:
return self.morphologies[key]
else:
- morph = self._get_morph_from_git(repo, ref, filename)
+ morph = self._get_morph_from_git(treeish, filename)
self.morphologies[key] = morph
return morph
- def _get_morph_text(self, repo, ref, filename): # pragma: no cover
- path = urlparse.urlparse(repo).path
- t = morphlib.git.Treeish(path, ref)
- return morphlib.git.get_morph_text(t, filename)
-
- def _get_morph_from_git(self, repo, ref, filename):
- morph_text = self._get_morph_text(repo, ref, filename)
- scheme, netlock, path, params, query, frag = urlparse.urlparse(repo)
- f = StringIO.StringIO(morph_text)
- f.name = os.path.join(path, filename)
- morph = morphlib.morphology.Morphology(repo, ref, f,
- self.settings['git-base-url'])
- return morph
+ def _get_morph_text(self, treeish, filename): # pragma: no cover
+ return morphlib.git.get_morph_text(treeish, filename)
+
+ def _get_morph_from_git(self, treeish, filename):
+ morph_text = self._get_morph_text(treeish, filename)
+ fp = StringIO.StringIO(morph_text)
+ fp.name = filename
+ return morphlib.morphology.Morphology(treeish, fp)