forked from TrueCloudLab/distribution
Don't return the from of a walk
Other storage drivers will only return children and below, s3 should do the same. The only reason it was returning was because of the addition of a / to ensure we treat the from as a directory. Signed-off-by: James Hewitt <james.hewitt@uk.ibm.com>
This commit is contained in:
parent
f7bdd9127b
commit
7622d0a453
2 changed files with 14 additions and 15 deletions
|
@ -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),
|
||||
}
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in a new issue