From 61101a60f4c3514fc435129a97815e9c7818ae32 Mon Sep 17 00:00:00 2001 From: Andy Hsu Date: Mon, 10 Jul 2023 14:55:19 +0800 Subject: [PATCH] fix(s3): unable to copy empty folder (close #4620) --- drivers/s3/driver.go | 4 ++-- drivers/s3/util.go | 10 +++++----- internal/model/args.go | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/s3/driver.go b/drivers/s3/driver.go index 6f25c00a902..e888ecf8969 100644 --- a/drivers/s3/driver.go +++ b/drivers/s3/driver.go @@ -53,9 +53,9 @@ func (d *S3) Drop(ctx context.Context) error { func (d *S3) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { if d.ListObjectVersion == "v2" { - return d.listV2(dir.GetPath()) + return d.listV2(dir.GetPath(), args) } - return d.listV1(dir.GetPath()) + return d.listV1(dir.GetPath(), args) } func (d *S3) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) { diff --git a/drivers/s3/util.go b/drivers/s3/util.go index dd27ab58960..40e11190567 100644 --- a/drivers/s3/util.go +++ b/drivers/s3/util.go @@ -69,7 +69,7 @@ func getPlaceholderName(placeholder string) string { return placeholder } -func (d *S3) listV1(prefix string) ([]model.Obj, error) { +func (d *S3) listV1(prefix string, args model.ListArgs) ([]model.Obj, error) { prefix = getKey(prefix, true) log.Debugf("list: %s", prefix) files := make([]model.Obj, 0) @@ -97,7 +97,7 @@ func (d *S3) listV1(prefix string) ([]model.Obj, error) { } for _, object := range listObjectsResult.Contents { name := path.Base(*object.Key) - if name == getPlaceholderName(d.Placeholder) || name == d.Placeholder { + if !args.S3ShowPlaceholder && (name == getPlaceholderName(d.Placeholder) || name == d.Placeholder) { continue } file := model.Object{ @@ -120,7 +120,7 @@ func (d *S3) listV1(prefix string) ([]model.Obj, error) { return files, nil } -func (d *S3) listV2(prefix string) ([]model.Obj, error) { +func (d *S3) listV2(prefix string, args model.ListArgs) ([]model.Obj, error) { prefix = getKey(prefix, true) files := make([]model.Obj, 0) var continuationToken, startAfter *string @@ -152,7 +152,7 @@ func (d *S3) listV2(prefix string) ([]model.Obj, error) { continue } name := path.Base(*object.Key) - if name == getPlaceholderName(d.Placeholder) || name == d.Placeholder { + if !args.S3ShowPlaceholder && (name == getPlaceholderName(d.Placeholder) || name == d.Placeholder) { continue } file := model.Object{ @@ -198,7 +198,7 @@ func (d *S3) copyFile(ctx context.Context, src string, dst string) error { } func (d *S3) copyDir(ctx context.Context, src string, dst string) error { - objs, err := op.List(ctx, d, src, model.ListArgs{}) + objs, err := op.List(ctx, d, src, model.ListArgs{S3ShowPlaceholder: true}) if err != nil { return err } diff --git a/internal/model/args.go b/internal/model/args.go index be8fa7dad16..8801a0b7f03 100644 --- a/internal/model/args.go +++ b/internal/model/args.go @@ -7,7 +7,8 @@ import ( ) type ListArgs struct { - ReqPath string + ReqPath string + S3ShowPlaceholder bool } type LinkArgs struct {