Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package helm for openSUSE:Factory checked in 
at 2026-06-16 13:57:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/helm (Old)
 and      /work/SRC/openSUSE:Factory/.helm.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "helm"

Tue Jun 16 13:57:49 2026 rev:105 rq:1359670 version:4.2.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/helm/helm.changes        2026-05-28 
17:28:29.751585177 +0200
+++ /work/SRC/openSUSE:Factory/.helm.new.1981/helm.changes      2026-06-16 
14:04:45.333514018 +0200
@@ -1,0 +2,23 @@
+Sat Jun 13 10:12:35 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- update to 4.2.1:
+  * Fixed data race detected by -race flag when concurrent
+    goroutines (upgrade + rollback, install + uninstall) both call
+    GetWaiterWithOptions on the same FailingKubeClient instance
+    #31925
+  * Fixed helm command success messages writing to stderr instead
+    of stdout. Now correctly outputing to stdout #32056
+  * Fixed Helm 4 emitting "unable to find exact version" when using
+    version range constraints #31757
+  * Fixed a race condition in WaitForDelete where the status
+    observer canceled the watch too early, causing intermittent
+    failures when running a full test suite #32081
+  * Bumped golang.org/x/net to v0.55.0 to address GO-2026-5026
+    #32153
+  * Fixed SDK errors by upgrading dependencies: cli-utils 1.2.1,
+    controller-runtime 0.24.1 and k8s 1.36.1 #32128
+  * Dependency updates
+- removed go_modules replace for golang.org/x/net as the fix is now
+  upstream
+
+-------------------------------------------------------------------

Old:
----
  helm-4.2.0.obscpio

New:
----
  helm-4.2.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ helm.spec ++++++
--- /var/tmp/diff_new_pack.cXmb6P/_old  2026-06-16 14:04:48.697654010 +0200
+++ /var/tmp/diff_new_pack.cXmb6P/_new  2026-06-16 14:04:48.697654010 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           helm
-Version:        4.2.0
+Version:        4.2.1
 Release:        0
 Summary:        The Kubernetes Package Manager
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.cXmb6P/_old  2026-06-16 14:04:48.729655341 +0200
+++ /var/tmp/diff_new_pack.cXmb6P/_new  2026-06-16 14:04:48.733655508 +0200
@@ -5,7 +5,7 @@
     <param name="exclude">.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
-    <param name="revision">v4.2.0</param>
+    <param name="revision">v4.2.1</param>
     <param name="changesgenerate">disable</param>
   </service>
   <service name="set_version" mode="manual">
@@ -16,7 +16,6 @@
     <param name="compression">gz</param>
   </service>
   <service name="go_modules" mode="manual">
-    <param name="replace">golang.org/x/net=golang.org/x/[email protected]</param>
   </service>
 </services>
 

++++++ helm-4.2.0.obscpio -> helm-4.2.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/go.mod new/helm-4.2.1/go.mod
--- old/helm-4.2.0/go.mod       2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/go.mod       2026-06-12 04:59:21.000000000 +0200
@@ -17,7 +17,7 @@
        github.com/evanphx/json-patch/v5 v5.9.11
        github.com/extism/go-sdk v1.7.1
        github.com/fatih/color v1.19.0
-       github.com/fluxcd/cli-utils v1.2.0
+       github.com/fluxcd/cli-utils v1.2.1
        github.com/foxcpp/go-mockdns v1.2.0
        github.com/gobwas/glob v0.2.3
        github.com/gofrs/flock v0.13.0
@@ -33,22 +33,22 @@
        github.com/spf13/cobra v1.10.2
        github.com/spf13/pflag v1.0.10
        github.com/stretchr/testify v1.11.1
-       github.com/tetratelabs/wazero v1.11.0
+       github.com/tetratelabs/wazero v1.12.0
        go.yaml.in/yaml/v3 v3.0.4
