Skip to content

Commit 90aae6e

Browse files
committed
cmds/update: use new cmds lib
License: MIT Signed-off-by: Overbool <[email protected]>
1 parent 19a6620 commit 90aae6e

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed

core/commands/external.go

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ import (
88
"os/exec"
99
"strings"
1010

11-
cmds "github.com/ipfs/go-ipfs/commands"
11+
oldcmds "github.com/ipfs/go-ipfs/commands"
12+
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
13+
e "github.com/ipfs/go-ipfs/core/commands/e"
1214

13-
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
15+
cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds"
16+
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
1417
)
1518

1619
func ExternalBinary() *cmds.Command {
@@ -19,29 +22,27 @@ func ExternalBinary() *cmds.Command {
1922
cmdkit.StringArg("args", false, true, "Arguments for subcommand."),
2023
},
2124
External: true,
22-
Run: func(req cmds.Request, res cmds.Response) {
23-
binname := strings.Join(append([]string{"ipfs"}, req.Path()...), "-")
25+
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
26+
binname := strings.Join(append([]string{"ipfs"}, req.Path...), "-")
2427
_, err := exec.LookPath(binname)
2528
if err != nil {
2629
// special case for '--help' on uninstalled binaries.
27-
for _, arg := range req.Arguments() {
30+
for _, arg := range req.Arguments {
2831
if arg == "--help" || arg == "-h" {
2932
buf := new(bytes.Buffer)
3033
fmt.Fprintf(buf, "%s is an 'external' command.\n", binname)
3134
fmt.Fprintf(buf, "It does not currently appear to be installed.\n")
3235
fmt.Fprintf(buf, "Please refer to the ipfs documentation for instructions.\n")
33-
res.SetOutput(buf)
34-
return
36+
return res.Emit(buf)
3537
}
3638
}
3739

38-
res.SetError(fmt.Errorf("%s not installed", binname), cmdkit.ErrNormal)
39-
return
40+
return fmt.Errorf("%s not installed", binname)
4041
}
4142

4243
r, w := io.Pipe()
4344

44-
cmd := exec.Command(binname, req.Arguments()...)
45+
cmd := exec.Command(binname, req.Arguments...)
4546

4647
// TODO: make commands lib be able to pass stdin through daemon
4748
//cmd.Stdin = req.Stdin()
@@ -50,39 +51,44 @@ func ExternalBinary() *cmds.Command {
5051
cmd.Stderr = w
5152

5253
// setup env of child program
53-
env := os.Environ()
54+
osenv := os.Environ()
5455

5556
// Get the node iff already defined.
56-
if req.InvocContext().Online {
57-
nd, err := req.InvocContext().GetNode()
57+
ctx, ok := env.(*oldcmds.Context)
58+
if !ok {
59+
return e.TypeErr(ctx, env)
60+
}
61+
62+
if ctx.Online {
63+
nd, err := cmdenv.GetNode(env)
5864
if err != nil {
59-
res.SetError(fmt.Errorf(
60-
"failed to start ipfs node: %s",
61-
err,
62-
), cmdkit.ErrFatal)
63-
return
65+
return fmt.Errorf("failed to start ipfs node: %s", err)
6466
}
65-
env = append(env, fmt.Sprintf("IPFS_ONLINE=%t", nd.OnlineMode()))
67+
osenv = append(osenv, fmt.Sprintf("IPFS_ONLINE=%t", nd.OnlineMode()))
6668
}
6769

68-
cmd.Env = env
70+
cmd.Env = osenv
6971

7072
err = cmd.Start()
7173
if err != nil {
72-
res.SetError(fmt.Errorf("failed to start subcommand: %s", err), cmdkit.ErrNormal)
73-
return
74+
return fmt.Errorf("failed to start subcommand: %s", err)
7475
}
7576

76-
res.SetOutput(r)
77+
errC := make(chan error)
7778

7879
go func() {
80+
var err error
81+
defer func() { errC <- err }()
7982
err = cmd.Wait()
80-
if err != nil {
81-
res.SetError(err, cmdkit.ErrNormal)
82-
}
83-
8483
w.Close()
8584
}()
85+
86+
err = res.Emit(r)
87+
if err != nil {
88+
return err
89+
}
90+
91+
return <-errC
8692
},
8793
}
8894
}

core/commands/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ var rootSubcommands = map[string]*cmds.Command{
139139
"swarm": SwarmCmd,
140140
"tar": TarCmd,
141141
"file": unixfs.UnixFSCmd,
142-
"update": lgc.NewCommand(ExternalBinary()),
142+
"update": ExternalBinary(),
143143
"urlstore": urlStoreCmd,
144144
"version": VersionCmd,
145145
"shutdown": daemonShutdownCmd,

0 commit comments

Comments
 (0)