diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-10-23 15:36:46 +0100 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-12-02 14:26:09 +0000 |
commit | bb1960c7711a8a48bbaabd188158a3c5d7f0ff04 (patch) | |
tree | 224b1236ee061eb5cb2e441786e13c3369e32236 | |
parent | 0861a2054145b9558f108e0662b35061db2a19ec (diff) | |
download | morph-bb1960c7711a8a48bbaabd188158a3c5d7f0ff04.tar.gz |
Separate resolution of ref->commit and commit->tree
-rw-r--r-- | morphlib/sourceresolver.py | 22 |
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) |