From d5369a084e502be186c66d22005336b7ada6271f Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Fri, 30 Oct 2020 07:25:36 -0600 Subject: [PATCH] Improve RBF CLI help --- cmd/rbf.go | 59 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/cmd/rbf.go b/cmd/rbf.go index 142de65af..5abcf9db5 100644 --- a/cmd/rbf.go +++ b/cmd/rbf.go @@ -17,6 +17,7 @@ package cmd import ( "context" "errors" + "fmt" "io" "strconv" @@ -42,14 +43,21 @@ Provides a set of commands for inspecting RBF data files. func newRBFCheckCommand(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command { c := ctl.NewRBFCheckCommand(stdin, stdout, stderr) cmd := &cobra.Command{ - Use: "check", + Use: "check [flags] PATH", Short: "Run consistency check on RBF data.", Long: ` Executes a consistency check on an RBF data directory. `, - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { + Args: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return fmt.Errorf("data directory path required") + } else if len(args) > 1 { + return fmt.Errorf("too many command line arguments") + } c.Path = args[0] + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { return c.Run(context.Background()) }, } @@ -59,13 +67,18 @@ Executes a consistency check on an RBF data directory. func newRBFDumpCommand(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command { c := ctl.NewRBFDumpCommand(stdin, stdout, stderr) cmd := &cobra.Command{ - Use: "dump", + Use: "dump [flags] PATH PGNO [PGNO...]", Short: "Prints RBF raw page data", Long: ` Dumps the raw hex data for one or more RBF pages. `, - Args: cobra.MinimumNArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { + Args: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return fmt.Errorf("data directory path required") + } else if len(args) == 1 { + return fmt.Errorf("page number required") + } + c.Path = args[0] for _, arg := range args[1:] { @@ -76,6 +89,9 @@ Dumps the raw hex data for one or more RBF pages. c.Pgnos = append(c.Pgnos, uint32(pgno)) } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { return c.Run(context.Background()) }, } @@ -85,14 +101,21 @@ Dumps the raw hex data for one or more RBF pages. func newRBFPagesCommand(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command { c := ctl.NewRBFPagesCommand(stdin, stdout, stderr) cmd := &cobra.Command{ - Use: "pages", + Use: "pages [flags] PATH", Short: "Prints metadata for the list of all pages", Long: ` Prints a line for every page in the database with its type/status. `, - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { + Args: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return fmt.Errorf("data directory path required") + } else if len(args) > 1 { + return fmt.Errorf("too many command line arguments") + } c.Path = args[0] + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { return c.Run(context.Background()) }, } @@ -105,13 +128,18 @@ Prints a line for every page in the database with its type/status. func newRBFPageCommand(stdin io.Reader, stdout, stderr io.Writer) *cobra.Command { c := ctl.NewRBFPageCommand(stdin, stdout, stderr) cmd := &cobra.Command{ - Use: "page", - Short: "Prints data for a single page", + Use: "page [flags] PATH PGNO [PGNO...]", + Short: "Prints data for a page(s)", Long: ` -Prints the header & cell data for a single page. +Prints the header & cell data for one or more pages. `, - Args: cobra.MinimumNArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { + Args: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return fmt.Errorf("data directory path required") + } else if len(args) == 1 { + return fmt.Errorf("page number required") + } + c.Path = args[0] for _, arg := range args[1:] { @@ -122,6 +150,9 @@ Prints the header & cell data for a single page. c.Pgnos = append(c.Pgnos, uint32(pgno)) } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { return c.Run(context.Background()) }, }