From 4d06d250e62170997dc3dc7bb32aaf78e8413c81 Mon Sep 17 00:00:00 2001 From: Deluan Date: Mon, 3 Feb 2020 17:25:17 -0500 Subject: [PATCH] fix: relative path was not working for rootFolder started with '.' --- .gitignore | 1 + scanner/change_detector.go | 12 +++++------ scanner/change_detector_test.go | 35 ++++++++++++++++++++------------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 9c68f8a2..30ecc293 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ navidrome.db *.swp *_gen.go dist +music diff --git a/scanner/change_detector.go b/scanner/change_detector.go index 9f215603..38392f04 100644 --- a/scanner/change_detector.go +++ b/scanner/change_detector.go @@ -3,7 +3,6 @@ package scanner import ( "os" "path/filepath" - "strings" "time" "github.com/deluan/navidrome/log" @@ -73,8 +72,8 @@ func (s *ChangeDetector) loadDir(dirPath string) (children []string, lastUpdated return } -func (s *ChangeDetector) loadMap(dirMap dirInfoMap, rootPath string, since time.Time, maybe bool) error { - children, lastUpdated, err := s.loadDir(rootPath) +func (s *ChangeDetector) loadMap(dirMap dirInfoMap, path string, since time.Time, maybe bool) error { + children, lastUpdated, err := s.loadDir(path) if err != nil { return err } @@ -86,14 +85,14 @@ func (s *ChangeDetector) loadMap(dirMap dirInfoMap, rootPath string, since time. } } - dir := s.getRelativePath(rootPath) + dir := s.getRelativePath(path) dirMap[dir] = dirInfo{mdate: lastUpdated, maybe: maybe} return nil } -func (s *ChangeDetector) getRelativePath(subfolder string) string { - dir := strings.TrimPrefix(subfolder, s.rootFolder) +func (s *ChangeDetector) getRelativePath(subFolder string) string { + dir, _ := filepath.Rel(s.rootFolder, subFolder) if dir == "" { dir = "." } @@ -111,6 +110,7 @@ func (s *ChangeDetector) checkForUpdates(lastModifiedSince time.Time, newMap dir oldLastUpdated = time.Time{} } } + if lastUpdated.After(oldLastUpdated) { changed = append(changed, dir) } diff --git a/scanner/change_detector_test.go b/scanner/change_detector_test.go index 3a381bce..12b02a3c 100644 --- a/scanner/change_detector_test.go +++ b/scanner/change_detector_test.go @@ -33,7 +33,7 @@ var _ = Describe("ChangeDetector", func() { Expect(changed).To(ConsistOf(".")) // Add one subfolder - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() err = os.MkdirAll(filepath.Join(testFolder, "a"), 0777) if err != nil { panic(err) @@ -41,10 +41,10 @@ var _ = Describe("ChangeDetector", func() { changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) - Expect(changed).To(ConsistOf(".", P("/a"))) + Expect(changed).To(ConsistOf(".", P("a"))) // Add more subfolders - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() err = os.MkdirAll(filepath.Join(testFolder, "a", "b", "c"), 0777) if err != nil { panic(err) @@ -52,17 +52,17 @@ var _ = Describe("ChangeDetector", func() { changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) - Expect(changed).To(ConsistOf(P("/a"), P("/a/b"), P("/a/b/c"))) + Expect(changed).To(ConsistOf(P("a"), P("a/b"), P("a/b/c"))) // Scan with no changes - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) Expect(changed).To(BeEmpty()) // New file in subfolder - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() _, err = os.Create(filepath.Join(testFolder, "a", "b", "empty.txt")) if err != nil { panic(err) @@ -70,10 +70,10 @@ var _ = Describe("ChangeDetector", func() { changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) - Expect(changed).To(ConsistOf(P("/a/b"))) + Expect(changed).To(ConsistOf(P("a/b"))) // Delete file in subfolder - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() err = os.Remove(filepath.Join(testFolder, "a", "b", "empty.txt")) if err != nil { panic(err) @@ -81,21 +81,21 @@ var _ = Describe("ChangeDetector", func() { changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) - Expect(changed).To(ConsistOf(P("/a/b"))) + Expect(changed).To(ConsistOf(P("a/b"))) // Delete subfolder - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() err = os.Remove(filepath.Join(testFolder, "a", "b", "c")) if err != nil { panic(err) } changed, deleted, err = scanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) - Expect(deleted).To(ConsistOf(P("/a/b/c"))) - Expect(changed).To(ConsistOf(P("/a/b"))) + Expect(deleted).To(ConsistOf(P("a/b/c"))) + Expect(changed).To(ConsistOf(P("a/b"))) // Only returns changes after lastModifiedSince - lastModifiedSince = time.Now() + lastModifiedSince = nowWithDelay() newScanner := NewChangeDetector(testFolder) changed, deleted, err = newScanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) @@ -108,6 +108,13 @@ var _ = Describe("ChangeDetector", func() { changed, deleted, err = newScanner.Scan(lastModifiedSince) Expect(err).To(BeNil()) Expect(deleted).To(BeEmpty()) - Expect(changed).To(ConsistOf(P("/a/b"))) + Expect(changed).To(ConsistOf(P("a/b"))) }) }) + +// I hate time-based tests.... +func nowWithDelay() time.Time { + now := time.Now() + time.Sleep(50 * time.Millisecond) + return now +}