@cryptotaxi247 / kubo / commits / 9e4b8586a

Add config flag to cmd line interface

Jeromy committed Sep 17, 2014 at 02:49 UTC 9e4b8586a94e34e0e48bd2eece257d5ce5775e5f
7 files changed +106 -55
cmd/ipfs/add.go
+2 -1
@@ -46,7 +46,8 @@ func addCmd(c *commander.Command, inp []string) error {
46 err := daemon.SendCommand(cmd, "localhost:12345")
47 if err != nil {
48 // Do locally
49 - n, err := localNode(false)
49 + conf := getConfig(c.Parent)
50 + n, err := localNode(conf, false)
51 if err != nil {
52 return err
53 }
cmd/ipfs/cat.go
+2 -1
@@ -39,7 +39,8 @@ func catCmd(c *commander.Command, inp []string) error {
39
40 err = daemon.SendCommand(com, "localhost:12345")
41 if err != nil {
42 - n, err := localNode(false)
42 + conf := getConfig(c.Parent)
43 + n, err := localNode(conf, false)
44 if err != nil {
45 return err
46 }
cmd/ipfs/ipfs.go
+18 -3
@@ -6,7 +6,7 @@ import (
6
7 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
8 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
9 - config "github.com/jbenet/go-ipfs/config"
9 + "github.com/jbenet/go-ipfs/config"
10 core "github.com/jbenet/go-ipfs/core"
11 u "github.com/jbenet/go-ipfs/util"
12 )
@@ -51,6 +51,10 @@ Use "ipfs help <command>" for more information about a command.
51 Flag: *flag.NewFlagSet("ipfs", flag.ExitOnError),
52 }
53
54 +func init() {
55 + CmdIpfs.Flag.String("c", "~/.go-ipfs/config", "specify config file")
56 +}
57 +
58 func ipfsCmd(c *commander.Command, args []string) error {
59 u.POut(c.Long)
60 return nil
@@ -68,12 +72,23 @@ func main() {
72 return
73 }
74
71 -func localNode(online bool) (*core.IpfsNode, error) {
75 +func localNode(conf string, online bool) (*core.IpfsNode, error) {
76 //todo implement config file flag
73 - cfg, err := config.Load("")
77 + cfg, err := config.Load(conf)
78 if err != nil {
79 return nil, err
80 }
81
82 return core.NewIpfsNode(cfg, online)
83 }
84 +
85 +// Gets the config "-c" flag from the command, or returns
86 +// the empty string
87 +func getConfig(c *commander.Command) string {
88 + conf := c.Flag.Lookup("c").Value.Get()
89 + confStr, ok := conf.(string)
90 + if ok {
91 + return confStr
92 + }
93 + return ""
94 +}
cmd/ipfs/ls.go
+2 -3
@@ -1,7 +1,6 @@
1 package main
2
3 import (
4 - "fmt"
4 "os"
5
6 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
@@ -37,8 +36,8 @@ func lsCmd(c *commander.Command, inp []string) error {
36 com.Args = inp
37 err := daemon.SendCommand(com, "localhost:12345")
38 if err != nil {
40 - fmt.Println(err)
41 - n, err := localNode(false)
39 + conf := getConfig(c.Parent)
40 + n, err := localNode(conf, false)
41 if err != nil {
42 return err
43 }
cmd/ipfs/mount_unix.go
+3 -4
@@ -27,19 +27,18 @@ var cmdIpfsMount = &commander.Command{
27 }
28
29 func mountCmd(c *commander.Command, inp []string) error {
30 - u.Debug = true
30 + u.Debug = false
31 if len(inp) < 1 || len(inp[0]) == 0 {
32 u.POut(c.Long)
33 return nil
34 }
35 - fmt.Println("wtf.")
35
37 - n, err := localNode(true)
36 + conf := getConfig(c.Parent)
37 + n, err := localNode(conf, true)
38 if err != nil {
39 return err
40 }
41
42 - fmt.Println("starting new daemon listener...")
42 dl, err := daemon.NewDaemonListener(n, "localhost:12345")
43 if err != nil {
44 return err
cmd/ipfs/refs.go
+14 -43
@@ -1,10 +1,12 @@
1 package main
2
3 import (
4 + "os"
5 +
6 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
7 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
6 - mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
7 - mdag "github.com/jbenet/go-ipfs/merkledag"
8 + commands "github.com/jbenet/go-ipfs/core/commands"
9 + "github.com/jbenet/go-ipfs/daemon"
10 u "github.com/jbenet/go-ipfs/util"
11 )
12
@@ -36,52 +38,21 @@ func refCmd(c *commander.Command, inp []string) error {
38 return nil
39 }
40
39 - n, err := localNode(false)
41 + cmd := daemon.NewCommand()
42 + cmd.Command = "refs"
43 + cmd.Args = inp
44 + cmd.Opts["r"] = c.Flag.Lookup("r").Value.Get()
45 + cmd.Opts["u"] = c.Flag.Lookup("u").Value.Get()
46 + err := daemon.SendCommand(cmd, "localhost:12345")
47 if err != nil {
41 - return err
42 - }
43 -
44 - recursive := c.Flag.Lookup("r").Value.Get().(bool)
45 - unique := c.Flag.Lookup("u").Value.Get().(bool)
46 - refsSeen := map[u.Key]bool{}
47 -
48 - printRef := func(h mh.Multihash) {
49 - if unique {
50 - _, found := refsSeen[u.Key(h)]
51 - if found {
52 - return
53 - }
54 - refsSeen[u.Key(h)] = true
55 - }
56 -
57 - u.POut("%s\n", h.B58String())
58 - }
59 -
60 - var printRefs func(nd *mdag.Node, recursive bool)
61 - printRefs = func(nd *mdag.Node, recursive bool) {
62 -
63 - for _, link := range nd.Links {
64 - printRef(link.Hash)
65 -
66 - if recursive {
67 - nd, err := n.DAG.Get(u.Key(link.Hash))
68 - if err != nil {
69 - u.PErr("error: cannot retrieve %s (%s)\n", link.Hash.B58String(), err)
70 - return
71 - }
72 -
73 - printRefs(nd, recursive)
74 - }
75 - }
76 - }
77 -
78 - for _, fn := range inp {
79 - nd, err := n.Resolver.ResolvePath(fn)
48 + // Do locally
49 + conf := getConfig(c.Parent)
50 + n, err := localNode(conf, false)
51 if err != nil {
52 return err
53 }
54
84 - printRefs(nd, recursive)
55 + return commands.Refs(n, cmd.Args, cmd.Opts, os.Stdout)
56 }
57 return nil
58 }
core/commands/refs.go new
+65
@@ -0,0 +1,65 @@
1 +package commands
2 +
3 +import (
4 + "io"
5 +
6 + mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
7 + "github.com/jbenet/go-ipfs/core"
8 + mdag "github.com/jbenet/go-ipfs/merkledag"
9 + u "github.com/jbenet/go-ipfs/util"
10 +)
11 +
12 +func Refs(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
13 + unique, ok := opts["u"].(bool)
14 + if !ok {
15 + unique = false
16 + }
17 +
18 + recursive, ok := opts["r"].(bool)
19 + if !ok {
20 + recursive = false
21 + }
22 +
23 + var refsSeen map[u.Key]bool
24 + if unique {
25 + refsSeen = make(map[u.Key]bool)
26 + }
27 +
28 + for _, fn := range args {
29 + nd, err := n.Resolver.ResolvePath(fn)
30 + if err != nil {
31 + return err
32 + }
33 +
34 + printRefs(n, nd, refsSeen, recursive)
35 + }
36 + return nil
37 +}
38 +
39 +func printRefs(n *core.IpfsNode, nd *mdag.Node, refSeen map[u.Key]bool, recursive bool) {
40 + for _, link := range nd.Links {
41 + printRef(link.Hash, refSeen)
42 +
43 + if recursive {
44 + nd, err := n.DAG.Get(u.Key(link.Hash))
45 + if err != nil {
46 + u.PErr("error: cannot retrieve %s (%s)\n", link.Hash.B58String(), err)
47 + return
48 + }
49 +
50 + printRefs(n, nd, refSeen, recursive)
51 + }
52 + }
53 +}
54 +
55 +func printRef(h mh.Multihash, refsSeen map[u.Key]bool) {
56 + if refsSeen != nil {
57 + _, found := refsSeen[u.Key(h)]
58 + if found {
59 + return
60 + }
61 + refsSeen[u.Key(h)] = true
62 + }
63 +
64 + u.POut("%s\n", h.B58String())
65 +}