Skip to content

Commit 3704653

Browse files
committed
chore: delete empty target folder when doing tuf commit
Signed-off-by: Radoslav Dimitrov <[email protected]>
1 parent 92b967a commit 3704653

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

local_store.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in
410410
}
411411
return nil
412412
}
413+
// Checks if target file should be deleted
413414
needsRemoval := func(path string) bool {
414415
if consistentSnapshot {
415416
// strip out the hash
@@ -422,6 +423,19 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in
422423
_, ok := hashes[path]
423424
return !ok
424425
}
426+
// Checks if folder is empty
427+
folderNeedsRemoval := func(path string) bool {
428+
f, err := os.Open(path)
429+
if err != nil {
430+
return false
431+
}
432+
defer f.Close()
433+
_, err = f.Readdirnames(1)
434+
if err == io.EOF {
435+
return true
436+
}
437+
return false
438+
}
425439
removeFile := func(path string, info os.FileInfo, err error) error {
426440
if err != nil {
427441
return err
@@ -431,9 +445,17 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in
431445
return err
432446
}
433447
if !info.IsDir() && isTarget(rel) && needsRemoval(rel) {
448+
// Delete the target file
434449
if err := os.Remove(path); err != nil {
435450
return err
436451
}
452+
// Delete the target folder too if it's empty
453+
targetFolder := filepath.Dir(path)
454+
if folderNeedsRemoval(targetFolder) {
455+
if err := os.Remove(targetFolder); err != nil {
456+
return err
457+
}
458+
}
437459
}
438460
return nil
439461
}

0 commit comments

Comments
 (0)