ref(action): remove io.Writers, return string instead

Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
pull/5365/head
Matthew Fisher 5 years ago
parent 6bb9264e89
commit 2b775d693d
No known key found for this signature in database
GPG Key ID: 92AA783CBAAE8E3B

@ -17,6 +17,7 @@ limitations under the License.
package main package main
import ( import (
"fmt"
"io" "io"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -42,7 +43,6 @@ result in an error, and the chart will not be saved locally.
func newPullCmd(out io.Writer) *cobra.Command { func newPullCmd(out io.Writer) *cobra.Command {
client := action.NewPull() client := action.NewPull()
client.Out = out
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "pull [chart URL | repo/chartname] [...]", Use: "pull [chart URL | repo/chartname] [...]",
@ -58,9 +58,11 @@ func newPullCmd(out io.Writer) *cobra.Command {
} }
for i := 0; i < len(args); i++ { for i := 0; i < len(args); i++ {
if err := client.Run(args[i]); err != nil { output, err := client.Run(args[i])
if err != nil {
return err return err
} }
fmt.Fprint(out, output)
} }
return nil return nil
}, },

@ -17,6 +17,7 @@ limitations under the License.
package main package main
import ( import (
"fmt"
"io" "io"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -48,7 +49,7 @@ of the README file
` `
func newShowCmd(out io.Writer) *cobra.Command { func newShowCmd(out io.Writer) *cobra.Command {
client := action.NewShow(out, action.ShowAll) client := action.NewShow(action.ShowAll)
showCommand := &cobra.Command{ showCommand := &cobra.Command{
Use: "show [CHART]", Use: "show [CHART]",
@ -61,7 +62,12 @@ func newShowCmd(out io.Writer) *cobra.Command {
if err != nil { if err != nil {
return err return err
} }
return client.Run(cp) output, err := client.Run(cp)
if err != nil {
return err
}
fmt.Fprint(out, output)
return nil
}, },
} }
@ -76,7 +82,12 @@ func newShowCmd(out io.Writer) *cobra.Command {
if err != nil { if err != nil {
return err return err
} }
return client.Run(cp) output, err := client.Run(cp)
if err != nil {
return err
}
fmt.Fprint(out, output)
return nil
}, },
} }
@ -91,7 +102,12 @@ func newShowCmd(out io.Writer) *cobra.Command {
if err != nil { if err != nil {
return err return err
} }
return client.Run(cp) output, err := client.Run(cp)
if err != nil {
return err
}
fmt.Fprint(out, output)
return nil
}, },
} }
@ -106,7 +122,12 @@ func newShowCmd(out io.Writer) *cobra.Command {
if err != nil { if err != nil {
return err return err
} }
return client.Run(cp) output, err := client.Run(cp)
if err != nil {
return err
}
fmt.Fprint(out, output)
return nil
}, },
} }

