1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-07-02 12:20:03 +08:00

added implements check for root types and fixed remaining interfaces on nodes

This commit is contained in:
Henry
2015-02-28 22:50:31 +01:00
parent 335caf0bc7
commit 94f55f2d51
2 changed files with 36 additions and 16 deletions

View File

@ -167,7 +167,7 @@ func (*Root) Attr() fuse.Attr {
} }
// Lookup performs a lookup under this node. // Lookup performs a lookup under this node.
func (s *Root) Lookup(name string, ctx context.Context) (fs.Node, error) { func (s *Root) Lookup(ctx context.Context, name string) (fs.Node, error) {
switch name { switch name {
case "mach_kernel", ".hidden", "._.": case "mach_kernel", ".hidden", "._.":
// Just quiet some log noise on OS X. // Just quiet some log noise on OS X.
@ -195,8 +195,8 @@ func (s *Root) Lookup(name string, ctx context.Context) (fs.Node, error) {
return &Link{s.IpfsRoot + "/" + resolved.B58String()}, nil return &Link{s.IpfsRoot + "/" + resolved.B58String()}, nil
} }
// ReadDir reads a particular directory. Disallowed for root. // ReadDirAll reads a particular directory. Disallowed for root.
func (r *Root) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { func (r *Root) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
listing := []fuse.Dirent{ listing := []fuse.Dirent{
fuse.Dirent{ fuse.Dirent{
Name: "local", Name: "local",
@ -285,7 +285,7 @@ func (s *Node) Attr() fuse.Attr {
} }
// Lookup performs a lookup under this node. // Lookup performs a lookup under this node.
func (s *Node) Lookup(name string, ctx context.Context) (fs.Node, error) { func (s *Node) Lookup(ctx context.Context, name string) (fs.Node, error) {
nodes, err := s.Ipfs.Resolver.ResolveLinks(s.Nd, []string{name}) nodes, err := s.Ipfs.Resolver.ResolveLinks(s.Nd, []string{name})
if err != nil { if err != nil {
// todo: make this error more versatile. // todo: make this error more versatile.
@ -314,8 +314,8 @@ func (n *Node) makeChild(name string, node *mdag.Node) *Node {
return child return child
} }
// ReadDir reads the link structure as directory entries // ReadDirAll reads the link structure as directory entries
func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { func (s *Node) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
entries := make([]fuse.Dirent, len(s.Nd.Links)) entries := make([]fuse.Dirent, len(s.Nd.Links))
for i, link := range s.Nd.Links { for i, link := range s.Nd.Links {
n := link.Name n := link.Name
@ -331,7 +331,7 @@ func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) {
return nil, fuse.ENOENT return nil, fuse.ENOENT
} }
func (s *Node) Read(req *fuse.ReadRequest, resp *fuse.ReadResponse, ctx context.Context) error { func (s *Node) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
k, err := s.Nd.Key() k, err := s.Nd.Key()
if err != nil { if err != nil {
return err return err
@ -627,17 +627,28 @@ func (n *Node) update(name string, newnode *mdag.Node) error {
} }
// to check that out Node implements all the interfaces we want // to check that out Node implements all the interfaces we want
type ipnsNode interface { type ipnsRoot interface {
fs.Node fs.Node
fs.HandleWriter fs.HandleReadDirAller
fs.NodeStringLookuper
}
var _ ipnsRoot = (*Root)(nil)
type ipnsNode interface {
fs.HandleFlusher fs.HandleFlusher
fs.HandleReadDirAller
fs.HandleReader
fs.HandleWriter
fs.Node
fs.NodeCreater
fs.NodeFsyncer fs.NodeFsyncer
fs.NodeMkdirer fs.NodeMkdirer
fs.NodeOpener
fs.NodeMknoder fs.NodeMknoder
fs.NodeCreater fs.NodeOpener
fs.NodeRemover fs.NodeRemover
fs.NodeRenamer fs.NodeRenamer
fs.NodeStringLookuper
} }
var _ ipnsNode = (*Node)(nil) var _ ipnsNode = (*Node)(nil)

View File

@ -67,8 +67,8 @@ func (s *Root) Lookup(ctx context.Context, name string) (fs.Node, error) {
return &Node{Ipfs: s.Ipfs, Nd: nd}, nil return &Node{Ipfs: s.Ipfs, Nd: nd}, nil
} }
// ReadDir reads a particular directory. Disallowed for root. // ReadDirAll reads a particular directory. Disallowed for root.
func (*Root) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { func (*Root) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
log.Debug("Read Root.") log.Debug("Read Root.")
return nil, fuse.EPERM return nil, fuse.EPERM
} }
@ -127,8 +127,8 @@ func (s *Node) Lookup(ctx context.Context, name string) (fs.Node, error) {
return &Node{Ipfs: s.Ipfs, Nd: nodes[len(nodes)-1]}, nil return &Node{Ipfs: s.Ipfs, Nd: nodes[len(nodes)-1]}, nil
} }
// ReadDir reads the link structure as directory entries // ReadDirAll reads the link structure as directory entries
func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { func (s *Node) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
log.Debug("Node ReadDir") log.Debug("Node ReadDir")
entries := make([]fuse.Dirent, len(s.Nd.Links)) entries := make([]fuse.Dirent, len(s.Nd.Links))
for i, link := range s.Nd.Links { for i, link := range s.Nd.Links {
@ -180,10 +180,19 @@ func (s *Node) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadR
} }
// to check that out Node implements all the interfaces we want // to check that out Node implements all the interfaces we want
type roRoot interface {
fs.Node
fs.HandleReadDirAller
fs.NodeStringLookuper
}
var _ roRoot = (*Root)(nil)
type roNode interface { type roNode interface {
fs.HandleReadDirAller
fs.HandleReader
fs.Node fs.Node
fs.NodeStringLookuper fs.NodeStringLookuper
fs.HandleReader
} }
var _ roNode = (*Node)(nil) var _ roNode = (*Node)(nil)