@cryptotaxi247 / kubo / commits / 2bd843123

added command context initialization

Juan Batiz-Benet committed Oct 2, 2014 at 02:47 UTC 2bd843123e5b3b840a0f975896599862d2861d10
3 files changed +69 -55
cmd/ipfs/ipfs.go
+50
@@ -8,9 +8,11 @@ import (
8
9 flag "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
10 commander "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
11 + ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
12
13 config "github.com/jbenet/go-ipfs/config"
14 core "github.com/jbenet/go-ipfs/core"
15 + daemon "github.com/jbenet/go-ipfs/daemon"
16 u "github.com/jbenet/go-ipfs/util"
17 )
18
@@ -100,6 +102,7 @@ func main() {
102 return
103 }
104
105 +// localNode constructs a node
106 func localNode(confdir string, online bool) (*core.IpfsNode, error) {
107 filename, err := config.Filename(confdir)
108 if err != nil {
@@ -131,3 +134,50 @@ func getConfigDir(c *commander.Command) (string, error) {
134
135 return u.TildeExpansion(confStr)
136 }
137 +
138 +// cmdContext is a wrapper structure that keeps a node, a daemonlistener, and
139 +// a config directory together. These three are needed for most commands.
140 +type cmdContext struct {
141 + node *core.IpfsNode
142 + daemon *daemon.DaemonListener
143 + configDir string
144 +}
145 +
146 +// setupCmdContext initializes a cmdContext structure from a given command.
147 +func setupCmdContext(c *commander.Command, online bool) (cc cmdContext, err error) {
148 + cc.configDir, err = getConfigDir(c.Parent.Parent)
149 + if err != nil {
150 + return
151 + }
152 +
153 + cc.node, err = localNode(cc.configDir, online)
154 + if err != nil {
155 + return
156 + }
157 +
158 + cc.daemon, err = setupDaemon(cc.configDir, cc.node)
159 + if err != nil {
160 + return
161 + }
162 +
163 + return
164 +}
165 +
166 +// setupDaemon sets up the daemon corresponding to given node.
167 +func setupDaemon(confdir string, node *core.IpfsNode) (*daemon.DaemonListener, error) {
168 + if node.Config.Addresses.API == "" {
169 + return nil, errors.New("no config.Addresses.API endpoint supplied")
170 + }
171 +
172 + maddr, err := ma.NewMultiaddr(node.Config.Addresses.API)
173 + if err != nil {
174 + return nil, err
175 + }
176 +
177 + dl, err := daemon.NewDaemonListener(node, maddr, confdir)
178 + if err != nil {
179 + return nil, err
180 + }
181 + go dl.Listen()
182 + return dl, nil
183 +}
cmd/ipfs/run.go
+10 -22
@@ -1,12 +1,12 @@
1 package main
2
3 import (
4 - "errors"
4 + "os"
5 + "os/signal"
6 + "syscall"
7
8 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
9 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
8 - ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
9 - "github.com/jbenet/go-ipfs/daemon"
10 )
11
12 var cmdIpfsRun = &commander.Command{
@@ -19,30 +19,18 @@ var cmdIpfsRun = &commander.Command{
19 }
20
21 func runCmd(c *commander.Command, inp []string) error {
22 - conf, err := getConfigDir(c.Parent)
23 - if err != nil {
24 - return err
25 - }
26 - n, err := localNode(conf, true)
22 + cc, err := setupCmdContext(c, true)
23 if err != nil {
24 return err
25 }
26
31 - // launch the RPC endpoint.
32 - if n.Config.Addresses.API == "" {
33 - return errors.New("no config.Addresses.API endpoint supplied")
34 - }
27 + sigc := make(chan os.Signal, 1)
28 + signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT,
29 + syscall.SIGTERM, syscall.SIGQUIT)
30
36 - maddr, err := ma.NewMultiaddr(n.Config.Addresses.API)
37 - if err != nil {
38 - return err
39 - }
31 + // wait until we get a signal to exit.
32 + <-sigc
33
41 - dl, err := daemon.NewDaemonListener(n, maddr, conf)
42 - if err != nil {
43 - return err
44 - }
45 - dl.Listen()
46 - dl.Close()
34 + cc.daemon.Close()
35 return nil
36 }
cmd/ipfs/serve.go
+9 -33
@@ -1,14 +1,12 @@
1 package main
2
3 import (
4 - "errors"
4 "fmt"
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"
8 ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
9
11 - "github.com/jbenet/go-ipfs/daemon"
10 h "github.com/jbenet/go-ipfs/server/http"
11 )
12
@@ -16,58 +14,36 @@ var cmdIpfsServe = &commander.Command{
14 UsageLine: "serve",
15 Short: "Serve an interface to ipfs",
16 Subcommands: []*commander.Command{
19 - cmdIpfsServeHttp,
17 + cmdIpfsServeHTTP,
18 },
19 Flag: *flag.NewFlagSet("ipfs-serve", flag.ExitOnError),
20 }
21
24 -var cmdIpfsServeHttp = &commander.Command{
22 +var cmdIpfsServeHTTP = &commander.Command{
23 UsageLine: "http",
24 Short: "Serve an HTTP API",
25 Long: `ipfs serve http - Serve an http gateway into ipfs.`,
28 - Run: serveHttpCmd,
26 + Run: serveHTTPCmd,
27 Flag: *flag.NewFlagSet("ipfs-serve-http", flag.ExitOnError),
28 }
29
30 func init() {
33 - cmdIpfsServeHttp.Flag.String("address", "/ip4/127.0.0.1/tcp/8080", "Listen Address")
31 + cmdIpfsServeHTTP.Flag.String("address", "/ip4/127.0.0.1/tcp/8080", "Listen Address")
32 }
33
36 -func serveHttpCmd(c *commander.Command, _ []string) error {
37 - conf, err := getConfigDir(c.Parent.Parent)
34 +func serveHTTPCmd(c *commander.Command, _ []string) error {
35 + cc, err := setupCmdContext(c, true)
36 if err != nil {
37 return err
38 }
41 -
42 - n, err := localNode(conf, true)
43 - if err != nil {
44 - return err
45 - }
46 -
47 - // launch the API RPC endpoint.
48 - if n.Config.Addresses.API == "" {
49 - return errors.New("no config.RPCAddress endpoint supplied")
50 - }
51 -
52 - maddr, err := ma.NewMultiaddr(n.Config.Addresses.API)
53 - if err != nil {
54 - return err
55 - }
56 -
57 - dl, err := daemon.NewDaemonListener(n, maddr, conf)
58 - if err != nil {
59 - fmt.Println("Failed to create daemon listener.")
60 - return err
61 - }
62 - go dl.Listen()
63 - defer dl.Close()
39 + defer cc.daemon.Close()
40
41 address := c.Flag.Lookup("address").Value.Get().(string)
66 - maddr, err = ma.NewMultiaddr(address)
42 + maddr, err := ma.NewMultiaddr(address)
43 if err != nil {
44 return err
45 }
46
47 fmt.Printf("Serving on %s\n", address)
72 - return h.Serve(maddr, n)
48 + return h.Serve(maddr, cc.node)
49 }