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--