Build a graph of dependencies and filter optional edges in case of cycles#5614
Draft
laeubi wants to merge 6 commits into
Draft
Build a graph of dependencies and filter optional edges in case of cycles#5614laeubi wants to merge 6 commits into
laeubi wants to merge 6 commits into
Conversation
…e with cycle detection and labeled edges (#100) * Initial plan * Refactor ProjectDependencyClosureGraph to use real graph structure with records and DOT export Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Remove self-satisfied requirement filtering and parallelize graph building Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Change Edge to use single Capability instead of Set<Capability> Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Refactor Capability and Edge structure based on review feedback Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Add cycle detection with color-coded DOT visualization Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Add requirement labels to edges in DOT visualization Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
…bels (#101) * Initial plan * Add edge label formatting for requirement properties in DOT graph output - Add italic formatting for optional requirements (getMin() == 0) - Add bold formatting for mandatory compile requirements (osgi.bundle or java.package) - Add underline formatting for greedy requirements (isGreedy() == true) - Support combining multiple formats (e.g., italic + bold + underline) - Add comprehensive test cases for all formatting combinations - Update DotDump to use HTML-like labels for formatted requirements Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> * Add test to verify non-compile namespaces don't get bold formatting Added testNonMandatoryCompileRequirementNoBoLD() to ensure that only osgi.bundle and java.package namespaces get bold formatting, while other namespaces like osgi.service remain unformatted. All 16 tests now pass. Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
Test Results1 032 files + 3 1 032 suites +3 6h 14m 34s ⏱️ + 32m 0s For more details on these errors, see this check. Results for commit 1e66019. ± Comparison against base commit 28dd70f. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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: