beets/beets
Johann Fot 306211a4c8 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
2025-12-28 17:23:50 +01:00
..
autotag Add native support for multiple genres per album/track 2025-12-28 17:23:50 +01:00
dbcore Improve and simplify show_model_changes 2025-12-27 14:30:35 +00:00
importer hooks: make AlbumMatch.mapping a tuple 2025-12-24 11:01:26 +00:00
library Add native support for multiple genres per album/track 2025-12-28 17:23:50 +01:00
test tests: move command tests into dedicated files 2025-11-03 14:00:58 +01:00
ui Add native support for multiple genres per album/track 2025-12-28 17:23:50 +01:00
util Move PromptChoice to beets.util module 2025-12-02 01:51:14 +00:00
__init__.py Centralise warnings for maintainers into deprecate_for_maintainers 2025-11-30 07:02:46 +00:00
__main__.py Reformat the codebase 2024-09-21 11:57:48 +01:00
config_default.yaml Do not force load musicbrainz, add a test to show the behaviour 2025-11-30 07:42:21 +00:00
logging.py fix: Sanitize log messages by removing control characters 2025-12-02 15:27:24 +05:00
mediafile.py Centralise warnings for maintainers into deprecate_for_maintainers 2025-11-30 07:02:46 +00:00
metadata_plugins.py pyupgrade Python 3.10 2025-11-08 12:09:52 +00:00
plugins.py Do not force load musicbrainz, add a test to show the behaviour 2025-11-30 07:42:21 +00:00
py.typed Add py.typed marker file to support PEP 561 typing (#5906) 2025-08-09 13:31:55 +02:00
random.py Make a random change for testing 2024-05-07 16:28:28 +01:00