diff --git a/lib/ignore/ignore.go b/lib/ignore/ignore.go index a26e73c7b..01960f3dd 100644 --- a/lib/ignore/ignore.go +++ b/lib/ignore/ignore.go @@ -406,11 +406,19 @@ func loadParseIncludeFile(filesystem fs.Filesystem, file string, cd ChangeDetect } if cd.Seen(filesystem, file) { - return nil, parseError(fmt.Errorf("multiple include of ignore file %q", file)) + return nil, errors.New("multiple include") } fd, info, err := loadIgnoreFile(filesystem, file) if err != nil { + // isNotExist is considered "ok" in a sense of that a folder doesn't have to act + // upon it. This is because it is allowed for .stignore to not exist. However, + // included ignore files are not allowed to be missing and these errors should be + // acted upon on. So we don't perserve the error chain here and manually set an + // error instead, if the file is missing. + if fs.IsNotExist(err) { + err = errors.New("file not found") + } return nil, err } defer fd.Close() diff --git a/lib/ignore/ignore_test.go b/lib/ignore/ignore_test.go index 231b926e9..cf1b590a6 100644 --- a/lib/ignore/ignore_test.go +++ b/lib/ignore/ignore_test.go @@ -197,6 +197,11 @@ func TestBadPatterns(t *testing.T) { if !IsParseError(err) { t.Error("Should have been a parse error:", err) } + if strings.HasPrefix(pat, "#include") { + if fs.IsNotExist(err) { + t.Error("Includes should not toss a regular isNotExist error") + } + } } }