s3: fix "Entry doesn't belong in directory" errors when using directory markers

Before this change we were incorrectly identifying the root directory
of the listing and adding it into the listing.

This caused higher layers of rclone to emit the error above.

See #7038
This commit is contained in:
Nick Craig-Wood 2023-06-10 14:18:59 +01:00
parent 72b79504ea
commit 5f938fb9ed

View File

@ -3727,11 +3727,7 @@ func (f *Fs) list(ctx context.Context, opt listOpt, fn listFn) error {
fs.Logf(f, "Odd name received %q", remote) fs.Logf(f, "Odd name received %q", remote)
continue continue
} }
remote = remote[len(opt.prefix):]
isDirectory := (remote == "" || strings.HasSuffix(remote, "/")) && object.Size != nil && *object.Size == 0 isDirectory := (remote == "" || strings.HasSuffix(remote, "/")) && object.Size != nil && *object.Size == 0
if opt.addBucket {
remote = bucket.Join(opt.bucket, remote)
}
// is this a directory marker? // is this a directory marker?
if isDirectory { if isDirectory {
if opt.noSkipMarkers { if opt.noSkipMarkers {
@ -3746,6 +3742,10 @@ func (f *Fs) list(ctx context.Context, opt listOpt, fn listFn) error {
remote = strings.TrimRight(remote, "/") remote = strings.TrimRight(remote, "/")
} }
} }
remote = remote[len(opt.prefix):]
if opt.addBucket {
remote = bucket.Join(opt.bucket, remote)
}
if versionIDs != nil { if versionIDs != nil {
err = fn(remote, object, versionIDs[i], isDirectory) err = fn(remote, object, versionIDs[i], isDirectory)
} else { } else {