mirror of
https://github.com/pgsty/minio.git
synced 2026-07-22 13:40:22 +03:00
Support for "directory" objects (#10499)
This commit is contained in:
+36
-5
@@ -57,6 +57,9 @@ func filterMatchingPrefix(entries []string, prefixEntry string) []string {
|
||||
// isLeaf should be done in listDir()
|
||||
func delayIsLeafCheck(entries []string) bool {
|
||||
for i, entry := range entries {
|
||||
if HasSuffix(entry, globalDirSuffixWithSlash) {
|
||||
return false
|
||||
}
|
||||
if i == len(entries)-1 {
|
||||
break
|
||||
}
|
||||
@@ -96,7 +99,20 @@ func filterListEntries(bucket, prefixDir string, entries []string, prefixEntry s
|
||||
entries = filterMatchingPrefix(entries, prefixEntry)
|
||||
|
||||
// Listing needs to be sorted.
|
||||
sort.Strings(entries)
|
||||
sort.Slice(entries, func(i, j int) bool {
|
||||
if !HasSuffix(entries[i], globalDirSuffixWithSlash) && !HasSuffix(entries[j], globalDirSuffixWithSlash) {
|
||||
return entries[i] < entries[j]
|
||||
}
|
||||
first := entries[i]
|
||||
second := entries[j]
|
||||
if HasSuffix(first, globalDirSuffixWithSlash) {
|
||||
first = strings.TrimSuffix(first, globalDirSuffixWithSlash) + slashSeparator
|
||||
}
|
||||
if HasSuffix(second, globalDirSuffixWithSlash) {
|
||||
second = strings.TrimSuffix(second, globalDirSuffixWithSlash) + slashSeparator
|
||||
}
|
||||
return first < second
|
||||
})
|
||||
|
||||
// Can isLeaf() check be delayed till when it has to be sent down the
|
||||
// TreeWalkResult channel?
|
||||
@@ -114,8 +130,23 @@ func filterListEntries(bucket, prefixDir string, entries []string, prefixEntry s
|
||||
|
||||
// Sort again after removing trailing "/" for objects as the previous sort
|
||||
// does not hold good anymore.
|
||||
sort.Strings(entries)
|
||||
|
||||
sort.Slice(entries, func(i, j int) bool {
|
||||
if !HasSuffix(entries[i], globalDirSuffix) && !HasSuffix(entries[j], globalDirSuffix) {
|
||||
return entries[i] < entries[j]
|
||||
}
|
||||
first := entries[i]
|
||||
second := entries[j]
|
||||
if HasSuffix(first, globalDirSuffix) {
|
||||
first = strings.TrimSuffix(first, globalDirSuffix) + slashSeparator
|
||||
}
|
||||
if HasSuffix(second, globalDirSuffix) {
|
||||
second = strings.TrimSuffix(second, globalDirSuffix) + slashSeparator
|
||||
}
|
||||
if first == second {
|
||||
return HasSuffix(entries[i], globalDirSuffix)
|
||||
}
|
||||
return first < second
|
||||
})
|
||||
return entries, false
|
||||
}
|
||||
|
||||
@@ -169,10 +200,10 @@ func doTreeWalk(ctx context.Context, bucket, prefixDir, entryPrefixMatch, marker
|
||||
entry = strings.TrimSuffix(entry, slashSeparator)
|
||||
}
|
||||
} else {
|
||||
leaf = !strings.HasSuffix(entry, slashSeparator)
|
||||
leaf = !HasSuffix(entry, slashSeparator)
|
||||
}
|
||||
|
||||
if strings.HasSuffix(entry, slashSeparator) {
|
||||
if HasSuffix(entry, slashSeparator) {
|
||||
leafDir = isLeafDir(bucket, pathJoin(prefixDir, entry))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user