Skip to content

Commit 3538257

Browse files
authored
Merge pull request #5035 from ipfs/feat/cmds2
update for the go-ipfs-cmds refactor
2 parents 61f31e5 + d556ee2 commit 3538257

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+549
-734
lines changed

cmd/ipfs/daemon.go

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
2222
migrate "github.com/ipfs/go-ipfs/repo/fsrepo/migrations"
2323

24-
cmds "gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
24+
cmds "gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
2525
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
2626
mprome "gx/ipfs/QmUHHsirrDtP6WEHhE8SZeG672CLqDJn6XGzAHnvBHUiA3/go-metrics-prometheus"
2727
"gx/ipfs/QmV6FjemM1K8oXjrvuq3wuVWWoU2TLDPmNnKrxHzY3v6Ai/go-multiaddr-net"
@@ -184,7 +184,7 @@ func defaultMux(path string) corehttp.ServeOption {
184184
}
185185
}
186186

187-
func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) {
187+
func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
188188
// Inject metrics before we do anything
189189
err := mprome.Inject()
190190
if err != nil {
@@ -227,8 +227,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
227227

228228
err := initWithDefaults(os.Stdout, cfg, profiles)
229229
if err != nil {
230-
re.SetError(err, cmdkit.ErrNormal)
231-
return
230+
return err
232231
}
233232
}
234233
}
@@ -238,8 +237,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
238237
repo, err := fsrepo.Open(cctx.ConfigRoot)
239238
switch err {
240239
default:
241-
re.SetError(err, cmdkit.ErrNormal)
242-
return
240+
return err
243241
case fsrepo.ErrNeedMigration:
244242
domigrate, found := req.Options[migrateKwd].(bool)
245243
fmt.Println("Found outdated fs-repo, migrations need to be run.")
@@ -251,8 +249,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
251249
if !domigrate {
252250
fmt.Println("Not running migrations of fs-repo now.")
253251
fmt.Println("Please get fs-repo-migrations from https://dist.ipfs.io")
254-
re.SetError(fmt.Errorf("fs-repo requires migration"), cmdkit.ErrNormal)
255-
return
252+
return fmt.Errorf("fs-repo requires migration")
256253
}
257254

258255
err = migrate.RunMigration(fsrepo.RepoVersion)
@@ -261,23 +258,20 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
261258
fmt.Printf(" %s\n", err)
262259
fmt.Println("If you think this is a bug, please file an issue and include this whole log output.")
263260
fmt.Println(" https://github.com/ipfs/fs-repo-migrations")
264-
re.SetError(err, cmdkit.ErrNormal)
265-
return
261+
return err
266262
}
267263

268264
repo, err = fsrepo.Open(cctx.ConfigRoot)
269265
if err != nil {
270-
re.SetError(err, cmdkit.ErrNormal)
271-
return
266+
return err
272267
}
273268
case nil:
274269
break
275270
}
276271

277272
cfg, err := cctx.GetConfig()
278273
if err != nil {
279-
re.SetError(err, cmdkit.ErrNormal)
280-
return
274+
return err
281275
}
282276

283277
offline, _ := req.Options[offlineKwd].(bool)
@@ -303,8 +297,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
303297
if routingOption == routingOptionDefaultKwd {
304298
cfg, err := repo.Config()
305299
if err != nil {
306-
re.SetError(err, cmdkit.ErrNormal)
307-
return
300+
return err
308301
}
309302

310303
routingOption = cfg.Routing.Type
@@ -314,24 +307,21 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
314307
}
315308
switch routingOption {
316309
case routingOptionSupernodeKwd:
317-
re.SetError(errors.New("supernode routing was never fully implemented and has been removed"), cmdkit.ErrNormal)
318-
return
310+
return errors.New("supernode routing was never fully implemented and has been removed")
319311
case routingOptionDHTClientKwd:
320312
ncfg.Routing = core.DHTClientOption
321313
case routingOptionDHTKwd:
322314
ncfg.Routing = core.DHTOption
323315
case routingOptionNoneKwd:
324316
ncfg.Routing = core.NilRouterOption
325317
default:
326-
re.SetError(fmt.Errorf("unrecognized routing option: %s", routingOption), cmdkit.ErrNormal)
327-
return
318+
return fmt.Errorf("unrecognized routing option: %s", routingOption)
328319
}
329320

330321
node, err := core.NewNode(req.Context, ncfg)
331322
if err != nil {
332323
log.Error("error from node construction: ", err)
333-
re.SetError(err, cmdkit.ErrNormal)
334-
return
324+
return err
335325
}
336326
node.SetLocal(false)
337327

