2016-05-16 11:50:55 -04:00
|
|
|
package cli
|
|
|
|
|
2016-06-23 11:25:51 -04:00
|
|
|
import (
|
cli: make cli.StatusError slightly prettier
This error didn't do a great job at formatting. If a StatusError was
produced without a Status message, it would print a very non-informative
error, with information missing.
Let's update the output:
- If a status-message is provided; print just that (after all the
status code is something that can be found from the shell, e.g.
through `echo $?` in Bash).
- If no status-message is provided: print a message more similar to
Go's `exec.ExecError`, which uses `os.rocessState.String()` (see [1]).
Before this patch, an error without custom status would print:
Status: , Code: 2
After this patch:
exit status 2
In situations where a custom error-message is provided, the error-message
is print as-is, whereas before this patch, the message got combined with
the `Status:` and `Code:`, which resulted in some odd output.
Before this patch:
docker volume --no-such-flag
Status: unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
, Code: 125
With this patch, the error is shown as-is;
docker volume --no-such-flag
unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
While the exit-code is no longer printed, it's still properly handled;
echo $?
125
[1]: https://github.com/golang/go/blob/82c14346d89ec0eeca114f9ca0e88516b2cda454/src/os/exec_posix.go#L107-L135
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-04 13:02:33 -04:00
|
|
|
"strconv"
|
2016-06-23 11:25:51 -04:00
|
|
|
"strings"
|
|
|
|
)
|
2016-05-16 11:50:55 -04:00
|
|
|
|
|
|
|
// Errors is a list of errors.
|
|
|
|
// Useful in a loop if you don't want to return the error right away and you want to display after the loop,
|
|
|
|
// all the errors that happened during the loop.
|
|
|
|
type Errors []error
|
|
|
|
|
2016-06-15 12:17:05 -04:00
|
|
|
func (errList Errors) Error() string {
|
|
|
|
if len(errList) < 1 {
|
2016-05-16 11:50:55 -04:00
|
|
|
return ""
|
|
|
|
}
|
2016-06-15 12:17:05 -04:00
|
|
|
|
|
|
|
out := make([]string, len(errList))
|
|
|
|
for i := range errList {
|
|
|
|
out[i] = errList[i].Error()
|
2016-05-16 11:50:55 -04:00
|
|
|
}
|
2016-06-15 12:17:05 -04:00
|
|
|
return strings.Join(out, ", ")
|
2016-05-16 11:50:55 -04:00
|
|
|
}
|
2016-06-23 11:25:51 -04:00
|
|
|
|
|
|
|
// StatusError reports an unsuccessful exit by a command.
|
|
|
|
type StatusError struct {
|
|
|
|
Status string
|
|
|
|
StatusCode int
|
|
|
|
}
|
|
|
|
|
cli: make cli.StatusError slightly prettier
This error didn't do a great job at formatting. If a StatusError was
produced without a Status message, it would print a very non-informative
error, with information missing.
Let's update the output:
- If a status-message is provided; print just that (after all the
status code is something that can be found from the shell, e.g.
through `echo $?` in Bash).
- If no status-message is provided: print a message more similar to
Go's `exec.ExecError`, which uses `os.rocessState.String()` (see [1]).
Before this patch, an error without custom status would print:
Status: , Code: 2
After this patch:
exit status 2
In situations where a custom error-message is provided, the error-message
is print as-is, whereas before this patch, the message got combined with
the `Status:` and `Code:`, which resulted in some odd output.
Before this patch:
docker volume --no-such-flag
Status: unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
, Code: 125
With this patch, the error is shown as-is;
docker volume --no-such-flag
unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
While the exit-code is no longer printed, it's still properly handled;
echo $?
125
[1]: https://github.com/golang/go/blob/82c14346d89ec0eeca114f9ca0e88516b2cda454/src/os/exec_posix.go#L107-L135
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-04 13:02:33 -04:00
|
|
|
// Error formats the error for printing. If a custom Status is provided,
|
|
|
|
// it is returned as-is, otherwise it generates a generic error-message
|
|
|
|
// based on the StatusCode.
|
2016-06-23 11:25:51 -04:00
|
|
|
func (e StatusError) Error() string {
|
cli: make cli.StatusError slightly prettier
This error didn't do a great job at formatting. If a StatusError was
produced without a Status message, it would print a very non-informative
error, with information missing.
Let's update the output:
- If a status-message is provided; print just that (after all the
status code is something that can be found from the shell, e.g.
through `echo $?` in Bash).
- If no status-message is provided: print a message more similar to
Go's `exec.ExecError`, which uses `os.rocessState.String()` (see [1]).
Before this patch, an error without custom status would print:
Status: , Code: 2
After this patch:
exit status 2
In situations where a custom error-message is provided, the error-message
is print as-is, whereas before this patch, the message got combined with
the `Status:` and `Code:`, which resulted in some odd output.
Before this patch:
docker volume --no-such-flag
Status: unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
, Code: 125
With this patch, the error is shown as-is;
docker volume --no-such-flag
unknown flag: --no-such-flag
See 'docker volume --help'.
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
update Update a volume (cluster volumes only)
Run 'docker volume COMMAND --help' for more information on a command.
While the exit-code is no longer printed, it's still properly handled;
echo $?
125
[1]: https://github.com/golang/go/blob/82c14346d89ec0eeca114f9ca0e88516b2cda454/src/os/exec_posix.go#L107-L135
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-07-04 13:02:33 -04:00
|
|
|
if e.Status == "" {
|
|
|
|
return "exit status " + strconv.Itoa(e.StatusCode)
|
|
|
|
}
|
|
|
|
return e.Status
|
2016-06-23 11:25:51 -04:00
|
|
|
}
|