ipfs name resolve --stream
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Aug 29, 2018 at 01:03 UTC
f69cf07444b91db5238813e43e1562b9916cde1d
2 files changed
+23
-9
core/commands/name/ipns.go
+21
-7
@@ -127,7 +127,7 @@ Resolve the value of a dnslink:
127
recursive, _ := req.Options[recursiveOptionName].(bool)
128
rc, rcok := req.Options[dhtRecordCountOptionName].(int)
129
dhtt, dhttok := req.Options[dhtTimeoutOptionName].(string)
130
-
130
+ stream, _ := req.Options[streamOptionName].(bool)
131
var ropts []nsopts.ResolveOpt
132
if !recursive {
133
ropts = append(ropts, nsopts.Depth(1))
@@ -150,13 +150,27 @@ Resolve the value of a dnslink:
150
name = "/ipns/" + name
151
}
152
153
- output, err := resolver.Resolve(req.Context, name, ropts...)
154
- if err != nil {
155
- return err
156
- }
157
-
153
// TODO: better errors (in the case of not finding the name, we get "failed to find any peer in table")
159
- return cmds.EmitOnce(res, &ResolvedPath{output})
154
+
155
+ if !stream {
156
+ output, err := resolver.Resolve(req.Context, name, ropts...)
157
+ if err != nil {
158
+ return err
159
+ }
160
+
161
+ return cmds.EmitOnce(res, &ResolvedPath{output})
162
+ } else {
163
+ output := resolver.ResolveAsync(req.Context, name, ropts...)
164
+ for v := range output {
165
+ if v.Err != nil {
166
+ return err
167
+ }
168
+ if err := res.Emit(&ResolvedPath{v.Path}); err != nil {
169
+ return err
170
+ }
171
+ }
172
+ }
173
+ return nil
174
},
175
Encoders: cmds.EncoderMap{
176
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
namesys/namesys_test.go
+2
-2
@@ -7,14 +7,14 @@ import (
7
8
opts "github.com/ipfs/go-ipfs/namesys/opts"
9
10
- "gx/ipfs/QmU4x3742bvgfxJsByEDpBnifJqjJdV6x528co4hwKCn46/go-unixfs"
11
- path "gx/ipfs/QmcjwUb36Z16NJkvDX6ccXPqsFswo6AsRXynyXcLLCphV2/go-path"
10
ci "gx/ipfs/QmPvyPwuCgJ7pDmrKDxRtsScJgBaM5h4EpRL2qQJsmXf4n/go-libp2p-crypto"
11
offroute "gx/ipfs/QmScZySgru9jaoDa12sSfvh21sWbqF5eXkieTmJzAHJXkQ/go-ipfs-routing/offline"
12
+ "gx/ipfs/QmU4x3742bvgfxJsByEDpBnifJqjJdV6x528co4hwKCn46/go-unixfs"
13
ds "gx/ipfs/QmUyz7JTJzgegC6tiJrfby3mPhzcdswVtG4x58TQ6pq8jV/go-datastore"
14
dssync "gx/ipfs/QmUyz7JTJzgegC6tiJrfby3mPhzcdswVtG4x58TQ6pq8jV/go-datastore/sync"
15
ipns "gx/ipfs/QmZrmn2BPZbSviQAWeyY2iXkCukmJHv9n7zrLgWU5KgbTb/go-ipns"
16
peer "gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
17
+ path "gx/ipfs/QmcjwUb36Z16NJkvDX6ccXPqsFswo6AsRXynyXcLLCphV2/go-path"
18
pstoremem "gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore/pstoremem"
19
)
20