-       golang.org/x/crypto v0.50.0
-       golang.org/x/term v0.42.0
-       golang.org/x/text v0.36.0
+       golang.org/x/crypto v0.53.0
+       golang.org/x/term v0.44.0
+       golang.org/x/text v0.38.0
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       k8s.io/api v0.36.0
-       k8s.io/apiextensions-apiserver v0.36.0
-       k8s.io/apimachinery v0.36.0
-       k8s.io/apiserver v0.36.0
-       k8s.io/cli-runtime v0.36.0
-       k8s.io/client-go v0.36.0
+       k8s.io/api v0.36.1
+       k8s.io/apiextensions-apiserver v0.36.1
+       k8s.io/apimachinery v0.36.1
+       k8s.io/apiserver v0.36.1
+       k8s.io/cli-runtime v0.36.1
+       k8s.io/client-go v0.36.1
        k8s.io/klog/v2 v2.140.0
-       k8s.io/kubectl v0.36.0
-       oras.land/oras-go/v2 v2.6.0
-       sigs.k8s.io/controller-runtime v0.24.0
+       k8s.io/kubectl v0.36.1
+       oras.land/oras-go/v2 v2.6.1
+       sigs.k8s.io/controller-runtime v0.24.1
        sigs.k8s.io/kustomize/kyaml v0.21.1
        sigs.k8s.io/yaml v1.6.0
 )
@@ -157,13 +157,13 @@
        go.opentelemetry.io/otel/trace v1.43.0 // indirect
        go.opentelemetry.io/proto/otlp v1.10.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/mod v0.34.0 // indirect
-       golang.org/x/net v0.52.0 // indirect
+       golang.org/x/mod v0.36.0 // indirect
+       golang.org/x/net v0.55.0 // indirect
        golang.org/x/oauth2 v0.36.0 // indirect
-       golang.org/x/sync v0.20.0 // indirect
-       golang.org/x/sys v0.43.0 // indirect
+       golang.org/x/sync v0.21.0 // indirect
+       golang.org/x/sys v0.46.0 // indirect
        golang.org/x/time v0.15.0 // indirect
-       golang.org/x/tools v0.43.0 // indirect
+       golang.org/x/tools v0.45.0 // indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20260401024825-9d38bb4040a9 // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260401024825-9d38bb4040a9 // indirect
        google.golang.org/grpc v1.80.0 // indirect
@@ -171,7 +171,7 @@
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v2 v2.4.0 // indirect
-       k8s.io/component-base v0.36.0 // indirect
+       k8s.io/component-base v0.36.1 // indirect
        k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect
        k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // indirect
        sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/go.sum new/helm-4.2.1/go.sum
--- old/helm-4.2.0/go.sum       2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/go.sum       2026-06-12 04:59:21.000000000 +0200
@@ -93,8 +93,8 @@
 github.com/fatih/color v1.19.0/go.mod 
h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
 github.com/felixge/httpsnoop v1.0.4 
h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
 github.com/felixge/httpsnoop v1.0.4/go.mod 
h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/fluxcd/cli-utils v1.2.0 
h1:1o07pXTMxJ/XJ1GpAbLtjdXwfCUMq4Ku1OcnvJHLohI=
-github.com/fluxcd/cli-utils v1.2.0/go.mod 
h1:d5HdTDdR5sCbsIbgtOQ7x7srKYwYeZORU6CD2yn4j/M=
+github.com/fluxcd/cli-utils v1.2.1 
h1:ug9CicKW7H9QXnvNDapTSKuryZvWcu4Nw7pRvQa6jDY=
+github.com/fluxcd/cli-utils v1.2.1/go.mod 
h1:cky6M6eHvTQkoPtsuFYLIgAMYdpTCSLoor4IA6vueSw=
 github.com/foxcpp/go-mockdns v1.2.0 
h1:omK3OrHRD1IWJz1FuFBCFquhXslXoF17OvBS6JPzZF0=
 github.com/foxcpp/go-mockdns v1.2.0/go.mod 
h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
 github.com/frankban/quicktest v1.14.6 
h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -309,8 +309,8 @@
 github.com/stretchr/testify v1.11.1/go.mod 
h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 
h1:ZF+QBjOI+tILZjBaFj3HgFonKXUcwgJ4djLb6i42S3Q=
 github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834/go.mod 
h1:m9ymHTgNSEjuxvw8E7WWe4Pl4hZQHXONY8wE6dMLaRk=
-github.com/tetratelabs/wazero v1.11.0 
h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA=
-github.com/tetratelabs/wazero v1.11.0/go.mod 
h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU=
+github.com/tetratelabs/wazero v1.12.0 
h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU=
+github.com/tetratelabs/wazero v1.12.0/go.mod 
h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4/go.mod 
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 github.com/xlab/treeprint v1.2.0 
h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
@@ -382,14 +382,14 @@
 golang.org/x/crypto v0.13.0/go.mod 
