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)