From 501684a9c61f34187ff2bb00c85e5c98da73d91d Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Thu, 20 Aug 2020 11:54:56 -0700 Subject: [PATCH] remove break after input in pipeline --- cmd/config/internal/commands/source.go | 2 +- kyaml/kio/kio.go | 12 ++----- kyaml/kio/kio_test.go | 47 ++++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/cmd/config/internal/commands/source.go b/cmd/config/internal/commands/source.go index d731aa5c8..7873956ce 100644 --- a/cmd/config/internal/commands/source.go +++ b/cmd/config/internal/commands/source.go @@ -77,6 +77,6 @@ func (r *SourceRunner) runE(c *cobra.Command, args []string) error { inputs = []kio.Reader{&kio.ByteReader{Reader: c.InOrStdin()}} } - err := kio.Pipeline{Inputs: inputs, Outputs: outputs, ContinueIfInputEmpty: true}.Execute() + err := kio.Pipeline{Inputs: inputs, Outputs: outputs}.Execute() return handleError(c, err) } diff --git a/kyaml/kio/kio.go b/kyaml/kio/kio.go index c5165ab04..ee53bca40 100644 --- a/kyaml/kio/kio.go +++ b/kyaml/kio/kio.go @@ -75,11 +75,6 @@ type Pipeline struct { // Outputs are where the transformed Resource Configuration is written. Outputs []Writer `yaml:"outputs,omitempty"` - - // ContinueIfInputEmpty indicates should pipeline continue when the - // the input result is empty. This is useful when we want to run outputs - // even the input is empty. - ContinueIfInputEmpty bool } // Execute executes each step in the sequence, returning immediately after encountering @@ -104,10 +99,6 @@ func (p Pipeline) ExecuteWithCallback(callback PipelineExecuteCallbackFunc) erro } result = append(result, nodes...) } - if len(result) == 0 && !p.ContinueIfInputEmpty { - // no inputs to operate on - return nil - } // apply operations var err error @@ -117,6 +108,9 @@ func (p Pipeline) ExecuteWithCallback(callback PipelineExecuteCallbackFunc) erro callback(op) } result, err = op.Filter(result) + // TODO: This len(result) == 0 should be removed and empty result list should be + // handled by outputs. However currently the some writer like LocalPackageReadWriter + // will clear the output directory and which will cause unpredictable results if len(result) == 0 || err != nil { return errors.Wrap(err) } diff --git a/kyaml/kio/kio_test.go b/kyaml/kio/kio_test.go index ad4cd70bb..9a3a9ea27 100644 --- a/kyaml/kio/kio_test.go +++ b/kyaml/kio/kio_test.go @@ -78,7 +78,7 @@ func TestPipelineWithCallback(t *testing.T) { } } -func TestContinueIfInputEmpty(t *testing.T) { +func TestEmptyInput(t *testing.T) { actual := &bytes.Buffer{} output := ByteWriter{ Sort: true, @@ -88,8 +88,7 @@ func TestContinueIfInputEmpty(t *testing.T) { output.Writer = actual p := Pipeline{ - Outputs: []Writer{output}, - ContinueIfInputEmpty: true, + Outputs: []Writer{output}, } err := p.Execute() @@ -108,3 +107,45 @@ items: [] t.FailNow() } } + +func TestEmptyInputWithFilter(t *testing.T) { + actual := &bytes.Buffer{} + output := ByteWriter{ + Sort: true, + WrappingKind: ResourceListKind, + WrappingAPIVersion: ResourceListAPIVersion, + } + output.Writer = actual + + filters := []Filter{ + FilterFunc(func(nodes []*yaml.RNode) ([]*yaml.RNode, error) { + nodes = append(nodes, yaml.NewMapRNode(&map[string]string{ + "foo": "bar", + })) + return nodes, nil + }), + FilterFunc(func(nodes []*yaml.RNode) ([]*yaml.RNode, error) { return nodes, nil }), + } + + p := Pipeline{ + Outputs: []Writer{output}, + Filters: filters, + } + + err := p.Execute() + if err != nil { + t.Fatal(err) + } + + expected := ` +apiVersion: config.kubernetes.io/v1alpha1 +kind: ResourceList +items: +- foo: bar +` + + if !assert.Equal(t, + strings.TrimSpace(expected), strings.TrimSpace(actual.String())) { + t.FailNow() + } +}