From bb1960c7711a8a48bbaabd188158a3c5d7f0ff04 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Thu, 23 Oct 2014 15:36:46 +0100 Subject: Separate resolution of ref->commit and commit->tree --- morphlib/sourceresolver.py | 22 +++++++++++++++------- 1 file 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) -- cgit v1.2.1