3445 Commits

Author SHA1 Message Date
Šarūnas Nejus
5caa04f500 Merge branch 'master' into fix/path-query-multivalue-fields 2026-05-16 12:20:09 +01:00
Šarūnas Nejus
30ab81eb5b Extract UserError from beets.ui to a new beets.exceptions module.
Update all references in core, plugins, and tests to import UserError
from the new location. This centralizes exception handling and improves
code organization.
2026-05-16 11:18:51 +01:00
oxms16
3248f92090 merge docs/changelog.rst 2026-05-16 16:51:24 +08:00
Sebastian Mohr
cf97ce87b8 Refactored test_mb_sync to use pytest and removed capture_log in favor
of caplog.
2026-05-14 15:47:00 +02:00
oxms16
c9e6d0f84c Fix path queries for multi-valued fields 2026-05-14 12:26:48 +08:00
ShimmerGlass
65ccaf1408 fix(mbsync): do not clear metadata if import.from_scratch is set
if import.from_scratch was set in the config, runnning mbsync would
clear any metadata not provided by MBz (replay gain, lyrics, genres...).
we now ignore this setting when running mbsync to preserve metadata.

Fixes: #6613
2026-05-13 18:06:08 +02:00
ShimmerGlass
ec1c25644d fix(duplicates): output format
* the pugin used an empty format string unless --count was provided,
  resulting in outputs like `: 1`. it now correctly displays duplicated
  items.
* --count was ignored (aside from above bug), and item count was always
  appended to output.
2026-05-11 22:43:53 +02:00
J0J0 Todos
5f94ca79a3 lastgenre: Test empty last.fm result doesnt wipe
Add a test case that proves that issue 5991 is fixed by now.
2026-05-09 09:11:05 +02:00
Šarūnas Nejus
cde2dd139e Merge branch 'master' into fix/mbpseudo-raw-data 2026-05-08 13:38:30 +01:00
Sebastian Mohr
2056cce74b test_hook: Removed capture_log in favor for pytest caplog
Also minor refactor to align with pytest
2026-05-08 13:47:37 +02:00
Martin Caspersen
5342d9bc76 Merge remote-tracking branch 'fork/master' into fix/mbpseudo-raw-data 2026-05-08 12:25:49 +02:00
Šarūnas Nejus
b15006ca11 Remove dependency on global config 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
10d0f37793 Merge branch 'master' into fix/badfiles-quiet-mode 2026-05-02 22:35:41 +01:00
ShimmerGlass
cc63a4e9b9 fix(MusicBrainz): date parsing fix
Correctly handle release dates where leading or
intermediate components are missing, e.g. 2008-??-02
2026-05-02 16:26:48 +02:00
Eyüp Can Akman
382ec79fe0 badfiles: address review feedback 2026-05-01 17:01:47 +03:00
Eyüp Can Akman
811593a1ee badfiles: respect import.quiet during import hook
The import hook prompted for input even when quiet mode was active, so
non-interactive imports blocked on the corrupt-file dialog. Return early
from `on_import_task_before_choice` when `import.quiet` is set so the
importer falls back to its summary judgment.
2026-05-01 17:01:47 +03:00
Sebastian Mohr
d6245835f2 test_discogs: Removed capture_log in favor for pytest caplog 2026-04-30 19:56:31 +02:00
Sebastian Mohr
a8db8931b7 test_playcount: Removed capture_log in favor for pytest caplog 2026-04-30 14:41:25 +02:00
Sebastian Mohr
9bae5b8fcb test_autobpm: Removed capture_log in favor for pytest caplog 2026-04-30 14:41:25 +02:00
Šarūnas Nejus
06ffb91022 autotag: move original_date override into AlbumInfo.item_data
Previously, the original_date year/month/day override was applied in
merge_with_album after building the merged dict. Move this logic into
a cached_property on AlbumInfo so album-level metadata also reflects
the original release date. Fixes 🐛`6577`.
2026-04-29 14:40:46 +01:00
Alok Saboo
e84ce4198a Revert unrelated docstring reformatting 2026-04-29 08:33:31 -04:00
Alok Saboo
f459edbbd4 Merge upstream master and fix changelog.rst
Sync with upstream beets/master and resolve changelog conflict,
keeping only the Spotify batch entry in the Unreleased section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:12:30 -04:00
Eyüp Can Akman
88be3023bb lyrics: handle apostrophes in musixmatch slug
The musixmatch URL slug builder did not replace curly apostrophes
(U+2018, U+2019) before applying the whitespace-to-dash rule, so titles
like "If They're Shooting at You" produced a slug with the raw quote
preserved and the lookup failed.

