coreapi: implement --local with Offline option
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Dec 10, 2018 at 15:26 UTC
2c2f9f2bed35dae72a9aa7f2b44bd718a52241f8
19 files changed
+70
-70
core/commands/add.go
+1
-3
@@ -139,7 +139,7 @@ You can now check what blocks have been created by:
139
return nil
140
},
141
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
142
- api, err := cmdenv.GetApi(env)
142
+ api, err := cmdenv.GetApi(env, req)
143
if err != nil {
144
return err
145
}
@@ -160,7 +160,6 @@ You can now check what blocks have been created by:
160
inline, _ := req.Options[inlineOptionName].(bool)
161
inlineLimit, _ := req.Options[inlineLimitOptionName].(int)
162
pathName, _ := req.Options[stdinPathName].(string)
163
- local, _ := req.Options["local"].(bool)
163
164
hashFunCode, ok := mh.Names[strings.ToLower(hashFunStr)]
165
if !ok {
@@ -179,7 +178,6 @@ You can now check what blocks have been created by:
178
179
options.Unixfs.Pin(dopin),
180
options.Unixfs.HashOnly(hash),
182
- options.Unixfs.Local(local),
181
options.Unixfs.FsCache(fscache),
182
options.Unixfs.Nocopy(nocopy),
183
core/commands/block.go
+4
-4
@@ -60,7 +60,7 @@ on raw IPFS blocks. It outputs the following to stdout:
60
cmdkit.StringArg("key", true, false, "The base58 multihash of an existing block to stat.").EnableStdin(),
61
},
62
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
63
- api, err := cmdenv.GetApi(env)
63
+ api, err := cmdenv.GetApi(env, req)
64
if err != nil {
65
return err
66
}
@@ -102,7 +102,7 @@ It outputs to stdout, and <key> is a base58 encoded multihash.
102
cmdkit.StringArg("key", true, false, "The base58 multihash of an existing block to get.").EnableStdin(),
103
},
104
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
105
- api, err := cmdenv.GetApi(env)
105
+ api, err := cmdenv.GetApi(env, req)
106
if err != nil {
107
return err
108
}
@@ -148,7 +148,7 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
148
cmdkit.IntOption(mhlenOptionName, "multihash hash length").WithDefault(-1),
149
},
150
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
151
- api, err := cmdenv.GetApi(env)
151
+ api, err := cmdenv.GetApi(env, req)
152
if err != nil {
153
return err
154
}
@@ -218,7 +218,7 @@ It takes a list of base58 encoded multihashes to remove.
218
cmdkit.BoolOption(blockQuietOptionName, "q", "Write minimal output."),
219
},
220
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
221
- api, err := cmdenv.GetApi(env)
221
+ api, err := cmdenv.GetApi(env, req)
222
if err != nil {
223
return err
224
}
core/commands/cmdenv/env.go
+12
-2
@@ -6,6 +6,7 @@ import (
6
"github.com/ipfs/go-ipfs/commands"
7
"github.com/ipfs/go-ipfs/core"
8
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
9
+ options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
10
11
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
12
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
@@ -22,13 +23,22 @@ func GetNode(env interface{}) (*core.IpfsNode, error) {
23
}
24
25
// GetApi extracts CoreAPI instance from the environment.
25
-func GetApi(env cmds.Environment) (coreiface.CoreAPI, error) {
26
+func GetApi(env cmds.Environment, req *cmds.Request) (coreiface.CoreAPI, error) {
27
ctx, ok := env.(*commands.Context)
28
if !ok {
29
return nil, fmt.Errorf("expected env to be of type %T, got %T", ctx, env)
30
}
31
31
- return ctx.GetAPI()
32
+ local, _ := req.Options["local"].(bool)
33
+ api, err := ctx.GetAPI()
34
+ if err != nil {
35
+ return nil, err
36
+ }
37
+ if local {
38
+ return api.WithOptions(options.Api.Offline(local))
39
+ }
40
+
41
+ return api, nil
42
}
43
44
// GetConfig extracts the config from the environment.
core/commands/files.go
+2
-2
@@ -124,7 +124,7 @@ var filesStatCmd = &cmds.Command{
124
return err
125
}
126
127
- api, err := cmdenv.GetApi(env)
127
+ api, err := cmdenv.GetApi(env, req)
128
if err != nil {
129
return err
130
}
@@ -308,7 +308,7 @@ var filesCpCmd = &cmds.Command{
308
return err
309
}
310
311
- api, err := cmdenv.GetApi(env)
311
+ api, err := cmdenv.GetApi(env, req)
312
if err != nil {
313
return err
314
}
core/commands/keystore.go
+4
-4
@@ -71,7 +71,7 @@ var keyGenCmd = &cmds.Command{
71
cmdkit.StringArg("name", true, false, "name of key to create"),
72
},
73
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
74
- api, err := cmdenv.GetApi(env)
74
+ api, err := cmdenv.GetApi(env, req)
75
if err != nil {
76
return err
77
}
@@ -121,7 +121,7 @@ var keyListCmd = &cmds.Command{
121
cmdkit.BoolOption("l", "Show extra information about keys."),
122
},
123
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
124
- api, err := cmdenv.GetApi(env)
124
+ api, err := cmdenv.GetApi(env, req)
125
if err != nil {
126
return err
127
}
@@ -161,7 +161,7 @@ var keyRenameCmd = &cmds.Command{
161
cmdkit.BoolOption(keyStoreForceOptionName, "f", "Allow to overwrite an existing key."),
162
},
163
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
164
- api, err := cmdenv.GetApi(env)
164
+ api, err := cmdenv.GetApi(env, req)
165
if err != nil {
166
return err
167
}
@@ -206,7 +206,7 @@ var keyRmCmd = &cmds.Command{
206
cmdkit.BoolOption("l", "Show extra information about keys."),
207
},
208
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
209
- api, err := cmdenv.GetApi(env)
209
+ api, err := cmdenv.GetApi(env, req)
210
if err != nil {
211
return err
212
}
core/commands/ls.go
+1
-1
@@ -74,7 +74,7 @@ The JSON output contains type information.
74
return err
75
}
76
77
- api, err := cmdenv.GetApi(env)
77
+ api, err := cmdenv.GetApi(env, req)
78
if err != nil {
79
return err
80
}
core/commands/name/ipns.go
+1
-3
@@ -80,13 +80,12 @@ Resolve the value of a dnslink:
80
cmdkit.BoolOption(streamOptionName, "s", "Stream entries as they are found."),
81
},
82
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
83
- api, err := cmdenv.GetApi(env)
83
+ api, err := cmdenv.GetApi(env, req)
84
if err != nil {
85
return err
86
}
87
88
nocache, _ := req.Options["nocache"].(bool)
89
- local, _ := req.Options["local"].(bool)
89
90
var name string
91
if len(req.Arguments) == 0 {
@@ -105,7 +104,6 @@ Resolve the value of a dnslink:
104
stream, _ := req.Options[streamOptionName].(bool)
105
106
opts := []options.NameResolveOption{
108
- options.Name.Local(local),
107
options.Name.Cache(!nocache),
108
}
109
core/commands/name/publish.go
+1
-1
@@ -83,7 +83,7 @@ Alternatively, publish an <ipfs-path> using a valid PeerID (as listed by
83
cmdkit.BoolOption(quieterOptionName, "Q", "Write only final hash."),
84
},
85
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
86
- api, err := cmdenv.GetApi(env)
86
+ api, err := cmdenv.GetApi(env, req)
87
if err != nil {
88
return err
89
}
core/commands/object/diff.go
+1
-1
@@ -55,7 +55,7 @@ Example:
55
cmdkit.BoolOption(verboseOptionName, "v", "Print extra information."),
56
},
57
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
58
- api, err := cmdenv.GetApi(env)
58
+ api, err := cmdenv.GetApi(env, req)
59
if err != nil {
60
return err
61
}
core/commands/object/object.go
+6
-6
@@ -77,7 +77,7 @@ is the raw data of the object.
77
cmdkit.StringArg("key", true, false, "Key of the object to retrieve, in base58-encoded multihash format.").EnableStdin(),
78
},
79
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
80
- api, err := cmdenv.GetApi(env)
80
+ api, err := cmdenv.GetApi(env, req)
81
if err != nil {
82
return err
83
}
@@ -114,7 +114,7 @@ multihash.
114
cmdkit.BoolOption("headers", "v", "Print table headers (Hash, Size, Name)."),
115
},
116
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
117
- api, err := cmdenv.GetApi(env)
117
+ api, err := cmdenv.GetApi(env, req)
118
if err != nil {
119
return err
120
}
@@ -204,7 +204,7 @@ Supported values are:
204
cmdkit.StringOption("data-encoding", "Encoding type of the data field, either \"text\" or \"base64\".").WithDefault("text"),
205
},
206
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
207
- api, err := cmdenv.GetApi(env)
207
+ api, err := cmdenv.GetApi(env, req)
208
if err != nil {
209
return err
210
}
@@ -294,7 +294,7 @@ var ObjectStatCmd = &cmds.Command{
294
cmdkit.StringArg("key", true, false, "Key of the object to retrieve, in base58-encoded multihash format.").EnableStdin(),
295
},
296
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
297
- api, err := cmdenv.GetApi(env)
297
+ api, err := cmdenv.GetApi(env, req)
298
if err != nil {
299
return err
300
}
@@ -386,7 +386,7 @@ And then run:
386
cmdkit.BoolOption("quiet", "q", "Write minimal output."),
387
},
388
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
389
- api, err := cmdenv.GetApi(env)
389
+ api, err := cmdenv.GetApi(env, req)
390
if err != nil {
391
return err
392
}
@@ -459,7 +459,7 @@ Available templates:
459
cmdkit.StringArg("template", false, false, "Template to use. Optional."),
460
},
461
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
462
- api, err := cmdenv.GetApi(env)
462
+ api, err := cmdenv.GetApi(env, req)
463
if err != nil {
464
return err
465
}
core/commands/object/patch.go
+4
-4
@@ -50,7 +50,7 @@ the limit will not be respected by the network.
50
cmdkit.FileArg("data", true, false, "Data to append.").EnableStdin(),
51
},
52
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
53
- api, err := cmdenv.GetApi(env)
53
+ api, err := cmdenv.GetApi(env, req)
54
if err != nil {
55
return err
56
}
@@ -97,7 +97,7 @@ Example:
97
cmdkit.FileArg("data", true, false, "The data to set the object to.").EnableStdin(),
98
},
99
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
100
- api, err := cmdenv.GetApi(env)
100
+ api, err := cmdenv.GetApi(env, req)
101
if err != nil {
102
return err
103
}
@@ -140,7 +140,7 @@ Remove a Merkle-link from the given object and return the hash of the result.
140
cmdkit.StringArg("name", true, false, "Name of the link to remove."),
141
},
142
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
143
- api, err := cmdenv.GetApi(env)
143
+ api, err := cmdenv.GetApi(env, req)
144
if err != nil {
145
return err
146
}
@@ -192,7 +192,7 @@ to a file containing 'bar', and returns the hash of the new object.
192
cmdkit.BoolOption("create", "p", "Create intermediary nodes."),
193
},
194
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
195
- api, err := cmdenv.GetApi(env)
195
+ api, err := cmdenv.GetApi(env, req)
196
if err != nil {
197
return err
198
}
core/commands/pin.go
+4
-4
@@ -72,7 +72,7 @@ var addPinCmd = &cmds.Command{
72
return err
73
}
74
75
- api, err := cmdenv.GetApi(env)
75
+ api, err := cmdenv.GetApi(env, req)
76
if err != nil {
77
return err
78
}
@@ -203,7 +203,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
203
return err
204
}
205
206
- api, err := cmdenv.GetApi(env)
206
+ api, err := cmdenv.GetApi(env, req)
207
if err != nil {
208
return err
209
}
@@ -294,7 +294,7 @@ Example:
294
return err
295
}
296
297
- api, err := cmdenv.GetApi(env)
297
+ api, err := cmdenv.GetApi(env, req)
298
if err != nil {
299
return err
300
}
@@ -366,7 +366,7 @@ new pin and removing the old one.
366
},
367
Type: PinOutput{},
368
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
369
- api, err := cmdenv.GetApi(env)
369
+ api, err := cmdenv.GetApi(env, req)
370
if err != nil {
371
return err
372
}
core/commands/pubsub.go
+4
-4
@@ -78,7 +78,7 @@ This command outputs data in the following encodings:
78
cmdkit.BoolOption(pubsubDiscoverOptionName, "try to discover other peers subscribed to the same topic"),
79
},
80
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
81
- api, err := cmdenv.GetApi(env)
81
+ api, err := cmdenv.GetApi(env, req)
82
if err != nil {
83
return err
84
}
@@ -153,7 +153,7 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
153
cmdkit.StringArg("data", true, true, "Payload of message to publish.").EnableStdin(),
154
},
155
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
156
- api, err := cmdenv.GetApi(env)
156
+ api, err := cmdenv.GetApi(env, req)
157
if err != nil {
158
return err
159
}
@@ -188,7 +188,7 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
188
`,
189
},
190
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
191
- api, err := cmdenv.GetApi(env)
191
+ api, err := cmdenv.GetApi(env, req)
192
if err != nil {
193
return err
194
}
@@ -234,7 +234,7 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
234
cmdkit.StringArg("topic", false, false, "topic to list connected peers of"),
235
},
236
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
237
- api, err := cmdenv.GetApi(env)
237
+ api, err := cmdenv.GetApi(env, req)
238
if err != nil {
239
return err
240
}
core/commands/swarm.go
+6
-6
@@ -71,7 +71,7 @@ var swarmPeersCmd = &cmds.Command{
71
cmdkit.BoolOption(swarmDirectionOptionName, "Also list information about the direction of connection"),
72
},
73
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
74
- api, err := cmdenv.GetApi(env)
74
+ api, err := cmdenv.GetApi(env, req)
75
if err != nil {
76
return err
77
}
@@ -221,7 +221,7 @@ var swarmAddrsCmd = &cmds.Command{
221
"listen": swarmAddrsListenCmd,
222
},
223
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
224
- api, err := cmdenv.GetApi(env)
224
+ api, err := cmdenv.GetApi(env, req)
225
if err != nil {
226
return err
227
}
@@ -275,7 +275,7 @@ var swarmAddrsLocalCmd = &cmds.Command{
275
cmdkit.BoolOption("id", "Show peer ID in addresses."),
276
},
277
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
278
- api, err := cmdenv.GetApi(env)
278
+ api, err := cmdenv.GetApi(env, req)
279
if err != nil {
280
return err
281
}
@@ -316,7 +316,7 @@ var swarmAddrsListenCmd = &cmds.Command{
316
`,
317
},
318
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
319
- api, err := cmdenv.GetApi(env)
319
+ api, err := cmdenv.GetApi(env, req)
320
if err != nil {
321
return err
322
}
@@ -355,7 +355,7 @@ ipfs swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3
355
cmdkit.StringArg("address", true, true, "Address of peer to connect to.").EnableStdin(),
356
},
357
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
358
- api, err := cmdenv.GetApi(env)
358
+ api, err := cmdenv.GetApi(env, req)
359
if err != nil {
360
return err
361
}
@@ -403,7 +403,7 @@ it will reconnect.
403
cmdkit.StringArg("address", true, true, "Address of peer to disconnect from.").EnableStdin(),
404
},
405
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
406
- api, err := cmdenv.GetApi(env)
406
+ api, err := cmdenv.GetApi(env, req)
407
if err != nil {
408
return err
409
}
core/commands/unixfs/ls.go
+1
-1
@@ -77,7 +77,7 @@ possible, please use 'ipfs ls' instead.
77
return err
78
}
79
80
- api, err := cmdenv.GetApi(env)
80
+ api, err := cmdenv.GetApi(env, req)
81
if err != nil {
82
return err
83
}
core/coreapi/coreapi.go
+5
-1
@@ -31,6 +31,7 @@ import (
31
routing "gx/ipfs/QmRASJXJUFygM5qU4YrH7k7jD6S4Hg8nJmgqJ4bYJvLatd/go-libp2p-routing"
32
blockstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
33
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
34
+ offlinexch "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
35
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
36
pubsub "gx/ipfs/QmaqGyUhWLsJbVo1QAujSu13mxNjFJ98Kt2VWGSnShGE1Q/go-libp2p-pubsub"
37
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
@@ -218,7 +219,10 @@ func (api *CoreAPI) WithOptions(opts ...options.ApiOption) (coreiface.CoreAPI, e
219
subApi.peerHost = nil
220
subApi.namesys = nil
221
subApi.recordValidator = nil
221
- subApi.exchange = nil
222
+
223
+ subApi.exchange = offlinexch.Exchange(subApi.blockstore)
224
+ subApi.blocks = bserv.New(api.blockstore, subApi.exchange)
225
+ subApi.dag = dag.NewDAGService(subApi.blocks)
226
}
227
228
return subApi, nil
core/coreapi/interface/options/unixfs.go
-12
@@ -30,7 +30,6 @@ type UnixfsAddSettings struct {
30
31
Pin bool
32
OnlyHash bool
33
- Local bool
33
FsCache bool
34
NoCopy bool
35
@@ -60,7 +59,6 @@ func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, cid.Prefix,
59
60
Pin: false,
61
OnlyHash: false,
63
- Local: false,
62
FsCache: false,
63
NoCopy: false,
64
@@ -220,16 +218,6 @@ func (unixfsOpts) HashOnly(hashOnly bool) UnixfsAddOption {
218
}
219
}
220
223
-// Local will add the data to blockstore without announcing it to the network
224
-//
225
-// Note that this doesn't prevent other nodes from getting this data
226
-func (unixfsOpts) Local(local bool) UnixfsAddOption {
227
- return func(settings *UnixfsAddSettings) error {
228
- settings.Local = local
229
- return nil
230
- }
231
-}
232
-
221
// Wrap tells the adder to wrap the added file structure with an additional
222
// directory.
223
func (unixfsOpts) Wrap(wrap bool) UnixfsAddOption {
core/coreapi/unixfs.go
-5
@@ -15,7 +15,6 @@ import (
15
bstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
16
mfs "gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
17
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
18
- offline "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
18
cidutil "gx/ipfs/QmbfKu17LbMWyGUxHEUns9Wf5Dkm8PT6be4uPhTkk4YvaV/go-cidutil"
19
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
20
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
@@ -72,10 +71,6 @@ func (api *UnixfsAPI) Add(ctx context.Context, files files.Node, opts ...options
71
pinning = nilnode.Pinning
72
}
73
75
- if settings.Local {
76
- exch = offline.Exchange(addblockstore)
77
- }
78
-
74
bserv := blockservice.New(addblockstore, exch) // hash security 001
75
dserv := dag.NewDAGService(bserv)
76
core/coreapi/unixfs_test.go
+13
-6
@@ -183,6 +183,8 @@ func TestAdd(t *testing.T) {
183
data func() files.Node
184
expect func(files.Node) files.Node
185
186
+ apiOpts []options.ApiOption
187
+
188
path string
189
err string
190
@@ -270,10 +272,10 @@ func TestAdd(t *testing.T) {
272
},
273
// Local
274
{
273
- name: "addLocal", // better cases in sharness
274
- data: strFile(helloStr),
275
- path: hello,
276
- opts: []options.UnixfsAddOption{options.Unixfs.Local(true)},
275
+ name: "addLocal", // better cases in sharness
276
+ data: strFile(helloStr),
277
+ path: hello,
278
+ apiOpts: []options.ApiOption{options.Api.Offline(true)},
279
},
280
{
281
name: "hashOnly", // test (non)fetchability
@@ -511,9 +513,14 @@ func TestAdd(t *testing.T) {
513
}()
514
}
515
516
+ tapi, err := api.WithOptions(testCase.apiOpts...)
517
+ if err != nil {
518
+ t.Fatal(err)
519
+ }
520
+
521
// Add!
522
516
- p, err := api.Unixfs().Add(ctx, data, opts...)
523
+ p, err := tapi.Unixfs().Add(ctx, data, opts...)
524
close(eventOut)
525
evtWg.Wait()
526
if testCase.err != "" {
@@ -594,7 +601,7 @@ func TestAdd(t *testing.T) {
601
}
602
}
603
597
- f, err := api.Unixfs().Get(ctx, p)
604
+ f, err := tapi.Unixfs().Get(ctx, p)
605
if err != nil {
606
t.Fatal(err)
607
}