@@ -361,29 +351,24 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
361351
// construct api endpoint - every time
362352
apiErrc, err := serveHTTPApi(req, cctx)
363353
if err != nil {
364-
re.SetError(err, cmdkit.ErrNormal)
365-
return
354+
return err
366355
}
367356

368357
// construct fuse mountpoints - if the user provided the --mount flag
369358
mount, _ := req.Options[mountKwd].(bool)
370359
if mount && offline {
371-
re.SetError(errors.New("mount is not currently supported in offline mode"),
372-
cmdkit.ErrClient)
373-
return
360+
return cmdkit.Errorf(cmdkit.ErrClient, "mount is not currently supported in offline mode")
374361
}
375362
if mount {
376363
if err := mountFuse(req, cctx); err != nil {
377-
re.SetError(err, cmdkit.ErrNormal)
378-
return
364+
return err
379365
}
380366
}
381367

382368
// repo blockstore GC - if --enable-gc flag is present
383369
gcErrc, err := maybeRunGC(req, node)
384370
if err != nil {
385-
re.SetError(err, cmdkit.ErrNormal)
386-
return
371+
return err
387372
}
388373

389374
// construct http gateway - if it is set in the config
@@ -392,8 +377,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
392377
var err error
393378
gwErrc, err = serveHTTPGateway(req, cctx)
394379
if err != nil {
395-
re.SetError(err, cmdkit.ErrNormal)
396-
return
380+
return err
397381
}
398382
}
399383

@@ -405,10 +389,11 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
405389
// TODO(cryptix): our fuse currently doesnt follow this pattern for graceful shutdown
406390
for err := range merge(apiErrc, gwErrc, gcErrc) {
407391
if err != nil {
408-
log.Error(err)
409-
re.SetError(err, cmdkit.ErrNormal)
392+
return err
410393
}
411394
}
395+
396+
return nil
412397
}
413398

414399
// serveHTTPApi collects options, creates listener, prints status message and starts serving requests

cmd/ipfs/init.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
namesys "github.com/ipfs/go-ipfs/namesys"
1717
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
1818

19-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
19+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
2020
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
2121
"gx/ipfs/QmYVqYJTVjetcf1guieEgWpK1PZtHPytP624vKzTF1P3r2/go-ipfs-config"
2222
)
@@ -72,11 +72,10 @@ environment variable:
7272

7373
return nil
7474
},
75-
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) {
75+
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
7676
cctx := env.(*oldcmds.Context)
7777
if cctx.Online {
78-
res.SetError(errors.New("init must be run offline only"), cmdkit.ErrNormal)
79-
return
78+
return cmdkit.Error{Message: "init must be run offline only"}
8079
}
8180

8281
empty, _ := req.Options["empty-repo"].(bool)
@@ -88,14 +87,12 @@ environment variable:
8887
if f != nil {
8988
confFile, err := f.NextFile()
9089
if err != nil {
91-
res.SetError(err, cmdkit.ErrNormal)
92-
return
90+
return err
9391
}
9492

9593
conf = &config.Config{}
9694
if err := json.NewDecoder(confFile).Decode(conf); err != nil {
97-
res.SetError(err, cmdkit.ErrNormal)
98-
return
95+
return err
9996
}
10097
}
10198

@@ -106,10 +103,7 @@ environment variable:
106103
profiles = strings.Split(profile, ",")
107104
}
108105

109-
if err := doInit(os.Stdout, cctx.ConfigRoot, empty, nBitsForKeypair, profiles, conf); err != nil {
110-
res.SetError(err, cmdkit.ErrNormal)
111-
return
112-
}
106+
return doInit(os.Stdout, cctx.ConfigRoot, empty, nBitsForKeypair, profiles, conf)
113107
},
114108
}
115109

cmd/ipfs/ipfs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55

66
commands "github.com/ipfs/go-ipfs/core/commands"
77

8-
cmds "gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
8+
cmds "gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
99
)
1010

1111
// This is the CLI root, used for executing commands accessible to CLI clients.

