func commandWorker(wi *Instance, wr *wrangler.Wrangler, args []string, cell string, runFromCli bool) (Worker, error) { action := args[0] actionLowerCase := strings.ToLower(action) for _, group := range commands { for _, cmd := range group.Commands { if strings.ToLower(cmd.Name) == actionLowerCase { var subFlags *flag.FlagSet if runFromCli { subFlags = flag.NewFlagSet(action, flag.ExitOnError) } else { subFlags = flag.NewFlagSet(action, flag.ContinueOnError) } // The command may be run from an RPC and may not log to the console. // The Wrangler logger defines where the output has to go. subFlags.SetOutput(logutil.NewLoggerWriter(wr.Logger())) subFlags.Usage = func() { wr.Logger().Printf("Usage: %s %s %s\n\n", os.Args[0], cmd.Name, cmd.Params) wr.Logger().Printf("%s\n\n", cmd.Help) subFlags.PrintDefaults() } return cmd.Method(wi, wr, subFlags, args[1:]) } } } if runFromCli { flag.Usage() } else { PrintAllCommands(wr.Logger()) } return nil, fmt.Errorf("unknown command: %v", action) }
func NewSplitStrategy(logger logutil.Logger, argsStr string) (*SplitStrategy, error) { var args []string if argsStr != "" { args = strings.Split(argsStr, " ") } flagSet := flag.NewFlagSet("strategy", flag.ContinueOnError) flagSet.SetOutput(logutil.NewLoggerWriter(logger)) flagSet.Usage = func() { logger.Printf("Strategy flag has the following options:\n") flagSet.PrintDefaults() } populateBlpCheckpoint := flagSet.Bool("populate_blp_checkpoint", false, "populates the blp checkpoint table") dontStartBinlogPlayer := flagSet.Bool("dont_start_binlog_player", false, "do not start the binlog player after restore is complete") skipSetSourceShards := flagSet.Bool("skip_set_source_shards", false, "do not set the SourceShar field on destination shards") if err := flagSet.Parse(args); err != nil { return nil, fmt.Errorf("cannot parse strategy: %v", err) } if flagSet.NArg() > 0 { return nil, fmt.Errorf("strategy doesn't have positional arguments") } return &SplitStrategy{ PopulateBlpCheckpoint: *populateBlpCheckpoint, DontStartBinlogPlayer: *dontStartBinlogPlayer, SkipSetSourceShards: *skipSetSourceShards, }, nil }
func init() { logger := logutil.NewConsoleLogger() flag.CommandLine.SetOutput(logutil.NewLoggerWriter(logger)) flag.Usage = func() { logger.Printf("Usage: %s [global parameters] command [command parameters]\n", os.Args[0]) logger.Printf("\nThe global optional parameters are:\n") flag.PrintDefaults() logger.Printf("\nThe commands are listed below, sorted by group. Use '%s <command> -h' for more help.\n\n", os.Args[0]) vtctl.PrintAllCommands(logger) } }