commit:     ddb0475a2677d178669a9f6f53eb2bdf1ce77264
Author:     Matt Jolly <kangie <AT> gentoo <DOT> org>
AuthorDate: Mon May 13 06:08:04 2024 +0000
Commit:     Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Wed May 22 13:17:22 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ddb0475a

media-sound/beets: add 1.7.0_pre20240501; update 9999

- Update metadata.xml to remove "smart" quotes
- Skip failing bash completions test instead of patching it out.
- add `sed` to drop some `addopts` that break pytest due to disabled
  code coverage testing.
- Support py312
- Use PEP 517
- Add a proper VCS build path (any non-pypi build)
- add `EPYTEST_XDIST=1`

1.7.0_pre release has been added to support py312; there were too many
patches to sanely backport (and a lot of churn upstream). Upstream are
gearing up for an actual 1.7.0 release, hopefully soon:

https://github.com/beetbox/beets/discussions/4501#discussioncomment-9171769

Drop 'obsessive-compulsive' from the package description; upstream don't
(or no longer) use this phrase to describe their package and we don't
want or need phrasing like that in ::gentoo.

Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>

 media-sound/beets/Manifest                         |  1 +
 media-sound/beets/beets-1.6.0-r1.ebuild            |  2 +-
 ...-9999.ebuild => beets-1.7.0_pre20240501.ebuild} | 68 ++++++++++++++++++----
 media-sound/beets/beets-9999.ebuild                | 60 ++++++++++++++++---
 media-sound/beets/metadata.xml                     |  6 +-
 5 files changed, 116 insertions(+), 21 deletions(-)

diff --git a/media-sound/beets/Manifest b/media-sound/beets/Manifest
index 27f6f1a84bbe..7939d4065748 100644
--- a/media-sound/beets/Manifest
+++ b/media-sound/beets/Manifest
@@ -1 +1,2 @@
 DIST beets-1.6.0.tar.gz 1698333 BLAKE2B 
7d3ded703524d5f8740a6adf3769a5752a1e47720ebf0653238f117e4ef6f97461abcd0c7a0d7f428c9848c95277070b5687f9007c04e47b07cdb22eca8c9cbf
 SHA512 
b03759a2be7d3318b4f43cac09ada229cea6496774ba3dcdb1458427e41f6329a627241afc0bfaa9a91afb6818ba944ef6088e38c5635a3bfe730a6a8011a0dc
+DIST beets-1.7.0_pre20240501.gh.tar.gz 2247319 BLAKE2B 
e215c8a2a30a44d298746351be4fa2de1cebb7d6aec2bc7dfc679b133ea5eddefec20d038aa1aa1d734b176c09163b93f917c6c29ea5115c4c2349e090c8c5df
 SHA512 
f397c72b481d7d8822db598ab37c99d0b9063ae45455c0d34116fab7b5a4cc683a3357bdfe436181b1dea46ee05192cc37faf355b5e093d63c2e440e523b92bc

diff --git a/media-sound/beets/beets-1.6.0-r1.ebuild 
b/media-sound/beets/beets-1.6.0-r1.ebuild
index 5d407a5cc040..05075184f5f8 100644
--- a/media-sound/beets/beets-1.6.0-r1.ebuild
+++ b/media-sound/beets/beets-1.6.0-r1.ebuild
@@ -20,7 +20,7 @@ else
        S="${WORKDIR}/${MY_P}"
 fi
 
-DESCRIPTION="Media library management system for obsessive-compulsive music 
geeks"
+DESCRIPTION="Media library management system for obsessive music geeks"
 HOMEPAGE="https://beets.io/ https://pypi.org/project/beets/";
 
 LICENSE="MIT"

diff --git a/media-sound/beets/beets-9999.ebuild 
b/media-sound/beets/beets-1.7.0_pre20240501.ebuild
similarity index 55%
copy from media-sound/beets/beets-9999.ebuild
copy to media-sound/beets/beets-1.7.0_pre20240501.ebuild
index 8c8520a503a4..cd2e96c3b30f 100644
--- a/media-sound/beets/beets-9999.ebuild
+++ b/media-sound/beets/beets-1.7.0_pre20240501.ebuild
@@ -4,23 +4,31 @@
 EAPI=8
 
 DISTUTILS_SINGLE_IMPL=1
-PYTHON_COMPAT=( python3_{9..11} )
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} )
 PYTHON_REQ_USE="sqlite"
 
-inherit distutils-r1 bash-completion-r1 optfeature
+# These envvars are used to treat github tarball builds differently
+# from pypi sources. Enable where required
+: ${IS_VCS_SOURCE="no"}
+: ${UPDATE_VERSION="no"}
+
+inherit distutils-r1 bash-completion-r1 multiprocessing optfeature
 
 if [[ ${PV} == "9999" ]]; then
        EGIT_REPO_URI="https://github.com/beetbox/beets.git";
        inherit git-r3
 else
-       inherit pypi
-       MY_PV=${PV/_beta/-beta.}
-       MY_P=${PN}-${MY_PV}
+       MY_COMMIT=c75f07a0da6c622d3cd0f5aad0a08edaea360dad
+       # This should be set to 1 if we're not sourcing tarballs from pypi; we 
need to generate mans.
+       IS_VCS_SOURCE="yes"
+       UPDATE_VERSION="yes"
+       SRC_URI="https://github.com/beetbox/beets/archive/${MY_COMMIT}.tar.gz 
-> ${P}.gh.tar.gz"
        KEYWORDS="~amd64 ~x86"
-       S="${WORKDIR}/${MY_P}"
+       S="${WORKDIR}/${PN}-${MY_COMMIT}"
 fi
 
-DESCRIPTION="Media library management system for obsessive-compulsive music 
geeks"
+DESCRIPTION="Media library management system for obsessive music geeks"
 HOMEPAGE="https://beets.io/ https://pypi.org/project/beets/";
 
 LICENSE="MIT"
@@ -82,10 +90,33 @@ BDEPEND="
                )
        ')"
 
+# Beets uses sphinx to generate manpages; these are not available
+# directly in VCS sources, only pypi tarballs, so handle the dependency
+# here automagically.
+if [[ ${PV} == "9999" ]] || [[ ${IS_VCS_SOURCE} == "yes" ]]; then
+       BDEPEND+="
+               dev-python/sphinx
+       "
+fi
+
 DOCS=( README.rst docs/changelog.rst )
 
+EPYTEST_XDIST=1
 distutils_enable_tests pytest
 
+src_prepare() {
+       # 
https://github.com/beetbox/beets/commit/8b4983fe7cae9397acd3e23602e419d8dc1041d4
+       # merged code coverage into standard test runs; since we disable 
coverage globally
+       # we need to sed out some 'addopts' for coverage in setup.cfg that 
cause tests to choke.
+       sed -i -e "/--cov=beets/,+9d" setup.cfg || die "Failed to disable code 
coverage options in setup.cfg"
+       # Update the version if we're not building from pypy; it's probably a 
_pre or live ebuild.
+       if  [[ ${PV} == "9999" ]] || [[ ${UPDATE_VERSION} == "yes" ]]; then
+                   sed -i -e "s/version=\".*\"/version=\"${PV}\"/" setup.py || 
die "Failed to update version in VCS sources"
+                       sed -i -e "s/__version__ = \".*\"/__version__ = 
\"${PV}\"/" beets/__init__.py
+       fi
+       default
+}
+
 python_prepare_all() {
        distutils-r1_python_prepare_all
 }
@@ -94,6 +125,23 @@ python_compile_all() {
        if use doc ; then
                sphinx-build -b html docs docs/build || die
        fi
+       # If building from VCS sources we need to generate manpages, then copy 
them to ${S}/man
+       # We could install mans from the sphinx build path, but to be 
consistent with pypi for src_install
+       # we'll instead generate them and copy to the same install location if 
building from VCS sources.
+       if [[ ${PV} == "9999" ]] || [[ ${IS_VCS_SOURCE} == "yes" ]]; then
+               einfo "Building man pages"
+               sphinx-build -b man docs docs/build/man || die "Failed to 
generate man pages"
+               mkdir ${S}/man || die
+               cp docs/build/man/{beet.1,beetsconfig.5} ${S}/man || die
+       fi
+}
+
+python_test() {
+       # https://github.com/beetbox/beets/issues/5243 testing bash completions 
is broken.
+       local EPYTEST_DESELECT=(
+               test/test_ui.py::CompletionTest::test_completion
+       )
+       epytest -n$(makeopts_jobs) -v
 }
 
 python_install_all() {
@@ -102,11 +150,11 @@ python_install_all() {
        doman man/*
        use doc && local HTML_DOCS=( docs/build/html/. )
        einstalldocs
-
-       ${PYTHON} "${ED}/usr/bin/beet" completion > "${T}/beet.bash" || die
+       # Generate the bash completions; we'll set PYTHONPATH for this 
invocation so that beets can start.
+       PYTHONPATH="${ED}/usr/lib/${PYTHON}:$PYTHONPATH" ${PYTHON} 
"${ED}/usr/bin/beet" completion > "${T}/beet.bash" || die
        newbashcomp "${T}/beet.bash" beet
        insinto /usr/share/zsh/site-functions
-       newins "${WORKDIR}/${P}/extra/_beet" _beet
+       newins "${S}/extra/_beet" _beet
 
        optfeature "badfiles support" "media-libs/flac media-sound/mp3val"
        optfeature "chromaprint support" "dev-python/pyacoustid 
media-libs/chromaprint[tools]"

diff --git a/media-sound/beets/beets-9999.ebuild 
b/media-sound/beets/beets-9999.ebuild
index 8c8520a503a4..65e7d9973471 100644
--- a/media-sound/beets/beets-9999.ebuild
+++ b/media-sound/beets/beets-9999.ebuild
@@ -4,10 +4,16 @@
 EAPI=8
 
 DISTUTILS_SINGLE_IMPL=1
-PYTHON_COMPAT=( python3_{9..11} )
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} )
 PYTHON_REQ_USE="sqlite"
 
-inherit distutils-r1 bash-completion-r1 optfeature
+# These envvars are used to treat github tarball builds differently
+# from pypi sources. Enable where required
+: ${IS_VCS_SOURCE="no"}
+: ${UPDATE_VERSION="no"}
+
+inherit distutils-r1 bash-completion-r1 multiprocessing optfeature
 
 if [[ ${PV} == "9999" ]]; then
        EGIT_REPO_URI="https://github.com/beetbox/beets.git";
@@ -16,11 +22,11 @@ else
        inherit pypi
        MY_PV=${PV/_beta/-beta.}
        MY_P=${PN}-${MY_PV}
-       KEYWORDS="~amd64 ~x86"
+       KEYWORDS="amd64 ~x86"
        S="${WORKDIR}/${MY_P}"
 fi
 
-DESCRIPTION="Media library management system for obsessive-compulsive music 
geeks"
+DESCRIPTION="Media library management system for obsessive music geeks"
 HOMEPAGE="https://beets.io/ https://pypi.org/project/beets/";
 
 LICENSE="MIT"
@@ -82,10 +88,33 @@ BDEPEND="
                )
        ')"
 
+# Beets uses sphinx to generate manpages; these are not available
+# directly in VCS sources, only pypi tarballs, so handle the dependency
+# here automagically.
+if [[ ${PV} == "9999" ]] || [[ ${IS_VCS_SOURCE} == "yes" ]]; then
+       BDEPEND+="
+               dev-python/sphinx
+       "
+fi
+
 DOCS=( README.rst docs/changelog.rst )
 
+EPYTEST_XDIST=1
 distutils_enable_tests pytest
 
+src_prepare() {
+       # 
https://github.com/beetbox/beets/commit/8b4983fe7cae9397acd3e23602e419d8dc1041d4
+       # merged code coverage into standard test runs; since we disable 
coverage globally
+       # we need to sed out some 'addopts' for coverage in setup.cfg that 
cause tests to choke.
+       sed -i -e "/--cov=beets/,+9d" setup.cfg || die "Failed to disable code 
coverage options in setup.cfg"
+       # Update the version if we're not building from pypy; it's probably a 
_pre or live ebuild.
+       if  [[ ${PV} == "9999" ]] || [[ ${UPDATE_VERSION} == "yes" ]]; then
+                   sed -i -e "s/version=\".*\"/version=\"${PV}\"/" setup.py || 
die "Failed to update version in VCS sources"
+                       sed -i -e "s/__version__ = \".*\"/__version__ = 
\"${PV}\"/" beets/__init__.py
+       fi
+       default
+}
+
 python_prepare_all() {
        distutils-r1_python_prepare_all
 }
@@ -94,6 +123,23 @@ python_compile_all() {
        if use doc ; then
                sphinx-build -b html docs docs/build || die
        fi
+       # If building from VCS sources we need to generate manpages, then copy 
them to ${S}/man
+       # We could install mans from the sphinx build path, but to be 
consistent with pypi for src_install
+       # we'll instead generate them and copy to the same install location if 
building from VCS sources.
+       if [[ ${PV} == "9999" ]] || [[ ${IS_VCS_SOURCE} == "yes" ]]; then
+               einfo "Building man pages"
+               sphinx-build -b man docs docs/build/man || die "Failed to 
generate man pages"
+               mkdir ${S}/man || die
+               cp docs/build/man/{beet.1,beetsconfig.5} ${S}/man || die
+       fi
+}
+
+python_test() {
+       # https://github.com/beetbox/beets/issues/5243 testing bash completions 
is broken.
+       local EPYTEST_DESELECT=(
+               test/test_ui.py::CompletionTest::test_completion
+       )
+       epytest -n$(makeopts_jobs) -v
 }
 
 python_install_all() {
@@ -102,11 +148,11 @@ python_install_all() {
        doman man/*
        use doc && local HTML_DOCS=( docs/build/html/. )
        einstalldocs
-
-       ${PYTHON} "${ED}/usr/bin/beet" completion > "${T}/beet.bash" || die
+       # Generate the bash completions; we'll set PYTHONPATH for this 
invocation so that beets can start.
+       PYTHONPATH="${ED}/usr/lib/${PYTHON}:$PYTHONPATH" ${PYTHON} 
"${ED}/usr/bin/beet" completion > "${T}/beet.bash" || die
        newbashcomp "${T}/beet.bash" beet
        insinto /usr/share/zsh/site-functions
-       newins "${WORKDIR}/${P}/extra/_beet" _beet
+       newins "${S}/extra/_beet" _beet
 
        optfeature "badfiles support" "media-libs/flac media-sound/mp3val"
        optfeature "chromaprint support" "dev-python/pyacoustid 
media-libs/chromaprint[tools]"

diff --git a/media-sound/beets/metadata.xml b/media-sound/beets/metadata.xml
index 36c57a9de9b8..5de446482bcd 100644
--- a/media-sound/beets/metadata.xml
+++ b/media-sound/beets/metadata.xml
@@ -18,17 +18,17 @@
 
         Because beets is designed as a library, it can do almost anything you 
can
         imagine for your music collection. Via plugins, beets becomes a 
panacea:
-        * Embed and extract album art from files’ tags.
+        * Embed and extract album art from files' tags.
         * Listen to your library with a music player that speaks the MPD 
protocol
         and works with a staggering variety of interfaces.
         * Fetch lyrics for all your songs from databases on the Web.
         * Manage your MusicBrainz music collection.
-        * Analyze music files’ metadata from the command line.
+        * Analyze music files' metadata from the command line.
         * Clean up crufty tags left behind by other, less-awesome tools.
         * Browse your music library graphically through a Web browser and play 
it
         in any browser that supports HTML5 Audio.
 
-        If beets doesn’t do what you want yet, writing your own plugin is
+        If beets doesn't do what you want yet, writing your own plugin is
         shockingly simple if you know a little Python.
   </longdescription>
   <stabilize-allarches/>

Reply via email to