Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 2b1158f

Browse files
committed
Adapt cli/mobycli to avoid duplicating shellout code
Signed-off-by: Guillaume Tardif <[email protected]>
1 parent e92b2f8 commit 2b1158f

File tree

3 files changed

+30
-84
lines changed

3 files changed

+30
-84
lines changed

cli/mobycli/exec.go

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,40 @@ func mustDelegateToMoby(ctxType string) bool {
6262

6363
// Exec delegates to com.docker.cli if on moby context
6464
func Exec(root *cobra.Command) {
65+
childExit := make(chan bool)
66+
err := RunDocker(childExit, os.Args[1:]...)
67+
childExit <- true
68+
if err != nil {
69+
metrics.Track(store.DefaultContextType, os.Args[1:], metrics.FailureStatus)
70+
71+
if exiterr, ok := err.(*exec.ExitError); ok {
72+
os.Exit(exiterr.ExitCode())
73+
}
74+
fmt.Fprintln(os.Stderr, err)
75+
os.Exit(1)
76+
}
77+
command := metrics.GetCommand(os.Args[1:])
78+
if command == "build" {
79+
utils.DisplayScanSuggestMsg()
80+
}
81+
metrics.Track(store.DefaultContextType, os.Args[1:], metrics.SuccessStatus)
82+
83+
os.Exit(0)
84+
}
85+
86+
// RunDocker runs a docker command, and forward signals to the shellout command (stops listening to signals when an event is sent to childExit)
87+
func RunDocker(childExit chan bool, args ...string) error {
6588
execBinary, err := resolvepath.LookPath(ComDockerCli)
6689
if err != nil {
6790
fmt.Fprintln(os.Stderr, err)
6891
os.Exit(1)
6992
}
70-
cmd := exec.Command(execBinary, os.Args[1:]...)
93+
cmd := exec.Command(execBinary, args...)
7194
cmd.Stdin = os.Stdin
7295
cmd.Stdout = os.Stdout
7396
cmd.Stderr = os.Stderr
7497

7598
signals := make(chan os.Signal, 1)
76-
childExit := make(chan bool)
7799
signal.Notify(signals) // catch all signals
78100
go func() {
79101
for {
@@ -90,24 +112,7 @@ func Exec(root *cobra.Command) {
90112
}
91113
}()
92114

93-
err = cmd.Run()
94-
childExit <- true
95-
if err != nil {
96-
metrics.Track(store.DefaultContextType, os.Args[1:], metrics.FailureStatus)
97-
98-
if exiterr, ok := err.(*exec.ExitError); ok {
99-
os.Exit(exiterr.ExitCode())
100-
}
101-
fmt.Fprintln(os.Stderr, err)
102-
os.Exit(1)
103-
}
104-
command := metrics.GetCommand(os.Args[1:])
105-
if command == "build" {
106-
utils.DisplayScanSuggestMsg()
107-
}
108-
metrics.Track(store.DefaultContextType, os.Args[1:], metrics.SuccessStatus)
109-
110-
os.Exit(0)
115+
return cmd.Run()
111116
}
112117

113118
// IsDefaultContextCommand checks if the command exists in the classic cli (issues a shellout --help)

local/compose/build_win.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"path/filepath"
2323

2424
"github.com/docker/compose-cli/api/compose"
25-
"github.com/docker/compose-cli/local/moby"
25+
"github.com/docker/compose-cli/cli/mobycli"
2626

2727
"github.com/compose-spec/compose-go/types"
2828
)
@@ -60,7 +60,10 @@ func (s *composeService) windowsBuild(project *types.Project, options compose.Bu
6060

6161
args := cmd.getArguments()
6262
// shell out to moby cli
63-
err := moby.Exec(args)
63+
childExit := make(chan bool)
64+
err := mobycli.RunDocker(childExit, args...)
65+
childExit <- true
66+
6467
if err != nil {
6568
return err
6669
}

local/moby/exec.go

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)