Skip to content

Commit

Permalink
Move all subcommands out of main into proper folders
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanfrey authored and rigelrozanski committed Mar 1, 2018
1 parent 7779eec commit bae7cec
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 57 deletions.
4 changes: 4 additions & 0 deletions client/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ const (
FlagName = "name"
)

// LineBreak can be included in a command list to provide a blank line
// to help with readability
var LineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}}

// GetCommands adds common flags to query commands
func GetCommands(cmds ...*cobra.Command) []*cobra.Command {
for _, c := range cmds {
Expand Down
5 changes: 2 additions & 3 deletions client/keys/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@
package keys

import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/spf13/cobra"
)

var lineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}}

// Commands registers a sub-tree of commands to interact with
// local private key storage.
func Commands() *cobra.Command {
Expand All @@ -36,7 +35,7 @@ func Commands() *cobra.Command {
addKeyCommand(),
listKeysCmd,
showKeysCmd,
lineBreak,
client.LineBreak,
deleteKeyCommand(),
updateKeyCommand(),
)
Expand Down
36 changes: 36 additions & 0 deletions client/lcd/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package lcd

import (
"errors"

"github.com/spf13/cobra"

"github.com/cosmos/cosmos-sdk/client"
)

const (
flagBind = "bind"
flagCORS = "cors"
)

// XXX: remove this when not needed
func todoNotImplemented(_ *cobra.Command, _ []string) error {
return errors.New("TODO: Command not yet implemented")
}

// ServeCommand will generate a long-running rest server
// (aka Light Client Daemon) that exposes functionality similar
// to the cli, but over rest
func ServeCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "serve",
Short: "Start LCD (light-client daemon), a local REST server",
RunE: todoNotImplemented,
}
// TODO: handle unix sockets also?
cmd.Flags().StringP(flagBind, "b", "localhost:1317", "Interface and port that server binds to")
cmd.Flags().String(flagCORS, "", "Set to domains that can make CORS requests (* for all)")
cmd.Flags().StringP(client.FlagChainID, "c", "", "ID of chain we connect to")
cmd.Flags().StringP(client.FlagNode, "n", "tcp://localhost:46657", "Node to connect to")
return cmd
}
55 changes: 9 additions & 46 deletions examples/basecoin/cmd/basecli/client.go → client/rpc/root.go
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
package main
package rpc

import (
"github.com/pkg/errors"
"github.com/spf13/cobra"

"github.com/cosmos/cosmos-sdk/client"
)

// XXX: remove this when not needed
func todoNotImplemented(_ *cobra.Command, _ []string) error {
return errors.New("TODO: Command not yet implemented")
}

const (
// one of the following should be provided to verify the connection
flagGenesis = "genesis"
flagCommit = "commit"
flagValHash = "validator-set"

flagSelect = "select"
flagTags = "tag"
flagAny = "any"

flagBind = "bind"
flagCORS = "cors"
)

var (
Expand All @@ -28,19 +29,13 @@ var (
}
)

// AddClientCommands returns a sub-tree of all basic client commands
//
// Call AddGetCommand and AddPostCommand to add custom txs and queries
func AddClientCommands(cmd *cobra.Command) {
// AddCommands adds a number of rpc-related subcommands
func AddCommands(cmd *cobra.Command) {
cmd.AddCommand(
initClientCommand(),
statusCmd,
blockCommand(),
validatorCommand(),
lineBreak,
txSearchCommand(),
txCommand(),
lineBreak,
)
}

Expand Down Expand Up @@ -76,35 +71,3 @@ func validatorCommand() *cobra.Command {
}
return cmd
}

func serveCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "serve",
Short: "Start LCD (light-client daemon), a local REST server",
RunE: todoNotImplemented,
}
// TODO: handle unix sockets also?
cmd.Flags().StringP(flagBind, "b", "localhost:1317", "Interface and port that server binds to")
cmd.Flags().String(flagCORS, "", "Set to domains that can make CORS requests (* for all)")
return cmd
}

func txSearchCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "txs",
Short: "Search for all transactions that match the given tags",
RunE: todoNotImplemented,
}
cmd.Flags().StringSlice(flagTags, nil, "Tags that must match (may provide multiple)")
cmd.Flags().Bool(flagAny, false, "Return transactions that match ANY tag, rather than ALL")
return cmd
}

func txCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "tx <hash>",
Short: "Matches this txhash over all committed blocks",
RunE: todoNotImplemented,
}
return cmd
}
45 changes: 45 additions & 0 deletions client/tx/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package tx

import (
"errors"

"github.com/spf13/cobra"
)

const (
flagTags = "tag"
flagAny = "any"
)

// XXX: remove this when not needed
func todoNotImplemented(_ *cobra.Command, _ []string) error {
return errors.New("TODO: Command not yet implemented")
}

// AddCommands adds a number of tx-query related subcommands
func AddCommands(cmd *cobra.Command) {
cmd.AddCommand(
txSearchCommand(),
txCommand(),
)
}

func txSearchCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "txs",
Short: "Search for all transactions that match the given tags",
RunE: todoNotImplemented,
}
cmd.Flags().StringSlice(flagTags, nil, "Tags that must match (may provide multiple)")
cmd.Flags().Bool(flagAny, false, "Return transactions that match ANY tag, rather than ALL")
return cmd
}

func txCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "tx <hash>",
Short: "Matches this txhash over all committed blocks",
RunE: todoNotImplemented,
}
return cmd
}
20 changes: 12 additions & 8 deletions examples/basecoin/cmd/basecli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import (

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/keys"
"github.com/cosmos/cosmos-sdk/client/lcd"
"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/version"
bankcmd "github.com/cosmos/cosmos-sdk/x/bank/commands"
)
Expand All @@ -20,8 +23,6 @@ var (
Use: "basecli",
Short: "Basecoin light-client",
}

lineBreak = &cobra.Command{Run: func(*cobra.Command, []string) {}}
)

func todoNotImplemented(_ *cobra.Command, _ []string) error {
Expand All @@ -32,10 +33,13 @@ func main() {
// disable sorting
cobra.EnableCommandSorting = false

// generic client commands
AddClientCommands(basecliCmd)
// add standard rpc, and tx commands
rpc.AddCommands(basecliCmd)
basecliCmd.AddCommand(client.LineBreak)
tx.AddCommands(basecliCmd)
basecliCmd.AddCommand(client.LineBreak)

// query/post commands (custom to binary)
// add query/post commands (custom to binary)
basecliCmd.AddCommand(
client.GetCommands(
bankcmd.GetAccountCmd("main"),
Expand All @@ -47,10 +51,10 @@ func main() {

// add proxy, version and key info
basecliCmd.AddCommand(
lineBreak,
serveCommand(),
client.LineBreak,
lcd.ServeCommand(),
keys.Commands(),
lineBreak,
client.LineBreak,
version.VersionCmd,
)

Expand Down

0 comments on commit bae7cec

Please sign in to comment.