@cryptotaxi247 / kubo / commits / 2c2f9f2be

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 }