From 9f131eee6bcf3f82e3d2d1cb173c050386bf886e Mon Sep 17 00:00:00 2001 From: Eric P Date: Thu, 20 Apr 2023 15:00:55 +0200 Subject: [PATCH] lib/ignore: Properly handle non-existing included ignore-files (fixes #8764) (#8874) In the sequence of loading ignores, the error File Does Not Exist is not being considered a fatal error, since the .stignore file is allowed to not exist. However, included ignore files also tossed that same error in case those do not exist while in those cases it's considered an error and it should lead to the folder stopping. Changing the error when opening an included ignore file to something other than the regular does fix this issue, as in it now works again as described in the Documentation. --- lib/ignore/ignore.go | 10 +++++++++- lib/ignore/ignore_test.go | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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") + } + } } }