CVS commit: pkgsrc/audio/py-beets
"Thomas Klausner" <[email protected]> Mon, 3 Aug 2026 17:48:45 +0000
| Newsgroups | gmane.os.netbsd.devel.pkgsrc.cvs |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--_----------=_178577932560940
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset="UTF-8"
Module Name: pkgsrc
Committed By: wiz
Date: Mon Aug 3 17:48:45 UTC 2026
Modified Files:
pkgsrc/audio/py-beets: Makefile PLIST distinfo
Log Message:
py-beets: update to 2.13.1.
2.13.1
Bug fixes
Fixed source distributions not including the bundled man pages. 🐛 (#6882)
2.13.0
New features
Convert Plugin: Add new configuration option convert.refresh and command-line option --refresh, allowing to force Convert Plugin operation when original file is newer than existing converted file.
Edit Plugin: The interactive import editor now shows album-level fields (as configured by albumfields) as a YAML header section when editing an album import. Fields that appear in both itemfields and albumfields are shown only in the header, not per-track.
FetchArt Plugin: Add fetch_for_asis setting that enables fetching album art from online sources even when imported files are not modified by the auto-tagger. Default is no which means FetchArt Plugin looks for art only in the local filesystem when the user (or quiet_fallback) chooses asis.
FtInTitle Plugin: Apply featured-artist rewriting to fetched metadata before commands such as MBSync Plugin use it. 🐛 (#1153)
LastGenre Plugin: Add support for normalizing genre spellings and naming variants with a new configuration option aliases. The feature is enabled by default and ships with a built-in list of regex patterns. These patterns can be replaced via the user's configuration. The default whitelist and genre tree were audited against the top 1,000 Last.fm tags: canonical names are now consistent across both files, long-standing mismatches between them have been resolved, and entries align with the built-in alias patterns. 🐛 (#6466)
Lyrics Plugin: Add lrcmux backend, which aggregates lyrics from various other sources.
Lyrics Plugin: Added a --no-keep-synced command option to override keep_synced: yes for a single manual lyrics fetch.
Lyrics Plugin: Added a rest_directory configuration option for specifying a reStructuredText output directory, semantically equivalent to -r, --write-rest. 🐛 (#2806)
modify command: Support += and -= operators to add or remove individual values from multi-valued fields without replacing the whole field. 🐛 (#6587)
ReplayGain Plugin: Add a metaflac backend that computes ReplayGain for FLAC files using the metaflac command-line tool. 🐛 (#1203)
Spotify Plugin: Recognize native Spotify URIs (e.g. spotify:album:<id> and spotify:track:<id>) when extracting release/track IDs, in addition to full open.spotify.com URLs and bare IDs
Tidal Plugin: Add cover art support. Album metadata now includes cover_art_url from Tidal's coverArt relationship, which the FetchArt Plugin plugin can retrieve.
A database backup is now automatically created before running schema migrations. Control with the create_backup_before_migrations option (default: yes).
Bug fixes
Convert Plugin: convert -a with copy_album_art enabled no longer crashes when the stored album art path points to a missing file (for example a multi-disc album whose cover lives in the album root rather than a per-disc directory); the missing art is skipped instead. 🐛 (#4692)
Edit Plugin: Preserve missing album art paths when editing album metadata, instead of turning artpath: null into a path ending in None. 🐛 (#2438)
ImportFeeds Plugin: import command no longer aborts the whole run when a symlink cannot be created (e.g. on Windows or a read-only directory); the failure is logged and the import continues. 🐛 (#840)
Lyrics Plugin: Leave lyrics empty when a source reports an instrumental track, and store that state in lyrics_instrumental flexible attribute. Existing [Instrumental] lyrics are migrated automatically. 🐛 (#6719)
Missing Plugin: Honor the -f/--format option (and the format_album configuration) when listing missing albums in album mode. 🐛 (#3804)
Smart Playlist Plugin: splupdate no longer crashes with TypeError: unhashable type: 'list' when a playlist configuration includes a playlist: query. 🐛 (#5354)
SubsonicUpdate Plugin: Log a clearer error when the Subsonic server returns a non-JSON response. 🐛 (#5635)
Tidal Plugin: Normalize Tidal album types to lowercase.
A date query containing a stray | (for example added:2000|2001, as might be typed by a user expecting | to mean "or") now raises a clean "a valid date/time string" error instead of crashing with an uncaught KeyError. A | was being accepted as a relative-date unit due to a regular expression character-class typo.
Album store no longer copies artpath onto its items as an absolute path, which broke relative-path portability. A database migration removes any such stale artpath attributes left on items by earlier versions. 🐛 (#6756)
Sorting by a nullable field (for example a flexible attribute with a declared type whose null value is None) that is present on only some items no longer crashes with a TypeError. Missing values are now grouped together, ordered before present ones when sorting ascending and after them when descending. 🐛 (#3461)
Other changes
Contributing: The project now uses uv for packaging, virtual environment, and dependency management, replacing poetry. The build backend has changed from poetry-core to hatchling. Please see updates in Development Tools and Getting the Source for more information. 🐛 (#5783)
Installation Add Homebrew to the list of supported package managers in the installation guide.
Installation: Note that Windows users should run beets in a terminal emulator (such as Windows Terminal or cmder) for output to display correctly. 🐛 (#2848)
Installation: Switch isolated tool installation guidance and GitHub workflow setup to uv tool commands.
LastGenre Plugin: Add a new "Choosing the Right Tool" documentation section to guide users in picking the right approach across genre fetching, filtering, and normalization.
Spotify Plugin: Retry on 503 Service Unavailable responses from the Spotify API instead of immediately aborting, matching the existing 429 rate-limit retry behavior.
To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 pkgsrc/audio/py-beets/Makefile
cvs rdiff -u -r1.33 -r1.34 pkgsrc/audio/py-beets/PLIST
cvs rdiff -u -r1.35 -r1.36 pkgsrc/audio/py-beets/distinfo
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
--_----------=_178577932560940
Content-Disposition: inline
Content-Length: 5074
Content-Transfer-Encoding: binary
Content-Type: text/x-diff; charset=us-ascii
Modified files:
Index: pkgsrc/audio/py-beets/Makefile
diff -u pkgsrc/audio/py-beets/Makefile:1.58 pkgsrc/audio/py-beets/Makefile:1.59
--- pkgsrc/audio/py-beets/Makefile:1.58 Mon Jun 29 06:28:10 2026
+++ pkgsrc/audio/py-beets/Makefile Mon Aug 3 17:48:45 2026
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.58 2026/06/29 06:28:10 wiz Exp $
+# $NetBSD: Makefile,v 1.59 2026/08/03 17:48:45 wiz Exp $
-DISTNAME= beets-2.12.0
+DISTNAME= beets-2.13.1
PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
CATEGORIES= audio python
MASTER_SITES= ${MASTER_SITE_PYPI:=b/beets/}
@@ -10,9 +10,9 @@ HOMEPAGE= https://beets.io/
COMMENT= Music geek's media organizer
LICENSE= mit
-TOOL_DEPENDS+= ${PYPKGPREFIX}-poetry-core>=2.2.1:../../devel/py-poetry-core
-TOOL_DEPENDS+= ${PYPKGPREFIX}-poetry-dynamic-versioning>=0:../../devel/py-poetry-dynamic-versioning
+TOOL_DEPENDS+= ${PYPKGPREFIX}-hatchling>=0:../../devel/py-hatchling
DEPENDS+= ${PYPKGPREFIX}-Unidecode>=1.3.6:../../textproc/py-Unidecode
+DEPENDS+= ${PYPKGPREFIX}-beautifulsoup4>=0:../../www/py-beautifulsoup4
DEPENDS+= ${PYPKGPREFIX}-confuse>=2.2.0:../../devel/py-confuse
DEPENDS+= ${PYPKGPREFIX}-jellyfish-[0-9]*:../../textproc/py-jellyfish
DEPENDS+= ${PYPKGPREFIX}-lap>=0.5.12:../../math/py-lap
@@ -23,6 +23,7 @@ DEPENDS+= ${PYPKGPREFIX}-packaging>=24.0
DEPENDS+= ${PYPKGPREFIX}-platformdirs>=3.5.0:../../misc/py-platformdirs
DEPENDS+= ${PYPKGPREFIX}-requests>=2.32.5:../../devel/py-requests
DEPENDS+= ${PYPKGPREFIX}-requests-ratelimiter>=0.7.0:../../net/py-requests-ratelimiter
+DEPENDS+= ${PYPKGPREFIX}-titlecase>=0:../../devel/py-titlecase
DEPENDS+= ${PYPKGPREFIX}-typing-extensions-[0-9]*:../../devel/py-typing-extensions
DEPENDS+= ${PYPKGPREFIX}-yaml-[0-9]*:../../textproc/py-yaml
# lastgenre
@@ -32,11 +33,14 @@ DEPENDS+= ${PYPKGPREFIX}-mutagen>=1.33:.
# ffprobe
DEPENDS+= ffmpeg8-[0-9]*:../../multimedia/ffmpeg8
TEST_DEPENDS+= ${PYPKGPREFIX}-discogs-client-[0-9]*:../../audio/py-discogs-client
+TEST_DEPENDS+= ${PYPKGPREFIX}-flask-[0-9]*:../../www/py-flask
TEST_DEPENDS+= ${PYPKGPREFIX}-mock-[0-9]*:../../devel/py-mock
TEST_DEPENDS+= ${PYPKGPREFIX}-mpd2-[0-9]*:../../audio/py-mpd2
TEST_DEPENDS+= ${PYPKGPREFIX}-requests-oauthlib-[0-9]*:../../security/py-requests-oauthlib
TEST_DEPENDS+= ${PYPKGPREFIX}-responses>=0.3.0:../../net/py-responses
TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov-[0-9]*:../../devel/py-test-cov
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-factoryboy-[0-9]*:../../devel/py-test-factoryboy
+TEST_DEPENDS+= ${PYPKGPREFIX}-xdg-[0-9]*:../../devel/py-xdg
USE_LANGUAGES= # none
USE_TOOLS+= git
@@ -56,6 +60,8 @@ SUBST_MESSAGE.ffprobe= Fixing ffprobe fi
.if make(test)
ALLOW_NETWORK_ACCESS= yes
.endif
+# as of 2.13.1
+# 2460 passed, 178 skipped, 200 warnings, 91 errors
post-install:
${INSTALL_DATA} ${WRKSRC}/man/beet.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1/beet-${PYVERSSUFFIX}.1
Index: pkgsrc/audio/py-beets/PLIST
diff -u pkgsrc/audio/py-beets/PLIST:1.33 pkgsrc/audio/py-beets/PLIST:1.34
--- pkgsrc/audio/py-beets/PLIST:1.33 Mon Jun 29 06:28:10 2026
+++ pkgsrc/audio/py-beets/PLIST Mon Aug 3 17:48:45 2026
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.33 2026/06/29 06:28:10 wiz Exp $
+@comment $NetBSD: PLIST,v 1.34 2026/08/03 17:48:45 wiz Exp $
bin/beet-${PYVERSSUFFIX}
${PYSITELIB}/${WHEEL_INFODIR}/METADATA
${PYSITELIB}/${WHEEL_INFODIR}/RECORD
@@ -109,6 +109,9 @@ ${PYSITELIB}/beets/test/__init__.pyo
${PYSITELIB}/beets/test/_common.py
${PYSITELIB}/beets/test/_common.pyc
${PYSITELIB}/beets/test/_common.pyo
+${PYSITELIB}/beets/test/fixtures.py
+${PYSITELIB}/beets/test/fixtures.pyc
+${PYSITELIB}/beets/test/fixtures.pyo
${PYSITELIB}/beets/test/helper.py
${PYSITELIB}/beets/test/helper.pyc
${PYSITELIB}/beets/test/helper.pyo
@@ -371,6 +374,7 @@ ${PYSITELIB}/beetsplug/kodiupdate.pyo
${PYSITELIB}/beetsplug/lastgenre/__init__.py
${PYSITELIB}/beetsplug/lastgenre/__init__.pyc
${PYSITELIB}/beetsplug/lastgenre/__init__.pyo
+${PYSITELIB}/beetsplug/lastgenre/aliases.yaml
${PYSITELIB}/beetsplug/lastgenre/client.py
${PYSITELIB}/beetsplug/lastgenre/client.pyc
${PYSITELIB}/beetsplug/lastgenre/client.pyo
Index: pkgsrc/audio/py-beets/distinfo
diff -u pkgsrc/audio/py-beets/distinfo:1.35 pkgsrc/audio/py-beets/distinfo:1.36
--- pkgsrc/audio/py-beets/distinfo:1.35 Sun Jun 28 14:06:41 2026
+++ pkgsrc/audio/py-beets/distinfo Mon Aug 3 17:48:45 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.35 2026/06/28 14:06:41 wiz Exp $
+$NetBSD: distinfo,v 1.36 2026/08/03 17:48:45 wiz Exp $
-BLAKE2s (beets-2.12.0.tar.gz) = f434f775523bb0c73d89b5ba2e4d8581e88360e6bad13125c8526a2ce3aedc65
-SHA512 (beets-2.12.0.tar.gz) = ab069c6494925442b63b62c3530a122cdf1ba54281e086791f32699e91a59c3b81cfbe4687cbb28a70c6d47ae7889cf940461198247c4f52ba07287960319480
-Size (beets-2.12.0.tar.gz) = 2305682 bytes
+BLAKE2s (beets-2.13.1.tar.gz) = bec40f8213f9d20f52faaf17d531c95eb815875defe12dad08a8bc81890b075b
+SHA512 (beets-2.13.1.tar.gz) = 3a3eaeb16f061ede4648da1b1df9324ec9c7ec026e2ab8f59fcc19521c8715b4c98eb1ea04aa91c654ef10183f8053a41d4f5b7c72dec641bffa2dc979efc1d6
+Size (beets-2.13.1.tar.gz) = 2447541 bytes
--_----------=_178577932560940--