summaryrefslogtreecommitdiff
path: root/buildstream/element.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildstream/element.py')
-rw-r--r--buildstream/element.py27
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)