Skip to content

Fix %<group> expansion to include all members#4

Merged
typeless merged 1 commit intomainfrom
fix/deferred-group-expansion
Feb 10, 2026
Merged

Fix %<group> expansion to include all members#4
typeless merged 1 commit intomainfrom
fix/deferred-group-expansion

Conversation

@typeless
Copy link
Owner

Summary

  • Always defer %<group> expansion — remove eager member-snapshot logic in expand_rule() that only captured group members parsed so far, causing partial expansion for cross-directory groups
  • Defer local groups too — per-rule resolver now returns the literal %<group> pattern for local groups not in order-only inputs, instead of falling through to an eager callback
  • Accumulate same-named groupsresolve_deferred_order_only_edges() now uses a two-pass approach to merge members from same-named groups across directories before replacing, fixing silent member loss

Discovered via the GCC example where libgmp.a only got ~16 of 515 objects because subdirectories hadn't all been parsed when %<gmp-objs> was eagerly expanded.

Test plan

  • New E2E regression test: groups_multi_dir_producers — group receiving members from two directories consumed by a third, verifies combined.txt contains both outputs
  • All group tests pass ([groups] — 14 test cases, 111 assertions)
  • Full test suite passes (326 test cases, 2575 assertions)

🤖 Generated with Claude Code

%<group> in command strings was eagerly expanded at parse time, capturing
only group members that existed at that point. Groups receiving members
from multiple Tupfiles parsed later would get partial snapshots.

Now both expansion paths in expand_rule() preserve the literal %<group>
pattern, letting resolve_deferred_order_only_edges() expand with full
membership after all Tupfiles are parsed. The deferred resolver uses a
two-pass approach to accumulate members from same-named groups across
directories before replacing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@typeless typeless force-pushed the fix/deferred-group-expansion branch from db8d27f to d5e7b9c Compare February 10, 2026 04:42
@typeless typeless merged commit bcc796b into main Feb 10, 2026
4 checks passed
@typeless typeless deleted the fix/deferred-group-expansion branch February 10, 2026 04:44
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