Do not fail when constructing error message for commands not implemented. Use metrics GetCommand() the is already used 3 lines above for metrics tracking.

Signed-off-by: Guillaume Tardif <guillaume.tardif@docker.com>
This commit is contained in:
Guillaume Tardif 2020-09-30 10:44:10 +02:00
parent 3685cbbf8d
commit b8968e83cd
4 changed files with 24 additions and 11 deletions

View File

@ -224,13 +224,9 @@ func exit(root *cobra.Command, ctx string, err error, ctype string) {
os.Exit(errdefs.ExitCodeLoginRequired)
}
if errors.Is(err, errdefs.ErrNotImplemented) {
cmd, _, _ := root.Traverse(os.Args[1:])
name := cmd.Name()
parent := cmd.Parent()
if parent != nil && parent.Parent() != nil {
name = parent.Name() + " " + name
}
name := metrics.GetCommand(os.Args[1:], root.PersistentFlags())
fmt.Fprintf(os.Stderr, "Command %q not available in current context (%s)\n", name, ctx)
os.Exit(1)
}

View File

@ -78,7 +78,7 @@ const (
// Track sends the tracking analytics to Docker Desktop
func Track(context string, args []string, flags *flag.FlagSet, status string) {
command := getCommand(args, flags)
command := GetCommand(args, flags)
if command != "" {
c := NewClient()
c.Send(Command{
@ -90,7 +90,8 @@ func Track(context string, args []string, flags *flag.FlagSet, status string) {
}
}
func getCommand(args []string, flags *flag.FlagSet) string {
// GetCommand get the invoked command
func GetCommand(args []string, flags *flag.FlagSet) string {
command := ""
strippedArgs := stripFlags(args, flags)

View File

@ -133,11 +133,21 @@ func TestFlag(t *testing.T) {
args: []string{"create", "--rm", "test"},
expected: "create",
},
{
name: "compose up -f xxx",
args: []string{"compose", "up", "-f", "titi.yaml"},
expected: "compose up",
},
{
name: "compose -f xxx up",
args: []string{"compose", "-f", "titi.yaml", "up"},
expected: "compose up",
},
}
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
result := getCommand(testCase.args, root.PersistentFlags())
result := GetCommand(testCase.args, root.PersistentFlags())
assert.Equal(t, testCase.expected, result)
})
}
@ -210,7 +220,7 @@ func TestEcs(t *testing.T) {
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
result := getCommand(testCase.args, root.PersistentFlags())
result := GetCommand(testCase.args, root.PersistentFlags())
assert.Equal(t, testCase.expected, result)
})
}
@ -258,7 +268,7 @@ func TestScan(t *testing.T) {
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
result := getCommand(testCase.args, root.PersistentFlags())
result := GetCommand(testCase.args, root.PersistentFlags())
assert.Equal(t, testCase.expected, result)
})
}

View File

@ -56,6 +56,12 @@ func TestComposeNotImplemented(t *testing.T) {
ExitCode: 1,
Err: `Command "compose up" not available in current context (default)`,
})
res = c.RunDockerOrExitError("compose", "-f", "titi.yaml", "up")
res.Assert(t, icmd.Expected{
ExitCode: 1,
Err: `Command "compose up" not available in current context (default)`,
})
}
func TestContextDefault(t *testing.T) {