if err != nil {
return opts, err
}
- if len(flags.Args()) > 0 {
+ if flags.NArg() != 0 {
return opts, fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
}
if opts.SourceDir == "" {
return nil
} else if err != nil {
return err
+ } else if flags.NArg() != 0 {
+ return fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
} else if *versionFlag {
cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
return nil
return 0
} else if err != nil {
return 2
- }
-
- if len(flags.Args()) != 0 {
- flags.Usage()
+ } else if flags.NArg() != 0 {
+ err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
return 2
}
logger := ctxlog.New(stderr, "text", "info")
return 0
} else if err != nil {
return 2
- }
-
- if len(flags.Args()) != 0 {
- flags.Usage()
+ } else if flags.NArg() != 0 {
+ err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
return 2
}
return 0
} else if err != nil {
return 2
- }
-
- if len(flags.Args()) != 0 {
- flags.Usage()
+ } else if flags.NArg() != 0 {
+ err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
return 2
}
ldr := testLoader(c, "Clusters: {zzzzz: {}}", nil)
ldr.SetupFlags(flags)
args := ldr.MungeLegacyConfigArgs(ldr.Logger, []string{"-config", tmpfile.Name()}, mungeFlag)
- flags.Parse(args)
+ err = flags.Parse(args)
+ c.Assert(err, check.IsNil)
+ c.Assert(flags.NArg(), check.Equals, 0)
cfg, err := ldr.Load()
if err != nil {
return nil, err
} else if err != nil {
log.Print(err)
return 1
+ } else if flags.NArg() != 1 {
+ fmt.Fprintf(flags.Output(), "Usage: %s [options] containerUUID\n\nOptions:\n", prog)
+ flags.PrintDefaults()
+ return 2
}
containerUUID := flags.Arg(0)
} else if err != nil {
fmt.Fprintln(stderr, err)
return 2
+ } else if f.NArg() != 0 {
+ fmt.Fprintf(stderr, "unrecognized command line arguments: %v\n", f.Args())
+ return 2
}
diag.logger = ctxlog.New(stdout, "text", diag.logLevel)
diag.logger.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true, DisableLevelTruncation: true, PadLevelText: true})
return 2
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
- } else if len(flags.Args()) > 0 {
+ } else if flags.NArg() != 0 {
err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
return 2
} else if !regexp.MustCompile(`^[a-z][a-z0-9]{4}`).MatchString(initcmd.ClusterID) {
"io"
"log"
"net/http"
+
// pprof is only imported to register its HTTP handlers
_ "net/http/pprof"
"os"
return 0
} else if err != nil {
return 2
+ } else if flags.NArg() != 0 {
+ err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
+ return 2
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
}
TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
})
- flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
+ flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
loader := config.NewLoader(os.Stdin, logger)
loader.SetupFlags(flags)
getVersion := flags.Bool("version", false, "print version information and exit.")
args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config")
- flags.Parse(args)
+ err := flags.Parse(args)
+ if err == flag.ErrHelp {
+ return
+ } else if err != nil {
+ logger.Error(err)
+ os.Exit(2)
+ } else if flags.NArg() != 0 {
+ logger.Errorf("unrecognized command line arguments: %v", flags.Args())
+ os.Exit(2)
+ }
if *getVersion {
fmt.Printf("arv-git-httpd %s\n", version)
"Print version information and exit.")
// Parse args; omit the first arg which is the command name
- flags.Parse(os.Args[1:])
+ err := flags.Parse(os.Args[1:])
+ if err == flag.ErrHelp {
+ return nil
+ } else if err != nil {
+ return err
+ } else if flags.NArg() != 0 {
+ return fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
+ }
// Print version information if requested
if *getVersion {
false,
"Print version information and exit.")
- args = loader.MungeLegacyConfigArgs(logrus.StandardLogger(), args, "-legacy-crunch-dispatch-slurm-config")
-
- // Parse args; omit the first arg which is the command name
+ args = loader.MungeLegacyConfigArgs(disp.logger, args, "-legacy-crunch-dispatch-slurm-config")
err := flags.Parse(args)
-
if err == flag.ErrHelp {
return nil
+ } else if err != nil {
+ return err
+ } else if flags.NArg() != 0 {
+ return fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
}
// Print version information if requested
Logger: log.New(os.Stderr, "crunchstat: ", 0),
}
- flag.StringVar(&reporter.CgroupRoot, "cgroup-root", "", "Root of cgroup tree")
- flag.StringVar(&reporter.CgroupParent, "cgroup-parent", "", "Name of container parent under cgroup")
- flag.StringVar(&reporter.CIDFile, "cgroup-cid", "", "Path to container id file")
- flag.IntVar(&signalOnDeadPPID, "signal-on-dead-ppid", signalOnDeadPPID, "Signal to send child if crunchstat's parent process disappears (0 to disable)")
- flag.DurationVar(&ppidCheckInterval, "ppid-check-interval", ppidCheckInterval, "Time between checks for parent process disappearance")
- pollMsec := flag.Int64("poll", 1000, "Reporting interval, in milliseconds")
- getVersion := flag.Bool("version", false, "Print version information and exit.")
-
- flag.Parse()
+ flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
+ flags.StringVar(&reporter.CgroupRoot, "cgroup-root", "", "Root of cgroup tree")
+ flags.StringVar(&reporter.CgroupParent, "cgroup-parent", "", "Name of container parent under cgroup")
+ flags.StringVar(&reporter.CIDFile, "cgroup-cid", "", "Path to container id file")
+ flags.IntVar(&signalOnDeadPPID, "signal-on-dead-ppid", signalOnDeadPPID, "Signal to send child if crunchstat's parent process disappears (0 to disable)")
+ flags.DurationVar(&ppidCheckInterval, "ppid-check-interval", ppidCheckInterval, "Time between checks for parent process disappearance")
+ pollMsec := flags.Int64("poll", 1000, "Reporting interval, in milliseconds")
+ getVersion := flags.Bool("version", false, "Print version information and exit.")
+
+ err := flags.Parse(os.Args[1:])
+ if err == flag.ErrHelp {
+ return
+ } else if err != nil {
+ reporter.Logger.Print(err)
+ os.Exit(2)
+ }
// Print version information if requested
if *getVersion {
return
}
+ if flags.NArg() == 0 {
+ fmt.Fprintf(flags.Output(), "Usage: %s [options] program [args...]\n\nOptions:\n", os.Args[0])
+ flags.PrintDefaults()
+ os.Exit(2)
+ }
+
reporter.Logger.Printf("crunchstat %s started", version)
if reporter.CgroupRoot == "" {
reporter.PollPeriod = time.Duration(*pollMsec) * time.Millisecond
reporter.Start()
- err := runCommand(flag.Args(), reporter.Logger)
+ err = runCommand(flags.Args(), reporter.Logger)
reporter.Stop()
if err, ok := err.(*exec.ExitError); ok {
logger := ctxlog.FromContext(context.Background())
var options RunOptions
- flags := flag.NewFlagSet(prog, flag.ExitOnError)
+ flags := flag.NewFlagSet(prog, flag.ContinueOnError)
flags.BoolVar(&options.Once, "once", false,
"balance once and then exit")
flags.BoolVar(&options.CommitPulls, "commit-pulls", false,
"send trash requests (delete unreferenced old blocks, and excess replicas of overreplicated blocks)")
flags.BoolVar(&options.CommitConfirmedFields, "commit-confirmed-fields", true,
"update collection fields (replicas_confirmed, storage_classes_confirmed, etc.)")
- flags.Bool("version", false, "Write version information to stdout and exit 0")
dumpFlag := flags.Bool("dump", false, "dump details for each block to stdout")
pprofAddr := flags.String("pprof", "", "serve Go profile data at `[addr]:port`")
+ // "show version" is implemented by service.Command, so we
+ // don't need the var here -- we just need the -version flag
+ // to pass flags.Parse().
+ flags.Bool("version", false, "Write version information to stdout and exit 0")
if *pprofAddr != "" {
go func() {
munged := loader.MungeLegacyConfigArgs(logger, args, "-legacy-keepbalance-config")
err := flags.Parse(munged)
- if err != nil {
+ if err == flag.ErrHelp {
+ return 0
+ } else if err != nil {
logger.Errorf("error parsing command line flags: %s", err)
return 2
- }
- if flags.NArg() != 0 {
- logger.Errorf("error parsing command line flags: extra arguments: %q", flags.Args())
+ } else if flags.NArg() != 0 {
+ logger.Errorf("unrecognized command line arguments: %v", flags.Args())
return 2
}
}
flags.Visit(func(f *flag.Flag) {
if !dropFlag[f.Name] {
- args = append(args, "-"+f.Name, f.Value.String())
+ args = append(args, "-"+f.Name+"="+f.Value.String())
}
})
runCommand("keep-balance", []string{"-version"}, nil, &stdout, &stderr)
c.Check(stderr.String(), check.Equals, "")
c.Log(stdout.String())
+ c.Check(stdout.String(), check.Matches, `keep-balance.*\(go1.*\)\n`)
}
func (s *mainSuite) TestHTTPServer(c *check.C) {
})
}
-func configure(logger log.FieldLogger, args []string) *Config {
- flags := flag.NewFlagSet(args[0], flag.ExitOnError)
+func configure(logger log.FieldLogger, args []string) (*Config, error) {
+ flags := flag.NewFlagSet(args[0], flag.ContinueOnError)
loader := config.NewLoader(os.Stdin, logger)
loader.SetupFlags(flags)
"print version information and exit.")
args = loader.MungeLegacyConfigArgs(logger, args[1:], "-legacy-keepweb-config")
- flags.Parse(args)
+ err := flags.Parse(args)
+ if err == flag.ErrHelp {
+ return nil, nil
+ } else if err != nil {
+ return nil, err
+ } else if flags.NArg() != 0 {
+ return nil, fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
+ }
// Print version information if requested
if *getVersion {
fmt.Printf("keep-web %s\n", version)
- return nil
+ return nil, nil
}
arvCfg, err := loader.Load()
if *dumpConfig {
out, err := yaml.Marshal(cfg)
if err != nil {
- log.Fatal(err)
+ return nil, err
}
_, err = os.Stdout.Write(out)
- if err != nil {
- log.Fatal(err)
- }
- return nil
+ return nil, err
}
- return cfg
+ return cfg, nil
}
func main() {
logger := log.New()
- cfg := configure(logger, os.Args)
- if cfg == nil {
+ cfg, err := configure(logger, os.Args)
+ if err != nil {
+ logger.Error(err)
+ os.Exit(1)
+ } else if cfg == nil {
return
}