Dynamically set Element public data

Public data is exposed on an Element so that other Elements which depend on the given element can read it

It is only interesting to read public data from dependencies when an Element assembles its artifact. Current use cases of this include integration commands and artifact splitting rules.

In some cases, like when deploying debian packages from imported debian supporting sources, it will be important to populate the splitting rules (essentially file manifests) at the time when the artifact is built, as we will only really know which files to put into which package after having run the build.

This task will consist of:

  • ensuring that public data is recorded in an artifact's metadata
  • ensuring that the public data is read back into the BuildStream data model whenever the pipeline is loaded and the artifact is found to already be cached
  • adding some API to the Element allowing the Element to programmatically assign public data at Element->assemble() time.