From f4399e58c07c692c001fa3e9d2c2f5d0076b528c Mon Sep 17 00:00:00 2001 From: Adam Coldrick Date: Tue, 10 Mar 2015 15:07:52 +0000 Subject: fixup: Serialise less stuff --- distbuild/serialise.py | 53 ++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/distbuild/serialise.py b/distbuild/serialise.py index 6cbc8fbc..fdbb7a7b 100644 --- a/distbuild/serialise.py +++ b/distbuild/serialise.py @@ -60,54 +60,53 @@ def serialise_artifact(artifact, repo, ref): arch = artifact.arch a_dict = { - 'root_filename': artifact.source.filename, 'arch': arch, 'cache_key': a.source.cache_key, - 'basename': a.basename(), 'filename': a.source.filename, 'name': a.name, 'kind': a.source.morphology['kind'], 'repo': repo, 'ref': ref, - 'dependencies': [], 'source_repo': a.source.repo_name, 'source_ref': a.source.sha1, - 'source_artifacts': [] } - for dep in a.source.dependencies: - a_dict['dependencies'].append(dep.basename()) - for other in a.source.artifacts: - a_dict['source_artifacts'].append(other) - return a_dict + deps = [dep.basename() for dep in a.source.dependencies] + sa = [other for other in a.source.artifacts] + return a_dict, deps, sa def encode_artifact_reference(a): a_dict = dict(a._dict) - a_dict['dependencies'] = [dep.basename() for dep in a.dependencies] - a_dict['source_artifacts'] = [str(sa) for sa in a.source_artifacts] - return a_dict - - def handle_artifact_reference(a): - if a.basename() in encoded_artifacts: - return - visited_artifacts[a.basename()] = a - for dep in a.dependencies: - handle_artifact_reference(dep) - encoded_artifacts[a.basename()] = encode_artifact_reference(a) + deps = [dep.basename() for dep in a.dependencies] + sa = [str(sa) for sa in a.source_artifacts] + return a_dict, deps, sa encoded_artifacts = {} + encoded_deps = {} + encoded_source_artifacts = {} visited_artifacts = {} if isinstance(artifact, morphlib.artifact.Artifact): + root_filename = artifact.source.filename for a in artifact.walk(): if a.basename() not in encoded_artifacts: # pragma: no cover - encoded_artifacts[a.basename()] = encode_artifact(a) + a_dict, deps, sa = encode_artifact(a) + encoded_artifacts[a.basename()] = a_dict + encoded_deps[a.source.cache_key] = deps + encoded_source_artifacts[a.source.cache_key] = sa visited_artifacts[artifact.basename()] = artifact elif isinstance(artifact, ArtifactReference): - encoded_artifacts[artifact.basename()] = encode_artifact_reference(artifact) + root_filename = artifact.root_filename + a_dict, deps, sa = encode_artifact_reference(artifact) + encoded_artifacts[artifact.basename()] = a_dict + encoded_deps[artifact.cache_key] = deps + encoded_source_artifacts[artifact.cache_key] = sa content = { 'root-artifact': artifact.basename(), - 'artifacts': encoded_artifacts + 'root-filename': root_filename, + 'artifacts': encoded_artifacts, + 'dependencies': encoded_deps, + 'source-artifacts': encoded_source_artifacts } logging.debug('SERIALISE: dumping content') ret = json.dumps(yaml.dump(content)) @@ -137,18 +136,22 @@ def deserialise_artifact(encoded): content = yaml.load(json.loads(encoded)) root = content['root-artifact'] encoded_artifacts = content['artifacts'] + encoded_deps = content['dependencies'] + encoded_sa = content['source-artifacts'] artifacts = {} # decode artifacts for basename, artifact_dict in encoded_artifacts.iteritems(): artifact = ArtifactReference(basename, artifact_dict) + artifact.root_filename = content['root-filename'] artifacts[basename] = artifact # add dependencies for basename, a_dict in encoded_artifacts.iteritems(): artifact = artifacts[basename] - artifact.dependencies = [artifacts.get(dep) - for dep in a_dict['dependencies']] + deps = encoded_deps[artifact.cache_key] + artifact.dependencies = [artifacts.get(dep) for dep in deps] + artifact.source_artifacts = encoded_sa[artifact.cache_key] return artifacts[root] -- cgit v1.2.1