h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
 golang.org/x/crypto v0.14.0/go.mod 
h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
 golang.org/x/crypto v0.15.0/go.mod 
h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
-golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
-golang.org/x/crypto v0.50.0/go.mod 
h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
+golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
+golang.org/x/crypto v0.53.0/go.mod 
h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod 
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
-golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
+golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
+golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -400,8 +400,8 @@
 golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
 golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
-golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
-golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
+golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
+golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
 golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
 golang.org/x/oauth2 v0.36.0/go.mod 
h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -412,8 +412,8 @@
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
-golang.org/x/sync v0.20.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
+golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
+golang.org/x/sync v0.21.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -430,8 +430,8 @@
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
-golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
+golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -439,8 +439,8 @@
 golang.org/x/term v0.12.0/go.mod 
h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.13.0/go.mod 
h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
 golang.org/x/term v0.14.0/go.mod 
h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
-golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
-golang.org/x/term v0.42.0/go.mod 
h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
+golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
+golang.org/x/term v0.44.0/go.mod 
h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -448,8 +448,8 @@
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.13.0/go.mod 
h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0/go.mod 
h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
-golang.org/x/text v0.36.0/go.mod 
h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
+golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
+golang.org/x/text v0.38.0/go.mod 
h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
 golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
 golang.org/x/time v0.15.0/go.mod 
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -458,8 +458,8 @@
 golang.org/x/tools v0.6.0/go.mod 
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.13.0/go.mod 
h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
 golang.org/x/tools v0.15.0/go.mod 
h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
-golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
-golang.org/x/tools v0.43.0/go.mod 
h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
+golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
+golang.org/x/tools v0.45.0/go.mod 
h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
 gonum.org/v1/gonum v0.17.0/go.mod 
h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
@@ -485,32 +485,32 @@
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.36.0 h1:SgqDhZzHdOtMk40xVSvCXkP9ME0H05hPM3p9AB1kL80=
-k8s.io/api v0.36.0/go.mod h1:m1LVrGPNYax5NBHdO+QuAedXyuzTt4RryI/qnmNvs34=
-k8s.io/apiextensions-apiserver v0.36.0 
h1:Wt7E8J+VBCbj4FjiBfDTK/neXDDjyJVJc7xfuOHImZ0=
-k8s.io/apiextensions-apiserver v0.36.0/go.mod 
h1:kGDjH0msuiIB3tgsYRV0kS9GqpMYMUsQ3GHv7TApyug=
-k8s.io/apimachinery v0.36.0 h1:jZyPzhd5Z+3h9vJLt0z9XdzW9VzNzWAUw+P1xZ9PXtQ=
-k8s.io/apimachinery v0.36.0/go.mod 
h1:FklypaRJt6n5wUIwWXIP6GJlIpUizTgfo1T/As+Tyxc=
-k8s.io/apiserver v0.36.0 h1:Jg5OFAENUACByUCg15CmhZAYrr5ZyJ+jodyA1mHl3YE=
-k8s.io/apiserver v0.36.0/go.mod h1:mHvwdHf+qKEm+1/hYm756SV+oREOKSPnsjagOpx6Vho=
-k8s.io/cli-runtime v0.36.0 h1:HNxciQpQMMOKS0/GiUXcKDyA6J2FDILJj9NmP2BZrTg=
-k8s.io/cli-runtime v0.36.0/go.mod 
h1:KObkknK9Ro5LYX+1RdiKc7C8CvGg4aX+V/Zv+E8WPHA=
-k8s.io/client-go v0.36.0 h1:pOYi7C4RHChYjMiHpZSpSbIM6ZxVbRXBy7CuiIwqA3c=
-k8s.io/client-go v0.36.0/go.mod h1:ZKKcpwF0aLYfkHFCjillCKaTK/yBkEDHTDXCFY6AS9Y=
-k8s.io/component-base v0.36.0 h1:hFjEktssxiJhrK1zfybkH4kJOi8iZuF+mIDCqS5+jRo=
-k8s.io/component-base v0.36.0/go.mod 
h1:JZvIfcNHk+uck+8LhJzhSBtydWXaZNQwX2OdL+Mnwsk=
+k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY=
+k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo=
+k8s.io/apiextensions-apiserver v0.36.1 
h1:6JfYmPUsuUIHuN+3QxutXYWj492RqF5fBSx67GYK5Ks=
+k8s.io/apiextensions-apiserver v0.36.1/go.mod 
h1:pLzZin90riwisdzKwv/GoTwENooytoIx5zWJb4Hkby8=
+k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA=
+k8s.io/apimachinery v0.36.1/go.mod 
h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8=
+k8s.io/apiserver v0.36.1 h1:iMS5V+rPUertv5P9RaqJgmHHTuh4quWpoxchvMUY+JY=
+k8s.io/apiserver v0.36.1/go.mod h1:Cby1PbLWztu0GDOxoO6iFOyyqIsziHNEW+w9zVQ22Kw=
+k8s.io/cli-runtime v0.36.1 h1:yuC/BGnnj1YYPh6D1P+pZnzinCs6DvMq86yAeNqoqzM=
+k8s.io/cli-runtime v0.36.1/go.mod 
h1:ZQWHGt8xAF7KnviB79vX0lYNyUUqKIpU+LQg7exuFAw=
+k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0=
+k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU=
+k8s.io/component-base v0.36.1 h1:iG6GsELftXqTNG9HG6kiVjatSgAw1sf5pJ6R5a6N0kA=
+k8s.io/component-base v0.36.1/go.mod 
h1:nf9XPlntRdqO6WMeEWAA5F93Y4ICZQdeT9GeqLDB3JI=
 k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
 k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
 k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a 
