mirror of
https://github.com/rclone/rclone.git
synced 2024-11-24 09:51:17 +08:00
vfs: Add go-billy dependency and make sure vfs.Handle implements billy.File
billy defines a common file system interface that is used in multiple go packages. vfs.Handle implements billy.File mostly, only two methods needed to be added to make it compliant. An interface check is added as well. This is a preliminary work for adding serve nfs command.
This commit is contained in:
parent
7801b160f2
commit
25f59b2918
1
go.mod
1
go.mod
|
@ -26,6 +26,7 @@ require (
|
|||
github.com/gabriel-vasile/mimetype v1.4.2
|
||||
github.com/gdamore/tcell/v2 v2.6.0
|
||||
github.com/go-chi/chi/v5 v5.0.10
|
||||
github.com/go-git/go-billy/v5 v5.4.1
|
||||
github.com/google/uuid v1.3.1
|
||||
github.com/hanwen/go-fuse/v2 v2.3.0
|
||||
github.com/henrybear327/Proton-API-Bridge v0.0.0-20230908065933-5bfa15b567db
|
||||
|
|
2
go.sum
2
go.sum
|
@ -187,6 +187,8 @@ github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod
|
|||
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
||||
github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk=
|
||||
github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4=
|
||||
github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
|
|
|
@ -30,6 +30,16 @@ type RWFileHandle struct {
|
|||
writeCalled bool // if any Write() methods have been called
|
||||
}
|
||||
|
||||
// Lock performs Unix locking, not supported
|
||||
func (fh *RWFileHandle) Lock() error {
|
||||
return os.ErrInvalid
|
||||
}
|
||||
|
||||
// Unlock performs Unix unlocking, not supported
|
||||
func (fh *RWFileHandle) Unlock() error {
|
||||
return os.ErrInvalid
|
||||
}
|
||||
|
||||
func newRWFileHandle(d *Dir, f *File, flags int) (fh *RWFileHandle, err error) {
|
||||
defer log.Trace(f.Path(), "")("err=%v", &err)
|
||||
// get an item to represent this from the cache
|
||||
|
|
16
vfs/vfs.go
16
vfs/vfs.go
|
@ -32,6 +32,7 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/go-git/go-billy/v5"
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/fs/cache"
|
||||
"github.com/rclone/rclone/fs/log"
|
||||
|
@ -119,6 +120,8 @@ type Handle interface {
|
|||
Release() error
|
||||
Node() Node
|
||||
// Size() int64
|
||||
Lock() error
|
||||
Unlock() error
|
||||
}
|
||||
|
||||
// baseHandle implements all the missing methods
|
||||
|
@ -144,16 +147,19 @@ func (h baseHandle) WriteString(s string) (n int, err error) { retu
|
|||
func (h baseHandle) Flush() (err error) { return ENOSYS }
|
||||
func (h baseHandle) Release() (err error) { return ENOSYS }
|
||||
func (h baseHandle) Node() Node { return nil }
|
||||
func (h baseHandle) Unlock() error { return os.ErrInvalid }
|
||||
func (h baseHandle) Lock() error { return os.ErrInvalid }
|
||||
|
||||
//func (h baseHandle) Size() int64 { return 0 }
|
||||
|
||||
// Check interfaces
|
||||
var (
|
||||
_ OsFiler = (*os.File)(nil)
|
||||
_ Handle = (*baseHandle)(nil)
|
||||
_ Handle = (*ReadFileHandle)(nil)
|
||||
_ Handle = (*WriteFileHandle)(nil)
|
||||
_ Handle = (*DirHandle)(nil)
|
||||
_ OsFiler = (*os.File)(nil)
|
||||
_ Handle = (*baseHandle)(nil)
|
||||
_ Handle = (*ReadFileHandle)(nil)
|
||||
_ Handle = (*WriteFileHandle)(nil)
|
||||
_ Handle = (*DirHandle)(nil)
|
||||
_ billy.File = (Handle)(nil)
|
||||
)
|
||||
|
||||
// VFS represents the top level filing system
|
||||
|
|
|
@ -48,6 +48,14 @@ func (f realOsFile) Node() vfs.Node {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (f realOsFile) Lock() error {
|
||||
return os.ErrInvalid
|
||||
}
|
||||
|
||||
func (f realOsFile) Unlock() error {
|
||||
return os.ErrInvalid
|
||||
}
|
||||
|
||||
// Chtimes
|
||||
func (r realOs) Chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||
return os.Chtimes(name, atime, mtime)
|
||||
|
|
Loading…
Reference in New Issue
Block a user