diff --git a/lib/ignore/ignore.go b/lib/ignore/ignore.go index 22471657..e1a833ed 100644 --- a/lib/ignore/ignore.go +++ b/lib/ignore/ignore.go @@ -156,6 +156,8 @@ func (m *Matcher) parseLocked(r io.Reader, file string) error { // Error is saved and returned at the end. We process the patterns // (possibly blank) anyway. + m.lines = lines + newHash := hashPatterns(patterns) if newHash == m.curHash { // We've already loaded exactly these patterns. @@ -163,7 +165,6 @@ func (m *Matcher) parseLocked(r io.Reader, file string) error { } m.curHash = newHash - m.lines = lines m.patterns = patterns if m.withCache { m.matches = newCache(patterns) diff --git a/lib/ignore/ignore_test.go b/lib/ignore/ignore_test.go index 108687c7..f15ffd9b 100644 --- a/lib/ignore/ignore_test.go +++ b/lib/ignore/ignore_test.go @@ -956,3 +956,28 @@ func TestIssue4680(t *testing.T) { } } } + +func TestIssue4689(t *testing.T) { + stignore := `// orig` + + pats := New(fs.NewFilesystem(fs.FilesystemTypeBasic, "."), WithCache(true)) + err := pats.Parse(bytes.NewBufferString(stignore), ".stignore") + if err != nil { + t.Fatal(err) + } + + if lines := pats.Lines(); len(lines) != 1 || lines[0] != "// orig" { + t.Fatalf("wrong lines parsing original comment:\n%q", lines) + } + + stignore = `// new` + + err = pats.Parse(bytes.NewBufferString(stignore), ".stignore") + if err != nil { + t.Fatal(err) + } + + if lines := pats.Lines(); len(lines) != 1 || lines[0] != "// new" { + t.Fatalf("wrong lines parsing changed comment:\n%v", lines) + } +}