diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go index f246fbd66..81ca3a2c9 100644 --- a/pkg/kube/client_test.go +++ b/pkg/kube/client_test.go @@ -488,6 +488,14 @@ func TestUpdate(t *testing.T) { } } +func TestUpdate(t *testing.T) { + testUpdate(t, false) +} + +func TestUpdateThreeWayMerge(t *testing.T) { + testUpdate(t, true) +} + func TestBuild(t *testing.T) { tests := []struct { name string diff --git a/pkg/kube/fake/failing_kube_client.go b/pkg/kube/fake/failing_kube_client.go index 154419ebf..05e559707 100644 --- a/pkg/kube/fake/failing_kube_client.go +++ b/pkg/kube/fake/failing_kube_client.go @@ -125,6 +125,14 @@ func (f *FailingKubeClient) Update(r, modified kube.ResourceList, options ...kub return f.PrintingKubeClient.Update(r, modified, options...) } +// Update returns the configured error if set or prints +func (f *FailingKubeClient) UpdateThreeWayMerge(r, modified kube.ResourceList, ignoreMe bool) (*kube.Result, error) { + if f.UpdateError != nil { + return &kube.Result{}, f.UpdateError + } + return f.PrintingKubeClient.Update(r, modified, ignoreMe) +} + // Build returns the configured error if set or prints func (f *FailingKubeClient) Build(r io.Reader, _ bool) (kube.ResourceList, error) { if f.BuildError != nil { diff --git a/pkg/kube/interface.go b/pkg/kube/interface.go index fcbeb473f..e04783fa4 100644 --- a/pkg/kube/interface.go +++ b/pkg/kube/interface.go @@ -52,6 +52,13 @@ type Interface interface { GetWaiter(ws WaitStrategy) (Waiter, error) } +// InterfaceThreeWayMerge was introduced to avoid breaking backwards compatibility for Interface implementers. +// +// TODO Helm 4: Remove InterfaceThreeWayMerge and integrate its method(s) into the Interface. +type InterfaceThreeWayMerge interface { + UpdateThreeWayMerge(original, target ResourceList, force bool) (*Result, error) +} + // Waiter defines methods related to waiting for resource states. type Waiter interface { // Wait waits up to the given timeout for the specified resources to be ready.