From 7a7bdf5dc33f93bde02090bffc8abd9eb2ad7e5d Mon Sep 17 00:00:00 2001 From: yxxhero Date: Tue, 17 Mar 2026 07:39:16 +0800 Subject: [PATCH] fix: prevent duplicate isReleaseInstalled checks in DetectReleasesToBeDeletedForSync When a release with 'installed: false' appears multiple times in the release list (due to duplicate entries or being included via needs), the isReleaseInstalled function was being called multiple times for the same release, resulting in duplicate 'Listing releases' log messages. This fix adds a deduplication check using a 'checked' map to ensure each release is only checked once, preventing duplicate helm list calls and log messages. This fixes the diff-args integration test where 'Listing releases matching ^uninstalled$' appeared twice in stderr output. Signed-off-by: yxxhero --- pkg/state/state.go | 8 ++++++++ .../test-cases/diff-args/output/diff-live-stderr | 3 +-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/state/state.go b/pkg/state/state.go index 9bc52027..fd932e09 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -850,10 +850,18 @@ func (st *HelmState) isReleaseInstalled(context helmexec.HelmContext, helm helme func (st *HelmState) DetectReleasesToBeDeletedForSync(helm helmexec.Interface, releases []ReleaseSpec) ([]ReleaseSpec, error) { deleted := []ReleaseSpec{} + checked := make(map[string]bool) + for i := range releases { release := releases[i] if !release.Desired() { + id := ReleaseToID(&release) + if checked[id] { + continue + } + checked[id] = true + installed, err := st.isReleaseInstalled(st.createHelmContext(&release, 0), helm, release) if err != nil { return nil, err diff --git a/test/integration/test-cases/diff-args/output/diff-live-stderr b/test/integration/test-cases/diff-args/output/diff-live-stderr index a40a9f40..4e62c3bc 100644 --- a/test/integration/test-cases/diff-args/output/diff-live-stderr +++ b/test/integration/test-cases/diff-args/output/diff-live-stderr @@ -1,4 +1,3 @@ Live output is enabled Building dependency release=installed, chart=../../../charts/httpbin -Listing releases matching ^uninstalled$ -Listing releases matching ^uninstalled$ +Listing releases matching ^uninstalled$