From 51a7751a496749854268a0fe701fff02bd4758ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Wed, 5 Apr 2023 13:07:33 +0300 Subject: [PATCH] Move genericclioptions.IOStreams into genericiooptions.IOStreams Currently, `genericclioptions` package imports `resource` package in cli-runtime (i.e. builder_flags uses builder object in resource). Therefore, it is not allowed that `resource` can import any package in `genericclioptions`(due to disallowed import cycles). It is already reasonable burden except `genericclioptions.IOStreams`. There are some cases we want to raise a warning to user in builder but it can not be achieved due to resource package can not depend on IOStreams. Since IOStreams solely contains go primitives, this PR deprecates `genericclioptions.IOStreams` and adds `genericiooptions.IOStreams`. Thanks to that, that will add capability of using IOStreams also in builders, etc. --- .../pkg/genericclioptions/io_options.go | 3 + .../pkg/genericiooptions/io_options.go | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 staging/src/k8s.io/cli-runtime/pkg/genericiooptions/io_options.go diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/io_options.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/io_options.go index 4fc3a77b0cd..4f79621b11f 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/io_options.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/io_options.go @@ -24,6 +24,7 @@ import ( // IOStreams provides the standard names for iostreams. This is useful for embedding and for unit testing. // Inconsistent and different names make it hard to read and review code +// DEPRECATED: use genericiooptions.IOSTREAMS type IOStreams struct { // In think, os.Stdin In io.Reader @@ -34,6 +35,7 @@ type IOStreams struct { } // NewTestIOStreams returns a valid IOStreams and in, out, errout buffers for unit tests +// DEPRECATED: use genericiooptions.NewTestIOStreams func NewTestIOStreams() (IOStreams, *bytes.Buffer, *bytes.Buffer, *bytes.Buffer) { in := &bytes.Buffer{} out := &bytes.Buffer{} @@ -47,6 +49,7 @@ func NewTestIOStreams() (IOStreams, *bytes.Buffer, *bytes.Buffer, *bytes.Buffer) } // NewTestIOStreamsDiscard returns a valid IOStreams that just discards +// DEPRECATED: use genericiooptions.NewTestIOStreamsDiscard func NewTestIOStreamsDiscard() IOStreams { in := &bytes.Buffer{} return IOStreams{ diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericiooptions/io_options.go b/staging/src/k8s.io/cli-runtime/pkg/genericiooptions/io_options.go new file mode 100644 index 00000000000..738e7078e15 --- /dev/null +++ b/staging/src/k8s.io/cli-runtime/pkg/genericiooptions/io_options.go @@ -0,0 +1,56 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package genericiooptions + +import ( + "bytes" + "io" +) + +// IOStreams provides the standard names for iostreams. This is useful for embedding and for unit testing. +// Inconsistent and different names make it hard to read and review code +type IOStreams struct { + // In think, os.Stdin + In io.Reader + // Out think, os.Stdout + Out io.Writer + // ErrOut think, os.Stderr + ErrOut io.Writer +} + +// NewTestIOStreams returns a valid IOStreams and in, out, errout buffers for unit tests +func NewTestIOStreams() (IOStreams, *bytes.Buffer, *bytes.Buffer, *bytes.Buffer) { + in := &bytes.Buffer{} + out := &bytes.Buffer{} + errOut := &bytes.Buffer{} + + return IOStreams{ + In: in, + Out: out, + ErrOut: errOut, + }, in, out, errOut +} + +// NewTestIOStreamsDiscard returns a valid IOStreams that just discards +func NewTestIOStreamsDiscard() IOStreams { + in := &bytes.Buffer{} + return IOStreams{ + In: in, + Out: io.Discard, + ErrOut: io.Discard, + } +}