mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-04 15:58:13 +08:00
tweak the Ls interface
1. Avoid `ipld.Link`. This is a protodag specific thing that will go away in future IPLD versions. 2. Avoid exposing the underlying file types. The user shouldn't care if they're dealing with a hamt, etc. 3. Add a field for a symlink's target. 4. Rename LsLink to DirEntry to better this type's role. This commit was moved from ipfs/interface-go-ipfs-core@dbee8cc1ad This commit was moved from ipfs/boxo@9c3cf70c5f
This commit is contained in:
parent
2223b08104
commit
987a46a697
@ -750,26 +750,25 @@ func (tp *provider) TestLs(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
links, err := api.Unixfs().Ls(ctx, p)
|
||||
entries, err := api.Unixfs().Ls(ctx, p)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
linkRes := <-links
|
||||
if linkRes.Err != nil {
|
||||
t.Fatal(linkRes.Err)
|
||||
entry := <-entries
|
||||
if entry.Err != nil {
|
||||
t.Fatal(entry.Err)
|
||||
}
|
||||
link := linkRes.Link
|
||||
if linkRes.Size != 15 {
|
||||
t.Fatalf("expected size = 15, got %d", link.Size)
|
||||
if entry.Size != 15 {
|
||||
t.Fatalf("expected size = 15, got %d", entry.Size)
|
||||
}
|
||||
if link.Name != "name-of-file" {
|
||||
t.Fatalf("expected name = name-of-file, got %s", link.Name)
|
||||
if entry.Name != "name-of-file" {
|
||||
t.Fatalf("expected name = name-of-file, got %s", entry.Name)
|
||||
}
|
||||
if link.Cid.String() != "QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr" {
|
||||
t.Fatalf("expected cid = QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr, got %s", link.Cid)
|
||||
if entry.Cid.String() != "QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr" {
|
||||
t.Fatalf("expected cid = QmX3qQVKxDGz3URVC3861Z3CKtQKGBn6ffXRBBWGMFz9Lr, got %s", entry.Cid)
|
||||
}
|
||||
if l, ok := <-links; ok {
|
||||
if l, ok := <-entries; ok {
|
||||
t.Errorf("didn't expect a second link")
|
||||
if l.Err != nil {
|
||||
t.Error(l.Err)
|
||||
|
||||
@ -4,9 +4,8 @@ import (
|
||||
"context"
|
||||
"github.com/ipfs/interface-go-ipfs-core/options"
|
||||
|
||||
"github.com/ipfs/go-ipfs-files"
|
||||
ipld "github.com/ipfs/go-ipld-format"
|
||||
"github.com/ipfs/go-unixfs"
|
||||
cid "github.com/ipfs/go-cid"
|
||||
files "github.com/ipfs/go-ipfs-files"
|
||||
)
|
||||
|
||||
type AddEvent struct {
|
||||
@ -16,21 +15,30 @@ type AddEvent struct {
|
||||
Size string `json:",omitempty"`
|
||||
}
|
||||
|
||||
// FileType is an enum of possible UnixFS file types.
|
||||
type FileType int32
|
||||
|
||||
const (
|
||||
TRaw = FileType(unixfs.TRaw)
|
||||
TFile = FileType(unixfs.TFile)
|
||||
TDirectory = FileType(unixfs.TDirectory)
|
||||
TMetadata = FileType(unixfs.TMetadata)
|
||||
TSymlink = FileType(unixfs.TSymlink)
|
||||
THAMTShard = FileType(unixfs.THAMTShard)
|
||||
// TUnknown means the file type isn't known (e.g., it hasn't been
|
||||
// resolved).
|
||||
TUnknown FileType = iota
|
||||
// TFile is a regular file.
|
||||
TFile
|
||||
// TDirectory is a directory.
|
||||
TDirectory
|
||||
// TSymlink is a symlink.
|
||||
TSymlink
|
||||
)
|
||||
|
||||
type LsLink struct {
|
||||
Link *ipld.Link
|
||||
Size uint64
|
||||
Type FileType
|
||||
// DirEntry is a directory entry returned by `Ls`.
|
||||
type DirEntry struct {
|
||||
Name string
|
||||
Cid cid.Cid
|
||||
|
||||
// Only filled when asked to resolve the directory entry.
|
||||
Size uint64 // The size of the file in bytes (or the size of the symlink).
|
||||
Type FileType // The type of the file.
|
||||
Target Path // The symlink target (if a symlink).
|
||||
|
||||
Err error
|
||||
}
|
||||
@ -51,5 +59,5 @@ type UnixfsAPI interface {
|
||||
|
||||
// Ls returns the list of links in a directory. Links aren't guaranteed to be
|
||||
// returned in order
|
||||
Ls(context.Context, Path, ...options.UnixfsLsOption) (<-chan LsLink, error)
|
||||
Ls(context.Context, Path, ...options.UnixfsLsOption) (<-chan DirEntry, error)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user