fix substring checking in scanner musicDirRelative
related https://github.com/sentriz/gonic/issues/437
This commit is contained in:
@@ -721,7 +721,7 @@ func parseMulti(parser tagcommon.Info, setting MultiValueSetting, getMulti func(
|
|||||||
|
|
||||||
func musicDirRelative(musicDirs []string, absPath string) (musicDir, relPath string) {
|
func musicDirRelative(musicDirs []string, absPath string) (musicDir, relPath string) {
|
||||||
for _, musicDir := range musicDirs {
|
for _, musicDir := range musicDirs {
|
||||||
if strings.HasPrefix(absPath, musicDir) {
|
if absPath == musicDir || strings.HasPrefix(absPath, filepath.Clean(musicDir)+string(filepath.Separator)) { // ensure trailing slash for substring check
|
||||||
relPath, _ = filepath.Rel(musicDir, absPath)
|
relPath, _ = filepath.Rel(musicDir, absPath)
|
||||||
return musicDir, relPath
|
return musicDir, relPath
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -787,3 +787,26 @@ func TestRootNoClobberOnError(t *testing.T) {
|
|||||||
require.Equal(t, ".", roots[0].RightPath)
|
require.Equal(t, ".", roots[0].RightPath)
|
||||||
require.Equal(t, 0, roots[0].ParentID)
|
require.Equal(t, 0, roots[0].ParentID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/sentriz/gonic/issues/437
|
||||||
|
func TestPrefixOverlap(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
m := mockfs.NewWithDirs(t, []string{
|
||||||
|
"/music/tagged",
|
||||||
|
"/music/taggedmanual",
|
||||||
|
})
|
||||||
|
|
||||||
|
m.AddItemsPrefix("/music/tagged")
|
||||||
|
m.AddItemsPrefix("/music/taggedmanual")
|
||||||
|
|
||||||
|
m.ScanAndClean()
|
||||||
|
|
||||||
|
var taggedManual int
|
||||||
|
require.NoError(t, m.DB().Model(db.Album{}).Where("root_dir LIKE ?", `%/taggedmanual`).Count(&taggedManual).Error)
|
||||||
|
require.Greater(t, taggedManual, 1)
|
||||||
|
|
||||||
|
var tagged int
|
||||||
|
require.NoError(t, m.DB().Model(db.Album{}).Where("root_dir LIKE ?", `%/tagged`).Count(&tagged).Error)
|
||||||
|
require.Greater(t, tagged, 1)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user