From 616a674db08ecde2c2c1f4a5af407ebb8ae37bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0ar=C5=ABnas=20Nejus?= Date: Sun, 8 Feb 2026 00:49:31 +0000 Subject: [PATCH] Properly format changelog section headers --- docs/changelog.rst | 442 +++++++++++++++++++++++++++++-------------- extra/release.py | 16 +- test/test_release.py | 29 ++- 3 files changed, 327 insertions(+), 160 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1aee35778..9ab397d0f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,20 +4,28 @@ Changelog Changelog goes here! Please add your entry to the bottom of one of the lists below! +.. Uncomment the relevant section when you add the first entry + Unreleased ---------- -New features: +.. + New features + ~~~~~~~~~~~~ -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`plugins/musicbrainz`: Fix search terms escaping. :bug:`6347` - :doc:`plugins/musicbrainz`: Fix support for ``alias`` and ``tracks`` :conf:`plugins.musicbrainz:extra_tags`. -For packagers: +.. + For plugin developers + ~~~~~~~~~~~~~~~~~~~~~ -Other changes: +Other changes +~~~~~~~~~~~~~ - :doc:`plugins/lyrics`: Disable ``tekstowo`` by default because it blocks the beets User-Agent. @@ -25,7 +33,8 @@ Other changes: 2.6.1 (February 02, 2026) ------------------------- -Bug fixes: +Bug fixes +~~~~~~~~~ - Make ``packaging`` a required dependency. :bug:`6332` @@ -35,7 +44,8 @@ Bug fixes: Beets now requires Python 3.10 or later since support for EOL Python 3.9 has been dropped. -New features: +New features +~~~~~~~~~~~~ - :doc:`plugins/fetchart`: Added config setting for a fallback cover art image. - :doc:`plugins/ftintitle`: Added argument for custom feat. words in ftintitle. @@ -80,7 +90,8 @@ New features: - :doc:`plugins/random`: Added ``--field`` option to specify which field to use for equal-chance sampling (default: ``albumartist``). -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`/plugins/lastgenre`: Canonicalize genres when ``force`` and ``keep_existing`` are ``on``, yet no genre info on lastfm could be found. @@ -141,7 +152,8 @@ Bug fixes: new configuration option ``raise_on_error`` to ``yes`` :bug:`5903`, :bug:`4789`. -For plugin developers: +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ - A new plugin event, ``album_matched``, is sent when an album that is being imported has been matched to its metadata and the corresponding distance has @@ -162,12 +174,14 @@ For plugin developers: See :class:`~beetsplug._utils.musicbrainz.MusicBrainzAPI` for documentation. -For packagers: +For packagers +~~~~~~~~~~~~~ - The minimum supported Python version is now 3.10. - An unused dependency on ``mock`` has been removed. -Other changes: +Other changes +~~~~~~~~~~~~~ - The documentation chapter :doc:`dev/paths` has been moved to the "For Developers" section and revised to reflect current best practices (pathlib @@ -187,18 +201,21 @@ Other changes: 2.5.1 (October 14, 2025) ------------------------ -New features: +New features +~~~~~~~~~~~~ - :doc:`plugins/zero`: Add new configuration option, ``omit_single_disc``, to allow zeroing the disc number on write for single-disc albums. Defaults to False. -Bug fixes: +Bug fixes +~~~~~~~~~ - |BeetsPlugin|: load the last plugin class defined in the plugin namespace. :bug:`6093` -For packagers: +For packagers +~~~~~~~~~~~~~ - Fixed issue with legacy metadata plugins not copying properties from the base class. @@ -206,7 +223,8 @@ For packagers: version string now reflects the current git branch and commit hash. :bug:`6089` -Other changes: +Other changes +~~~~~~~~~~~~~ - Removed outdated mailing list contact information from the documentation :bug:`5462`. @@ -221,7 +239,8 @@ Other changes: 2.5.0 (October 11, 2025) ------------------------ -New features: +New features +~~~~~~~~~~~~ - :doc:`plugins/lastgenre`: Add a ``--pretend`` option to preview genre changes without storing or writing them. @@ -240,7 +259,8 @@ New features: specify where the variations are written. :bug:`3354` - :doc:`plugins/web` Support for `nexttrack` keyboard press -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`plugins/musicbrainz` Refresh flexible MusicBrainz metadata on reimport so format changes are applied. :bug:`6036` @@ -267,7 +287,8 @@ Bug fixes: :conf:`plugins.index:data_source_mismatch_penalty` to better reflect its purpose. :bug:`6066` -Other changes: +Other changes +~~~~~~~~~~~~~ - :doc:`plugins/index`: Clarify that musicbrainz must be mentioned if plugin list modified :bug:`6020` @@ -281,7 +302,7 @@ Other changes: - Moved ``vfs.py`` utility module from ``beets`` into ``beetsplug`` namespace as it is not used in the core beets codebase. It can now be found in ``beetsplug._utils``. -- :class:`beets.metadata_plugin.MetadataSourcePlugin`: Remove discogs specific +- :class:`beets.metadata_plugins.MetadataSourcePlugin`: Remove discogs specific disambiguation stripping. - When installing ``beets`` via git or locally the version string now reflects the current git branch and commit hash. :bug:`4448` @@ -289,7 +310,8 @@ Other changes: renamed to ``match.distance_weights.data_source`` for consistency with the name of the field it refers to. -For developers and plugin authors: +For developers and plugin authors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Typing improvements in ``beets/logging.py``: ``getLogger`` now returns ``BeetsLogger`` when called with a name, or ``RootLogger`` when called without @@ -305,7 +327,8 @@ For developers and plugin authors: 2.4.0 (September 13, 2025) -------------------------- -New features: +New features +~~~~~~~~~~~~ - :doc:`plugins/musicbrainz`: The MusicBrainz autotagger has been moved to a separate plugin. The default :ref:`plugins-config` includes ``musicbrainz``, @@ -335,7 +358,8 @@ New features: :conf:`plugins.index:search_limit` to limit the number of results returned by search queries. -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`plugins/musicbrainz`: fix regression where user configured :conf:`plugins.musicbrainz:extra_tags` have been read incorrectly. :bug:`5788` @@ -368,7 +392,8 @@ Bug fixes: - :doc:`/plugins/fromfilename`: Beets will no longer crash if a track's title field is missing. -For packagers: +For packagers +~~~~~~~~~~~~~ - Optional :conf:`plugins.musicbrainz:extra_tags` parameter has been removed from ``BeetsPlugin.candidates`` method signature since it is never passed in. @@ -377,7 +402,8 @@ For packagers: - Loosened ``typing_extensions`` dependency in pyproject.toml to apply to every python version. -For plugin developers: +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ - The ``fetchart`` plugins has seen a few changes to function signatures and source registration in the process of introducing typings to the code. Custom @@ -386,7 +412,7 @@ For plugin developers: 1. |BeetsPlugin| is the base class for all plugins, any plugin needs to inherit from this class. - 2. :class:`beets.metadata_plugin.MetadataSourcePlugin` allows plugins to act + 2. :class:`beets.metadata_plugins.MetadataSourcePlugin` allows plugins to act like metadata sources. E.g. used by the MusicBrainz plugin. All plugins in the beets repo are opted into this class where applicable. If you are maintaining a plugin that acts like a metadata source, i.e. you expose any @@ -422,7 +448,8 @@ For plugin developers: storing the data in the SQL database due to missing type conversion. :bug:`5698` -Other changes: +Other changes +~~~~~~~~~~~~~ - Refactor: Split responsibilities of Plugins into MetaDataPlugins and general Plugins. @@ -449,13 +476,15 @@ Other changes: 2.3.1 (May 14, 2025) -------------------- -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`/reference/pathformat`: Fixed a regression where path legalization incorrectly removed parts of user-configured path formats that followed a dot (**.**). :bug:`5771` -For packagers: +For packagers +~~~~~~~~~~~~~ - Force ``poetry`` version below 2 to avoid it mangling file modification times in ``sdist`` package. :bug:`5770` @@ -466,7 +495,8 @@ For packagers: Beets now requires Python 3.9 or later since support for EOL Python 3.8 has been dropped. -New features: +New features +~~~~~~~~~~~~ - :doc:`plugins/lastgenre`: The new configuration option, ``keep_existing``, provides more fine-grained control over how pre-populated genre tags are @@ -481,7 +511,8 @@ New features: - :doc:`plugins/missing`: Add support for all metadata sources. - :doc:`plugins/mbsync`: Add support for all metadata sorces. -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`plugins/thumbnails`: Fix API call to GIO on big endian architectures (like s390x) in thumbnails plugin. :bug:`5708` @@ -531,13 +562,15 @@ Bug fixes: - :doc:`plugins/parentwork`: Only output parentwork changes when running in verbose mode. -For packagers: +For packagers +~~~~~~~~~~~~~ - The minimum supported Python version is now 3.9. - External plugin developers: ``beetsplug/__init__.py`` file can be removed from your plugin as beets now uses native/implicit namespace package setup. -Other changes: +Other changes +~~~~~~~~~~~~~ - Release workflow: fix the issue where the new release tag is created for the wrong (outdated) commit. Now the tag is created in the same workflow step @@ -553,13 +586,15 @@ Other changes: 2.2.0 (December 02, 2024) ------------------------- -New features: +New features +~~~~~~~~~~~~ - :doc:`/plugins/substitute`: Allow the replacement string to use capture groups from the match. It is thus possible to create more general rules, applying to many different artists at once. -Bug fixes: +Bug fixes +~~~~~~~~~ - Check if running python from the Microsoft Store and provide feedback to install from python.org. :bug:`5467` @@ -569,7 +604,8 @@ Bug fixes: - Bring back test files and the manual to the source distribution tarball. :bug:`5513` -Other changes: +Other changes +~~~~~~~~~~~~~ - Changed ``bitesize`` label to ``good first issue``. Our contribute_ page is now automatically populated with these issues. :bug:`4855` @@ -579,7 +615,8 @@ Other changes: 2.1.0 (November 22, 2024) ------------------------- -New features: +New features +~~~~~~~~~~~~ - New template function added: ``%capitalize``. Converts the first letter of the text to uppercase and the rest to lowercase. @@ -597,7 +634,8 @@ New features: location varies between systems -- for example, users can configure it on Unix systems via ``user-dirs.dirs(5)``. -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`plugins/ftintitle`: The detection of a "feat. X" part in a song title does not produce any false positives caused by words like "and" or "with" @@ -628,13 +666,15 @@ Bug fixes: - Fix the ``TypeError`` when :ref:`set_fields` is provided non-string values. :bug:`4840` -For packagers: +For packagers +~~~~~~~~~~~~~ - The minimum supported Python version is now 3.8. - The ``beet`` script has been removed from the repository. - The ``typing_extensions`` is required for Python 3.10 and below. -Other changes: +Other changes +~~~~~~~~~~~~~ - :doc:`contributing`: The project now uses ``poetry`` for packaging and dependency management. This change affects project management and mostly @@ -672,13 +712,15 @@ Other changes: With this release, beets now requires Python 3.7 or later (it removes support for Python 3.6). -Major new features: +Major new features +~~~~~~~~~~~~~~~~~~ - The beets importer UI received a major overhaul. Several new configuration options are available for customizing layout and colors: :ref:`ui_options`. :bug:`3721` :bug:`5028` -New features: +New features +~~~~~~~~~~~~ - :doc:`/plugins/edit`: Prefer editor from ``VISUAL`` environment variable over ``EDITOR``. @@ -816,7 +858,8 @@ New features: - :doc:`/plugins/fetchart`: Defer source removal config option evaluation to the point where they are used really, supporting temporary config changes. -Bug fixes: +Bug fixes +~~~~~~~~~ - Improve ListenBrainz error handling. :bug:`5459` - :doc:`/plugins/deezer`: Improve requests error handling. @@ -943,7 +986,8 @@ Bug fixes: - :doc:`/plugins/convert`: Fix attempt to convert and perform side-effects if library file is not readable. -For plugin developers: +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ - beets now explicitly prevents multiple plugins to define replacement functions for the same field. When previously defining ``template_fields`` for the same @@ -955,13 +999,15 @@ For plugin developers: for Mopidy), if they need to create an in-memory instance of a beets music library for their tests. -For packagers: +For packagers +~~~~~~~~~~~~~ - As noted above, the minimum Python version is now 3.7. - We fixed a version for the dependency on the Confuse_ library. :bug:`4167` - The minimum required version of :pypi:`mediafile` is now 0.9.0. -Other changes: +Other changes +~~~~~~~~~~~~~ - Add ``sphinx`` and ``sphinx_rtd_theme`` as dependencies for a new ``docs`` extra :bug:`4643` @@ -990,7 +1036,8 @@ for Python 2.7, 3.4, and 3.5). There are also a few other dependency changes---if you're a maintainer of a beets package for a package manager, thank you for your ongoing efforts, and please see the list of notes below. -Major new features: +Major new features +~~~~~~~~~~~~~~~~~~ - When fetching genres from MusicBrainz, we now include genres from the release group (in addition to the release). We also prioritize genres based on the @@ -1004,7 +1051,8 @@ Major new features: now do ``beet modify title='$track $title'`` to put track numbers into songs' titles. :bug:`488` -Other new things: +Other new things +~~~~~~~~~~~~~~~~ - :doc:`/plugins/permissions`: The plugin now sets cover art permissions to match the audio file permissions. @@ -1028,7 +1076,8 @@ Other new things: - Support flexible attributes in ``%aunique``. :bug:`2678` :bug:`3553` - Make ``%aunique`` faster, especially when using inline fields. :bug:`4145` -Bug fixes: +Bug fixes +~~~~~~~~~ - :doc:`/plugins/lyrics`: Fix a crash when Beautiful Soup is not installed. :bug:`4027` @@ -1039,7 +1088,8 @@ Bug fixes: - :doc:`/plugins/aura`: Fix a potential security hole when serving image files. :bug:`4160` -For plugin developers: +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ - :py:meth:`beets.library.Item.destination` now accepts a ``replacements`` argument to be used in favor of the default. @@ -1048,7 +1098,8 @@ For plugin developers: - A new plugin event, ``album_removed``, is called when an album is removed from the library (even when its file is not deleted from disk). -Here are some notes for packagers: +Here are some notes for packagers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - As noted above, the minimum Python version is now 3.6. - We fixed a flaky test, named ``test_album_art`` in the ``test_zero.py`` file, @@ -1074,7 +1125,8 @@ from freenode to Libera.Chat_. .. _libera.chat: https://libera.chat/ -Major new features: +Major new features +~~~~~~~~~~~~~~~~~~ - Fields in queries now fall back to an item's album and check its fields too. Notably, this allows querying items by an album's attribute: in other words, @@ -1115,7 +1167,8 @@ Major new features: no`` in your configuration file to enable modification via the API. :bug:`3870` -Other new things: +Other new things +~~~~~~~~~~~~~~~~ - ``beet remove`` now also allows interactive selection of items from the query, similar to ``beet modify``. @@ -1242,7 +1295,8 @@ Other new things: library folder cannot be found, preventing the user from accidentally wiping out their beets database. Thanks to user: ``logan-arens``. :bug:`1934` -Fixes: +Fixes +~~~~~ - Adapt to breaking changes in Python's ``ast`` module in Python 3.8. - :doc:`/plugins/beatport`: Fix the assignment of the ``genre`` field, and @@ -1373,7 +1427,8 @@ Fixes: ``auth`` configuration option is required in the configuration to specify the flavor of authentication to use. :bug:`4002` -For plugin developers: +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ - MediaFile_ has been split into a standalone project. Where you used to do ``from beets import mediafile``, now just do ``import mediafile``. Beets @@ -1412,7 +1467,8 @@ For plugin developers: - Two new events, ``mb_album_extract`` and ``mb_track_extract``, let plugins add new fields based on MusicBrainz data. Thanks to :user:`dosoe`. -For packagers: +For packagers +~~~~~~~~~~~~~ - Beets' library for manipulating media file metadata has now been split to a standalone project called MediaFile_, released as :pypi:`mediafile`. Beets now @@ -1457,12 +1513,14 @@ This small update is part of our attempt to release new versions more often! There are a few important fixes, and we're clearing the deck for a change to beets' dependencies in the next version. -The new feature is: +The new feature is +~~~~~~~~~~~~~~~~~~ - You can use the NO_COLOR_ environment variable to disable terminal colors. :bug:`3273` -There are some fixes in this release: +There are some fixes in this release +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Fix a regression in the last release that made the image resizer fail to detect older versions of ImageMagick. :bug:`3269` @@ -1472,7 +1530,8 @@ There are some fixes in this release: ``gmusicapi`` module. :bug:`3270` - Fix an incompatibility with Python 3.8's AST changes. :bug:`3278` -Here's a note for packagers: +Here's a note for packagers +~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``pathlib`` is now an optional test dependency on Python 3.4+, removing the need for `Debian pathlib patch`_ :bug:`3275` @@ -1490,7 +1549,8 @@ also some crucial maintenance changes. We officially support Python 3.7 and 3.8, and some performance optimizations can (anecdotally) make listing your library more than three times faster than in the previous version. -The new core features are: +The new core features are +~~~~~~~~~~~~~~~~~~~~~~~~~ - A new :ref:`config-aunique` configuration option allows setting default options for the :ref:`aunique` template function. @@ -1503,7 +1563,8 @@ The new core features are: - A new importer option, :ref:`ignore_data_tracks`, lets you skip audio tracks contained in data files. :bug:`3021` -There are some new plugins: +There are some new plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~ - The :doc:`/plugins/playlist` can query the beets library using M3U playlists. Thanks to :user:`Holzhaus` and :user:`Xenopathic`. :bug:`123` :bug:`3145` @@ -1513,7 +1574,8 @@ There are some new plugins: - The :doc:`/plugins/subsonicupdate` can automatically update your Subsonic library. Thanks to :user:`maffo999`. :bug:`3001` -And many improvements to existing plugins: +And many improvements to existing plugins +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/lastgenre`: Added option ``-A`` to match individual tracks and singletons. :bug:`3220` :bug:`3219` @@ -1580,7 +1642,8 @@ And many improvements to existing plugins: .. _google groups: https://groups.google.com/forum/#!searchin/beets-users/mbsync|sort:date/beets-users/iwCF6bNdh9A/i1xl4Gx8BQAJ -Some improvements have been focused on improving beets' performance: +Some improvements have been focused on improving beets' performance +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Querying the library is now faster: @@ -1600,7 +1663,8 @@ Some improvements have been focused on improving beets' performance: ``playlist`` to get the current song, improving performance when the playlist is long. Thanks to :user:`ray66`. :bug:`3207` :bug:`2752` -Several improvements are related to usability: +Several improvements are related to usability +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The disambiguation string for identifying albums in the importer now shows the catalog number. Thanks to :user:`8h2a`. :bug:`2951` @@ -1616,7 +1680,8 @@ Several improvements are related to usability: - Fixed a confusing typo when the :doc:`/plugins/convert` plugin copies the art covers. :bug:`3063` -Many fixes have been focused on issues where beets would previously crash: +Many fixes have been focused on issues where beets would previously crash +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Avoid a crash when archive extraction fails during import. :bug:`3041` - Missing album art file during an update no longer causes a fatal exception @@ -1666,7 +1731,8 @@ addressing changes interfaces: - Fix a problem when resizing images with :pypi:`PIL`/:pypi:`pillow` on Python 3. Thanks to :user:`architek`. :bug:`2504` :bug:`3029` -And there are many other fixes: +And there are many other fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - R128 normalization tags are now properly deleted from files when the values are missing. Thanks to :user:`autrimpo`. :bug:`2757` @@ -1696,14 +1762,16 @@ And there are many other fixes: ``magick`` executable when it is available. Thanks to :user:`ababyduck`. :bug:`2093` :bug:`3236` -There is one new thing for plugin developers to know about: +There is one new thing for plugin developers to know about +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - In addition to prefix-based field queries, plugins can now define *named queries* that are not associated with any specific field. For example, the new :doc:`/plugins/playlist` supports queries like ``playlist:name`` although there is no field named ``playlist``. See :ref:`extend-query` for details. -And some messages for packagers: +And some messages for packagers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Note the changes to the dependencies on :pypi:`jellyfish` and :pypi:`munkres`. - The optional :pypi:`python-itunes` dependency has been removed. @@ -1722,7 +1790,8 @@ non-audio tracks listed in metadata sources like MusicBrainz: - A new importer option, :ref:`ignored_media`, can let you skip certain media formats. :bug:`2688` -There are other subtle improvements to metadata handling in the importer: +There are other subtle improvements to metadata handling in the importer +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - In the MusicBrainz backend, beets now imports the ``musicbrainz_releasetrackid`` field. This is a first step toward :bug:`406`. @@ -1730,7 +1799,8 @@ There are other subtle improvements to metadata handling in the importer: - A new importer configuration option, :ref:`artist_credit`, will tell beets to prefer the artist credit over the artist when autotagging. :bug:`1249` -And there are even more new features: +And there are even more new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/replaygain`: The ``beet replaygain`` command now has ``--force``, ``--write`` and ``--nowrite`` options. :bug:`2778` @@ -1754,7 +1824,8 @@ And there are even more new features: - :doc:`/plugins/discogs`: Fetch the original year from master releases. :bug:`1122` -There are lots and lots of fixes: +There are lots and lots of fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/replaygain`: Fix a corner-case with the ``bs1770gain`` backend where ReplayGain values were assigned to the wrong files. The plugin now @@ -1824,7 +1895,8 @@ There are lots and lots of fixes: - :doc:`/plugins/mbsync`: We can now successfully update albums even when the first track has a missing MusicBrainz recording ID. :bug:`2920` -There are a couple of changes for developers: +There are a couple of changes for developers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Plugins can now run their import stages *early*, before other plugins. Use the ``early_import_stages`` list instead of plain ``import_stages`` to request @@ -1841,7 +1913,8 @@ importer to add new tracks to an existing album you already have in your library. This way, you no longer need to resort to removing the partial album from your library, combining the files manually, and importing again. -Here are the larger new features in this release: +Here are the larger new features in this release +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - When the importer finds duplicate albums, you can now merge all the tracks---old and new---together and try importing them as a single, combined @@ -1855,7 +1928,8 @@ Here are the larger new features in this release: keeps the new data it gets from the remote metadata source. Thanks to :user:`tummychow`. :bug:`934` :bug:`2755` -There are also somewhat littler, but still great, new features: +There are also somewhat littler, but still great, new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/convert`: A new ``no_convert`` option lets you skip transcoding items matching a query. Instead, the files are just copied as-is. Thanks to @@ -1874,7 +1948,8 @@ There are also somewhat littler, but still great, new features: - :doc:`/plugins/acousticbrainz`: The plugin can now be configured to write only a specific list of tags. Thanks to :user:`woparry`. -There are lots and lots of bug fixes: +There are lots and lots of bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/hook`: Fixed a problem where accessing non-string properties of ``item`` or ``album`` (e.g., ``item.track``) would cause a crash. Thanks to @@ -1927,7 +2002,8 @@ There are lots and lots of bug fixes: :doc:`/plugins/fetchart` and :doc:`/plugins/embedart`. Thanks to :user:`sekjun9878`. :bug:`2729` -There are some changes for developers: +There are some changes for developers +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - "Fixed fields" in Album and Item objects are now more strict about translating missing values into type-specific null-like values. This should help in cases @@ -1946,7 +2022,8 @@ can now manually set fields on the new music. Date queries have gotten much more powerful: you can write precise queries down to the second, and we now have *relative* queries like ``-1w``, which means *one week ago*. -Here are the new features: +Here are the new features +~~~~~~~~~~~~~~~~~~~~~~~~~ - You can now set fields to certain values during :ref:`import-cmd`, using either a ``--set field=value`` command-line flag or a new :ref:`set_fields` @@ -1968,7 +2045,8 @@ Here are the new features: to an external location without changing their paths in the library database. Thanks to :user:`SpirosChadoulos`. :bug:`435` :bug:`2510` -There are also some bug fixes: +There are also some bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/lastgenre`: Fix a crash when using the ``prefer_specific`` and ``canonical`` options together. Thanks to :user:`yacoob`. :bug:`2459` @@ -1986,7 +2064,8 @@ There are also some bug fixes: This release built up a longer-than-normal list of nifty new features. We now support DSF audio files and the importer can hard-link your files, for example. -Here's a full list of new features: +Here's a full list of new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Added support for DSF files, once a future version of Mutagen is released that supports them. Thanks to :user:`docbobo`. :bug:`459` :bug:`2379` @@ -2040,7 +2119,8 @@ Here's a full list of new features: further inputs. This bug mainly affected :doc:`/plugins/convert`. Thanks to :user:`jansol`. :bug:`2488` :bug:`2524` -There are also quite a few fixes: +There are also quite a few fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - In the :ref:`replace` configuration option, we now replace a leading hyphen (-) with an underscore. :bug:`549` :bug:`2509` @@ -2089,7 +2169,8 @@ There are also quite a few fixes: - Fix a crash when reading non-ASCII characters in configuration files on Windows under Python 3. :bug:`2456` :bug:`2565` :bug:`2566` -We removed backends from two metadata plugins because of bitrot: +We removed backends from two metadata plugins because of bitrot +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/lyrics`: The Lyrics.com backend has been removed. (It stopped working because of changes to the site's URL structure.) :bug:`2548` @@ -2111,7 +2192,8 @@ music---for example, you might generate a random playlist that lasts the perfect length for your walk to work. We also access as many Web services as possible over secure connections now---HTTPS everywhere! -The most visible new features are: +The most visible new features are +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - We now support the composer, lyricist, and arranger tags. The MusicBrainz data source will fetch data for these fields when the next version of @@ -2130,7 +2212,8 @@ The most visible new features are: playlist that takes a given amount of time. Thanks to :user:`diomekes`. :bug:`2305` :bug:`2322` -Some smaller new features: +Some smaller new features +~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/zero`: A new ``zero`` command manually triggers the zero plugin. Thanks to :user:`SJoshBrown`. :bug:`2274` :bug:`2329` @@ -2140,7 +2223,8 @@ Some smaller new features: - :doc:`/plugins/bpm`: The ``import.write`` configuration option now decides whether or not to write tracks after updating their BPM. :bug:`1992` -And the fixes: +And the fixes +~~~~~~~~~~~~~ - :doc:`/plugins/bpd`: Fix a crash on non-ASCII MPD commands. :bug:`2332` - :doc:`/plugins/scrub`: Avoid a crash when files cannot be read or written. @@ -2161,10 +2245,13 @@ And the fixes: - :doc:`/plugins/play`: The misspelled configuration option ``warning_treshold`` is no longer supported. -For plugin developers: when providing new importer prompt choices (see -:ref:`append_prompt_choices`), you can now provide new candidates for the user -to consider. For example, you might provide an alternative strategy for picking -between the available alternatives or for looking up a release on MusicBrainz. +For plugin developers +~~~~~~~~~~~~~~~~~~~~~ + +- :ref:`append_prompt_choices`: When providing new importer prompt choices, you + can now provide new candidates for the user to consider. For example, you + might provide an alternative strategy for picking between the available + alternatives or for looking up a release on MusicBrainz. 1.4.2 (December 16, 2016) ------------------------- @@ -2175,7 +2262,8 @@ lurk, but we've deemed things safe enough for broad adoption. If you can, please install beets with ``pip3`` instead of ``pip2`` this time and let us know how it goes! -Here are the fixes: +Here are the fixes +~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/badfiles`: Fix a crash on non-ASCII filenames. :bug:`2299` - The ``%asciify{}`` path formatting function and the :ref:`asciify-paths` @@ -2200,7 +2288,8 @@ bugs, so it may replace all your music with Limp Bizkit---but if you're brave and you have backups, please try installing on Python 3. Let us know how it goes. -If you package beets for distribution, here's what you'll want to know: +If you package beets for distribution, here's what you'll want to know +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - This version of beets now depends on the six_ library. - We also bumped our minimum required version of Mutagen_ to 1.33 (from 1.27). @@ -2219,7 +2308,8 @@ configuration that you may need to know about: - The deprecated ``list_format_album`` and ``list_format_item`` configuration options have been removed (see :ref:`format_album` and :ref:`format_item`). -The are a few new features: +The are a few new features +~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/mpdupdate`, :doc:`/plugins/mpdstats`: When the ``host`` option is not set, these plugins will now look for the ``$MPD_HOST`` environment @@ -2236,7 +2326,8 @@ The are a few new features: - The :ref:`update-cmd` command takes a new ``-F`` flag to specify the fields to update. Thanks to :user:`dangmai`. :bug:`2229` :bug:`2231` -And there are a few bug fixes too: +And there are a few bug fixes too +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/convert`: The plugin no longer asks for confirmation if the query did not return anything to convert. :bug:`2260` :bug:`2262` @@ -2295,7 +2386,8 @@ appeared in the last version. But it also features the triumphant return of the It's also the first version where beets passes all its tests on Windows! May this herald a new age of cross-platform reliability for beets. -New features: +New features +~~~~~~~~~~~~ - :doc:`/plugins/beatport`: This metadata source plugin has arisen from the dead! It now works with Beatport's new OAuth-based API. Thanks to @@ -2307,7 +2399,8 @@ New features: - A new :ref:`duplicate_action` importer config option controls how duplicate albums or tracks treated in import task. :bug:`185` -Some fixes for Windows: +Some fixes for Windows +~~~~~~~~~~~~~~~~~~~~~~ - Queries are now detected as paths when they contain backslashes (in addition to forward slashes). This only applies on Windows. @@ -2316,7 +2409,8 @@ Some fixes for Windows: - :doc:`/plugins/fetchart`: The plugin should work more reliably with non-ASCII paths. -And other fixes: +And other fixes +~~~~~~~~~~~~~~~ - :doc:`/plugins/replaygain`: The ``bs1770gain`` backend now correctly calculates sample peak instead of true peak. This comes with a major speed @@ -2350,7 +2444,8 @@ instead. .. _shutting down: https://developer.spotify.com/news-stories/2016/03/29/api-improvements-update/ -Some of the larger new features: +Some of the larger new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The new :doc:`/plugins/hook` lets you execute commands in response to beets events. @@ -2361,7 +2456,8 @@ Some of the larger new features: :user:`Kraymer`. - :doc:`/plugins/fetchart`: Album art can now be fetched from fanart.tv_. -Smaller new things: +Smaller new things +~~~~~~~~~~~~~~~~~~ - There are two new functions available in templates: ``%first`` and ``%ifdef``. See :ref:`template-functions`. @@ -2387,7 +2483,8 @@ Smaller new things: .. _fanart.tv: https://fanart.tv/ -Fixes: +Fixes +~~~~~ - Fix a problem with the :ref:`stats-cmd` command in exact mode when filenames on Windows use non-ASCII characters. :bug:`1891` @@ -2430,7 +2527,8 @@ the import process (via the :doc:`/plugins/edit`). Also, as of this release, the beets project has some new Internet homes! Our new domain name is beets.io_, and we have a shiny new GitHub organization: beetbox_. -Here are the big new features: +Here are the big new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - A new :doc:`/plugins/acousticbrainz` fetches acoustic-analysis information from the AcousticBrainz_ project. Thanks to :user:`opatel99`, and thanks to @@ -2450,7 +2548,8 @@ Here are the big new features: stages, so please send feedback if you find anything missing. :bug:`1846` :bug:`396` -There are even more new features: +There are even more new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/fetchart`: The Google Images backend has been restored. It now requires an API key from Google. Thanks to :user:`lcharlick`. :bug:`1778` @@ -2469,7 +2568,8 @@ There are even more new features: .. _google code-in: https://codein.withgoogle.com/ -Fixes: +Fixes +~~~~~ - :doc:`/plugins/play`: Fix a regression in the last version where there was no default command. :bug:`1793` @@ -2509,7 +2609,8 @@ This version also adds an oft-requested "not" operator to beets' queries, so you can exclude music from any operation. It also brings friendlier formatting (and querying!) of song durations. -The big new stuff: +The big new stuff +~~~~~~~~~~~~~~~~~ - A new :doc:`/plugins/edit` lets you manually edit your music's metadata using your favorite text editor. :bug:`164` :bug:`1706` @@ -2525,7 +2626,8 @@ The big new stuff: and 30 seconds. You can turn off this new behavior using the ``format_raw_length`` configuration option. :bug:`1749` -Smaller changes: +Smaller changes +~~~~~~~~~~~~~~~ - Three commands, ``modify``, ``update``, and ``mbsync``, would previously move files by default after changing their metadata. Now, these commands will only @@ -2543,7 +2645,8 @@ Smaller changes: option for customizing how items are displayed, just like the built-in ``list`` command. :bug:`1737` -Some changes for developers: +Some changes for developers +~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Two new :ref:`plugin hooks `, ``albuminfo_received`` and ``trackinfo_received``, let plugins intercept metadata as soon as it is @@ -2551,7 +2654,8 @@ Some changes for developers: - Plugins can now add options to the interactive importer prompts. See :ref:`append_prompt_choices`. :bug:`1758` -Fixes: +Fixes +~~~~~ - :doc:`/plugins/plexupdate`: Fix a crash when Plex libraries use non-ASCII collection names. :bug:`1649` @@ -2623,7 +2727,8 @@ lyrics. The larger features are: alternative to the (default) "blacklist" mode. Thanks to :user:`adkow`. :bug:`1621` :bug:`1641` -And there are smaller new features too: +And there are smaller new features too +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Add new color aliases for standard terminal color names (e.g., cyan and magenta). Thanks to :user:`mathstuf`. :bug:`1548` @@ -2641,7 +2746,8 @@ And there are smaller new features too: which Plex library to update. :bug:`1572` :bug:`1595` - A new ``include`` option lets you import external configuration files. -This release has plenty of fixes: +This release has plenty of fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/lastgenre`: Fix a bug that prevented tag popularity from being considered. Thanks to :user:`svoos`. :bug:`1559` @@ -2678,7 +2784,8 @@ This release has plenty of fixes: This is mainly a bugfix release, but we also have a nifty new plugin for ipfs_ and a bunch of new configuration options. -The new features: +The new features +~~~~~~~~~~~~~~~~ - A new :doc:`/plugins/ipfs` lets you share music via a new, global, decentralized filesystem. :bug:`1397` @@ -2700,7 +2807,8 @@ The new features: - :doc:`/plugins/plexupdate`: A new ``token`` configuration option lets you specify a key for Plex Home setups. Thanks to :user:`edcarroll`. :bug:`1494` -Fixes: +Fixes +~~~~~ - :doc:`/plugins/fetchart`: Complain when the ``enforce_ratio`` or ``min_width`` options are enabled but no local imaging backend is available to carry them @@ -2791,7 +2899,8 @@ Packagers should also note a new dependency in this version: the Jellyfish_ Python library makes our text comparisons (a big part of the auto-tagging process) go much faster. -New features: +New features +~~~~~~~~~~~~ - Queries can now use **"or" logic**: if you use a comma to separate parts of a query, items and albums will match *either* side of the comma. For example, @@ -2813,7 +2922,8 @@ New features: width in pixels and the ``enforce_ratio`` option requires that images be square. :bug:`1394` -Little fixes and improvements: +Little fixes and improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/fetchart`: Remove a hard size limit when fetching from the Cover Art Archive. @@ -2856,7 +2966,8 @@ There's one big change with this release: **Python 2.6 is no longer supported**. You'll need Python 2.7. Please trust us when we say this let us remove a surprising number of ugly hacks throughout the code. -Major new features and bigger changes: +Major new features and bigger changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - There are now **multiple levels of output verbosity**. On the command line, you can make beets somewhat verbose with ``-v`` or very verbose with ``-vv``. @@ -2889,7 +3000,8 @@ Major new features and bigger changes: Sensitive information like passwords and API keys is not included. The new ``--clear`` option disables redaction. :bug:`1376` -You should probably also know about these core changes to the way beets works: +You should probably also know about these core changes to the way beets works +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - As mentioned above, Python 2.6 is no longer supported. - The ``tracktotal`` attribute is now a *track-level field* instead of an @@ -2917,7 +3029,8 @@ You should probably also know about these core changes to the way beets works: targeted by the query exists. Previously, just having a slash somewhere in the query was enough, so ``beet ls AC/DC`` wouldn't work to refer to the artist. -There are also lots of medium-sized features in this update: +There are also lots of medium-sized features in this update +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/duplicates`: The command has a new ``--strict`` option that will only report duplicates if all attributes are explicitly set. :bug:`1000` @@ -2949,7 +3062,8 @@ There are also lots of medium-sized features in this update: - :doc:`/plugins/ftintitle`: You can now configure the format that the plugin uses to add the artist to the title. Thanks to :user:`amishb`. :bug:`1377` -And many little fixes and improvements: +And many little fixes and improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/replaygain`: Stop applying replaygain directly to source files when using the mp3gain backend. :bug:`1316` @@ -3010,7 +3124,8 @@ And many little fixes and improvements: ``splupdate`` command can now also add a URL-encodable prefix to every path in the playlist file. -For developers: +For developers +~~~~~~~~~~~~~~ - The ``database_change`` event now sends the item or album that is subject to a change. @@ -3046,7 +3161,8 @@ Also, as an advance warning, this will be one of the last releases to support Python 2.6. If you have a system that cannot run Python 2.7, please consider upgrading soon. -The new features are: +The new features are +~~~~~~~~~~~~~~~~~~~~ - A new :doc:`/plugins/permissions` makes it easy to fix permissions on music files as they are imported. Thanks to :user:`xsteadfastx`. :bug:`1098` @@ -3066,7 +3182,8 @@ The new features are: when it has syntax errors. :bug:`1123` :bug:`1128` - :doc:`/plugins/lyrics`: Added a new ``force`` config option. :bug:`1150` -As usual, there are loads of little fixes and improvements: +As usual, there are loads of little fixes and improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Fix a new crash with the latest version of Mutagen (1.26). - :doc:`/plugins/lyrics`: Avoid fetching truncated lyrics from the Google backed @@ -3123,7 +3240,8 @@ last, imports can now create symbolic links to music files instead of copying or moving them. We also gained the ability to search for album art on the iTunes Store and a new way to compute ReplayGain levels. -The major new features are: +The major new features are +~~~~~~~~~~~~~~~~~~~~~~~~~~ - A new :doc:`/plugins/lastimport` lets you download your play count data from Last.fm into a flexible attribute. Thanks to Rafael Bodill. @@ -3144,7 +3262,8 @@ The major new features are: - :doc:`/plugins/ftintitle`: The plugin now runs automatically on import. To disable this, unset the ``auto`` config flag. -There are also core improvements and other substantial additions: +There are also core improvements and other substantial additions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The ``media`` attribute is now a *track-level field* instead of an album-level one. This field stores the delivery mechanism for the music, so in its @@ -3163,7 +3282,8 @@ There are also core improvements and other substantial additions: requires a Discogs account due to new API restrictions. Thanks to :user:`multikatt`. :bug:`1027`, :bug:`1040` -And countless little improvements and fixes: +And countless little improvements and fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Standard cover art in APEv2 metadata is now supported. Thanks to Matthias Kiefer. :bug:`1042` @@ -3242,7 +3362,8 @@ One upgrade note: if you use the :doc:`/plugins/discogs`, you will need to upgrade the Discogs client library to use this version. Just type ``pip install -U discogs-client``. -Other new features: +Other new features +~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/info`: Target files can now be specified through library queries (in addition to filenames). The ``--library`` option prints library @@ -3255,7 +3376,8 @@ Other new features: - :doc:`/plugins/convert`: A new ``--yes`` command-line flag skips the confirmation. -Still more fixes and little improvements: +Still more fixes and little improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Invalid state files don't crash the importer. - :doc:`/plugins/lyrics`: Only strip featured artists and parenthesized title @@ -3308,7 +3430,8 @@ measure a song's tempo by tapping out the beat on your keyboard. The importer deals more elegantly with duplicates and you can broaden your cover art search to the entire web with Google Image Search. -The big new features are: +The big new features are +~~~~~~~~~~~~~~~~~~~~~~~~ - Support for AIFF files. Tags are stored as ID3 frames in one of the file's IFF chunks. Thanks to Evan Purkhiser for contributing support to Mutagen_. @@ -3332,7 +3455,8 @@ The big new features are: .. _spotify: https://www.spotify.com/ -And the multitude of little improvements and fixes: +And the multitude of little improvements and fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Compatibility with the latest version of Mutagen_, 1.23. - :doc:`/plugins/web`: Lyrics now display readably with correct line breaks. @@ -3406,7 +3530,8 @@ playing music in desktop players and another for organizing your directories into "buckets." It also brings huge performance optimizations to queries---your ``beet ls`` commands will now go much faster. -New features: +New features +~~~~~~~~~~~~ - The new :doc:`/plugins/play` lets you start your desktop music player with the songs that match a query. Thanks to David Hamp-Gonsalves. @@ -3417,7 +3542,8 @@ New features: - :doc:`/plugins/ftintitle`: A new option lets you remove featured artists entirely instead of moving them to the title. Thanks to SUTJael. -And those all-important bug fixes: +And those all-important bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/mbsync`: Fix a regression in 1.3.5 that broke the plugin entirely. @@ -3452,7 +3578,8 @@ directly from compressed archives, and the lyrics plugin is more robust. One note for upgraders and packagers: this version of beets has a new dependency in enum34_, which is a backport of the new enum_ standard library module. -The major new features are: +The major new features are +~~~~~~~~~~~~~~~~~~~~~~~~~~ - Beets can now import ``zip``, ``tar``, and ``rar`` archives. Just type ``beet import music.zip`` to have beets transparently extract the files to import. @@ -3475,7 +3602,8 @@ in this release: - A new :doc:`/plugins/keyfinder` runs a command-line tool to get the key from audio data and store it in the ``initial_key`` field. -There are also many bug fixes and little enhancements: +There are also many bug fixes and little enhancements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``echonest`` plugin: Truncate files larger than 50MB before uploading for analysis. @@ -3515,7 +3643,8 @@ autotagger's matching logic. One note for upgraders: if you use the :doc:`/plugins/fetchart`, it has a new dependency, the requests_ module. -New stuff: +New stuff +~~~~~~~~~ - Added a :ref:`config-cmd` command to manage your configuration. It can show you what you currently have in your config file, point you at where the file @@ -3548,7 +3677,8 @@ New stuff: - The :ref:`import-cmd` command can now accept individual files as arguments even in non-singleton mode. Files are imported as one-track albums. -Fixes: +Fixes +~~~~~ - Error messages involving paths no longer escape non-ASCII characters (for legibility). @@ -3609,7 +3739,8 @@ provide *uniform access* across fixed, flexible, and computed attributes. You can write ``item.foo`` to access the ``foo`` field without worrying about where the data comes from. -Unrelated new stuff: +Unrelated new stuff +~~~~~~~~~~~~~~~~~~~ - The importer has a new interactive option (*G* for "Group albums"), command-line flag (``--group-albums``), and config option @@ -3626,7 +3757,8 @@ Unrelated new stuff: this plugin, you will need to update your configuration. Thanks to BrainDamage. -Other little fixes: +Other little fixes +~~~~~~~~~~~~~~~~~~ - ``echonest`` plugin: Tempo (BPM) is now always stored as an integer. Thanks to Heinz Wiesinger. @@ -3689,7 +3821,8 @@ The "core" of beets gained a new built-in command: :ref:`beet write ` updates the metadata tags for files, bringing them back into sync with your database. Thanks to Heinz Wiesinger. -We added some plugins and overhauled some existing ones: +We added some plugins and overhauled some existing ones +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The new ``echonest`` plugin plugin can fetch a wide range of `acoustic attributes`_ from `The Echo Nest`_, including the "speechiness" and "liveness" @@ -3715,7 +3848,8 @@ We added some plugins and overhauled some existing ones: - :doc:`/plugins/lyrics`: A new ``--force`` option optionally re-downloads lyrics even when files already have them. Thanks to Bitdemon. -As usual, there are also innumerable little fixes and improvements: +As usual, there are also innumerable little fixes and improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - When writing ID3 tags for ReplayGain normalization, tags are written with both upper-case and lower-case TXXX frame descriptions. Previous versions of beets @@ -3762,7 +3896,8 @@ transcoding to any format, and two new plugins: one that guesses metadata for "blank" files based on their filenames and one that moves featured artists into the title field. -Here's the new stuff: +Here's the new stuff +~~~~~~~~~~~~~~~~~~~~ - Add Opus_ audio support. Thanks to Rowan Lewis. - :doc:`/plugins/convert`: You can now transcode files to any audio format, @@ -3781,7 +3916,8 @@ Here's the new stuff: older ID3v2.3 metadata standard. Use this if you want your tags to be visible to Windows and some older players. -And some fixes: +And some fixes +~~~~~~~~~~~~~~ - :doc:`/plugins/fetchart`: Better error message when the image file has an unrecognized type. @@ -3868,7 +4004,8 @@ This is a bugfix release. We're in the midst of preparing for a large change in beets 1.3, so 1.2.2 resolves some issues that came up over the last few weeks. Stay tuned! -The improvements in this release are: +The improvements in this release are +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - A new plugin event, ``item_moved``, is sent when files are moved on disk. Thanks to dsedivec. @@ -3917,7 +4054,8 @@ customize the way that matches are selected: component. The recommendation will be downgraded if a non-zero penalty is being applied to the specified field. -And some little enhancements and bug fixes: +And some little enhancements and bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Multi-disc directory names can now contain "disk" (in addition to "disc"). Thanks to John Hawthorn. @@ -3962,7 +4100,8 @@ common problems, both by Pedro Silva: - New :doc:`/plugins/missing`: Find albums in your library that are **missing tracks**. -There are also three more big features added to beets core: +There are also three more big features added to beets core +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Your library now keeps track of **when music was added** to it. The new ``added`` field is a timestamp reflecting when each item and album was @@ -3975,7 +4114,8 @@ There are also three more big features added to beets core: - **ALAC files** are now marked as ALAC instead of being conflated with AAC audio. Thanks to Simon Luijk. -In addition, the importer saw various UI enhancements, thanks to Tai Lee: +In addition, the importer saw various UI enhancements, thanks to Tai Lee +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - More consistent format and colorization of album and track metadata. - Display data source URL for matches from the new data source plugins. This @@ -4006,7 +4146,8 @@ MusicBrainz release group: identical releases: ``disctotal``, ``label``, ``catalognum``, ``country`` and ``albumdisambig``. -As usual, there were also lots of other great littler enhancements: +As usual, there were also lots of other great littler enhancements +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/random`: A new ``-e`` option gives an equal chance to each artist in your collection to avoid biasing random samples to prolific artists. @@ -4032,7 +4173,8 @@ As usual, there were also lots of other great littler enhancements: - :doc:`/plugins/mpdupdate`: You can now communicate with MPD over a Unix domain socket. Thanks to John Hawthorn. -And a batch of fixes: +And a batch of fixes +~~~~~~~~~~~~~~~~~~~~ - Album art filenames now respect the :ref:`replace` configuration. - Friendly error messages are now printed when trying to read or write files @@ -4106,7 +4248,8 @@ during the import process. There's also a new plugin for synchronizing your metadata with MusicBrainz. Under the hood, plugins can now extend the query syntax. -New configuration options: +New configuration options +~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`languages` controls the preferred languages when selecting an alias from MusicBrainz. This feature requires python-musicbrainzngs_ 0.3 or later. Thanks @@ -4119,7 +4262,8 @@ New configuration options: - :doc:`/plugins/importfeeds`: An option was added to use absolute, rather than relative, paths. Thanks to Lucas Duailibe. -Other stuff: +Other stuff +~~~~~~~~~~~ - A new :doc:`/plugins/mbsync` provides a command that looks up each item and track in MusicBrainz and updates your library to reflect it. This can help you @@ -4181,7 +4325,8 @@ release selected. Now, these fields reflect the specific release and ``original_year``, etc., reflect the earlier release date. If you want the old behavior, just set :ref:`original_date` to true in your config file. -New configuration options: +New configuration options +~~~~~~~~~~~~~~~~~~~~~~~~~ - :ref:`default_action` lets you determine the default (just-hit-return) option is when considering a candidate. @@ -4208,7 +4353,8 @@ New configuration options: in filenames via ``path_sep_replace``. The default is an underscore. Use this setting with caution. -Other new stuff: +Other new stuff +~~~~~~~~~~~~~~~ - Support for Windows Media/ASF audio files. Thanks to Dave Hayes. - New :doc:`/plugins/smartplaylist`: generate and maintain m3u playlist files @@ -4289,7 +4435,8 @@ a common directory (e.g., ``~/.config/beets`` on Unix-like systems). ``~/.beetsmusic.blb`` previously. Similarly, the runtime state file is now called ``state.pickle`` in the same directory instead of ``~/.beetsstate``. -It also adds some new features: +It also adds some new features +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :doc:`/plugins/inline`: Inline definitions can now contain statements or blocks in addition to just expressions. Thanks to Florent Thoumie. @@ -5184,7 +5331,8 @@ for Windows users. This should make running beets much easier: just type ``beet`` if you have your ``PATH`` environment variable set up correctly. The :doc:`/guides/main` guide has some tips on installing beets on Windows. -Here's the detailed list of changes: +Here's the detailed list of changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - **Parallel tagger.** The autotagger has been reimplemented to use multiple threads. This means that it can concurrently read files from disk, talk to the diff --git a/extra/release.py b/extra/release.py index 2bafa90c2..febd624d1 100755 --- a/extra/release.py +++ b/extra/release.py @@ -165,13 +165,21 @@ def update_changelog(text: str, new: Version) -> str: Unreleased ---------- -New features: +.. + New features + ~~~~~~~~~~~~ -Bug fixes: +.. + Bug fixes + ~~~~~~~~~ -For packagers: +.. + For plugin developers + ~~~~~~~~~~~~~~~~~~~~~ -Other changes: +.. + Other changes + ~~~~~~~~~~~~~ {new_header} {"-" * len(new_header)} diff --git a/test/test_release.py b/test/test_release.py index 0951a5735..ab1bd7e03 100644 --- a/test/test_release.py +++ b/test/test_release.py @@ -20,7 +20,12 @@ pytestmark = pytest.mark.skipif( @pytest.fixture def rst_changelog(): - return """New features: + return """ +Unreleased +---------- + +New features +~~~~~~~~~~~~ - :doc:`/plugins/substitute`: Some substitute multi-line change. @@ -35,7 +40,8 @@ You can do something with this command: $ do-something -Bug fixes: +Bug fixes +~~~~~~~~~ - Some fix that refers to an issue. :bug:`5467` @@ -58,9 +64,11 @@ Bug fixes: Section naaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmmmmmeeeeeeeeeeeeeee with over 80 characters: -Empty section: +.. For plugin developers +.. ~~~~~~~~~~~~~~~~~~~~~ -Other changes: +Other changes +~~~~~~~~~~~~~ - Changed ``bitesize`` label to ``good first issue``. Our `contribute`_ page is now automatically populated with these issues. :bug:`4855` @@ -70,14 +78,17 @@ Other changes: 2.1.0 (November 22, 2024) ------------------------- -Bug fixes: +Bug fixes +~~~~~~~~~ - Fixed something.""" @pytest.fixture def md_changelog(): - return r"""### New features + return r"""# Unreleased + +## New features - [beets.plugins.BeetsPlugin](https://beets.readthedocs.io/en/stable/api/generated/beets.plugins.BeetsPlugin.html#beets.plugins.BeetsPlugin) Some plugin change. - [list](https://beets.readthedocs.io/en/stable/reference/cli.html#list-cmd) Update. @@ -88,7 +99,7 @@ You can do something with this command: $ do-something -### Bug fixes +## Bug fixes - Another fix with an enumerated list 1. First and some details @@ -102,13 +113,13 @@ You can do something with this command: **Section naaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmmmmmeeeeeeeeeeeeeee with over 80 characters** -### Other changes +## Other changes - Changed `bitesize` label to `good first issue`. Our [contribute](https://github.com/beetbox/beets/contribute) page is now automatically populated with these issues. :bug: (#4855) # 2.1.0 (November 22, 2024) -### Bug fixes +## Bug fixes - Fixed something.""" # noqa: E501