h1:xCeOEAOoGYl2jnJoHkC3hkbPJgdATINPMAxaynU2Ovg=
 k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a/go.mod 
h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0=
-k8s.io/kubectl v0.36.0 h1:hEGr8NvIm2Wjqs2Xy48Uzmvo6lpHdGKlLyMvau2gTms=
-k8s.io/kubectl v0.36.0/go.mod h1:iDe8aV5BEi45W8k+5n71I2pJ/nwE0PHDu+/2cejzYoo=
+k8s.io/kubectl v0.36.1 h1:96HqS9twIdHM0MlJLTwbo14b9kUKPkOzZ4tlRDLv4qI=
+k8s.io/kubectl v0.36.1/go.mod h1:/DGPAIewKsFWF9VFgGvkPhao2Ev4SNuE3BioZo8yPbk=
 k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 
h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU=
 k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod 
h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
-oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
-oras.land/oras-go/v2 v2.6.0/go.mod 
h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o=
-sigs.k8s.io/controller-runtime v0.24.0 
h1:Ck6N2LdS8Lovy1o25BB4r1xjvLEKUl1s2o9kU+KWDE4=
-sigs.k8s.io/controller-runtime v0.24.0/go.mod 
h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw=
+oras.land/oras-go/v2 v2.6.1 h1:bonOEkjLfp8tt6qXWRRWP6p1F+9octchOf2EqnWB4Zs=
+oras.land/oras-go/v2 v2.6.1/go.mod 
h1:dhtFrFOuZuDtAVeZ9FUnaa5zfzplG3ZnFX9/uH1J/Yk=
+sigs.k8s.io/controller-runtime v0.24.1 
h1:miPEwrmirImAvgME1L9qebGHrOnGJoVmVdtOU9fRfo4=
+sigs.k8s.io/controller-runtime v0.24.1/go.mod 
h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod 
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
 sigs.k8s.io/kustomize/api v0.21.1 
