diff --git a/local_store.go b/local_store.go index 86eceefd..e6257e7b 100644 --- a/local_store.go +++ b/local_store.go @@ -410,6 +410,7 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in } return nil } + // Checks if target file should be deleted needsRemoval := func(path string) bool { if consistentSnapshot { // strip out the hash @@ -422,6 +423,16 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in _, ok := hashes[path] return !ok } + // Checks if folder is empty + folderNeedsRemoval := func(path string) bool { + f, err := os.Open(path) + if err != nil { + return false + } + defer f.Close() + _, err = f.Readdirnames(1) + return err == io.EOF + } removeFile := func(path string, info os.FileInfo, err error) error { if err != nil { return err @@ -431,11 +442,17 @@ func (f *fileSystemStore) Commit(consistentSnapshot bool, versions map[string]in return err } if !info.IsDir() && isTarget(rel) && needsRemoval(rel) { - //lint:ignore SA9003 empty branch + // Delete the target file if err := os.Remove(path); err != nil { - // TODO: log / handle error + return err + } + // Delete the target folder too if it's empty + targetFolder := filepath.Dir(path) + if folderNeedsRemoval(targetFolder) { + if err := os.Remove(targetFolder); err != nil { + return err + } } - // TODO: remove empty directory } return nil } diff --git a/repo_test.go b/repo_test.go index 1e46147c..d614d52c 100644 --- a/repo_test.go +++ b/repo_test.go @@ -1477,7 +1477,7 @@ func (rs *RepoSuite) TestManageMultipleTargets(c *C) { c.Assert(r.Snapshot(), IsNil) c.Assert(r.Timestamp(), IsNil) c.Assert(r.Commit(), IsNil) - tmp.assertEmpty("repository/targets") + tmp.assertNotExist("repository/targets") t, err := r.topLevelTargets() c.Assert(err, IsNil) c.Assert(t.Targets, HasLen, 0) diff --git a/verify/db_test.go b/verify/db_test.go index e4bab0a3..84031ffb 100644 --- a/verify/db_test.go +++ b/verify/db_test.go @@ -36,7 +36,7 @@ func TestDelegationsDB(t *testing.T) { { testName: "invalid keys", delegations: &data.Delegations{Keys: map[string]*data.PublicKey{ - "a": &data.PublicKey{Type: data.KeySchemeEd25519}, + "a": {Type: data.KeySchemeEd25519}, }}, initErr: ErrWrongID{}, },