cmd/ipfs/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ import (
2424
repo "github.com/ipfs/go-ipfs/repo"
2525
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
2626

27-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
28-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds/cli"
29-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds/http"
27+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
28+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds/cli"
29+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds/http"
3030
u "gx/ipfs/QmPdKqUcHGFdeSpvjVoaTRPPstGif9GBZb5Q56RVw9o69A/go-ipfs-util"
3131
logging "gx/ipfs/QmRREK2CAZ5Re2Bd9zZFG6FeYDppUWt5cMgsoUEp3ktgSr/go-log"
3232
manet "gx/ipfs/QmV6FjemM1K8oXjrvuq3wuVWWoU2TLDPmNnKrxHzY3v6Ai/go-multiaddr-net"

commands/legacy/command.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package legacy
33
import (
44
"io"
55

6-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
7-
86
oldcmds "github.com/ipfs/go-ipfs/commands"
7+
8+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
99
logging "gx/ipfs/QmRREK2CAZ5Re2Bd9zZFG6FeYDppUWt5cMgsoUEp3ktgSr/go-log"
1010
)
1111

@@ -29,17 +29,15 @@ func NewCommand(oldcmd *oldcmds.Command) *cmds.Command {
2929
}
3030

3131
if oldcmd.Run != nil {
32-
cmd.Run = func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) {
32+
cmd.Run = func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
3333
oldReq := &requestWrapper{req, OldContext(env)}
3434
res := &fakeResponse{req: oldReq, re: re, wait: make(chan struct{})}
3535

3636
errCh := make(chan error)
3737
go res.Send(errCh)
38+
3839
oldcmd.Run(oldReq, res)
39-
err := <-errCh
40-
if err != nil {
41-
log.Error(err)
42-
}
40+
return <-errCh
4341
}
4442
}
4543

commands/legacy/legacy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"io"
55
"runtime/debug"
66

7-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
7+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
88

99
oldcmds "github.com/ipfs/go-ipfs/commands"
1010
)

commands/legacy/legacy_test.go

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"testing"
88

99
oldcmds "github.com/ipfs/go-ipfs/commands"
10-
cmds "gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
10+
cmds "gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
1111
cmdkit "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
1212
)
1313

@@ -80,7 +80,7 @@ func TestNewCommand(t *testing.T) {
8080

8181
root.Call(req, re, &env)
8282

83-
expected := `{"Value":"Test."}
83+
expected := `"Test."
8484
`
8585

8686
if buf.String() != expected {
@@ -114,7 +114,7 @@ func TestNewCommand(t *testing.T) {
114114
}
115115

116116
func TestPipePair(t *testing.T) {
117-
cmd := &cmds.Command{Type: "string"}
117+
cmd := NewCommand(&oldcmds.Command{Type: "string"})
118118

119119
req, err := cmds.NewRequest(context.TODO(), nil, nil, nil, nil, cmd)
120120
if err != nil {
@@ -134,6 +134,11 @@ func TestPipePair(t *testing.T) {
134134
t.Fatal(err)
135135
}
136136

137+
err = re.Close()
138+
if err != nil {
139+
t.Fatal(err)
140+
}
141+
137142
close(wait)
138143
}()
139144

@@ -149,6 +154,57 @@ func TestPipePair(t *testing.T) {
149154
t.Fatalf("expected value %#v but got %#v", expect, v)
150155
}
151156

157+
_, err = res.Next()
158+
if err != io.EOF {
159+
t.Fatal("expected io.EOF, got:", err)
160+
}
161+
152162
<-wait
163+
}
164+
165+
func TestChanPair(t *testing.T) {
166+
cmd := NewCommand(&oldcmds.Command{Type: "string"})
167+
168+
req, err := cmds.NewRequest(context.TODO(), nil, nil, nil, nil, cmd)
169+
if err != nil {
170+
t.Fatal(err)
171+
}
172+
173+
re, res := cmds.NewChanResponsePair(req)
153174

175+
wait := make(chan interface{})
176+
177+
expect := "abc"
178+
go func() {
179+
err := re.Emit(expect)
180+
if err != nil {
181+
t.Fatal(err)
182+
}
183+
184+
err = re.Close()
185+
if err != nil {
186+
t.Fatal(err)
187+
}
188+
189+
close(wait)
190+
}()
191+
192+
v, err := res.Next()
193+
if err != nil {
194+
t.Fatal(err)
195+
}
196+
str, ok := v.(string)
197+
if !ok {
198+
t.Fatalf("expected type %T but got %T", expect, v)
199+
}
200+
if str != expect {
201+
t.Fatalf("expected value %#v but got %#v", expect, v)
202+
}
203+
204+
_, err = res.Next()
205+
if err != io.EOF {
206+
t.Fatal("expected io.EOF, got:", err)
207+
}
208+
209+
<-wait
154210
}

commands/legacy/request.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"os"
88
"reflect"
99

10-
"gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
10+
"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
1111
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
1212
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit/files"
1313

0 commit comments

Comments
 (0)