From 92205e827a169bef54d05cf41305799bfe98b854 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 70da311f..28b5602e 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -854,10 +854,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$