Compare commits

..

1 Commits

Author SHA1 Message Date
Douwe
736f30e62c
Merge 517c1b76f4 into bcccae7f9c 2026-01-19 13:18:43 +00:00
2 changed files with 12 additions and 26 deletions

View File

@ -11,7 +11,7 @@ from pathlib import Path
from playhouse.sqlite_ext import SqliteExtDatabase
from frigate.config import CameraConfig, FrigateConfig, RetainModeEnum
from frigate.const import CACHE_DIR, CLIPS_DIR, MAX_WAL_SIZE, RECORD_DIR
from frigate.const import CACHE_DIR, CLIPS_DIR, MAX_WAL_SIZE
from frigate.models import Previews, Recordings, ReviewSegment, UserReviewStatus
from frigate.util.builtin import clear_and_unlink
from frigate.util.media import remove_empty_directories
@ -376,5 +376,5 @@ class RecordingCleanup(threading.Thread):
if counter == 0:
self.clean_tmp_clips()
maybe_empty_dirs = self.expire_recordings()
remove_empty_directories(Path(RECORD_DIR), maybe_empty_dirs)
remove_empty_directories(maybe_empty_dirs)
self.truncate_wal()

View File

@ -50,36 +50,22 @@ class SyncResult:
}
def remove_empty_directories(root: Path, paths: Iterable[Path]) -> None:
def remove_empty_directories(paths: Iterable[Path]) -> None:
"""
Remove directories if they exist and are empty.
Silently ignores non-existent and non-empty directories.
Attempts to remove parent directories as well, stopping at the given root.
"""
count = 0
while True:
parents = set()
for path in paths:
if path == root:
for path in paths:
try:
path.rmdir()
except FileNotFoundError:
continue
except OSError as e:
if e.errno == errno.ENOTEMPTY:
continue
try:
path.rmdir()
count += 1
except FileNotFoundError:
pass
except OSError as e:
if e.errno == errno.ENOTEMPTY:
continue
raise
parents.add(path.parent)
if not parents:
break
paths = parents
raise
count += 1
logger.debug("Removed {count} empty directories")