func main() { defer shutdown.Exit() usage := ` usage: flynn-blobstore <command> [<args>...] Commands: help show usage for a specific command cleanup delete file blobs from default backend migrate move file blobs from default backend to a different backend server run blobstore HTTP server See 'flynn-blobstore help <command>' for more information on a specific command. `[1:] args, _ := docopt.Parse(usage, nil, true, version.String(), true) cmd := args.String["<command>"] cmdArgs := args.All["<args>"].([]string) if cmd == "help" { if len(cmdArgs) == 0 { // `flynn-blobstore help` fmt.Println(usage) return } else { // `flynn-blobstore help <command>` cmd = cmdArgs[0] cmdArgs = []string{"--help"} } } if err := runCommand(cmd, cmdArgs); err != nil { log.Println(err) shutdown.ExitWithCode(1) } }
func runCommand(name string, args []string) (err error) { argv := make([]string, 1, 1+len(args)) argv[0] = name argv = append(argv, args...) cmd, ok := commands[name] if !ok { return fmt.Errorf("%s is not a flynn-blobstore command. See 'flynn-blobstore help'", name) } parsedArgs, err := docopt.Parse(cmd.usage, argv, true, "", false) if err != nil { return err } return cmd.f(parsedArgs) }