Skip to content

Conversation

@laeubi
Copy link
Member

@laeubi laeubi commented Nov 16, 2025

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:

  1. We compute a graph of dependencies that can contain cycles by purpose
  2. We store sufficient info there to inspect the nature or an edge
  3. 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)

Copilot AI and others added 6 commits November 16, 2025 06:47
…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>
@github-actions
Copy link

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 1e66019. ± Comparison against base commit 28dd70f.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant