Skip to content

Commit

Permalink
TOOLS-297: make tools' option parse error consistent
Browse files Browse the repository at this point in the history
Former-commit-id: 2040eba
  • Loading branch information
deafgoat committed Dec 18, 2014
1 parent d153c36 commit aa99954
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 73 deletions.
32 changes: 13 additions & 19 deletions bsondump/main/bsondump.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ func main() {
bsonDumpOpts := &bsondump.BSONDumpOptions{}
opts.AddOptions(bsonDumpOpts)

extra, err := opts.Parse()
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v", err)
os.Exit(util.ExitError)
log.Logf(log.Always, "try 'bsondump --help' for more information")
os.Exit(util.ExitBadOptions)
}

// print help, if specified
Expand All @@ -35,31 +36,24 @@ func main() {
log.SetVerbosity(opts.Verbosity)

// pull out the filename
filename := ""
if len(extra) == 0 {
opts.PrintHelp(true)
return
} else if len(extra) > 1 {
log.Log(log.Always, "Too many positional operators.")
opts.PrintHelp(true)
os.Exit(util.ExitError)
} else {
filename = extra[0]
if filename == "" {
log.Log(log.Always, "Filename must not be blank.")
opts.PrintHelp(true)
os.Exit(util.ExitError)
}
if len(args) == 0 {
log.Logf(log.Always, "must provide a filename")
log.Logf(log.Always, "try 'bsondump --help' for more information")
os.Exit(util.ExitBadOptions)
} else if len(args) > 1 {
log.Logf(log.Always, "too many positional arguments: %v", args)
log.Logf(log.Always, "try 'bsondump --help' for more information")
os.Exit(util.ExitBadOptions)
}

dumper := bsondump.BSONDump{
ToolOptions: opts,
BSONDumpOptions: bsonDumpOpts,
FileName: filename,
FileName: args[0],
Out: os.Stdout,
}

log.Logf(log.DebugLow, "running bsondump with objcheck: %v", bsonDumpOpts.ObjCheck)
log.Logf(log.DebugLow, "running bsondump with --objcheck: %v", bsonDumpOpts.ObjCheck)

if len(bsonDumpOpts.Type) != 0 && bsonDumpOpts.Type != "debug" && bsonDumpOpts.Type != "json" {
log.Logf(log.Always, "Unsupported output type '%v'. Must be either 'debug' or 'json'", bsonDumpOpts.Type)
Expand Down
17 changes: 7 additions & 10 deletions mongodump/main/mongodump.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/mongodb/mongo-tools/common/util"
"github.com/mongodb/mongo-tools/mongodump"
"os"
"strings"
)

func main() {
Expand All @@ -20,18 +19,16 @@ func main() {
outputOpts := &mongodump.OutputOptions{}
opts.AddOptions(outputOpts)

extraArgs, err := opts.Parse()
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v\n\n", err)
opts.PrintHelp(true)
return
log.Logf(log.Always, "error parsing command line options: %v", err)
log.Logf(log.Always, "try 'mongodump --help' for more information")
os.Exit(util.ExitBadOptions)
}

if len(extraArgs) > 0 {
log.Logf(log.Always,
"error: mongodump does not accept positional arguments (%v) see help text",
strings.Join(extraArgs, ", "))
opts.PrintHelp(true)
if len(args) > 0 {
log.Logf(log.Always, "positional arguments not allowed: %v", args)
log.Logf(log.Always, "try 'mongodump --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand Down
11 changes: 6 additions & 5 deletions mongoexport/main/mongoexport.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ func main() {
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v", err)
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongoexport --help' for more information")
os.Exit(util.ExitBadOptions)
}
if len(args) != 0 {
log.Logf(log.Always, "error parsing command line: too many positional options: %v", args)
log.Logf(log.Always, "too many positional arguments: %v", args)
log.Logf(log.Always, "try 'mongoexport --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand All @@ -50,7 +51,7 @@ func main() {

provider, err := db.NewSessionProvider(*opts)
if err != nil {
log.Logf(log.Always, "error connecting to host: %v\n", err)
log.Logf(log.Always, "error connecting to host: %v", err)
os.Exit(util.ExitError)
}
exporter := mongoexport.MongoExport{
Expand All @@ -63,13 +64,13 @@ func main() {
err = exporter.ValidateSettings()
if err != nil {
log.Logf(log.Always, "error validating settings: %v", err)
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongoexport --help' for more information")
os.Exit(util.ExitError)
}

numDocs, err := exporter.Export()
if err != nil {
log.Logf(log.Always, "Failed: %v\n", err)
log.Logf(log.Always, "Failed: %v", err)
os.Exit(util.ExitError)
}

Expand Down
10 changes: 5 additions & 5 deletions mongofiles/main/mongofiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func main() {
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v", err)
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongofiles --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand All @@ -62,7 +62,7 @@ func main() {
// create a session provider to connect to the db
provider, err := db.NewSessionProvider(*opts)
if err != nil {
log.Logf(log.Always, "error connecting to host: %v\n", err)
log.Logf(log.Always, "error connecting to host: %v", err)
os.Exit(util.ExitError)
}
mf := mongofiles.MongoFiles{
Expand All @@ -72,9 +72,9 @@ func main() {
}

if err := mf.ValidateCommand(args); err != nil {
log.Logf(log.Always, "Invalid command: %v", err)
opts.PrintHelp(true)
os.Exit(util.ExitError)
log.Logf(log.Always, "%v", err)
log.Logf(log.Always, "try 'mongofiles --help' for more information")
os.Exit(util.ExitBadOptions)
}

output, err := mf.Run(true)
Expand Down
6 changes: 3 additions & 3 deletions mongoimport/main/mongoimport.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func main() {
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v", err)
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongoimport --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand All @@ -51,7 +51,7 @@ func main() {
// create a session provider to connect to the db
sessionProvider, err := db.NewSessionProvider(*opts)
if err != nil {
log.Logf(log.Always, "error connecting to host: %v\n", err)
log.Logf(log.Always, "error connecting to host: %v", err)
os.Exit(util.ExitError)
}

Expand All @@ -64,7 +64,7 @@ func main() {

if err = mongoImport.ValidateSettings(args); err != nil {
log.Logf(log.Always, "error validating settings: %v", err)
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongoimport --help' for more information")
os.Exit(util.ExitError)
}

Expand Down
21 changes: 13 additions & 8 deletions mongooplog/main/mongooplog.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"fmt"
"github.com/mongodb/mongo-tools/common/db"
"github.com/mongodb/mongo-tools/common/log"
"github.com/mongodb/mongo-tools/common/options"
Expand All @@ -22,10 +21,16 @@ func main() {
opts.AddOptions(sourceOpts)

// parse the command line options
_, err := opts.Parse()
args, err := opts.Parse()
if err != nil {
fmt.Printf("error parsing command line: %v\n\n", err)
fmt.Printf("try 'mongooplog --help' for more information\n")
log.Logf(log.Always, "error parsing command line options: %v", err)
log.Logf(log.Always, "try 'mongooplog --help' for more information")
os.Exit(util.ExitBadOptions)
}

if len(args) != 0 {
log.Logf(log.Always, "positional arguments not allowed: %v", args)
log.Logf(log.Always, "try 'mongooplog --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand All @@ -49,14 +54,14 @@ func main() {

// validate the mongooplog options
if err := sourceOpts.Validate(); err != nil {
fmt.Printf("command line error: %v\n", err)
log.Logf(log.Always, "command line error: %v", err)
os.Exit(util.ExitBadOptions)
}

// create a session provider for the destination server
sessionProviderTo, err := db.NewSessionProvider(*opts)
if err != nil {
fmt.Printf("error connecting to destination host: %v", err)
log.Logf(log.Always, "error connecting to destination host: %v", err)
os.Exit(util.ExitError)
}

Expand All @@ -65,7 +70,7 @@ func main() {
opts.Connection.Port = ""
sessionProviderFrom, err := db.NewSessionProvider(*opts)
if err != nil {
fmt.Printf("error connecting to source host: %v\n", err)
log.Logf(log.Always, "error connecting to source host: %v", err)
os.Exit(util.ExitError)
}

Expand All @@ -79,7 +84,7 @@ func main() {

// kick it off
if err := oplog.Run(); err != nil {
fmt.Printf("error: %v\n", err)
log.Logf(log.Always, "error: %v", err)
os.Exit(util.ExitError)
}

Expand Down
10 changes: 6 additions & 4 deletions mongorestore/main/mongorestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,16 @@ func main() {

extraArgs, err := opts.Parse()
if err != nil {
fmt.Printf("error parsing command line options: %v\n\n", err)
fmt.Printf("try 'mongorestore --help' for more information\n")
log.Logf(log.Always, "error parsing command line options: %v", err)
log.Logf(log.Always, "try 'mongorestore --help' for more information")
os.Exit(util.ExitBadOptions)
}

// print help or version info, if specified
if opts.PrintHelp(false) {
return
}

if opts.PrintVersion() {
return
}
Expand All @@ -39,7 +40,8 @@ func main() {

targetDir, err := getTargetDirFromArgs(extraArgs, inputOpts.Directory)
if err != nil {
fmt.Printf("error parsing command line options: %v\n", err)
log.Logf(log.Always, "%v", err)
log.Logf(log.Always, "try 'mongorestore --help' for more information")
os.Exit(util.ExitBadOptions)
}
targetDir = util.ToUniversalPath(targetDir)
Expand All @@ -51,7 +53,7 @@ func main() {

provider, err := db.NewSessionProvider(*opts)
if err != nil {
log.Logf(log.Always, "error connecting to host: %v\n", err)
log.Logf(log.Always, "error connecting to host: %v", err)
os.Exit(util.ExitError)
}
restore := mongorestore.MongoRestore{
Expand Down
21 changes: 10 additions & 11 deletions mongostat/main/mongostat.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"fmt"
"github.com/mongodb/mongo-tools/common/log"
"github.com/mongodb/mongo-tools/common/options"
"github.com/mongodb/mongo-tools/common/signals"
Expand All @@ -24,29 +23,29 @@ func main() {
statOpts := &mongostat.StatOptions{}
opts.AddOptions(statOpts)

extra, err := opts.Parse()
args, err := opts.Parse()
if err != nil {
fmt.Fprintf(os.Stderr, "Invalid options: %v\n", err)
opts.PrintHelp(true)
log.Logf(log.Always, "error parsing command line options: %v", err)
log.Logf(log.Always, "try 'mongostat --help' for more information")
os.Exit(util.ExitBadOptions)
}

log.SetVerbosity(opts.Verbosity)

sleepInterval := 1
if len(extra) > 0 {
if len(extra) != 1 {
fmt.Fprintf(os.Stderr, "Too many positional operators\n")
opts.PrintHelp(true)
if len(args) > 0 {
if len(args) != 1 {
log.Logf(log.Always, "too many positional arguments: %v", args)
log.Logf(log.Always, "try 'mongostat --help' for more information")
os.Exit(util.ExitBadOptions)
}
sleepInterval, err = strconv.Atoi(extra[0])
sleepInterval, err = strconv.Atoi(args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "Bad sleep interval: %v\n", extra[0])
log.Logf(log.Always, "invalid sleep interval: %v", args[0])
os.Exit(util.ExitBadOptions)
}
if sleepInterval < 1 {
fmt.Fprintf(os.Stderr, "Sleep interval must be at least 1 second\n")
log.Logf(log.Always, "sleep interval must be at least 1 second")
os.Exit(util.ExitBadOptions)
}
}
Expand Down
17 changes: 9 additions & 8 deletions mongotop/main/mongotop.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ func main() {
outputOpts := &mongotop.Output{}
opts.AddOptions(outputOpts)

extra, err := opts.Parse()
args, err := opts.Parse()
if err != nil {
log.Logf(log.Always, "error parsing command line options: %v", err)
log.Logf(log.Always, "try 'mongotop --help' for more information")
os.Exit(util.ExitBadOptions)
}

Expand All @@ -40,22 +41,22 @@ func main() {
return
}

if len(extra) > 1 {
if len(args) > 1 {
log.Logf(log.Always, "too many positional arguments")
opts.PrintHelp(true)
log.Logf(log.Always, "try 'mongotop --help' for more information")
os.Exit(util.ExitBadOptions)
}

sleeptime := 1 // default to 1 second sleep time
if len(extra) > 0 {
sleeptime, err = strconv.Atoi(extra[0])
if len(args) > 0 {
sleeptime, err = strconv.Atoi(args[0])
if err != nil || sleeptime <= 0 {
log.Logf(log.Always, "bad sleep time: %v", extra[0])
log.Logf(log.Always, "invalid sleep time: %v", args[0])
os.Exit(util.ExitBadOptions)
}
}
if outputOpts.RowCount < 0 {
log.Logf(log.Always, "invalid value for row count: %v", outputOpts.RowCount)
log.Logf(log.Always, "invalid value for --rowcount: %v", outputOpts.RowCount)
os.Exit(util.ExitBadOptions)
}

Expand All @@ -72,7 +73,7 @@ func main() {
// create a session provider to connect to the db
sessionProvider, err := db.NewSessionProvider(*opts)
if err != nil {
log.Logf(log.Always, "error connecting to host: %v\n", err)
log.Logf(log.Always, "error connecting to host: %v", err)
os.Exit(util.ExitError)
}

Expand Down

0 comments on commit aa99954

Please sign in to comment.