summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-10-23 15:36:46 +0100
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-12-02 14:26:09 +0000
commitbb1960c7711a8a48bbaabd188158a3c5d7f0ff04 (patch)
tree224b1236ee061eb5cb2e441786e13c3369e32236
parent0861a2054145b9558f108e0662b35061db2a19ec (diff)
downloadmorph-bb1960c7711a8a48bbaabd188158a3c5d7f0ff04.tar.gz
Separate resolution of ref->commit and commit->tree
-rw-r--r--morphlib/sourceresolver.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/morphlib/sourceresolver.py b/morphlib/sourceresolver.py
index 8c9fd8b8..8daaba81 100644
--- a/morphlib/sourceresolver.py
+++ b/morphlib/sourceresolver.py
@@ -103,7 +103,9 @@ class SourceResolver(object):
definitions_queue = collections.deque(system_filenames)
chunk_in_definitions_repo_queue = []
chunk_in_source_repo_queue = []
- resolved_refs = {}
+
+ resolved_commits = {}
+ resolved_trees = {}
resolved_morphologies = {}
# Resolve the (repo, ref) pair for the definitions repo, cache result.
@@ -146,9 +148,12 @@ class SourceResolver(object):
(c['repo'], c['ref'], c['morph']))
for repo, ref, filename in chunk_in_definitions_repo_queue:
- if (repo, ref) not in resolved_refs:
- resolved_refs[repo, ref] = self.resolve_ref(repo, ref)
- absref, tree = resolved_refs[repo, ref]
+ if (repo, ref) not in resolved_trees:
+ commit_sha1, tree_sha1 = self.resolve_ref(repo, ref)
+ resolved_commits[repo, ref] = commit_sha1
+ resolved_trees[repo, commit_sha1] = tree_sha1
+ absref = resolved_commits[repo, ref]
+ tree = resolved_trees[repo, absref]
key = (definitions_repo, definitions_absref, filename)
if not key in resolved_morphologies:
resolved_morphologies[key] = morph_factory.get_morphology(*key)
@@ -156,9 +161,12 @@ class SourceResolver(object):
visit(repo, ref, filename, absref, tree, morphology)
for repo, ref, filename in chunk_in_source_repo_queue:
- if (repo, ref) not in resolved_refs:
- resolved_refs[repo, ref] = self.resolve_ref(repo, ref)
- absref, tree = resolved_refs[repo, ref]
+ if (repo, ref) not in resolved_trees:
+ commit_sha1, tree_sha1 = self.resolve_ref(repo, ref)
+ resolved_commits[repo, ref] = commit_sha1
+ resolved_trees[repo, commit_sha1] = tree_sha1
+ absref = resolved_commits[repo, ref]
+ tree = resolved_trees[repo, absref]
key = (repo, absref, filename)
if key not in resolved_morphologies:
resolved_morphologies[key] = morph_factory.get_morphology(*key)