From 28753f9bde0f4ebba4dbe02622e16c298adaa271 Mon Sep 17 00:00:00 2001 From: yxxhero Date: Wed, 11 Mar 2026 00:07:29 +0800 Subject: [PATCH] WIP: fix include-needs to only include direct dependencies - Add IncludeNeeds field to ChartPrepareOptions - Update PrepareCharts to use GetSelectedReleasesWithNeeds - Add GetSelectedReleasesWithNeeds function to handle both includeNeeds and includeTransitiveNeeds - Update all callers to pass IncludeNeeds flag Signed-off-by: yxxhero (cherry picked from commit 3a701d3e80c7c8dc3481fe564ce804ffb6ea00b6) Signed-off-by: yxxhero --- pkg/app/app.go | 1 + pkg/state/state.go | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 95a0bf3d..f6450f54 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -169,6 +169,7 @@ func (a *App) Diff(c DiffConfigProvider) error { IncludeCRDs: &includeCRDs, Validate: c.Validate(), Concurrency: c.Concurrency(), + IncludeNeeds: c.IncludeNeeds(), IncludeTransitiveNeeds: c.IncludeTransitiveNeeds(), }, func() { msg, matched, affected, errs = a.diff(run, c) diff --git a/pkg/state/state.go b/pkg/state/state.go index a9d0ade7..ece35a8d 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.GetSelectedReleases(opts.IncludeTransitiveNeeds) + selected, err := st.GetSelectedReleasesWithNeeds(opts.IncludeNeeds, opts.IncludeTransitiveNeeds) if err != nil { return nil, []error{err} } @@ -3116,6 +3116,31 @@ 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)