From efa599380ea22864fbc018d235651d0cd9cb00b6 Mon Sep 17 00:00:00 2001 From: yxxhero Date: Fri, 13 Mar 2026 11:44:06 +0800 Subject: [PATCH] fix: exclude disabled releases from needs collection - Updated collectDirectNeeds to skip disabled releases (installed: false) - Updated collectNeedsWithTransitives to skip disabled releases in transitive dependencies - This ensures --include-needs and --include-transitive-needs properly exclude disabled releases Fixes CI test failures in PR #2474 Signed-off-by: yxxhero --- pkg/state/state.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/pkg/state/state.go b/pkg/state/state.go index 187617f8..814f7205 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -3056,12 +3056,22 @@ func unmarkDirectNeeds(filteredReleases []Release, allReleases []ReleaseSpec) { unmarkReleases(directNeeds, filteredReleases) } -func collectDirectNeeds(filteredReleases []Release, _ []ReleaseSpec) map[string]struct{} { +func collectDirectNeeds(filteredReleases []Release, allReleases []ReleaseSpec) map[string]struct{} { directNeeds := map[string]struct{}{} + + allReleasesMap := make(map[string]*ReleaseSpec) + for i := range allReleases { + allReleasesMap[ReleaseToID(&allReleases[i])] = &allReleases[i] + } + for _, r := range filteredReleases { if !r.Filtered { for _, need := range r.Needs { - directNeeds[need] = struct{}{} + if release, exists := allReleasesMap[need]; exists { + if release.Installed == nil || *release.Installed { + directNeeds[need] = struct{}{} + } + } } } } @@ -3087,8 +3097,18 @@ func unmarkReleases(toUnmark map[string]struct{}, releases []Release) { } func collectNeedsWithTransitives(release ReleaseSpec, allReleases []ReleaseSpec, needsWithTranstives map[string]struct{}) { + allReleasesMap := make(map[string]*ReleaseSpec) + for i := range allReleases { + allReleasesMap[ReleaseToID(&allReleases[i])] = &allReleases[i] + } + for _, id := range release.Needs { if _, exists := needsWithTranstives[id]; !exists { + if needRelease, exists := allReleasesMap[id]; exists { + if needRelease.Installed != nil && !*needRelease.Installed { + continue + } + } needsWithTranstives[id] = struct{}{} releaseParts := strings.Split(id, "/") releaseName := releaseParts[len(releaseParts)-1]