@@ -231,17 +231,13 @@ func (s *Scanner) scanCallback(c *Context, absPath string, d fs.DirEntry, err er
|
|||||||
|
|
||||||
log.Printf("processing folder %q", absPath)
|
log.Printf("processing folder %q", absPath)
|
||||||
|
|
||||||
tx := s.db.Begin()
|
return s.db.Transaction(func(tx *db.DB) error {
|
||||||
if err := s.scanDir(tx, c, absPath); err != nil {
|
if err := s.scanDir(tx, c, absPath); err != nil {
|
||||||
c.errs = append(c.errs, fmt.Errorf("%q: %w", absPath, err))
|
c.errs = append(c.errs, fmt.Errorf("%q: %w", absPath, err))
|
||||||
tx.Rollback()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if err := tx.Commit().Error; err != nil {
|
|
||||||
return fmt.Errorf("commit tx: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Scanner) scanDir(tx *db.DB, c *Context, absPath string) error {
|
func (s *Scanner) scanDir(tx *db.DB, c *Context, absPath string) error {
|
||||||
|
|||||||
@@ -767,3 +767,23 @@ func TestMultiArtistPreload(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/sentriz/gonic/issues/402
|
||||||
|
func TestRootNoClobberOnError(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
m := mockfs.New(t)
|
||||||
|
|
||||||
|
m.AddItems()
|
||||||
|
|
||||||
|
m.SetTags("artist-0/album-0/track-0.flac", func(tags *mockfs.TagInfo) { tags.Error = fmt.Errorf("no") }) // give a track an error
|
||||||
|
m.AddCover("artist-0/album-0/Artwork/cover.png") // and add an extra cover dir
|
||||||
|
|
||||||
|
_, err := m.ScanAndCleanErr()
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
var roots []*db.Album
|
||||||
|
require.NoError(t, m.DB().Find(&roots, "parent_id IS NULL").Error)
|
||||||
|
require.Len(t, roots, 1)
|
||||||
|
require.Equal(t, ".", roots[0].RightPath)
|
||||||
|
require.Equal(t, 0, roots[0].ParentID)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user