diff options
Diffstat (limited to 'buildstream/element.py')
-rw-r--r-- | buildstream/element.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/buildstream/element.py b/buildstream/element.py index d2976cfe2..e140163f9 100644 --- a/buildstream/element.py +++ b/buildstream/element.py @@ -382,8 +382,9 @@ class Element(Plugin): if path is None \ else os.path.join(basedir, path.lstrip(os.sep)) - files = self.__compute_splits(include, exclude, orphans) - result = utils.link_files(artifact, stagedir, files=files) + manifest = self.__compute_splits(include, exclude, orphans) + result = utils.link_files(artifact, stagedir, files=manifest.keys()) + result.manifest = manifest return result @@ -410,6 +411,7 @@ class Element(Plugin): """ overwrites = {} ignored = {} + manifest = {} for dep in self.dependencies(scope): result = dep.stage_artifact(sandbox, path=path, @@ -421,6 +423,10 @@ class Element(Plugin): if result.ignored: ignored[dep.name] = result.ignored + manifest.update({ + f:info for f, info in result.manifest.items() + if f not in result.ignored}) + if overwrites: detail = "Staged files overwrite existing files in staging area:\n" for key, value in overwrites.items(): @@ -435,6 +441,8 @@ class Element(Plugin): detail += " " + " ".join(["/" + f + "\n" for f in value]) self.warn("Ignored files", detail=detail) + return manifest + def integrate(self, sandbox): """Integrate currently staged filesystem against this artifact. @@ -1083,7 +1091,7 @@ class Element(Plugin): # Step 2 - Stage self.stage(sandbox) # Step 3 - Assemble - collect = self.assemble(sandbox) + collect, manifest = self.assemble(sandbox) except BstError as e: # If an error occurred assembling an element in a sandbox, # then tack on the sandbox directory to the error @@ -1138,6 +1146,8 @@ class Element(Plugin): } _yaml.dump(_yaml.node_sanitize(meta), os.path.join(metadir, 'artifact.yaml')) + _yaml.dump(manifest, os.path.join(metadir, 'manifest.yaml')) + with self.timed_activity("Caching Artifact"): self.__artifacts.commit(self, assembledir) @@ -1609,9 +1619,8 @@ class Element(Plugin): # No splitting requested, just report complete artifact if orphans and not (include or exclude): - for filename in utils.list_relative_paths(basedir): - yield filename - return + return {filename: (self.name,) + for filename in utils.list_relative_paths(basedir)} if not self.__splits: self.__init_splits() @@ -1636,6 +1645,7 @@ class Element(Plugin): for filename in utils.list_relative_paths(basedir) ] + manifest = {} for filename in element_files: include_file = False exclude_file = False @@ -1653,7 +1663,10 @@ class Element(Plugin): include_file = True if include_file and not exclude_file: - yield filename.lstrip(os.sep) + claimed_domain = domain if claimed_file else None + manifest[filename.lstrip(os.sep)] = (self.name, claimed_domain) + + return manifest def _load_public_data(self): self._assert_cached(recalculate=False) |