diff --git a/cmd/serve/s3/backend.go b/cmd/serve/s3/backend.go index 4e88e418f..ef5aa57f6 100644 --- a/cmd/serve/s3/backend.go +++ b/cmd/serve/s3/backend.go @@ -10,8 +10,8 @@ import ( "strings" "sync" - "github.com/Mikubill/gofakes3" "github.com/ncw/swift/v2" + "github.com/rclone/gofakes3" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/vfs" ) @@ -39,7 +39,7 @@ func newBackend(vfs *vfs.VFS, opt *Options) gofakes3.Backend { } // ListBuckets always returns the default bucket. -func (b *s3Backend) ListBuckets() ([]gofakes3.BucketInfo, error) { +func (b *s3Backend) ListBuckets(ctx context.Context) ([]gofakes3.BucketInfo, error) { dirEntries, err := getDirEntries("/", b.vfs) if err != nil { return nil, err @@ -59,7 +59,7 @@ func (b *s3Backend) ListBuckets() ([]gofakes3.BucketInfo, error) { } // ListBucket lists the objects in the given bucket. -func (b *s3Backend) ListBucket(bucket string, prefix *gofakes3.Prefix, page gofakes3.ListBucketPage) (*gofakes3.ObjectList, error) { +func (b *s3Backend) ListBucket(ctx context.Context, bucket string, prefix *gofakes3.Prefix, page gofakes3.ListBucketPage) (*gofakes3.ObjectList, error) { _, err := b.vfs.Stat(bucket) if err != nil { return nil, gofakes3.BucketNotFound(bucket) @@ -93,7 +93,7 @@ func (b *s3Backend) ListBucket(bucket string, prefix *gofakes3.Prefix, page gofa // HeadObject returns the fileinfo for the given object name. // // Note that the metadata is not supported yet. -func (b *s3Backend) HeadObject(bucketName, objectName string) (*gofakes3.Object, error) { +func (b *s3Backend) HeadObject(ctx context.Context, bucketName, objectName string) (*gofakes3.Object, error) { _, err := b.vfs.Stat(bucketName) if err != nil { return nil, gofakes3.BucketNotFound(bucketName) @@ -140,7 +140,7 @@ func (b *s3Backend) HeadObject(bucketName, objectName string) (*gofakes3.Object, } // GetObject fetchs the object from the filesystem. -func (b *s3Backend) GetObject(bucketName, objectName string, rangeRequest *gofakes3.ObjectRangeRequest) (obj *gofakes3.Object, err error) { +func (b *s3Backend) GetObject(ctx context.Context, bucketName, objectName string, rangeRequest *gofakes3.ObjectRangeRequest) (obj *gofakes3.Object, err error) { _, err = b.vfs.Stat(bucketName) if err != nil { return nil, gofakes3.BucketNotFound(bucketName) @@ -214,7 +214,7 @@ func (b *s3Backend) GetObject(bucketName, objectName string, rangeRequest *gofak } // TouchObject creates or updates meta on specified object. -func (b *s3Backend) TouchObject(fp string, meta map[string]string) (result gofakes3.PutObjectResult, err error) { +func (b *s3Backend) TouchObject(ctx context.Context, fp string, meta map[string]string) (result gofakes3.PutObjectResult, err error) { _, err = b.vfs.Stat(fp) if err == vfs.ENOENT { f, err := b.vfs.Create(fp) @@ -222,7 +222,7 @@ func (b *s3Backend) TouchObject(fp string, meta map[string]string) (result gofak return result, err } _ = f.Close() - return b.TouchObject(fp, meta) + return b.TouchObject(ctx, fp, meta) } else if err != nil { return result, err } @@ -255,6 +255,7 @@ func (b *s3Backend) TouchObject(fp string, meta map[string]string) (result gofak // PutObject creates or overwrites the object with the given name. func (b *s3Backend) PutObject( + ctx context.Context, bucketName, objectName string, meta map[string]string, input io.Reader, size int64, @@ -323,7 +324,7 @@ func (b *s3Backend) PutObject( } // DeleteMulti deletes multiple objects in a single request. -func (b *s3Backend) DeleteMulti(bucketName string, objects ...string) (result gofakes3.MultiDeleteResult, rerr error) { +func (b *s3Backend) DeleteMulti(ctx context.Context, bucketName string, objects ...string) (result gofakes3.MultiDeleteResult, rerr error) { for _, object := range objects { if err := b.deleteObject(bucketName, object); err != nil { fs.Errorf("serve s3", "delete object failed: %v", err) @@ -343,7 +344,7 @@ func (b *s3Backend) DeleteMulti(bucketName string, objects ...string) (result go } // DeleteObject deletes the object with the given name. -func (b *s3Backend) DeleteObject(bucketName, objectName string) (result gofakes3.ObjectDeleteResult, rerr error) { +func (b *s3Backend) DeleteObject(ctx context.Context, bucketName, objectName string) (result gofakes3.ObjectDeleteResult, rerr error) { return result, b.deleteObject(bucketName, objectName) } @@ -367,7 +368,7 @@ func (b *s3Backend) deleteObject(bucketName, objectName string) error { } // CreateBucket creates a new bucket. -func (b *s3Backend) CreateBucket(name string) error { +func (b *s3Backend) CreateBucket(ctx context.Context, name string) error { _, err := b.vfs.Stat(name) if err != nil && err != vfs.ENOENT { return gofakes3.ErrInternal @@ -384,7 +385,7 @@ func (b *s3Backend) CreateBucket(name string) error { } // DeleteBucket deletes the bucket with the given name. -func (b *s3Backend) DeleteBucket(name string) error { +func (b *s3Backend) DeleteBucket(ctx context.Context, name string) error { _, err := b.vfs.Stat(name) if err != nil { return gofakes3.BucketNotFound(name) @@ -398,7 +399,7 @@ func (b *s3Backend) DeleteBucket(name string) error { } // BucketExists checks if the bucket exists. -func (b *s3Backend) BucketExists(name string) (exists bool, err error) { +func (b *s3Backend) BucketExists(ctx context.Context, name string) (exists bool, err error) { _, err = b.vfs.Stat(name) if err != nil { return false, nil @@ -408,7 +409,7 @@ func (b *s3Backend) BucketExists(name string) (exists bool, err error) { } // CopyObject copy specified object from srcKey to dstKey. -func (b *s3Backend) CopyObject(srcBucket, srcKey, dstBucket, dstKey string, meta map[string]string) (result gofakes3.CopyObjectResult, err error) { +func (b *s3Backend) CopyObject(ctx context.Context, srcBucket, srcKey, dstBucket, dstKey string, meta map[string]string) (result gofakes3.CopyObjectResult, err error) { fp := path.Join(srcBucket, srcKey) if srcBucket == dstBucket && srcKey == dstKey { b.meta.Store(fp, meta) @@ -433,7 +434,7 @@ func (b *s3Backend) CopyObject(srcBucket, srcKey, dstBucket, dstKey string, meta return } - c, err := b.GetObject(srcBucket, srcKey, nil) + c, err := b.GetObject(ctx, srcBucket, srcKey, nil) if err != nil { return } @@ -450,7 +451,7 @@ func (b *s3Backend) CopyObject(srcBucket, srcKey, dstBucket, dstKey string, meta meta["mtime"] = swift.TimeToFloatString(cStat.ModTime()) } - _, err = b.PutObject(dstBucket, dstKey, meta, c.Contents, c.Size) + _, err = b.PutObject(ctx, dstBucket, dstKey, meta, c.Contents, c.Size) if err != nil { return } diff --git a/cmd/serve/s3/list.go b/cmd/serve/s3/list.go index d23736152..210249669 100644 --- a/cmd/serve/s3/list.go +++ b/cmd/serve/s3/list.go @@ -4,7 +4,7 @@ import ( "path" "strings" - "github.com/Mikubill/gofakes3" + "github.com/rclone/gofakes3" ) func (b *s3Backend) entryListR(bucket, fdPath, name string, addPrefix bool, response *gofakes3.ObjectList) error { diff --git a/cmd/serve/s3/logger.go b/cmd/serve/s3/logger.go index 8c9b3067b..c96865edc 100644 --- a/cmd/serve/s3/logger.go +++ b/cmd/serve/s3/logger.go @@ -3,7 +3,7 @@ package s3 import ( "fmt" - "github.com/Mikubill/gofakes3" + "github.com/rclone/gofakes3" "github.com/rclone/rclone/fs" ) diff --git a/cmd/serve/s3/pager.go b/cmd/serve/s3/pager.go index 1aa3c5e68..953f947d2 100644 --- a/cmd/serve/s3/pager.go +++ b/cmd/serve/s3/pager.go @@ -4,7 +4,7 @@ package s3 import ( "sort" - "github.com/Mikubill/gofakes3" + "github.com/rclone/gofakes3" ) // pager splits the object list into smulitply pages. diff --git a/cmd/serve/s3/server.go b/cmd/serve/s3/server.go index b9e9a7550..a1ef38262 100644 --- a/cmd/serve/s3/server.go +++ b/cmd/serve/s3/server.go @@ -7,8 +7,8 @@ import ( "math/rand" "net/http" - "github.com/Mikubill/gofakes3" "github.com/go-chi/chi/v5" + "github.com/rclone/gofakes3" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/hash" httplib "github.com/rclone/rclone/lib/http" diff --git a/cmd/serve/s3/utils.go b/cmd/serve/s3/utils.go index c61283cc6..cb861d3f1 100644 --- a/cmd/serve/s3/utils.go +++ b/cmd/serve/s3/utils.go @@ -9,7 +9,7 @@ import ( "path" "strings" - "github.com/Mikubill/gofakes3" + "github.com/rclone/gofakes3" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/hash" "github.com/rclone/rclone/vfs" diff --git a/go.mod b/go.mod index 0dfa25a5c..ffbeed00c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,6 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azfile v1.1.1 github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 github.com/Max-Sum/base32768 v0.0.0-20230304063302-18e6ce5945fd - github.com/Mikubill/gofakes3 v0.0.3-0.20230622102024-284c0f988700 github.com/Unknwon/goconfig v1.0.0 github.com/a8m/tree v0.0.0-20240104212747-2c8764a5f17e github.com/aalpar/deheap v0.0.0-20210914013432-0cc84d79dec3 @@ -158,6 +157,7 @@ require ( github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 // indirect + github.com/rclone/gofakes3 v0.0.3-0.20240413171058-b7a9fdb78ddb // indirect github.com/relvacode/iso8601 v1.3.0 // indirect github.com/rs/xid v1.5.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect diff --git a/go.sum b/go.sum index 1e9409150..80a4a1f7b 100644 --- a/go.sum +++ b/go.sum @@ -60,8 +60,6 @@ github.com/Max-Sum/base32768 v0.0.0-20230304063302-18e6ce5945fd/go.mod h1:C8yoIf github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/Mikubill/gofakes3 v0.0.3-0.20230622102024-284c0f988700 h1:r3fp2/Ro+0RtpjNY0/wsbN7vRmCW//dXTOZDQTct25Q= -github.com/Mikubill/gofakes3 v0.0.3-0.20230622102024-284c0f988700/go.mod h1:OSXqXEGUe9CmPiwLMMnVrbXonMf4BeLBkBdLufxxiyY= github.com/ProtonMail/bcrypt v0.0.0-20210511135022-227b4adcab57/go.mod h1:HecWFHognK8GfRDGnFQbW/LiV7A3MX3gZVs45vk5h8I= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs69zUkSzubzjBbL+cmOXgnmt9Fyd9ug= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo= @@ -458,6 +456,10 @@ github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5 github.com/quic-go/quic-go v0.40.1 h1:X3AGzUNFs0jVuO3esAGnTfvdgvL4fq655WaOi1snv1Q= github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 h1:UVArwN/wkKjMVhh2EQGC0tEc1+FqiLlvYXY5mQ2f8Wg= github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93/go.mod h1:Nfe4efndBz4TibWycNE+lqyJZiMX4ycx+QKV8Ta0f/o= +github.com/rclone/gofakes3 v0.0.3-0.20240413163749-372c3e746e45 h1:qrH/G7j3Ru2E6tuKaNvpA+KD9uQSujTTMyQoonCJ7kU= +github.com/rclone/gofakes3 v0.0.3-0.20240413163749-372c3e746e45/go.mod h1:L0VIBE0mT6ArN/5dfHsJm3UjqCpi5B/cdN+qWDNh7ko= +github.com/rclone/gofakes3 v0.0.3-0.20240413171058-b7a9fdb78ddb h1:HJJ7XgRBfXew3EosVk45aGPJRY5wSTSpmAJqz8Kiw0w= +github.com/rclone/gofakes3 v0.0.3-0.20240413171058-b7a9fdb78ddb/go.mod h1:L0VIBE0mT6ArN/5dfHsJm3UjqCpi5B/cdN+qWDNh7ko= github.com/relvacode/iso8601 v1.3.0 h1:HguUjsGpIMh/zsTczGN3DVJFxTU/GX+MMmzcKoMO7ko= github.com/relvacode/iso8601 v1.3.0/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I= github.com/rfjakob/eme v1.1.2 h1:SxziR8msSOElPayZNFfQw4Tjx/Sbaeeh3eRvrHVMUs4=