lib/ignore: Don't create empty ".stignore" files (fixes #6190) (#6197)

This will:

1. prevent creation of a new .stignore if there are no ignore patterns
2. delete an existing .stignore if all ignore patterns are removed
This commit is contained in:
Marcus Legendre 2019-12-02 08:19:02 +01:00 committed by Jakob Borg
parent 0bec01b827
commit b3fd9a8d53
2 changed files with 43 additions and 0 deletions

View File

@ -545,6 +545,14 @@ func parseIgnoreFile(fs fs.Filesystem, fd io.Reader, currentFile string, cd Chan
// WriteIgnores is a convenience function to avoid code duplication
func WriteIgnores(filesystem fs.Filesystem, path string, content []string) error {
if len(content) == 0 {
err := filesystem.Remove(path)
if fs.IsNotExist(err) {
return nil
}
return err
}
fd, err := osutil.CreateAtomicFilesystem(filesystem, path)
if err != nil {
return err

View File

@ -1514,6 +1514,41 @@ func TestIgnores(t *testing.T) {
changeIgnores(t, m, []string{})
}
func TestEmptyIgnores(t *testing.T) {
testOs := &fatalOs{t}
// Assure a clean start state
testOs.RemoveAll(filepath.Join("testdata", config.DefaultMarkerName))
testOs.MkdirAll(filepath.Join("testdata", config.DefaultMarkerName), 0644)
m := setupModel(defaultCfgWrapper)
defer cleanupModel(m)
m.removeFolder(defaultFolderConfig)
m.addFolder(defaultFolderConfig)
if err := m.SetIgnores("default", []string{}); err != nil {
t.Error(err)
}
if _, err := os.Stat("testdata/.stignore"); err == nil {
t.Error(".stignore was created despite being empty")
}
if err := m.SetIgnores("default", []string{".*", "quux"}); err != nil {
t.Error(err)
}
if _, err := os.Stat("testdata/.stignore"); os.IsNotExist(err) {
t.Error(".stignore does not exist")
}
if err := m.SetIgnores("default", []string{}); err != nil {
t.Error(err)
}
if _, err := os.Stat("testdata/.stignore"); err == nil {
t.Error(".stignore should have been deleted because it is empty")
}
}
func waitForState(t *testing.T, m *model, folder, status string) {
t.Helper()
timeout := time.Now().Add(2 * time.Second)