From b3f8b941d8af4427fe4fdc70ae1a79fb15fab98b Mon Sep 17 00:00:00 2001 From: Catherine Date: Wed, 17 Sep 2025 10:03:39 +0000 Subject: [PATCH] [breaking-change] Split blob paths for S3 backend as well. --- src/backend.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/backend.go b/src/backend.go index 7157bfe..49bb364 100644 --- a/src/backend.go +++ b/src/backend.go @@ -11,6 +11,7 @@ import ( "io" "log" "os" + "path" "path/filepath" "slices" "strings" @@ -50,6 +51,15 @@ type Backend interface { DeleteManifest(name string) error } +func splitBlobName(name string) []string { + algo, hash, found := strings.Cut(name, "-") + if found { + return slices.Concat([]string{algo}, splitBlobName(hash)) + } else { + return []string{name[0:2], name[2:4], name[4:]} + } +} + type FSBackend struct { blobRoot *os.Root siteRoot *os.Root @@ -105,15 +115,6 @@ func (fs *FSBackend) Backend() Backend { return fs } -func splitBlobName(name string) []string { - algo, hash, found := strings.Cut(name, "-") - if found { - return slices.Concat([]string{algo}, splitBlobName(hash)) - } else { - return []string{name[0:2], name[2:4], name[4:]} - } -} - func (fs *FSBackend) GetBlob(name string) (io.ReadSeeker, time.Time, error) { blobPath := filepath.Join(splitBlobName(name)...) stat, err := fs.blobRoot.Stat(blobPath) @@ -320,7 +321,7 @@ func (s3 *S3Backend) Backend() Backend { } func blobObjectName(name string) string { - return fmt.Sprintf("blob/%s", name) + return fmt.Sprintf("blob/%s", path.Join(splitBlobName(name)...)) } func (s3 *S3Backend) GetBlob(name string) (io.ReadSeeker, time.Time, error) {