Add a REPLACEMENTS entry that maps both curly quote codepoints to a
dash before the rest of the substitutions run.
2026-04-28 17:27:28 +03:00
Alok Saboo
4ddef8cda6 Merge branch 'master' into spotify_batch 2026-04-26 09:47:58 -04:00
Šarūnas Nejus
ca36df2d00 Fix lambda closure bug in concurrent plugin method execution
Replace inline lambda with named `materialize` helper to correctly
pass plugin method and arguments to the thread executor, preventing
all futures from calling the last plugin only.
2026-04-26 11:55:28 +01:00
Šarūnas Nejus
622d9a9039 Reproduce the issue 2026-04-26 11:55:28 +01:00
Šarūnas Nejus
8809de2f7b Define set_item_uri 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
50afcea6e9 Simplify get_playlist_items 2026-04-25 20:29:16 +01:00
shara987
ba48bf8480 zero: fix ruff formatting 2026-04-25 16:28:06 +01:00
shara987
071c12cc70 zero: treat images and art as aliases in keep_fields
Fixes #3532: when 'images' is listed in keep_fields, embedded album
art was still being removed because the plugin didn't recognize 'art'
as an alias for 'images'. Now both fields are kept when either appears
in keep_fields.
2026-04-25 16:28:06 +01:00
shara987
a0041356cd zero: treat 'images' and 'art' as aliases in keep_fields
Fixes #3532: when 'images' is listed in keep_fields, embedded album
art was still being removed because the plugin didn't recognize 'art'
as an alias for 'images'. Now both fields are kept when either appears
in keep_fields.
2026-04-25 16:28:06 +01:00
Šarūnas Nejus
556780ea7e Keep unique ft artists 2026-04-25 16:04:58 +01:00
Šarūnas Nejus
9ee86d0e78 Add a test to repro the issue 2026-04-25 15:45:52 +01:00
Alok Saboo
999286a39e Merge branch 'master' into spotify_batch 2026-04-24 09:44:43 -04:00
John Parton
c6ca91d91f Make directories unique by using incrementing integer. 2026-04-22 22:31:36 +01:00
John Parton
79d7a76add Fix error in test. 2026-04-22 22:31:36 +01:00
John Parton
b459ad1fe0 Add variety to suffixes in test. Add explicit test that 'CD01' and 'Enhanced CD02' should not be combined. 2026-04-22 22:31:36 +01:00
John Parton
41c536facc Make test markers more varied. Cover more cases. 2026-04-22 22:31:36 +01:00
John Parton
0b3fa014b5 Reformat py/rst, fix linting/formatting errors. 2026-04-22 22:31:36 +01:00
John Parton
c63bb045ee Allow for vinyl (including 12 vinyl), cassette, and digital media multi-disc releases. 2026-04-22 22:31:36 +01:00
Šarūnas Nejus
ccdccdfa8d Remove slow_test unittest marker 2026-04-22 21:47:16 +01:00
Sebastian Mohr
be057e8bbf Fixed tests 2026-04-22 22:20:01 +02:00
Šarūnas Nejus
2f326b6bdb Remove old cover art instead of keeping it 2026-04-21 22:09:38 +01:00
Šarūnas Nejus
9e48d9b16a Reproduce the issue 2026-04-21 22:09:38 +01:00
Šarūnas Nejus
2e3ca0a018 Handle TEXT path values when migrating relative paths
Some users have manually set paths to TEXT values using sqlite3.
2026-04-21 19:25:11 +01:00
Alok Saboo
98d4431960 Merge branch 'master' into spotify_batch 2026-04-21 11:06:10 -04:00
Matthias De Vriendt
e474194590 Merge branch 'master' into mdv/fix-penalty-display 2026-04-21 08:05:37 +02:00
Alok Saboo
e0aec44aee Merge branch 'master' into spotify_batch 2026-04-20 18:05:40 -04:00
Sebastian Mohr
eaf1f00424 warning instead of raising errors. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
634b12846f Added tests for the id extractor. 2026-04-20 20:55:47 +02:00