pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/audio/py-beets
Module Name: pkgsrc
Committed By: adam
Date: Tue Sep 8 05:41:37 UTC 2026
Modified Files:
pkgsrc/audio/py-beets: Makefile PLIST distinfo
Log Message:
py-beets: updated to 2.14.0
2.14.0 (September 07, 2026)
New features
- :doc:`plugins/plexupdate`: Add ``beet plexupdate --auth``, an interactive
plex.tv login following Plex' traditional PIN authentication flow: the access
token for the local server is stored in a token file. The manual ``token``
configuration option is now deprecated.
- :ref:`duplicate_action`: Add an ``upgrade`` option that replaces individual
duplicate tracks only if the new copy has a higher bitrate, adds any genuinely
new tracks, and keeps the album together rather than splitting it. The option
is available both through configuration and from the interactive duplicate
prompt.
- The interactive import prompt now offers a "Rescan directory" choice for album
tasks. It re-reads the album's directory from disk and re-runs the match, so
files can be cleaned up (duplicates, junk) while the import is paused at the
prompt, without restarting the whole ``beet import`` run.
- :ref:`list-cmd` Add ``-l / --limit LIMIT`` flag to the ``list`` command to
limit query results.
Bug fixes
- Add ``editor`` config option to allow users to permanently set their preferred
editor, overriding ``$VISUAL`` and ``$EDITOR`` environment variables.
- ``beet update`` no longer crashes when a plugin-added media field is stored as
a flexible attribute.
- A date range query written back to front (for example ``added:2024..2020``) no
longer crashes with an uncaught ``ValueError``. The endpoints are now swapped,
so such a range means the same as ``added:2020..2024``.
- Deduplicating a file whose name already ends in a counter of two or more
digits no longer restarts the numbering: ``track.10.mp3`` now yields
``track.11.mp3`` instead of ``track.1.mp3``. The counter was matched with
``\.(\d)+$``, which captures only the final digit.
- Autotagging distance calculations no longer treat ordinary words containing
"ft" (such as "draft", "left", "gift", "craft") as a "featuring artist"
suffix, which was silently making genuinely different titles/artists score as
near-identical matches.
- :doc:`plugins/lyrics`: ``beet lyrics`` no longer crashes with an
``AttributeError`` on tracks that have no stored lyrics when ``force`` is
enabled; a missing lyrics body is now treated as empty text.
- :doc:`plugins/deezer`: Detect compilations that Deezer credits to a single
"main" artist instead of "Various Artists", so they are tagged as such rather
than getting every track artist in the album artist field.
- Flexible attributes whose names contain uppercase characters (for example
``beet import --set Tag_With_Uppercase=true``) can now be found by queries.
Field names are lowercased when a query is parsed, so such attributes could
never be matched; flexible attribute lookups now fall back to a
case-insensitive key match.
- :doc:`plugins/deezer`: Singleton searches now use plain free text rather than
``<title> artist:"<artist>"``. Deezer discards unquoted free text as soon as a
query contains any ``field:"value"`` filter, so the old query was evaluated as
``artist:"<artist>"`` alone -- every track by the artist, in Deezer's own
relevance order and truncated to ``search_limit``. For artists with more
releases than that window, the track being imported was never among the
candidates offered.
- :doc:`plugins/tidal`: The ``label`` field no longer stores Tidal's raw
copyright/rights-statement text verbatim. It's now normalized to a concise
label name, stripping copyright markers, years, and corporate, licensing, and
territorial boilerplate. Affects both album and track metadata.
- :doc:`plugins/deezer`: Track conversion no longer assumes the API sends both
``contributors`` and ``artist``. The fallback to ``artist`` was evaluated even
when ``contributors`` was present, so a track payload without ``artist``
raised ``KeyError``. Albums were already guarded; this fixes the remaining
call site.
- :doc:`plugins/discogs`: Retry a search once when Discogs returns an invalid
JSON response instead of immediately discarding all Discogs candidates.
- Plugins built on ``SearchApiMetadataSourcePlugin``
(:doc:`plugins/musicbrainz`, :doc:`plugins/spotify`, :doc:`plugins/deezer` and
:doc:`plugins/discogs`) no longer send a search request when both the query
text and the filters are empty.
- :doc:`plugins/ipfs`: Fix ``beet ipfs --play`` option to invoke the Play plugin
through its command interface.
- :doc:`plugins/lyrics`: LRCLib entries that carry no lyrics text at all, with
both ``plainLyrics`` and ``syncedLyrics`` null while ``instrumental`` is
``False``, are no longer considered matches. Previously such an entry was
accepted and its null text propagated, raising ``AttributeError: 'NoneType'
object has no attribute 'splitlines'``. During an import this aborted the
whole run rather than a single track. A null ``plainLyrics`` now also falls
back to the synced lyrics instead of discarding them.
- :ref:`modify-cmd`: Fix applying changes when choosing objects in interactive
select mode.
- :ref:`move-cmd`: Fix moving albums in interactive select/timid mode.
- :doc:`plugins/bpd`: Fix ``search`` command when ``any`` field is used.
- :doc:`plugins/aura`: Prevent multi-valued field filters from crashing with an
``sqlite3.InterfaceError``.
- :doc:`plugins/aura`: When sorting by ``field``, do not exclude resources that
have no value for ``field``.
- :doc:`plugins/scrub`: The scrub plugin now respects the ``--nowrite`` (``-W``)
flag during import. Previously, ``beet import -W`` with the scrub plugin
enabled would still remove tags from imported files; the plugin now skips
scrubbing when ``should_write()`` returns ``False``.
- :doc:`plugins/convert`: Fixed convert plugin not taking into account the new
format when determining the target path.
- :doc:`plugins/edit`: Item-only fields rejected from the album header remain
available in per-track documents during interactive import when they are also
configured in ``itemfields``.
- :doc:`plugins/tidal`: Pass the converted track duration as ``length`` so it
contributes to the autotagging track-length distance instead of being silently
stored as a ``duration`` flexible attribute.
- :doc:`plugins/tidal`: Restore catalog searches after TIDAL moved search
queries from the request path to the required ``filter[query]`` parameter.
- :ref:`import-cmd`: Restore the ability to import from tar and 7z archives.
Both failed with an ``'... object has no attribute 'infolist'`` error because
``tarfile.TarFile`` lost its ``ZipFileCompat`` interface in Python 3 and
``py7zr.SevenZipFile`` exposes ``list()`` rather than ``infolist()``.
- :doc:`plugins/listenbrainz` and :doc:`plugins/lastimport`: Play counts are now
matched more accurately. An exact MusicBrainz recording ID match is preferred
when one exists, and titles are matched exactly (confirmed by the artist or
album) before falling back to the previous substring-based matching.
Previously all queries were combined, so a listen for "Song" also updated
"Song (inst.)" or any other item whose title only contained the listened
title.
- :doc:`plugins/limit` Deprecate the ``limit`` plugin in favor of the new ``-l``
/ ``--limit`` flag for the :ref:`list-cmd` command.
To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 pkgsrc/audio/py-beets/Makefile
cvs rdiff -u -r1.34 -r1.35 pkgsrc/audio/py-beets/PLIST
cvs rdiff -u -r1.36 -r1.37 pkgsrc/audio/py-beets/distinfo
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/audio/py-beets/Makefile
diff -u pkgsrc/audio/py-beets/Makefile:1.59 pkgsrc/audio/py-beets/Makefile:1.60
--- pkgsrc/audio/py-beets/Makefile:1.59 Mon Aug 3 17:48:45 2026
+++ pkgsrc/audio/py-beets/Makefile Tue Sep 8 05:41:37 2026
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.59 2026/08/03 17:48:45 wiz Exp $
+# $NetBSD: Makefile,v 1.60 2026/09/08 05:41:37 adam Exp $
-DISTNAME= beets-2.13.1
+DISTNAME= beets-2.14.0
PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
CATEGORIES= audio python
MASTER_SITES= ${MASTER_SITE_PYPI:=b/beets/}
@@ -14,9 +14,9 @@ TOOL_DEPENDS+= ${PYPKGPREFIX}-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}-jellyfish>=0:../../textproc/py-jellyfish
DEPENDS+= ${PYPKGPREFIX}-lap>=0.5.12:../../math/py-lap
-DEPENDS+= ${PYPKGPREFIX}-mediafile>=0.16.2:../../audio/py-mediafile
+DEPENDS+= ${PYPKGPREFIX}-mediafile>=0.17.0:../../audio/py-mediafile
DEPENDS+= ${PYPKGPREFIX}-musicbrainz-ngs>=0.4:../../audio/py-musicbrainz-ngs
DEPENDS+= ${PYPKGPREFIX}-numpy>=2.3.5:../../math/py-numpy
DEPENDS+= ${PYPKGPREFIX}-packaging>=24.0:../../devel/py-packaging
@@ -24,23 +24,23 @@ DEPENDS+= ${PYPKGPREFIX}-platformdirs>=3
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
+DEPENDS+= ${PYPKGPREFIX}-typing-extensions>=0:../../devel/py-typing-extensions
+DEPENDS+= ${PYPKGPREFIX}-yaml>=0:../../textproc/py-yaml
# lastgenre
-DEPENDS+= ${PYPKGPREFIX}-last-[0-9]*:../../audio/py-last
+DEPENDS+= ${PYPKGPREFIX}-last>=0:../../audio/py-last
# scrub
DEPENDS+= ${PYPKGPREFIX}-mutagen>=1.33:../../audio/py-mutagen
# 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
+DEPENDS+= ffmpeg8>=0:../../multimedia/ffmpeg8
+TEST_DEPENDS+= ${PYPKGPREFIX}-discogs-client>=0:../../audio/py-discogs-client
+TEST_DEPENDS+= ${PYPKGPREFIX}-flask>=0:../../www/py-flask
+TEST_DEPENDS+= ${PYPKGPREFIX}-mock>=0:../../devel/py-mock
+TEST_DEPENDS+= ${PYPKGPREFIX}-mpd2>=0:../../audio/py-mpd2
+TEST_DEPENDS+= ${PYPKGPREFIX}-requests-oauthlib>=0:../../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
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov>=0:../../devel/py-test-cov
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-factoryboy>=0:../../devel/py-test-factoryboy
+TEST_DEPENDS+= ${PYPKGPREFIX}-xdg>=0:../../devel/py-xdg
USE_LANGUAGES= # none
USE_TOOLS+= git
Index: pkgsrc/audio/py-beets/PLIST
diff -u pkgsrc/audio/py-beets/PLIST:1.34 pkgsrc/audio/py-beets/PLIST:1.35
--- pkgsrc/audio/py-beets/PLIST:1.34 Mon Aug 3 17:48:45 2026
+++ pkgsrc/audio/py-beets/PLIST Tue Sep 8 05:41:37 2026
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.34 2026/08/03 17:48:45 wiz Exp $
+@comment $NetBSD: PLIST,v 1.35 2026/09/08 05:41:37 adam Exp $
bin/beet-${PYVERSSUFFIX}
${PYSITELIB}/${WHEEL_INFODIR}/METADATA
${PYSITELIB}/${WHEEL_INFODIR}/RECORD
@@ -23,6 +23,9 @@ ${PYSITELIB}/beets/autotag/hooks.pyo
${PYSITELIB}/beets/autotag/match.py
${PYSITELIB}/beets/autotag/match.pyc
${PYSITELIB}/beets/autotag/match.pyo
+${PYSITELIB}/beets/autotag/source.py
+${PYSITELIB}/beets/autotag/source.pyc
+${PYSITELIB}/beets/autotag/source.pyo
${PYSITELIB}/beets/config_default.yaml
${PYSITELIB}/beets/context.py
${PYSITELIB}/beets/context.pyc
@@ -48,6 +51,9 @@ ${PYSITELIB}/beets/dbcore/sort.pyo
${PYSITELIB}/beets/dbcore/types.py
${PYSITELIB}/beets/dbcore/types.pyc
${PYSITELIB}/beets/dbcore/types.pyo
+${PYSITELIB}/beets/events.py
+${PYSITELIB}/beets/events.pyc
+${PYSITELIB}/beets/events.pyo
${PYSITELIB}/beets/exceptions.py
${PYSITELIB}/beets/exceptions.pyc
${PYSITELIB}/beets/exceptions.pyo
@@ -161,9 +167,6 @@ ${PYSITELIB}/beets/ui/commands/stats.pyo
${PYSITELIB}/beets/ui/commands/update.py
${PYSITELIB}/beets/ui/commands/update.pyc
${PYSITELIB}/beets/ui/commands/update.pyo
-${PYSITELIB}/beets/ui/commands/utils.py
-${PYSITELIB}/beets/ui/commands/utils.pyc
-${PYSITELIB}/beets/ui/commands/utils.pyo
${PYSITELIB}/beets/ui/commands/version.py
${PYSITELIB}/beets/ui/commands/version.pyc
${PYSITELIB}/beets/ui/commands/version.pyo
@@ -176,9 +179,6 @@ ${PYSITELIB}/beets/util/__init__.pyo
${PYSITELIB}/beets/util/artresizer.py
${PYSITELIB}/beets/util/artresizer.pyc
${PYSITELIB}/beets/util/artresizer.pyo
-${PYSITELIB}/beets/util/bluelet.py
-${PYSITELIB}/beets/util/bluelet.pyc
-${PYSITELIB}/beets/util/bluelet.pyo
${PYSITELIB}/beets/util/color.py
${PYSITELIB}/beets/util/color.pyc
${PYSITELIB}/beets/util/color.pyo
Index: pkgsrc/audio/py-beets/distinfo
diff -u pkgsrc/audio/py-beets/distinfo:1.36 pkgsrc/audio/py-beets/distinfo:1.37
--- pkgsrc/audio/py-beets/distinfo:1.36 Mon Aug 3 17:48:45 2026
+++ pkgsrc/audio/py-beets/distinfo Tue Sep 8 05:41:37 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.36 2026/08/03 17:48:45 wiz Exp $
+$NetBSD: distinfo,v 1.37 2026/09/08 05:41:37 adam Exp $
-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
+BLAKE2s (beets-2.14.0.tar.gz) = b543be239696311c45c2b434afcfe4330fcef872ecb81bbb68a0e64b4f17fd9a
+SHA512 (beets-2.14.0.tar.gz) = 7dd1db0c7c398e635f0ec00cc9216242af904893d2e8a535c7de09f79373437eb3d19cae4182fa73c276632d9e0afdcc9da12b802d72657d6ce62827b11db2c8
+Size (beets-2.14.0.tar.gz) = 2481050 bytes
Home |
Main Index |
Thread Index |
Old Index