From 92a23da3ec7d954923545242f2e55be106e8a8c9 Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Sat, 28 May 2016 04:17:34 +0000 Subject: [PATCH] lib/model: Make the (?d) prefix actually work GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3205 --- lib/model/model_test.go | 35 +++++++++++++++++++++++++++++++++++ lib/model/rwfolder.go | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/model/model_test.go b/lib/model/model_test.go index a774a16bb..138fa3dfc 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -25,6 +25,8 @@ import ( "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/connections" "github.com/syncthing/syncthing/lib/db" + "github.com/syncthing/syncthing/lib/ignore" + "github.com/syncthing/syncthing/lib/osutil" "github.com/syncthing/syncthing/lib/protocol" ) @@ -1420,6 +1422,39 @@ func TestIssue3028(t *testing.T) { } } +func TestIssue3164(t *testing.T) { + osutil.RemoveAll("testdata/issue3164") + defer osutil.RemoveAll("testdata/issue3164") + + if err := os.MkdirAll("testdata/issue3164/oktodelete/foobar", 0777); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile("testdata/issue3164/oktodelete/foobar/file", []byte("Hello"), 0644); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile("testdata/issue3164/oktodelete/file", []byte("Hello"), 0644); err != nil { + t.Fatal(err) + } + f := protocol.FileInfo{ + Name: "issue3164", + } + m := ignore.New(false) + if err := m.Parse(bytes.NewBufferString("(?d)oktodelete"), ""); err != nil { + t.Fatal(err) + } + + fl := rwFolder{ + dbUpdates: make(chan dbUpdateJob, 1), + dir: "testdata", + } + + fl.deleteDir(f, m) + + if _, err := os.Stat("testdata/issue3164"); !os.IsNotExist(err) { + t.Fatal(err) + } +} + type fakeAddr struct{} func (fakeAddr) Network() string { diff --git a/lib/model/rwfolder.go b/lib/model/rwfolder.go index 361337fe3..7be9bcd52 100644 --- a/lib/model/rwfolder.go +++ b/lib/model/rwfolder.go @@ -678,7 +678,7 @@ func (f *rwFolder) deleteDir(file protocol.FileInfo, matcher *ignore.Matcher) { for _, dirFile := range files { fullDirFile := filepath.Join(file.Name, dirFile) if defTempNamer.IsTemporary(dirFile) || (matcher != nil && matcher.Match(fullDirFile).IsDeletable()) { - osutil.RemoveAll(fullDirFile) + osutil.RemoveAll(filepath.Join(f.dir, fullDirFile)) } } dir.Close()