Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explore ways to have more package metadata providers. #59

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

aiuto
Copy link
Collaborator

@aiuto aiuto commented Nov 9, 2022

This is in support of Renaming applicable_licenses to packge_metadata. Please read that plan first for context.

Licenses are still special because they need to go down to the license_kind, but other metadata (self-contained) providers can be gathered generically. This PR has two parallel implementations so we can explore the ramifactions of each.

The early attempt was to make PackageInfo a first class element, equal to LicensesInfo in the way we recursively gather it. The problem with that approach is that it requires you to scale licenses_core.bzl with each new type.

A different approach is to have a generic TransitiveMetadataInfo collector that can hold many different types of provider in it, as long as they all obey the same protocol for identifying their type. We pass a provider list to gather_licenses_info_common() to select what to include.

This way, a user adding a private metadata type only needs to add a new write-json capability for their custom provider. That is still a little ugly, but at least we can share gather_licenses_info_common().

DO NOT SUBMIT. Work in progress. This is more of an early design review.

@aiuto aiuto marked this pull request as draft November 9, 2022 19:50
@aiuto aiuto requested a review from wcn3 November 9, 2022 19:50
@aiuto
Copy link
Collaborator Author

aiuto commented Nov 9, 2022

Hi Bill. I just wanted to run this idea by you. It's not urgent. I want to hear what users say at BazelCon

Licenses are still special because they need to go down to the
license_kind, but other metadata (self-contained) providers can be
gathered generically.  This PR has two parallel implementations so we
can explore the ramifactions of each.

The early attempt was to make PackageInfo a first class element, equal
to LicensesInfo in the way we recursively gather it.  The problem with
that approach is that it requires you to scale licenses_core.bzl with
each new type.

A different approach is to have a generic TransitiveMetadataInfo
collector that can hold many different types of provider in it,
as long as they all obey the same protocol for identifying their
type. We pass a provider list to gather_licenses_info_common()
to select what to include.

This way, a user adding a private metadata type only needs to
add a new write-json capability for their custom provider.
That is still a little ugly, but at least we can share
gather_licenses_info_common().
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant