From f6ca68319d25e78eefa76d1e6e0da6a4329fbe58 Mon Sep 17 00:00:00 2001 From: Sebastian Mohr <39738318+semohr@users.noreply.github.com> Date: Wed, 1 Oct 2025 12:58:57 +0200 Subject: [PATCH] Add git commit suffix to __version__ for development installs (#5967) Make it obvious when beets is installed from from a non major version. When installed locally this adds a git hash suffix and the distance to the last release. closes #4448 --- .gitignore | 3 +++ beets/__init__.py | 6 +++++- beets/_version.py | 7 +++++++ docs/changelog.rst | 2 ++ extra/release.py | 6 ------ pyproject.toml | 13 +++++++++++-- 6 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 beets/_version.py diff --git a/.gitignore b/.gitignore index 90ef7387d..102e1c3e4 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,6 @@ ENV/ # pyright pyrightconfig.json + +# Versioning +beets/_version.py diff --git a/beets/__init__.py b/beets/__init__.py index 65094330b..5f4c6657d 100644 --- a/beets/__init__.py +++ b/beets/__init__.py @@ -17,9 +17,10 @@ from sys import stderr import confuse +# Version management using poetry-dynamic-versioning +from ._version import __version__, __version_tuple__ from .util import deprecate_imports -__version__ = "2.4.0" __author__ = "Adrian Sampson " @@ -54,3 +55,6 @@ class IncludeLazyConfig(confuse.LazyConfig): config = IncludeLazyConfig("beets", __name__) + + +__all__ = ["__version__", "__version_tuple__", "config"] diff --git a/beets/_version.py b/beets/_version.py new file mode 100644 index 000000000..4dea56035 --- /dev/null +++ b/beets/_version.py @@ -0,0 +1,7 @@ +# This file is auto-generated during the build process. +# Do not edit this file directly. +# Placeholders are replaced during substitution. +# Run `git update-index --assume-unchanged beets/_version.py` +# to ignore local changes to this file. +__version__ = "0.0.0" +__version_tuple__ = (0, 0, 0) diff --git a/docs/changelog.rst b/docs/changelog.rst index b22bcd44b..a39b3db63 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -53,6 +53,8 @@ Other changes: ``beetsplug._utils``. - :class:`beets.metadata_plugin.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` For developers and plugin authors: diff --git a/extra/release.py b/extra/release.py index 647cc49c9..b47de8966 100755 --- a/extra/release.py +++ b/extra/release.py @@ -174,12 +174,6 @@ FILENAME_AND_UPDATE_TEXT: list[tuple[Path, UpdateVersionCallable]] = [ PYPROJECT, lambda text, new: re.sub(r"(?<=\nversion = )[^\n]+", f'"{new}"', text), ), - ( - BASE / "beets" / "__init__.py", - lambda text, new: re.sub( - r"(?<=__version__ = )[^\n]+", f'"{new}"', text - ), - ), (CHANGELOG, update_changelog), (BASE / "docs" / "conf.py", update_docs_config), ] diff --git a/pyproject.toml b/pyproject.toml index 2546360ad..8338ce1c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -156,9 +156,18 @@ web = ["flask", "flask-cors"] [tool.poetry.scripts] beet = "beets.ui:main" + +[tool.poetry-dynamic-versioning] +enable = true +vcs = "git" +format = "{base}.dev{distance}+{commit}" + +[tool.poetry-dynamic-versioning.files."beets/_version.py"] +persistent-substitution = true + [build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] +build-backend = "poetry_dynamic_versioning.backend" [tool.pipx-install] poethepoet = ">=0.26"