diff --git a/cmd/ipfs/add.go b/cmd/ipfs/add.go index 91eb1e6e4..5fbe7dd24 100644 --- a/cmd/ipfs/add.go +++ b/cmd/ipfs/add.go @@ -29,4 +29,9 @@ func init() { cmdIpfsAdd.Flag.Bool("r", false, "add objects recursively") } -var addCmd = MakeCommand("add", []string{"r"}, commands.Add) +var addCmd = makeCommand(command{ + name: "add", + args: 1, + flags: []string{"r"}, + cmdFn: commands.Add, +}) diff --git a/cmd/ipfs/cat.go b/cmd/ipfs/cat.go index d7ab50028..add0d9b95 100644 --- a/cmd/ipfs/cat.go +++ b/cmd/ipfs/cat.go @@ -18,7 +18,12 @@ var cmdIpfsCat = &commander.Command{ Flag: *flag.NewFlagSet("ipfs-cat", flag.ExitOnError), } -var catCmd = MakeCommand("cat", nil, commands.Cat) +var catCmd = makeCommand(command{ + name: "cat", + args: 1, + flags: nil, + cmdFn: commands.Cat, +}) /* func catCmd(c *commander.Command, inp []string) error { diff --git a/cmd/ipfs/gen.go b/cmd/ipfs/gen.go index 5c7d1aa40..16f89a626 100644 --- a/cmd/ipfs/gen.go +++ b/cmd/ipfs/gen.go @@ -1,26 +1,34 @@ package main import ( - "errors" "fmt" "os" "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander" - "github.com/jbenet/go-ipfs/config" "github.com/jbenet/go-ipfs/core/commands" "github.com/jbenet/go-ipfs/daemon" u "github.com/jbenet/go-ipfs/util" ) -// CommanderFunc is a function that can be passed into the Commander library as -// a command handler. Defined here because commander lacks this definition. -type CommanderFunc func(*commander.Command, []string) error +// command is the descriptor of an ipfs daemon command. +// Used with makeCommand to proxy over commands via the daemon. +type command struct { + name string + args int + flags []string + online bool + cmdFn commands.CmdFunc +} -// MakeCommand Wraps a commands.CmdFunc so that it may be safely run by the +// commanderFunc is a function that can be passed into the Commander library as +// a command handler. Defined here because commander lacks this definition. +type commanderFunc func(*commander.Command, []string) error + +// makeCommand Wraps a commands.CmdFunc so that it may be safely run by the // commander library -func MakeCommand(cmdName string, expargs []string, cmdFn commands.CmdFunc) CommanderFunc { +func makeCommand(cmdDesc command) commanderFunc { return func(c *commander.Command, inp []string) error { - if len(inp) < 1 { + if len(inp) < cmdDesc.args { u.POut(c.Long) return nil } @@ -29,34 +37,25 @@ func MakeCommand(cmdName string, expargs []string, cmdFn commands.CmdFunc) Comma return err } - confapi, err := config.ReadConfigKey(confdir+"/config", "Addresses.API") - if err != nil { - return err - } - - apiaddr, ok := confapi.(string) - if !ok { - return errors.New("ApiAddress in config file was not a string") - } - cmd := daemon.NewCommand() - cmd.Command = cmdName + cmd.Command = cmdDesc.name cmd.Args = inp - for _, a := range expargs { + for _, a := range cmdDesc.flags { cmd.Opts[a] = c.Flag.Lookup(a).Value.Get() } - err = daemon.SendCommand(cmd, apiaddr) + + err = daemon.SendCommand(cmd, confdir) if err != nil { fmt.Printf("Executing command locally: %s", err) // Do locally - n, err := localNode(confdir, false) + n, err := localNode(confdir, cmdDesc.online) if err != nil { fmt.Println("Local node creation failed.") return err } - return cmdFn(n, cmd.Args, cmd.Opts, os.Stdout) + return cmdDesc.cmdFn(n, cmd.Args, cmd.Opts, os.Stdout) } return nil } diff --git a/cmd/ipfs/ls.go b/cmd/ipfs/ls.go index aed286dea..0a2e8aff9 100644 --- a/cmd/ipfs/ls.go +++ b/cmd/ipfs/ls.go @@ -21,4 +21,9 @@ var cmdIpfsLs = &commander.Command{ Flag: *flag.NewFlagSet("ipfs-ls", flag.ExitOnError), } -var lsCmd = MakeCommand("ls", nil, commands.Ls) +var lsCmd = makeCommand(command{ + name: "ls", + args: 1, + flags: nil, + cmdFn: commands.Ls, +}) diff --git a/cmd/ipfs/pin.go b/cmd/ipfs/pin.go index 5919168b1..007759759 100644 --- a/cmd/ipfs/pin.go +++ b/cmd/ipfs/pin.go @@ -23,4 +23,9 @@ func init() { cmdIpfsPin.Flag.Int("d", 1, "recursive depth") } -var pinCmd = MakeCommand("pin", []string{"r", "d"}, commands.Pin) +var pinCmd = makeCommand(command{ + name: "pin", + args: 1, + flags: []string{"r", "d"}, + cmdFn: commands.Pin, +}) diff --git a/cmd/ipfs/refs.go b/cmd/ipfs/refs.go index f86e51dbf..b3aaf85fc 100644 --- a/cmd/ipfs/refs.go +++ b/cmd/ipfs/refs.go @@ -28,4 +28,9 @@ func init() { cmdIpfsRefs.Flag.Bool("u", false, "unique: list each ref only once") } -var refCmd = MakeCommand("refs", []string{"r", "u"}, commands.Refs) +var refCmd = makeCommand(command{ + name: "refs", + args: 1, + flags: []string{"r", "u"}, + cmdFn: commands.Refs, +})