diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/0.request b/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/0.request new file mode 100755 index 0000000000..e69de29bb2 diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/0.response b/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/0.response new file mode 100755 index 0000000000..e2a960dbbb --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/0.response @@ -0,0 +1,9 @@ +{ + "kind": "ConfigMapList", + "apiVersion": "v1", + "metadata": { + "selfLink": "/api/v1/namespaces/edit-test/configmaps", + "resourceVersion": "252" + }, + "items": [] +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/test.yaml b/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/test.yaml new file mode 100755 index 0000000000..1111145af9 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-edit-from-empty/test.yaml @@ -0,0 +1,15 @@ +description: add a testcase description +mode: edit +args: +- configmap +namespace: "edit-test" +expectedStderr: +- edit cancelled, no objects found. +expectedExitCode: 1 +steps: +- type: request + expectedMethod: GET + expectedPath: /api/v1/namespaces/edit-test/configmaps + expectedInput: 0.request + resultingStatusCode: 200 + resultingOutput: 0.response diff --git a/pkg/kubectl/cmd/util/editor/editoptions.go b/pkg/kubectl/cmd/util/editor/editoptions.go index 3b3066201b..f855cb16e7 100644 --- a/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/pkg/kubectl/cmd/util/editor/editoptions.go @@ -336,6 +336,9 @@ func (o *EditOptions) Run() error { if err != nil { return err } + if len(infos) == 0 { + return errors.New("edit cancelled, no objects found.") + } return editFn(infos) case ApplyEditMode: infos, err := o.OriginalResult.Infos() @@ -500,11 +503,7 @@ func getPrinter(format string) *editPrinterOptions { } } -func (o *EditOptions) visitToPatch( - originalInfos []*resource.Info, - patchVisitor resource.Visitor, - results *editResults, -) error { +func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor resource.Visitor, results *editResults) error { err := patchVisitor.Visit(func(info *resource.Info, incomingErr error) error { editObjUID, err := meta.NewAccessor().UID(info.Object) if err != nil {