diff --git a/registry/storage/driver/s3-aws/s3.go b/registry/storage/driver/s3-aws/s3.go index 8753b3455..b83756a7f 100644 --- a/registry/storage/driver/s3-aws/s3.go +++ b/registry/storage/driver/s3-aws/s3.go @@ -1039,18 +1039,8 @@ func (d *driver) URLFor(ctx context.Context, path string, options map[string]int // Walk traverses a filesystem defined within driver, starting // from the given path, calling f on each file func (d *driver) Walk(ctx context.Context, from string, f storagedriver.WalkFn) error { - path := from - if !strings.HasSuffix(path, "/") { - path = path + "/" - } - - prefix := "" - if d.s3Path("") == "" { - prefix = "/" - } - var objectCount int64 - if err := d.doWalk(ctx, &objectCount, d.s3Path(path), prefix, f); err != nil { + if err := d.doWalk(ctx, &objectCount, from, f); err != nil { return err } @@ -1062,7 +1052,7 @@ func (d *driver) Walk(ctx context.Context, from string, f storagedriver.WalkFn) return nil } -func (d *driver) doWalk(parentCtx context.Context, objectCount *int64, path, prefix string, f storagedriver.WalkFn) error { +func (d *driver) doWalk(parentCtx context.Context, objectCount *int64, from string, f storagedriver.WalkFn) error { var ( retError error // the most recent directory walked for de-duping @@ -1070,11 +1060,21 @@ func (d *driver) doWalk(parentCtx context.Context, objectCount *int64, path, pre // the most recent skip directory to avoid walking over undesirable files prevSkipDir string ) - prevDir = strings.Replace(path, d.s3Path(""), prefix, 1) + prevDir = from + + path := from + if !strings.HasSuffix(path, "/") { + path = path + "/" + } + + prefix := "" + if d.s3Path("") == "" { + prefix = "/" + } listObjectsInput := &s3.ListObjectsV2Input{ Bucket: aws.String(d.Bucket), - Prefix: aws.String(path), + Prefix: aws.String(d.s3Path(path)), MaxKeys: aws.Int64(listMax), } diff --git a/registry/storage/driver/s3-aws/s3_test.go b/registry/storage/driver/s3-aws/s3_test.go index 08792f7f2..0330eafcc 100644 --- a/registry/storage/driver/s3-aws/s3_test.go +++ b/registry/storage/driver/s3-aws/s3_test.go @@ -604,7 +604,6 @@ func TestWalk(t *testing.T) { name: "from folder", fn: func(fileInfo storagedriver.FileInfo) error { return nil }, expected: []string{ - "/folder1", "/folder1/file1", }, from: "/folder1",