mirror of
https://github.com/pnpm/pnpm.git
synced 2026-07-15 18:22:47 -04:00
The recursive command runners sorted opts.selectedProjectsGraph, which keeps only the selected projects as keys. Edges to unselected projects were dropped, so a transitive dependency between two selected projects (a -> b -> c with only a and c selected) was lost and the two ran out of order. sortFilteredProjects resolves the order through the full workspace graph: for each sorted project it walks dependencies, tunneling past unselected projects and stopping at selected ones, so a transitive relationship becomes a direct edge. Projects without a real dependency stay in the same chunk, preserving concurrency. Prod-only filters (--filter-prod) prune dev edges. Their selected projects are sorted through the prod-pruned full graph, so transitive prod deps are honored without reintroducing the dropped dev edges. In a mixed selection each project is sorted through the graph that matches how it was selected: regularly filtered projects through the full graph, prod-only ones through the prod-pruned graph. Carrying prod-only projects on the full graph would let a dev-only reverse edge form a cycle and collapse a real prod dependency and its dependent into one chunk. Fixes pnpm/pnpm#8335 --------- Co-authored-by: Zoltan Kochan <z@kochan.io>