提交 11ee7503 作者: Łukasz Magiera

coreapi: use chan for returning results in Unixfs.Ls

License: MIT
Signed-off-by: 's avatarŁukasz Magiera <magik6k@gmail.com>
上级 fd51d4c3
...@@ -754,18 +754,20 @@ func (tp *provider) TestLs(t *testing.T) { ...@@ -754,18 +754,20 @@ func (tp *provider) TestLs(t *testing.T) {
t.Error(err) t.Error(err)
} }
if len(links) != 1 { link := <- links
t.Fatalf("expected 1 link, got %d", len(links)) if link.Size != 23 {
t.Fatalf("expected size = 23, got %d", link.Size)
} }
if links[0].Size != 23 { if link.Name != "name-of-file" {
t.Fatalf("expected size = 23, got %d", links[0].Size) t.Fatalf("expected name = name-of-file, got %s", link.Name)
} }
if links[0].Name != "name-of-file" { if link.Cid.String() != "QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr" {
t.Fatalf("expected name = name-of-file, got %s", links[0].Name) t.Fatalf("expected cid = QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr, got %s", link.Cid)
} }
if links[0].Cid.String() != "QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr" { if _, ok := <-links; ok {
t.Fatalf("expected cid = QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr, got %s", links[0].Cid) t.Errorf("didn't expect a second link")
} }
} }
func (tp *provider) TestEntriesExpired(t *testing.T) { func (tp *provider) TestEntriesExpired(t *testing.T) {
......
...@@ -31,5 +31,5 @@ type UnixfsAPI interface { ...@@ -31,5 +31,5 @@ type UnixfsAPI interface {
Get(context.Context, Path) (files.Node, error) Get(context.Context, Path) (files.Node, error)
// Ls returns the list of links in a directory // Ls returns the list of links in a directory
Ls(context.Context, Path) ([]*ipld.Link, error) Ls(context.Context, Path) (<-chan *ipld.Link, error)
} }
...@@ -143,7 +143,7 @@ func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (files.Node, er ...@@ -143,7 +143,7 @@ func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (files.Node, er
// Ls returns the contents of an IPFS or IPNS object(s) at path p, with the format: // Ls returns the contents of an IPFS or IPNS object(s) at path p, with the format:
// `<link base58 hash> <link size in bytes> <link name>` // `<link base58 hash> <link size in bytes> <link name>`
func (api *UnixfsAPI) Ls(ctx context.Context, p coreiface.Path) ([]*ipld.Link, error) { func (api *UnixfsAPI) Ls(ctx context.Context, p coreiface.Path) (<-chan *ipld.Link, error) {
dagnode, err := api.core().ResolveNode(ctx, p) dagnode, err := api.core().ResolveNode(ctx, p)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -164,10 +164,11 @@ func (api *UnixfsAPI) Ls(ctx context.Context, p coreiface.Path) ([]*ipld.Link, e ...@@ -164,10 +164,11 @@ func (api *UnixfsAPI) Ls(ctx context.Context, p coreiface.Path) ([]*ipld.Link, e
return nil, err return nil, err
} }
links := make([]*ipld.Link, len(ndlinks)) links := make(chan *ipld.Link, len(ndlinks))
for i, l := range ndlinks { for _, l := range ndlinks {
links[i] = &ipld.Link{Name: l.Name, Size: l.Size, Cid: l.Cid} links <- &ipld.Link{Name: l.Name, Size: l.Size, Cid: l.Cid}
} }
close(links)
return links, nil return links, nil
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论