Build a graph of dependencies and filter optional edges in case of cycles
Currently we have the situation that we sometimes face a problem of a cycle in project dependencies that is actual cause by an optimization where we want to control the build order in a certain way, e.g a host must be build before a fragment and if we require a capability it should likely be build before. On the other hand when the project is used as a dependency and we require the host, we want all fragments to be attached (most of the time).
With a naive approach this leads to cycles in the build-graph and we currently require some workarounds like disabled requirements with "build.time" flags, but in fact it would be much more useful if Tycho would detect and resolve the situation.
This now introduces a new approach where we do the following:
- We compute a graph of dependencies that can contain cycles by purpose
- We store sufficient info there to inspect the nature or an edge
- During computation of the dependencies we can then traverse the graph, detect cycles and decide how to handle them, for example in case of a host <-> fragment cycle we can break it there and not attach the fragment as a build requirement, in case of capabilities, we can check if it is actually a build-time requirement (e.g. we only follow package/bundle wires anyways)
Test Results
1 032 files + 3 1 032 suites +3 6h 14m 34s ⏱️ + 32m 0s 1 364 tests +17 1 342 ✅ +15 20 💤 ±0 0 ❌ ±0 2 🔥 +2 4 092 runs +51 4 023 ✅ +45 63 💤 ±0 0 ❌ ±0 6 🔥 +6
For more details on these errors, see this check.
Results for commit 1e66019b. ± Comparison against base commit 28dd70fd.