h1:lzqbzvz2CSvsjIUZUBNFKtIMsEw7hVLJp0JeSIVmuJs=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/dependency_build.go 
new/helm-4.2.1/pkg/cmd/dependency_build.go
--- old/helm-4.2.0/pkg/cmd/dependency_build.go  2026-05-06 06:06:02.000000000 
+0200
+++ new/helm-4.2.1/pkg/cmd/dependency_build.go  2026-06-12 04:59:21.000000000 
+0200
@@ -55,7 +55,7 @@
                        if len(args) > 0 {
                                chartpath = filepath.Clean(args[0])
                        }
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/dependency_update.go 
new/helm-4.2.1/pkg/cmd/dependency_update.go
--- old/helm-4.2.0/pkg/cmd/dependency_update.go 2026-05-06 06:06:02.000000000 
+0200
+++ new/helm-4.2.1/pkg/cmd/dependency_update.go 2026-06-12 04:59:21.000000000 
+0200
@@ -58,7 +58,7 @@
                        if len(args) > 0 {
                                chartpath = filepath.Clean(args[0])
                        }
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/install.go 
new/helm-4.2.1/pkg/cmd/install.go
--- old/helm-4.2.0/pkg/cmd/install.go   2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/install.go   2026-06-12 04:59:21.000000000 +0200
@@ -143,7 +143,7 @@
                        return compInstall(args, toComplete, client)
                },
                RunE: func(cmd *cobra.Command, args []string) error {
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/package.go 
new/helm-4.2.1/pkg/cmd/package.go
--- old/helm-4.2.0/pkg/cmd/package.go   2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/package.go   2026-06-12 04:59:21.000000000 +0200
@@ -75,7 +75,7 @@
                                return err
                        }
 
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/pull.go 
new/helm-4.2.1/pkg/cmd/pull.go
--- old/helm-4.2.0/pkg/cmd/pull.go      2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/pull.go      2026-06-12 04:59:21.000000000 +0200
@@ -65,7 +65,7 @@
                                client.Version = ">0.0.0-0"
                        }
 
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/push.go 
new/helm-4.2.1/pkg/cmd/push.go
--- old/helm-4.2.0/pkg/cmd/push.go      2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/push.go      2026-06-12 04:59:21.000000000 +0200
@@ -71,7 +71,7 @@
                },
                RunE: func(_ *cobra.Command, args []string) error {
                        registryClient, err := newRegistryClient(
-                               o.certFile, o.keyFile, o.caFile, 
o.insecureSkipTLSVerify, o.plainHTTP, o.username, o.password,
+                               out, o.certFile, o.keyFile, o.caFile, 
o.insecureSkipTLSVerify, o.plainHTTP, o.username, o.password,
                        )
 
                        if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/root.go 
new/helm-4.2.1/pkg/cmd/root.go
--- old/helm-4.2.0/pkg/cmd/root.go      2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/root.go      2026-06-12 04:59:21.000000000 +0200
@@ -257,7 +257,7 @@
                log.Fatal(err)
        }
 
-       registryClient, err := newDefaultRegistryClient(false, "", "")
+       registryClient, err := newDefaultRegistryClient(out, false, "", "")
        if err != nil {
                return nil, err
        }
@@ -403,27 +403,27 @@
 }
 
 func newRegistryClient(
-       certFile, keyFile, caFile string, insecureSkipTLSVerify, plainHTTP 
bool, username, password string,
+       out io.Writer, certFile, keyFile, caFile string, insecureSkipTLSVerify, 
plainHTTP bool, username, password string,
 ) (*registry.Client, error) {
        if certFile != "" && keyFile != "" || caFile != "" || 
insecureSkipTLSVerify {
-               registryClient, err := newRegistryClientWithTLS(certFile, 
keyFile, caFile, insecureSkipTLSVerify, username, password)
+               registryClient, err := newRegistryClientWithTLS(out, certFile, 
keyFile, caFile, insecureSkipTLSVerify, username, password)
                if err != nil {
                        return nil, err
                }
                return registryClient, nil
        }
-       registryClient, err := newDefaultRegistryClient(plainHTTP, username, 
password)
+       registryClient, err := newDefaultRegistryClient(out, plainHTTP, 
username, password)
        if err != nil {
                return nil, err
        }
        return registryClient, nil
 }
 
