aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric P <eric@kastelo.net>2023-04-20 15:00:55 +0200
committerGitHub <noreply@github.com>2023-04-20 15:00:55 +0200
commit9f131eee6bcf3f82e3d2d1cb173c050386bf886e (patch)
tree5ddf615d78c7f26fa1096d6cdd07530525760812
parent09efe03e1dfd64f7b925266a7d743b19ae585b06 (diff)
downloadsyncthing-9f131eee6bcf3f82e3d2d1cb173c050386bf886e.tar.gz
syncthing-9f131eee6bcf3f82e3d2d1cb173c050386bf886e.zip
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.
-rw-r--r--lib/ignore/ignore.go10
-rw-r--r--lib/ignore/ignore_test.go5
2 files changed, 14 insertions, 1 deletions
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")
+ }
+ }
}
}