From c74cec9ae360d6bd3b13dceccdecfe3d848531af Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 16 Feb 2021 12:10:35 +0100 Subject: [PATCH 1/4] introduce --quiet option close #1280 Signed-off-by: Nicolas De Loof --- cli/cmd/compose/build.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/cli/cmd/compose/build.go b/cli/cmd/compose/build.go index 29bc29f62..622b753fa 100644 --- a/cli/cmd/compose/build.go +++ b/cli/cmd/compose/build.go @@ -18,6 +18,7 @@ package compose import ( "context" + "os" "github.com/spf13/cobra" @@ -28,20 +29,29 @@ import ( type buildOptions struct { *projectOptions composeOptions + quiet bool } func buildCommand(p *projectOptions) *cobra.Command { opts := buildOptions{ projectOptions: p, } - buildCmd := &cobra.Command{ + cmd := &cobra.Command{ Use: "build [SERVICE...]", Short: "Build or rebuild services", RunE: func(cmd *cobra.Command, args []string) error { + if opts.quiet { + devnull, err := os.Open(os.DevNull) + if err != nil { + return err + } + os.Stdout = devnull + } return runBuild(cmd.Context(), opts, args) }, } - return buildCmd + cmd.Flags().BoolVarP(&opts.quiet, "quiet", "q", false, "Don't print anything to STDOUT") + return cmd } func runBuild(ctx context.Context, opts buildOptions, services []string) error { From da7498949eb07b38f69b4a7009ace642fcf6e8f3 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 16 Feb 2021 12:23:48 +0100 Subject: [PATCH 2/4] introduce config --quiet Signed-off-by: Nicolas De Loof --- cli/cmd/compose/convert.go | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/cli/cmd/compose/convert.go b/cli/cmd/compose/convert.go index e72bea816..e461179a5 100644 --- a/cli/cmd/compose/convert.go +++ b/cli/cmd/compose/convert.go @@ -17,8 +17,11 @@ package compose import ( + "bufio" "context" "fmt" + "io" + "os" "github.com/docker/compose-cli/api/compose" @@ -31,6 +34,7 @@ type convertOptions struct { *projectOptions Format string Output string + quiet bool } var addFlagsFuncs []func(cmd *cobra.Command, opts *convertOptions) @@ -39,22 +43,31 @@ func convertCommand(p *projectOptions) *cobra.Command { opts := convertOptions{ projectOptions: p, } - convertCmd := &cobra.Command{ + cmd := &cobra.Command{ Aliases: []string{"config"}, Use: "convert SERVICES", Short: "Converts the compose file to platform's canonical format", RunE: func(cmd *cobra.Command, args []string) error { + if opts.quiet { + devnull, err := os.Open(os.DevNull) + if err != nil { + return err + } + os.Stdout = devnull + } + opts.Output = os.DevNull return runConvert(cmd.Context(), opts, args) }, } - flags := convertCmd.Flags() + flags := cmd.Flags() flags.StringVar(&opts.Format, "format", "yaml", "Format the output. Values: [yaml | json]") + flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Only validate the configuration, don't print anything.") // add flags for hidden backends for _, f := range addFlagsFuncs { - f(convertCmd, &opts) + f(cmd, &opts) } - return convertCmd + return cmd } func runConvert(ctx context.Context, opts convertOptions, services []string) error { @@ -76,9 +89,14 @@ func runConvert(ctx context.Context, opts convertOptions, services []string) err if err != nil { return err } + var out io.Writer = os.Stdout if opts.Output != "" { - fmt.Print("model saved to ") + file, err := os.Create(opts.Output) + if err != nil { + return err + } + out = bufio.NewWriter(file) } - fmt.Println(string(json)) - return nil + _, err = fmt.Fprint(out, string(json)) + return err } From a2d335271a267f5de94fc6cab735359a11c2dbe8 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 16 Feb 2021 14:01:56 +0100 Subject: [PATCH 3/4] introduce pull --quiet option Signed-off-by: Nicolas De Loof --- cli/cmd/compose/pull.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/cli/cmd/compose/pull.go b/cli/cmd/compose/pull.go index 3617058e3..3dca9eb73 100644 --- a/cli/cmd/compose/pull.go +++ b/cli/cmd/compose/pull.go @@ -18,7 +18,6 @@ package compose import ( "context" - "github.com/spf13/cobra" "github.com/docker/compose-cli/api/client" @@ -28,20 +27,22 @@ import ( type pullOptions struct { *projectOptions composeOptions + quiet bool } func pullCommand(p *projectOptions) *cobra.Command { opts := pullOptions{ projectOptions: p, } - pullCmd := &cobra.Command{ + cmd := &cobra.Command{ Use: "pull [SERVICE...]", Short: "Pull service images", RunE: func(cmd *cobra.Command, args []string) error { return runPull(cmd.Context(), opts, args) }, } - return pullCmd + cmd.Flags().BoolVarP(&opts.quiet, "quiet", "q", false, "Pull without printing progress information") + return cmd } func runPull(ctx context.Context, opts pullOptions, services []string) error { @@ -55,6 +56,10 @@ func runPull(ctx context.Context, opts pullOptions, services []string) error { return err } + if opts.quiet { + return c.ComposeService().Pull(ctx, project) + } + _, err = progress.Run(ctx, func(ctx context.Context) (string, error) { return "", c.ComposeService().Pull(ctx, project) }) From 057f23ed7520f4de892a9ba9b8c6fd73d8a100d6 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 16 Feb 2021 17:36:07 +0100 Subject: [PATCH 4/4] non-tty progress write to stdout Signed-off-by: Nicolas De Loof --- api/progress/plain.go | 2 +- cli/cmd/compose/convert.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/progress/plain.go b/api/progress/plain.go index 3280bee1f..75d4168d3 100644 --- a/api/progress/plain.go +++ b/api/progress/plain.go @@ -37,7 +37,7 @@ func (p *plainWriter) Start(ctx context.Context) error { } func (p *plainWriter) Event(e Event) { - fmt.Println(e.ID, e.Text, e.StatusText) + fmt.Fprintln(p.out, e.ID, e.Text, e.StatusText) } func (p *plainWriter) Stop() { diff --git a/cli/cmd/compose/convert.go b/cli/cmd/compose/convert.go index e461179a5..17aef2403 100644 --- a/cli/cmd/compose/convert.go +++ b/cli/cmd/compose/convert.go @@ -89,6 +89,11 @@ func runConvert(ctx context.Context, opts convertOptions, services []string) err if err != nil { return err } + + if opts.quiet { + return nil + } + var out io.Writer = os.Stdout if opts.Output != "" { file, err := os.Create(opts.Output)