-func newDefaultRegistryClient(plainHTTP bool, username, password string) 
(*registry.Client, error) {
+func newDefaultRegistryClient(out io.Writer, plainHTTP bool, username, 
password string) (*registry.Client, error) {
        opts := []registry.ClientOption{
                registry.ClientOptDebug(settings.Debug),
                registry.ClientOptEnableCache(true),
-               registry.ClientOptWriter(os.Stderr),
+               registry.ClientOptWriter(out),
                registry.ClientOptCredentialsFile(settings.RegistryConfig),
                registry.ClientOptBasicAuth(username, password),
        }
@@ -440,7 +440,7 @@
 }
 
 func newRegistryClientWithTLS(
-       certFile, keyFile, caFile string, insecureSkipTLSVerify bool, username, 
password string,
+       out io.Writer, certFile, keyFile, caFile string, insecureSkipTLSVerify 
bool, username, password string,
 ) (*registry.Client, error) {
        tlsConf, err := tlsutil.NewTLSConfig(
                tlsutil.WithInsecureSkipVerify(insecureSkipTLSVerify),
@@ -456,7 +456,7 @@
        registryClient, err := registry.NewClient(
                registry.ClientOptDebug(settings.Debug),
                registry.ClientOptEnableCache(true),
-               registry.ClientOptWriter(os.Stderr),
+               registry.ClientOptWriter(out),
                registry.ClientOptCredentialsFile(settings.RegistryConfig),
                registry.ClientOptHTTPClient(&http.Client{
                        Transport: &http.Transport{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/show.go 
new/helm-4.2.1/pkg/cmd/show.go
--- old/helm-4.2.0/pkg/cmd/show.go      2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/show.go      2026-06-12 04:59:21.000000000 +0200
@@ -84,7 +84,7 @@
                ValidArgsFunction: validArgsFunc,
                RunE: func(_ *cobra.Command, args []string) error {
                        client.OutputFormat = action.ShowAll
-                       err := addRegistryClient(client)
+                       err := addRegistryClient(out, client)
                        if err != nil {
                                return err
                        }
@@ -105,7 +105,7 @@
                ValidArgsFunction: validArgsFunc,
                RunE: func(_ *cobra.Command, args []string) error {
                        client.OutputFormat = action.ShowValues
-                       err := addRegistryClient(client)
+                       err := addRegistryClient(out, client)
                        if err != nil {
                                return err
                        }
@@ -126,7 +126,7 @@
                ValidArgsFunction: validArgsFunc,
                RunE: func(_ *cobra.Command, args []string) error {
                        client.OutputFormat = action.ShowChart
-                       err := addRegistryClient(client)
+                       err := addRegistryClient(out, client)
                        if err != nil {
                                return err
                        }
@@ -147,7 +147,7 @@
                ValidArgsFunction: validArgsFunc,
                RunE: func(_ *cobra.Command, args []string) error {
                        client.OutputFormat = action.ShowReadme
-                       err := addRegistryClient(client)
+                       err := addRegistryClient(out, client)
                        if err != nil {
                                return err
                        }
@@ -168,7 +168,7 @@
                ValidArgsFunction: validArgsFunc,
                RunE: func(_ *cobra.Command, args []string) error {
                        client.OutputFormat = action.ShowCRDs
-                       err := addRegistryClient(client)
+                       err := addRegistryClient(out, client)
                        if err != nil {
                                return err
                        }
@@ -225,8 +225,8 @@
        return client.Run(cp)
 }
 
-func addRegistryClient(client *action.Show) error {
-       registryClient, err := newRegistryClient(client.CertFile, 
client.KeyFile, client.CaFile,
+func addRegistryClient(out io.Writer, client *action.Show) error {
+       registryClient, err := newRegistryClient(out, client.CertFile, 
client.KeyFile, client.CaFile,
                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
        if err != nil {
                return fmt.Errorf("missing registry client: %w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/template.go 
new/helm-4.2.1/pkg/cmd/template.go
--- old/helm-4.2.0/pkg/cmd/template.go  2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/template.go  2026-06-12 04:59:21.000000000 +0200
@@ -85,7 +85,7 @@
                                client.KubeVersion = parsedKubeVersion
                        }
 
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/cmd/upgrade.go 
new/helm-4.2.1/pkg/cmd/upgrade.go
--- old/helm-4.2.0/pkg/cmd/upgrade.go   2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/cmd/upgrade.go   2026-06-12 04:59:21.000000000 +0200
@@ -105,7 +105,7 @@
                RunE: func(cmd *cobra.Command, args []string) error {
                        client.Namespace = settings.Namespace()
 
-                       registryClient, err := 
newRegistryClient(client.CertFile, client.KeyFile, client.CaFile,
+                       registryClient, err := newRegistryClient(out, 
client.CertFile, client.KeyFile, client.CaFile,
                                client.InsecureSkipTLSVerify, client.PlainHTTP, 
client.Username, client.Password)
                        if err != nil {
                                return fmt.Errorf("missing registry client: 
%w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/kube/fake/failing_kube_client.go 
new/helm-4.2.1/pkg/kube/fake/failing_kube_client.go
--- old/helm-4.2.0/pkg/kube/fake/failing_kube_client.go 2026-05-06 
06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/kube/fake/failing_kube_client.go 2026-06-12 
04:59:21.000000000 +0200
@@ -19,6 +19,7 @@
 
 import (
        "io"
+       "sync"
        "time"
 
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -49,6 +50,7 @@
        WaitDuration           time.Duration
        // RecordedWaitOptions stores the WaitOptions passed to GetWaiter for 
testing
        RecordedWaitOptions []kube.WaitOption
+       mu                  sync.Mutex
 }
 
 var _ kube.Interface = &FailingKubeClient{}
@@ -158,9 +160,14 @@
        return f.GetWaiterWithOptions(ws)
 }
 
-func (f *FailingKubeClient) GetWaiterWithOptions(ws kube.WaitStrategy, opts 
...kube.WaitOption) (kube.Waiter, error) {
-       // Record the WaitOptions for testing
+func (f *FailingKubeClient) appendRecordedWaitOptionsLocked(opts 
...kube.WaitOption) {
+       f.mu.Lock()
+       defer f.mu.Unlock()
        f.RecordedWaitOptions = append(f.RecordedWaitOptions, opts...)
+}
+
+func (f *FailingKubeClient) GetWaiterWithOptions(ws kube.WaitStrategy, opts 
...kube.WaitOption) (kube.Waiter, error) {
+       f.appendRecordedWaitOptionsLocked(opts...)
        waiter, _ := f.PrintingKubeClient.GetWaiterWithOptions(ws, opts...)
        printingKubeWaiter, _ := waiter.(*PrintingKubeWaiter)
        return &FailingKubeWaiter{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/kube/statuswait.go 
new/helm-4.2.1/pkg/kube/statuswait.go
--- old/helm-4.2.0/pkg/kube/statuswait.go       2026-05-06 06:06:02.000000000 
+0200
+++ new/helm-4.2.1/pkg/kube/statuswait.go       2026-06-12 04:59:21.000000000 
+0200
@@ -161,7 +161,15 @@
                        rs.Identifier.GroupKind.Kind, rs.Identifier.Namespace, 
rs.Identifier.Name, rs.Status, rs.Message))
        }
        if err := ctx.Err(); err != nil {
-               errs = append(errs, err)
+               // context.Canceled and other non-deadline errors always 
propagate: they signal an
+               // external interruption regardless of resource state.
+               // context.DeadlineExceeded is only added when there are 
resource-specific errors;
+               // if all resources are Unknown or NotFound the timeout is not 
itself a failure for
+               // a delete wait (e.g. resources deleted before the watch 
started stay Unknown in
+               // the fake client but are effectively gone).
+               if !errors.Is(err, context.DeadlineExceeded) || len(errs) > 0 {
+                       errs = append(errs, err)
+               }
        }
        if len(errs) > 0 {
                return errors.Join(errs...)
@@ -234,6 +242,7 @@
        return func(statusCollector *collector.ResourceStatusCollector, _ 
event.Event) {
                var rss []*event.ResourceStatus
                var nonDesiredResources []*event.ResourceStatus
+               var unknownSkipped int
                for _, rs := range statusCollector.ResourceStatuses {
                        if rs == nil {
                                continue
@@ -241,6 +250,7 @@
                        // If a resource is already deleted before waiting has 
started, it will show as unknown.
                        // This check ensures we don't wait forever for a 
resource that is already deleted.
                        if rs.Status == status.UnknownStatus && desired == 
status.NotFoundStatus {
+                               unknownSkipped++
                                continue
                        }
                        // Failed is a terminal state. This check ensures we 
don't wait forever for a resource
@@ -254,6 +264,14 @@
                        }
                }
 
+               // During informer initialization there is a brief window where 
existing resources
+               // appear as Unknown before their real status is delivered. If 
every resource was
+               // skipped as Unknown, we cannot yet distinguish "all deleted" 
from "not yet synced",
+               // so hold off on the early-cancel to avoid a spurious success 
or premature exit.
+               if unknownSkipped > 0 && len(rss) == 0 {
+                       return
+               }
+
                if aggregator.AggregateStatus(rss, desired) == desired {
                        logger.Debug("all resources achieved desired status", 
"desiredStatus", desired, "resourceCount", len(rss))
                        cancel()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/repo/v1/index.go 
new/helm-4.2.1/pkg/repo/v1/index.go
--- old/helm-4.2.0/pkg/repo/v1/index.go 2026-05-06 06:06:02.000000000 +0200
+++ new/helm-4.2.1/pkg/repo/v1/index.go 2026-06-12 04:59:21.000000000 +0200
@@ -175,6 +175,19 @@
        }
 }
 
+// isVersionRange checks if the version string is a range constraint (e.g., 
"^1", "~1.10")
+// rather than an exact version (e.g., "1.10.0").
+func isVersionRange(version string) bool {
+       if strings.ContainsAny(version, "^~<>=!*") || strings.Contains(version, 
"||") || strings.Contains(version, " - ") {
+               return true
+       }
+       core := version
+       if idx := strings.IndexAny(version, "-+"); idx != -1 {
+               core = version[:idx]
+       }
+       return strings.ContainsAny(core, "xX")
+}
+
 // Get returns the ChartVersion for the given name.
 //
 // If version is empty, this will return the chart with the latest stable 
version,
@@ -215,8 +228,10 @@
                }
 
                if constraint.Check(test) {
-                       if len(version) != 0 {
+                       if len(version) != 0 && !isVersionRange(version) {
                                slog.Warn("unable to find exact version 
requested; falling back to closest available version", "chart", name, 
"requested", version, "selected", ver.Version)
+                       } else if len(version) != 0 && isVersionRange(version) {
+                               slog.Debug("selected version matching 
constraint", "chart", name, "constraint", version, "selected", ver.Version)
                        }
                        return ver, nil
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-4.2.0/pkg/repo/v1/index_test.go 
new/helm-4.2.1/pkg/repo/v1/index_test.go
--- old/helm-4.2.0/pkg/repo/v1/index_test.go    2026-05-06 06:06:02.000000000 
+0200
+++ new/helm-4.2.1/pkg/repo/v1/index_test.go    2026-06-12 04:59:21.000000000 
+0200
@@ -718,3 +718,45 @@
                })
        }
 }
+
+func TestIsVersionRange(t *testing.T) {
+       tests := []struct {
+               version  string
+               expected bool
+       }{
+               {"1.0.0", false},
+               {"1.0.0+metadata", false},
+               {"v1.19.2", false},
+               {"v1", false},
+               {"^1", true},
+               {"^1.2.3", true},
+               {"~1.10", true},
+               {"~1.10.0", true},
+               {">= 1.0.0", true},
+               {"> 1.0.0", true},
+               {"< 2.0.0", true},
+               {"<= 2.0.0", true},
+               {"!= 1.0.0", true},
+               {"1.*", true},
+               {"1.x", true},
+               {"1.X", true},
+               {"v1.x", true},
+               {"v1.X", true},
+               {"1.0.0 - 2.0.0", true},
+               {"^1.0.0 || ^2.0.0", true},
+               {">=1.0.0 <2.0.0", true},
+               // Exact versions with 'x'/'X' in prerelease or build metadata
+               {"1.0.0-fix", false},
+               {"2.0.0-next", false},
+               {"1.0.0+exp", false},
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.version, func(t *testing.T) {
+                       got := isVersionRange(tt.version)
+                       if got != tt.expected {
+                               t.Errorf("isVersionRange(%q) = %v, want %v", 
tt.version, got, tt.expected)
+                       }
+               })
+       }
+}

++++++ helm.obsinfo ++++++
--- /var/tmp/diff_new_pack.cXmb6P/_old  2026-06-16 14:04:53.013833618 +0200
+++ /var/tmp/diff_new_pack.cXmb6P/_new  2026-06-16 14:04:53.073836115 +0200
@@ -1,5 +1,5 @@
 name: helm
-version: 4.2.0
-mtime: 1778040362
-commit: 06468084e85c244c712834933d25ea232a4c2093
+version: 4.2.1
+mtime: 1781233161
+commit: d591a19b953bd9cfdf7d9ddd83c2f4ffdaeafb29
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/helm/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.helm.new.1981/vendor.tar.gz differ: char 13, line 1

Reply via email to