flags.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package utils
  2. import (
  3. "fmt"
  4. "os"
  5. flag "github.com/docker/docker/pkg/mflag"
  6. )
  7. // ParseFlags is a utility function that adds a help flag if withHelp is true,
  8. // calls cmd.Parse(args) and prints a relevant error message if there are
  9. // incorrect number of arguments. It returns error only if error handling is
  10. // set to ContinueOnError and parsing fails. If error handling is set to
  11. // ExitOnError, it's safe to ignore the return value.
  12. // TODO: move this to a better package than utils
  13. func ParseFlags(cmd *flag.FlagSet, args []string, withHelp bool) error {
  14. var help *bool
  15. if withHelp {
  16. help = cmd.Bool([]string{"#help", "-help"}, false, "Print usage")
  17. }
  18. if err := cmd.Parse(args); err != nil {
  19. return err
  20. }
  21. if help != nil && *help {
  22. cmd.Usage()
  23. // just in case Usage does not exit
  24. os.Exit(0)
  25. }
  26. if str := cmd.CheckArgs(); str != "" {
  27. ReportError(cmd, str, withHelp)
  28. }
  29. return nil
  30. }
  31. func ReportError(cmd *flag.FlagSet, str string, withHelp bool) {
  32. if withHelp {
  33. if os.Args[0] == cmd.Name() {
  34. str += ". See '" + os.Args[0] + " --help'"
  35. } else {
  36. str += ". See '" + os.Args[0] + " " + cmd.Name() + " --help'"
  37. }
  38. }
  39. fmt.Fprintf(cmd.Out(), "docker: %s.\n", str)
  40. os.Exit(1)
  41. }