@ -18,10 +18,10 @@ package action
import ( import (
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -39,7 +39,6 @@ import (
type Pull struct { type Pull struct {
ChartPathOptions ChartPathOptions
Out io.Writer // TODO: refactor this out of pkg/action
Settings cli.EnvSettings // TODO: refactor this out of pkg/action Settings cli.EnvSettings // TODO: refactor this out of pkg/action
Devel bool Devel bool
@ -55,10 +54,12 @@ func NewPull() *Pull {
} }
// Run executes 'helm pull' against the given release. // Run executes 'helm pull' against the given release.
func (p *Pull) Run(chartRef string) error { func (p *Pull) Run(chartRef string) (string, error) {
var out strings.Builder
c := downloader.ChartDownloader{ c := downloader.ChartDownloader{
HelmHome: p.Settings.Home, HelmHome: p.Settings.Home,
Out: p.Out, Out: &out,
Keyring: p.Keyring, Keyring: p.Keyring,
Verify: downloader.VerifyNever, Verify: downloader.VerifyNever,
Getters: getter.All(p.Settings), Getters: getter.All(p.Settings),
@ -79,7 +80,7 @@ func (p *Pull) Run(chartRef string) error {
var err error var err error
dest, err = ioutil.TempDir("", "helm-") dest, err = ioutil.TempDir("", "helm-")
if err != nil { if err != nil {
return errors.Wrap(err, "failed to untar") return out.String(), errors.Wrap(err, "failed to untar")
} }
defer os.RemoveAll(dest) defer os.RemoveAll(dest)
} }
@ -87,18 +88,18 @@ func (p *Pull) Run(chartRef string) error {
if p.RepoURL != "" { if p.RepoURL != "" {
chartURL, err := repo.FindChartInAuthRepoURL(p.RepoURL, p.Username, p.Password, chartRef, p.Version, p.CertFile, p.KeyFile, p.CaFile, getter.All(p.Settings)) chartURL, err := repo.FindChartInAuthRepoURL(p.RepoURL, p.Username, p.Password, chartRef, p.Version, p.CertFile, p.KeyFile, p.CaFile, getter.All(p.Settings))
if err != nil { if err != nil {
return err return out.String(), err
} }
chartRef = chartURL chartRef = chartURL
} }
saved, v, err := c.DownloadTo(chartRef, p.Version, dest) saved, v, err := c.DownloadTo(chartRef, p.Version, dest)
if err != nil { if err != nil {
return err return out.String(), err
} }
if p.Verify { if p.Verify {
fmt.Fprintf(p.Out, "Verification: %v\n", v) fmt.Fprintf(&out, "Verification: %v\n", v)
} }
// After verification, untar the chart into the requested directory. // After verification, untar the chart into the requested directory.
@ -109,16 +110,16 @@ func (p *Pull) Run(chartRef string) error {
} }
if fi, err := os.Stat(ud); err != nil { if fi, err := os.Stat(ud); err != nil {
if err := os.MkdirAll(ud, 0755); err != nil { if err := os.MkdirAll(ud, 0755); err != nil {
return errors.Wrap(err, "failed to untar (mkdir)") return out.String(), errors.Wrap(err, "failed to untar (mkdir)")
} }
} else if !fi.IsDir() { } else if !fi.IsDir() {
return errors.Errorf("failed to untar: %s is not a directory", ud) return out.String(), errors.Errorf("failed to untar: %s is not a directory", ud)
} }
return chartutil.ExpandFile(ud, saved) return out.String(), chartutil.ExpandFile(ud, saved)
} }
return nil return out.String(), nil
} }
func (p *Pull) AddFlags(f *pflag.FlagSet) { func (p *Pull) AddFlags(f *pflag.FlagSet) {

@ -18,7 +18,6 @@ package action
import ( import (
"fmt" "fmt"
"io"
"strings" "strings"
"github.com/ghodss/yaml" "github.com/ghodss/yaml"
@ -63,15 +62,13 @@ func ParseShowOutputFormat(s string) (out ShowOutputFormat, err error) {
// //
// It provides the implementation of 'helm show' and its respective subcommands. // It provides the implementation of 'helm show' and its respective subcommands.
type Show struct { type Show struct {
Out io.Writer
OutputFormat ShowOutputFormat OutputFormat ShowOutputFormat
ChartPathOptions ChartPathOptions
} }
// NewShow creates a new Show object with the given configuration. // NewShow creates a new Show object with the given configuration.
func NewShow(out io.Writer, output ShowOutputFormat) *Show { func NewShow(output ShowOutputFormat) *Show {
return &Show{ return &Show{
Out: out,
OutputFormat: output, OutputFormat: output,
} }
} }
@ -81,42 +78,43 @@ func (s *Show) AddFlags(f *pflag.FlagSet) {
} }
// Run executes 'helm show' against the given release. // Run executes 'helm show' against the given release.
func (s *Show) Run(chartpath string) error { func (s *Show) Run(chartpath string) (string, error) {
var out strings.Builder
chrt, err := loader.Load(chartpath) chrt, err := loader.Load(chartpath)
if err != nil { if err != nil {
return err return "", err
} }
cf, err := yaml.Marshal(chrt.Metadata) cf, err := yaml.Marshal(chrt.Metadata)
if err != nil { if err != nil {
return err return "", err
} }
if s.OutputFormat == ShowChart || s.OutputFormat == ShowAll { if s.OutputFormat == ShowChart || s.OutputFormat == ShowAll {
fmt.Fprintln(s.Out, string(cf)) fmt.Fprintf(&out, "%s\n", cf)
} }
if (s.OutputFormat == ShowValues || s.OutputFormat == ShowAll) && chrt.Values != nil { if (s.OutputFormat == ShowValues || s.OutputFormat == ShowAll) && chrt.Values != nil {
if s.OutputFormat == ShowAll { if s.OutputFormat == ShowAll {
fmt.Fprintln(s.Out, "---") fmt.Fprintln(&out, "---")
} }
b, err := yaml.Marshal(chrt.Values) b, err := yaml.Marshal(chrt.Values)
if err != nil { if err != nil {
return err return "", err
} }
fmt.Fprintln(s.Out, string(b)) fmt.Fprintf(&out, "%s\n", b)
} }
if s.OutputFormat == ShowReadme || s.OutputFormat == ShowAll { if s.OutputFormat == ShowReadme || s.OutputFormat == ShowAll {
if s.OutputFormat == ShowAll { if s.OutputFormat == ShowAll {
fmt.Fprintln(s.Out, "---") fmt.Fprintln(&out, "---")
} }
readme := findReadme(chrt.Files) readme := findReadme(chrt.Files)
if readme == nil { if readme == nil {
return nil return out.String(), nil
} }
fmt.Fprintln(s.Out, string(readme.Data)) fmt.Fprintf(&out, "%s\n", readme.Data)
} }
return nil return out.String(), nil
} }
func findReadme(files []*chart.File) (file *chart.File) { func findReadme(files []*chart.File) (file *chart.File) {

@ -17,18 +17,18 @@ limitations under the License.
package action package action
import ( import (
"bytes"
"io/ioutil" "io/ioutil"
"strings" "strings"
"testing" "testing"
) )
func TestShow(t *testing.T) { func TestShow(t *testing.T) {
b := bytes.NewBuffer(nil) client := NewShow(ShowAll)
client := NewShow(b, ShowAll) output, err := client.Run("../../cmd/helm/testdata/testcharts/alpine")
if err != nil {
client.Run("../../cmd/helm/testdata/testcharts/alpine") t.Fatal(err)
}
// Load the data from the textfixture directly. // Load the data from the textfixture directly.
cdata, err := ioutil.ReadFile("../../cmd/helm/testdata/testcharts/alpine/Chart.yaml") cdata, err := ioutil.ReadFile("../../cmd/helm/testdata/testcharts/alpine/Chart.yaml")
@ -43,7 +43,7 @@ func TestShow(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
parts := strings.SplitN(b.String(), "---", 3) parts := strings.SplitN(output, "---", 3)
if len(parts) != 3 { if len(parts) != 3 {
t.Fatalf("Expected 2 parts, got %d", len(parts)) t.Fatalf("Expected 2 parts, got %d", len(parts))
} }
@ -64,11 +64,13 @@ func TestShow(t *testing.T) {
} }
// Regression tests for missing values. See issue #1024. // Regression tests for missing values. See issue #1024.
b.Reset()
client.OutputFormat = ShowValues client.OutputFormat = ShowValues
client.Run("../../cmd/helm/testdata/testcharts/novals") output, err = client.Run("../../cmd/helm/testdata/testcharts/novals")
if err != nil {
t.Fatal(err)
}
if b.Len() != 0 { if len(output) != 0 {
t.Errorf("expected empty values buffer, got %q", b.String()) t.Errorf("expected empty values buffer, got %s", output)
} }
} }

Loading…
Cancel
Save