mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-26 07:28:20 +08:00
code cleanup
This commit is contained in:
@ -60,7 +60,7 @@ func (d *Directory) Open(tpath []string, mode int) (*File, error) {
|
|||||||
return nfi, nil
|
return nfi, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, ErrNoSuch
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
dir, err := d.childDir(tpath[0])
|
dir, err := d.childDir(tpath[0])
|
||||||
@ -99,16 +99,14 @@ func (d *Directory) Type() NodeType {
|
|||||||
return TDir
|
return TDir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// childFile returns a file under this directory by the given name if it exists
|
||||||
func (d *Directory) childFile(name string) (*File, error) {
|
func (d *Directory) childFile(name string) (*File, error) {
|
||||||
fi, ok := d.files[name]
|
fi, ok := d.files[name]
|
||||||
if ok {
|
if ok {
|
||||||
return fi, nil
|
return fi, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// search dag
|
nd, err := d.childFromDag(name)
|
||||||
for _, lnk := range d.node.Links {
|
|
||||||
if lnk.Name == name {
|
|
||||||
nd, err := lnk.GetNode(d.fs.dserv)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -133,22 +131,20 @@ func (d *Directory) childFile(name string) (*File, error) {
|
|||||||
return nil, ErrInvalidChild
|
return nil, ErrInvalidChild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil, ErrNoSuch
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// childDir returns a directory under this directory by the given name if it
|
||||||
|
// exists.
|
||||||
func (d *Directory) childDir(name string) (*Directory, error) {
|
func (d *Directory) childDir(name string) (*Directory, error) {
|
||||||
dir, ok := d.childDirs[name]
|
dir, ok := d.childDirs[name]
|
||||||
if ok {
|
if ok {
|
||||||
return dir, nil
|
return dir, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, lnk := range d.node.Links {
|
nd, err := d.childFromDag(name)
|
||||||
if lnk.Name == name {
|
|
||||||
nd, err := lnk.GetNode(d.fs.dserv)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
i, err := ft.FromBytes(nd.Data)
|
i, err := ft.FromBytes(nd.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -168,17 +164,27 @@ func (d *Directory) childDir(name string) (*Directory, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// childFromDag searches through this directories dag node for a child link
|
||||||
|
// with the given name
|
||||||
|
func (d *Directory) childFromDag(name string) (*dag.Node, error) {
|
||||||
|
for _, lnk := range d.node.Links {
|
||||||
|
if lnk.Name == name {
|
||||||
|
return lnk.GetNode(d.fs.dserv)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, ErrNoSuch
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Child returns the child of this directory by the given name
|
||||||
func (d *Directory) Child(name string) (FSNode, error) {
|
func (d *Directory) Child(name string) (FSNode, error) {
|
||||||
d.lock.Lock()
|
d.lock.Lock()
|
||||||
defer d.lock.Unlock()
|
defer d.lock.Unlock()
|
||||||
return d.childUnsync(name)
|
return d.childUnsync(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// childUnsync returns the child under this directory by the given name
|
||||||
|
// without locking, useful for operations which already hold a lock
|
||||||
func (d *Directory) childUnsync(name string) (FSNode, error) {
|
func (d *Directory) childUnsync(name string) (FSNode, error) {
|
||||||
dir, err := d.childDir(name)
|
dir, err := d.childDir(name)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -189,7 +195,7 @@ func (d *Directory) childUnsync(name string) (FSNode, error) {
|
|||||||
return fi, nil
|
return fi, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, ErrNoSuch
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Directory) List() []string {
|
func (d *Directory) List() []string {
|
||||||
@ -245,56 +251,6 @@ func (d *Directory) Unlink(name string) error {
|
|||||||
return d.parent.closeChild(d.name, d.node)
|
return d.parent.closeChild(d.name, d.node)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenameEntry renames the child by 'oldname' of this directory to 'newname'
|
|
||||||
func (d *Directory) RenameEntry(oldname, newname string) error {
|
|
||||||
d.Lock()
|
|
||||||
defer d.Unlock()
|
|
||||||
// Is the child a directory?
|
|
||||||
dir, err := d.childDir(oldname)
|
|
||||||
if err == nil {
|
|
||||||
dir.name = newname
|
|
||||||
|
|
||||||
err := d.node.RemoveNodeLink(oldname)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = d.node.AddNodeLinkClean(newname, dir.node)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(d.childDirs, oldname)
|
|
||||||
d.childDirs[newname] = dir
|
|
||||||
return d.parent.closeChild(d.name, d.node)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is the child a file?
|
|
||||||
fi, err := d.childFile(oldname)
|
|
||||||
if err == nil {
|
|
||||||
fi.name = newname
|
|
||||||
|
|
||||||
err := d.node.RemoveNodeLink(oldname)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
nd, err := fi.GetNode()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = d.node.AddNodeLinkClean(newname, nd)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(d.childDirs, oldname)
|
|
||||||
d.files[newname] = fi
|
|
||||||
return d.parent.closeChild(d.name, d.node)
|
|
||||||
}
|
|
||||||
return ErrNoSuch
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddChild adds the node 'nd' under this directory giving it the name 'name'
|
// AddChild adds the node 'nd' under this directory giving it the name 'name'
|
||||||
func (d *Directory) AddChild(name string, nd *dag.Node) error {
|
func (d *Directory) AddChild(name string, nd *dag.Node) error {
|
||||||
d.Lock()
|
d.Lock()
|
||||||
|
@ -36,19 +36,21 @@ func NewFile(name string, node *dag.Node, parent childCloser, fs *Filesystem) (*
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Write(b []byte) (int, error) {
|
func (fi *File) Write(b []byte) (int, error) {
|
||||||
|
fi.Lock()
|
||||||
|
defer fi.Unlock()
|
||||||
fi.hasChanges = true
|
fi.hasChanges = true
|
||||||
return fi.mod.Write(b)
|
return fi.mod.Write(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Read(b []byte) (int, error) {
|
func (fi *File) Read(b []byte) (int, error) {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
return fi.mod.Read(b)
|
return fi.mod.Read(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Close() error {
|
func (fi *File) Close() error {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
if fi.hasChanges {
|
if fi.hasChanges {
|
||||||
err := fi.mod.Flush()
|
err := fi.mod.Flush()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -60,9 +62,9 @@ func (fi *File) Close() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fi.lock.Unlock()
|
fi.Unlock()
|
||||||
err = fi.parent.closeChild(fi.name, nd)
|
err = fi.parent.closeChild(fi.name, nd)
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -74,39 +76,39 @@ func (fi *File) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Flush() error {
|
func (fi *File) Flush() error {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
return fi.mod.Flush()
|
return fi.mod.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Seek(offset int64, whence int) (int64, error) {
|
func (fi *File) Seek(offset int64, whence int) (int64, error) {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
return fi.mod.Seek(offset, whence)
|
return fi.mod.Seek(offset, whence)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) WriteAt(b []byte, at int64) (int, error) {
|
func (fi *File) WriteAt(b []byte, at int64) (int, error) {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
fi.hasChanges = true
|
fi.hasChanges = true
|
||||||
return fi.mod.WriteAt(b, at)
|
return fi.mod.WriteAt(b, at)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Size() (int64, error) {
|
func (fi *File) Size() (int64, error) {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
return fi.mod.Size()
|
return fi.mod.Size()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) GetNode() (*dag.Node, error) {
|
func (fi *File) GetNode() (*dag.Node, error) {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
return fi.mod.GetNode()
|
return fi.mod.GetNode()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fi *File) Truncate(size int64) error {
|
func (fi *File) Truncate(size int64) error {
|
||||||
fi.lock.Lock()
|
fi.Lock()
|
||||||
defer fi.lock.Unlock()
|
defer fi.Unlock()
|
||||||
fi.hasChanges = true
|
fi.hasChanges = true
|
||||||
return fi.mod.Truncate(size)
|
return fi.mod.Truncate(size)
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package ipnsfs
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -21,8 +22,6 @@ var log = eventlog.Logger("ipnsfs")
|
|||||||
|
|
||||||
var ErrIsDirectory = errors.New("error: is a directory")
|
var ErrIsDirectory = errors.New("error: is a directory")
|
||||||
|
|
||||||
var ErrNoSuch = errors.New("no such file or directory")
|
|
||||||
|
|
||||||
// Filesystem is the writeable fuse filesystem structure
|
// Filesystem is the writeable fuse filesystem structure
|
||||||
type Filesystem struct {
|
type Filesystem struct {
|
||||||
dserv dag.DAGService
|
dserv dag.DAGService
|
||||||
@ -62,7 +61,7 @@ func (fs *Filesystem) Open(tpath string, mode int) (*File, error) {
|
|||||||
pathelem := strings.Split(tpath, "/")
|
pathelem := strings.Split(tpath, "/")
|
||||||
r, ok := fs.roots[pathelem[0]]
|
r, ok := fs.roots[pathelem[0]]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrNoSuch
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.Open(pathelem[1:], mode)
|
return r.Open(pathelem[1:], mode)
|
||||||
@ -83,7 +82,7 @@ func (fs *Filesystem) GetRoot(name string) (*KeyRoot, error) {
|
|||||||
if ok {
|
if ok {
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
return nil, ErrNoSuch
|
return nil, os.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
type NodeType int
|
type NodeType int
|
||||||
|
Reference in New Issue
Block a user