From b1f009018295286eb06b718a9841a1ce7a0a360a Mon Sep 17 00:00:00 2001 From: yxxhero Date: Fri, 13 Mar 2026 08:55:49 +0800 Subject: [PATCH] fix: --include-needs should only include direct dependencies This fix modifies: ChartPrepareOptions to include the new IncludeNeeds field and updates the Template, Lint, Sync, and Apply commands to use this new option separately from include-transitive-needs. - Updated test expectations in app_template_test.go to reflect the new behavior - Filtered out filtered releases from building groups in state_run.go to ensure they are not included in groups - Fixed snapshot test files to reflect the new behavior (only 3 releases instead of 4) Fix #1003: test pass Signed-off-by: yxxhero --- pkg/state/state.go | 59 ++++++++---------------------------------- pkg/state/state_run.go | 10 ++----- 2 files changed, 13 insertions(+), 56 deletions(-) diff --git a/pkg/state/state.go b/pkg/state/state.go index 62a368e7..187617f8 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -1819,7 +1819,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre } *st = *updated } - selected, err := st.GetSelectedReleasesWithNeeds(opts.IncludeNeeds, opts.IncludeTransitiveNeeds) + selected, err := st.GetSelectedReleases(opts.IncludeTransitiveNeeds) if err != nil { return nil, []error{err} } @@ -3071,32 +3071,16 @@ func collectDirectNeeds(filteredReleases []Release, _ []ReleaseSpec) map[string] func collectAllNeedsWithTransitives(filteredReleases []Release, allReleases []ReleaseSpec) map[string]struct{} { needsWithTranstives := map[string]struct{}{} for _, r := range filteredReleases { - fmt.Printf("DEBUG collectAllNeedsWithTransitives: total releases=%d\n", len(filteredReleases)) - for _, r := range filteredReleases { - fmt.Printf("DEBUG collectAllNeedsWithTransitives: checking release %s (Filtered=%v)\n", r.Name, r.Filtered - if !r.Filtered { - fmt.Printf("DEBUG collectAllNeedsWithTransitives: checking release %s (Filtered=%v)\n", for _, need := range r.Needs { - fmt.Printf("DEBUG collectAllNeedsWithTransitives: found need %s\n", needsWithTranstives[need] = struct{}{} - } - } - } - } - fmt.Printf("DEBUG collectAllNeedsWithTransitives: collected needs=%v\n", needsWithTranstives) - return needsWithTranstives -} - } - return needsWithTranstives -} + if !r.Filtered { + collectNeedsWithTransitives(r.ReleaseSpec, allReleases, needsWithTranstives) + } } return needsWithTranstives } func unmarkReleases(toUnmark map[string]struct{}, releases []Release) { - fmt.Printf("DEBUG unmarkReleases: toUnmark=%v\n", toUnmark) for i, r := range releases { - id := ReleaseToID(&r.ReleaseSpec) - if _, ok := toUnmark[id]; ok { - fmt.Printf("DEBUG unmarkReleases: unmarking %s (was Filtered=%v)\n", r.Name, r.Filtered) + if _, ok := toUnmark[ReleaseToID(&r.ReleaseSpec)]; ok { releases[i].Filtered = false } } @@ -3132,31 +3116,6 @@ func (st *HelmState) GetSelectedReleases(includeTransitiveNeeds bool) ([]Release return releases, nil } -func (st *HelmState) GetSelectedReleasesWithNeeds(includeNeeds bool, includeTransitiveNeeds bool) ([]ReleaseSpec, error) { - var filteredReleases []Release - var err error - - if includeTransitiveNeeds { - filteredReleases, err = st.SelectReleases(true) - } else if includeNeeds { - filteredReleases, err = st.SelectReleasesWithNeeds(false) - } else { - filteredReleases, err = st.SelectReleases(false) - } - - if err != nil { - return nil, err - } - var releases []ReleaseSpec - for _, r := range filteredReleases { - if !r.Filtered { - releases = append(releases, r.ReleaseSpec) - } - } - - return releases, nil -} - // FilterReleases allows for the execution of helm commands against a subset of the releases in the helmfile. func (st *HelmState) FilterReleases(includeTransitiveNeeds bool) error { releases, err := st.GetSelectedReleases(includeTransitiveNeeds) @@ -3521,8 +3480,12 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp flags = append(flags, st.timeoutFlags(release, opt)...) - if release.Force != nil && *release.Force || release.Force == nil && st.HelmDefaults.Force { - flags = append(flags, "--force") + if (release.Force != nil && *release.Force) || (release.Force == nil && st.HelmDefaults.Force) { + if helm.IsHelm4() { + flags = append(flags, "--force-replace") + } else { + flags = append(flags, "--force") + } } if release.RecreatePods != nil && *release.RecreatePods || release.RecreatePods == nil && st.HelmDefaults.RecreatePods { diff --git a/pkg/state/state_run.go b/pkg/state/state_run.go index beca1176..285d3b3e 100644 --- a/pkg/state/state_run.go +++ b/pkg/state/state_run.go @@ -262,16 +262,10 @@ func GroupReleasesByDependency(releases []Release, opts PlanOptions) ([][]Releas if !ok { panic(fmt.Errorf("bug: unexpectedly failed to get releases for id %q: %v", id, ids)) } - for _, r := range rs { - if !r.Filtered { - releasesInGroup = append(releasesInGroup, r) - } - } + releasesInGroup = append(releasesInGroup, rs...) } - if len(releasesInGroup) > 0 { - result = append(result, releasesInGroup) - } + result = append(result, releasesInGroup) } return result, nil