-
Couldn't load subscription status.
- Fork 36
Add config to compose for filter-whilst-staging #2012
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
base: master
Are you sure you want to change the base?
Add config to compose for filter-whilst-staging #2012
Conversation
The configuration allows applying filers based on `include`, `exclude` and `include-orphans` whilst staging dependencies rather than when assembling the artifact. This is useful to avoid overlapping files errors.
8b8f97a to
4e0500e
Compare
|
I think this needs some deeper thought. Right now compose does: The problem you are trying to solve, is that this approach conflicts with overlaps, in the case that initially staged artifact dependency chains have multiple artifacts which provide the same groups of files. In what ways can we address this ?
If we're going to add configuration here, we should consider what will be maximally useful for different possible use-cases. Also, I think it would be good to avoid breaking expectations of setting overlap warnings as fatal warnings (as mentioned above, it seems telling that this error you are trying to circumvent would still be occurring if this were a build element and not a compose element). |
There are two elements that provide the same file, one from FDSDK (so I cannot edit it) and one in my project (so I can edit it). If I add overlap whitelist to my element that would allow the version of the file from my element to replace the one from FDSDK. However, I want to do the oposite. I want the version of the file from my element to be replaced by the one from FDSDK. For context my work around is to add the following to the element in my project: |
|
[...]
Not shipping the file which conflicts with |
With the split-rule + compose approach (that requires the changes in this PR) we give the element that integrates the elements the choice on whether to remove the offending file, if |
|
FWIW, I've been thinking about this "filter while staging" idea. I feel that it makes more sense as a dependency configuration that is more generically applicable rather than being specific to compose. This would make it usable for other use cases as well. |
Sure. I think that the approach you currently taking is sensible. That said, I'm not happy with the implementation you propose, and I've asked for more thinking in my above comment #2012 (comment) to find an API that is more all around generally useful. One approach I've suggested there, would be to instead have a separate splitting at staging time (e.g. it could be However, I rather like @abderrahim's line of thinking too:
The way the code is structured, at least some duplication is needed in base Element classes to do the dependency configuration support, that said I agree it can make sense to do some kind of filtering at staging time for script, compose and build elements (probably with the same consistent API). Expressing the dependency on partial artifacts is also reminiscent of past suggestions from @sstriker, the idea you propose makes me wonder if just having this data expressed might leave some window open to improve build avoidance in the future (i.e. "If the part of my dependency artifact which I use, has not changed, I don't need to rebuild"), while this is a bit far fetched given the nature of cache keys, it's at least worth noting in the context of this discussion. Orthogonal to this (but somewhat relevant to this conflicting "/usr/bin/perf" program), something that I've been mulling over, is; why do we limit ourselves to filtering ? I think that elements like compose and filter which do these inclusions/exclusions, might also benefit from the ability to do relocations, i.e. renaming/relocating files on a per-split or per-file basis. |
The configuration allows applying filers based on
include,excludeandinclude-orphanswhilst staging dependencies rather than when assembling the artifact. This is useful to avoid overlapping files errors.