beets/beets
Johann Fot 70bf57baf6
Add native support for multiple genres per album/track
Simplify multi-genre implementation based on maintainer feedback (PR #6169).

Changes:
- Remove multi_value_genres and genre_separator config options
- Replace complex sync_genre_fields() with ensure_first_value('genre', 'genres')
- Update all plugins (Beatport, MusicBrainz, LastGenre) to always write genres as lists
- Add automatic migration for comma/semicolon/slash-separated genre strings
- Add 'beet migrate genres' command for explicit batch migration with --pretend flag
- Update all tests to reflect simplified approach (44 tests passing)
- Update documentation

Implementation aligns with maintainer vision of always using multi-value genres
internally with automatic backward-compatible sync to the genre field via
ensure_first_value(), eliminating configuration complexity.

Migration strategy avoids problems from #5540:
- Automatic lazy migration on item access (no reimport/mbsync needed)
- Optional batch migration command for user control
- No endless rewrite loops due to proper field synchronization
2026-02-23 05:11:36 +00:00
..
autotag Add native support for multiple genres per album/track 2026-02-23 05:11:36 +00:00
dbcore Handle DelimitedString fields as native lists in edit plugin 2026-02-23 00:33:24 +00:00
importer Fix crash in task.imported_items 2026-01-31 23:48:43 +00:00
library Add native support for multiple genres per album/track 2026-02-23 05:11:36 +00:00
test Replace capture_output with io.getoutput 2026-02-10 00:53:20 +00:00
ui Add native support for multiple genres per album/track 2026-02-23 05:11:36 +00:00
util fix: sort imports 2026-01-16 15:53:34 +05:30
__init__.py Increment version to 2.6.2 2026-02-22 16:04:40 +00:00
__main__.py Reformat the codebase 2024-09-21 11:57:48 +01:00
config_default.yaml Added default config and simplified proxy class. 2026-01-31 23:42:09 +00:00
logging.py Configure ruff for py310 2026-01-13 20:55:40 +00:00
mediafile.py Centralise warnings for maintainers into deprecate_for_maintainers 2025-11-30 07:02:46 +00:00
metadata_plugins.py Use a decorator-based approach 2026-01-31 23:42:09 +00:00
plugins.py Adapt code to fully typed confuse library 2026-02-16 12:45:05 +00:00
py.typed Add py.typed marker file to support PEP 561 typing (#5906) 2025-08-09 13:31:55 +02:00