refactor daemon code, moved commands to core/commands
Jeromy committed
Sep 12, 2014 at 21:29 UTC
b55a5078a837b72a8f17d61952fbf9138dd5d42f
8 files changed
+112
-70
cmd/ipfs/add.go
+2
-1
@@ -6,6 +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
+ "github.com/jbenet/go-ipfs/core/commands"
10
"github.com/jbenet/go-ipfs/daemon"
11
u "github.com/jbenet/go-ipfs/util"
12
)
@@ -50,7 +51,7 @@ func addCmd(c *commander.Command, inp []string) error {
51
return err
52
}
53
53
- err := daemon.ExecuteCommand(cmd, n, os.Stdout)
54
+ err = commands.Add(n, cmd.Args, cmd.Opts, os.Stdout)
55
if err != nil {
56
fmt.Println(err)
57
}
cmd/ipfs/cat.go
+2
-1
@@ -6,6 +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
+ "github.com/jbenet/go-ipfs/core/commands"
10
"github.com/jbenet/go-ipfs/daemon"
11
u "github.com/jbenet/go-ipfs/util"
12
)
@@ -39,7 +40,7 @@ func catCmd(c *commander.Command, inp []string) error {
40
return err
41
}
42
42
- err := daemon.ExecuteCommand(com, n, os.Stdout)
43
+ err = commands.Cat(n, com.Args, com.Opts, os.Stdout)
44
if err != nil {
45
fmt.Println(err)
46
}
cmd/ipfs/ls.go
+2
-1
@@ -6,6 +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
+ "github.com/jbenet/go-ipfs/core/commands"
10
"github.com/jbenet/go-ipfs/daemon"
11
u "github.com/jbenet/go-ipfs/util"
12
)
@@ -42,7 +43,7 @@ func lsCmd(c *commander.Command, inp []string) error {
43
return err
44
}
45
45
- err := daemon.ExecuteCommand(com, n, os.Stdout)
46
+ err = commands.Ls(n, com.Args, com.Opts, os.Stdout)
47
if err != nil {
48
fmt.Println(err)
49
}
core/commands/add.go
+22
@@ -2,6 +2,7 @@ package commands
2
3
import (
4
"fmt"
5
+ "io"
6
"io/ioutil"
7
"os"
8
"path/filepath"
@@ -15,6 +16,27 @@ import (
16
// Error indicating the max depth has been exceded.
17
var ErrDepthLimitExceeded = fmt.Errorf("depth limit exceeded")
18
19
+func Add(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
20
+ depth := 1
21
+ if r, ok := opts["r"].(bool); r && ok {
22
+ depth = -1
23
+ }
24
+ for _, path := range args {
25
+ nd, err := AddPath(n, path, depth)
26
+ if err != nil {
27
+ return fmt.Errorf("addFile error: %v", err)
28
+ }
29
+
30
+ k, err := nd.Key()
31
+ if err != nil {
32
+ return fmt.Errorf("addFile error: %v", err)
33
+ }
34
+
35
+ fmt.Fprintf(out, "Added node: %s = %s\n", path, k.Pretty())
36
+ }
37
+ return nil
38
+}
39
+
40
func AddPath(n *core.IpfsNode, fpath string, depth int) (*dag.Node, error) {
41
if depth == 0 {
42
return nil, ErrDepthLimitExceeded
core/commands/cat.go
new
+29
@@ -0,0 +1,29 @@
1
+package commands
2
+
3
+import (
4
+ "fmt"
5
+ "io"
6
+
7
+ "github.com/jbenet/go-ipfs/core"
8
+ mdag "github.com/jbenet/go-ipfs/merkledag"
9
+)
10
+
11
+func Cat(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
12
+ for _, fn := range args {
13
+ dagnode, err := n.Resolver.ResolvePath(fn)
14
+ if err != nil {
15
+ return fmt.Errorf("catFile error: %v", err)
16
+ }
17
+
18
+ read, err := mdag.NewDagReader(dagnode, n.DAG)
19
+ if err != nil {
20
+ return fmt.Errorf("cat error: %v", err)
21
+ }
22
+
23
+ _, err = io.Copy(out, read)
24
+ if err != nil {
25
+ return fmt.Errorf("cat error: %v", err)
26
+ }
27
+ }
28
+ return nil
29
+}
core/commands/ls.go
new
+22
@@ -0,0 +1,22 @@
1
+package commands
2
+
3
+import (
4
+ "fmt"
5
+ "io"
6
+
7
+ "github.com/jbenet/go-ipfs/core"
8
+)
9
+
10
+func Ls(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
11
+ for _, fn := range args {
12
+ dagnode, err := n.Resolver.ResolvePath(fn)
13
+ if err != nil {
14
+ return fmt.Errorf("ls error: %v", err)
15
+ }
16
+
17
+ for _, link := range dagnode.Links {
18
+ fmt.Fprintf(out, "%s %d %s\n", link.Hash.B58String(), link.Size, link.Name)
19
+ }
20
+ }
21
+ return nil
22
+}
core/commands/pin.go
new
+23
@@ -0,0 +1,23 @@
1
+package commands
2
+
3
+import (
4
+ "fmt"
5
+ "io"
6
+
7
+ "github.com/jbenet/go-ipfs/core"
8
+)
9
+
10
+func Pin(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
11
+ for _, fn := range args {
12
+ dagnode, err := n.Resolver.ResolvePath(fn)
13
+ if err != nil {
14
+ return fmt.Errorf("pin error: %v", err)
15
+ }
16
+
17
+ err = n.PinDagNode(dagnode)
18
+ if err != nil {
19
+ return fmt.Errorf("pin: %v", err)
20
+ }
21
+ }
22
+ return nil
23
+}
daemon/daemon.go
+10
-67
@@ -3,12 +3,10 @@ package daemon
3
import (
4
"encoding/json"
5
"fmt"
6
- "io"
6
"net"
7
8
core "github.com/jbenet/go-ipfs/core"
10
- commands "github.com/jbenet/go-ipfs/core/commands"
11
- dag "github.com/jbenet/go-ipfs/merkledag"
9
+ "github.com/jbenet/go-ipfs/core/commands"
10
u "github.com/jbenet/go-ipfs/util"
11
)
12
@@ -74,75 +72,20 @@ func (dl *DaemonListener) handleConnection(conn net.Conn) {
72
}
73
74
u.DOut("Got command: %v\n", command)
77
- err := ExecuteCommand(&command, dl.node, conn)
78
- if err != nil {
79
- fmt.Fprintln(conn, "%v\n", err)
80
- }
81
-}
82
-
83
-func ExecuteCommand(com *Command, ipfsnode *core.IpfsNode, out io.Writer) error {
84
- u.DOut("executing command: %s\n", com.Command)
85
- switch com.Command {
75
+ switch command.Command {
76
case "add":
87
- depth := 1
88
- if r, ok := com.Opts["r"].(bool); r && ok {
89
- depth = -1
90
- }
91
- for _, path := range com.Args {
92
- nd, err := commands.AddPath(ipfsnode, path, depth)
93
- if err != nil {
94
- return fmt.Errorf("addFile error: %v", err)
95
- }
96
-
97
- k, err := nd.Key()
98
- if err != nil {
99
- return fmt.Errorf("addFile error: %v", err)
100
- }
101
-
102
- fmt.Fprintf(out, "Added node: %s = %s\n", path, k.Pretty())
103
- }
77
+ err = commands.Add(dl.node, command.Args, command.Opts, conn)
78
case "cat":
105
- for _, fn := range com.Args {
106
- dagnode, err := ipfsnode.Resolver.ResolvePath(fn)
107
- if err != nil {
108
- return fmt.Errorf("catFile error: %v", err)
109
- }
110
-
111
- read, err := dag.NewDagReader(dagnode, ipfsnode.DAG)
112
- if err != nil {
113
- return fmt.Errorf("cat error: %v", err)
114
- }
115
-
116
- _, err = io.Copy(out, read)
117
- if err != nil {
118
- return fmt.Errorf("cat error: %v", err)
119
- }
120
- }
79
+ err = commands.Cat(dl.node, command.Args, command.Opts, conn)
80
case "ls":
122
- for _, fn := range com.Args {
123
- dagnode, err := ipfsnode.Resolver.ResolvePath(fn)
124
- if err != nil {
125
- return fmt.Errorf("ls error: %v", err)
126
- }
127
-
128
- for _, link := range dagnode.Links {
129
- fmt.Fprintf(out, "%s %d %s\n", link.Hash.B58String(), link.Size, link.Name)
130
- }
131
- }
81
+ err = commands.Ls(dl.node, command.Args, command.Opts, conn)
82
case "pin":
133
- for _, fn := range com.Args {
134
- dagnode, err := ipfsnode.Resolver.ResolvePath(fn)
135
- if err != nil {
136
- return fmt.Errorf("pin error: %v", err)
137
- }
138
-
139
- err = ipfsnode.PinDagNode(dagnode)
140
- if err != nil {
141
- return fmt.Errorf("pin: %v", err)
142
- }
143
- }
83
+ err = commands.Pin(dl.node, command.Args, command.Opts, conn)
84
default:
145
- return fmt.Errord("Invalid Command: '%s'", com.Command)
85
+ err = fmt.Errorf("Invalid Command: '%s'", command.Command)
86
+ }
87
+ if err != nil {
88
+ fmt.Fprintln(conn, err)
89
}
90
}
91