From 0b811e13b9251723d24fa838a4524df6b44f6596 Mon Sep 17 00:00:00 2001 From: "(Moai Emoji)" <25407129+SandiyosDev@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:29:12 +0800 Subject: [PATCH] Remove empty directories on Clean Generated Files with Blobs (#6749) --- internal/manager/task/clean_generated.go | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/internal/manager/task/clean_generated.go b/internal/manager/task/clean_generated.go index a59bda6d1..378268a17 100644 --- a/internal/manager/task/clean_generated.go +++ b/internal/manager/task/clean_generated.go @@ -313,9 +313,36 @@ func (j *CleanGeneratedJob) cleanBlobFiles(ctx context.Context, progress *job.Pr return err } + // remove empty hash prefix subdirectories + j.removeEmptyDirs(j.Paths.Blobs) + return nil } +func (j *CleanGeneratedJob) removeEmptyDirs(root string) { + entries, err := os.ReadDir(root) + if err != nil { + return + } + + for _, entry := range entries { + if !entry.IsDir() { + continue + } + + dirPath := filepath.Join(root, entry.Name()) + subEntries, err := os.ReadDir(dirPath) + if err != nil { + continue + } + + if len(subEntries) == 0 { + j.logDelete("removing empty directory: %s", entry.Name()) + j.deleteDir(dirPath) + } + } +} + func (j *CleanGeneratedJob) getScenesWithHash(ctx context.Context, hash string) ([]*models.Scene, error) { fp := models.Fingerprint{ Fingerprint: hash, @@ -637,6 +664,8 @@ func (j *CleanGeneratedJob) cleanMarkerFiles(ctx context.Context, progress *job. return err } + j.removeEmptyDirs(j.Paths.Generated.Markers) + return nil } @@ -730,5 +759,7 @@ func (j *CleanGeneratedJob) cleanThumbnailFiles(ctx context.Context, progress *j return err } + j.removeEmptyDirs(j.Paths.Generated.Thumbnails) + return nil }