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
+}