From 94f55f2d51303577f9623185dcfe3794759899bb Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 28 Feb 2015 22:50:31 +0100 Subject: [PATCH] added implements check for root types and fixed remaining interfaces on nodes --- fuse/ipns/ipns_unix.go | 33 ++++++++++++++++++++++----------- fuse/readonly/readonly_unix.go | 19 ++++++++++++++----- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/fuse/ipns/ipns_unix.go b/fuse/ipns/ipns_unix.go index 76440a60a..2ced56339 100644 --- a/fuse/ipns/ipns_unix.go +++ b/fuse/ipns/ipns_unix.go @@ -167,7 +167,7 @@ func (*Root) Attr() fuse.Attr { } // 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 { case "mach_kernel", ".hidden", "._.": // 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 } -// ReadDir reads a particular directory. Disallowed for root. -func (r *Root) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { +// ReadDirAll reads a particular directory. Disallowed for root. +func (r *Root) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { listing := []fuse.Dirent{ fuse.Dirent{ Name: "local", @@ -285,7 +285,7 @@ func (s *Node) Attr() fuse.Attr { } // 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}) if err != nil { // todo: make this error more versatile. @@ -314,8 +314,8 @@ func (n *Node) makeChild(name string, node *mdag.Node) *Node { return child } -// ReadDir reads the link structure as directory entries -func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { +// ReadDirAll reads the link structure as directory entries +func (s *Node) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { entries := make([]fuse.Dirent, len(s.Nd.Links)) for i, link := range s.Nd.Links { n := link.Name @@ -331,7 +331,7 @@ func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { 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() if err != nil { 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 -type ipnsNode interface { +type ipnsRoot interface { fs.Node - fs.HandleWriter + fs.HandleReadDirAller + fs.NodeStringLookuper +} + +var _ ipnsRoot = (*Root)(nil) + +type ipnsNode interface { fs.HandleFlusher + fs.HandleReadDirAller + fs.HandleReader + fs.HandleWriter + fs.Node + fs.NodeCreater fs.NodeFsyncer fs.NodeMkdirer - fs.NodeOpener fs.NodeMknoder - fs.NodeCreater + fs.NodeOpener fs.NodeRemover fs.NodeRenamer + fs.NodeStringLookuper } var _ ipnsNode = (*Node)(nil) diff --git a/fuse/readonly/readonly_unix.go b/fuse/readonly/readonly_unix.go index 72767037e..543ec0d4a 100644 --- a/fuse/readonly/readonly_unix.go +++ b/fuse/readonly/readonly_unix.go @@ -67,8 +67,8 @@ func (s *Root) Lookup(ctx context.Context, name string) (fs.Node, error) { return &Node{Ipfs: s.Ipfs, Nd: nd}, nil } -// ReadDir reads a particular directory. Disallowed for root. -func (*Root) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { +// ReadDirAll reads a particular directory. Disallowed for root. +func (*Root) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { log.Debug("Read Root.") 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 } -// ReadDir reads the link structure as directory entries -func (s *Node) ReadDir(ctx context.Context) ([]fuse.Dirent, error) { +// ReadDirAll reads the link structure as directory entries +func (s *Node) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { log.Debug("Node ReadDir") entries := make([]fuse.Dirent, len(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 +type roRoot interface { + fs.Node + fs.HandleReadDirAller + fs.NodeStringLookuper +} + +var _ roRoot = (*Root)(nil) + type roNode interface { + fs.HandleReadDirAller + fs.HandleReader fs.Node fs.NodeStringLookuper - fs.HandleReader } var _ roNode = (*Node)(nil)