summaryrefslogtreecommitdiff
path: root/media-sound/beets
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2021-01-29 18:03:51 +0000
committerV3n3RiX <venerix@redcorelinux.org>2021-01-29 18:03:51 +0000
commitd7ed2b01311f15ba54fe8ea872aab7d59ab2b193 (patch)
tree1814dd2b5bbf2e7639fdafbeef48d228cfaf5e9b /media-sound/beets
parentabaa75b10f899ada8dd05b23cc03205064394bc6 (diff)
gentoo resync : 29.01.2021
Diffstat (limited to 'media-sound/beets')
-rw-r--r--media-sound/beets/Manifest7
-rw-r--r--media-sound/beets/beets-1.4.9-r5.ebuild (renamed from media-sound/beets/beets-1.4.9-r3.ebuild)107
-rw-r--r--media-sound/beets/beets-9999.ebuild107
-rw-r--r--media-sound/beets/files/1.4.9-0003-Try-to-work-around-a-Werkzeug-change.patch25
-rw-r--r--media-sound/beets/metadata.xml14
5 files changed, 109 insertions, 151 deletions
diff --git a/media-sound/beets/Manifest b/media-sound/beets/Manifest
index cb90e8d8b0ce..698cefe99c0b 100644
--- a/media-sound/beets/Manifest
+++ b/media-sound/beets/Manifest
@@ -1,6 +1,7 @@
AUX 1.4.9-0001-compatibility-with-breaking-changes-to-the-ast-modul.patch 2123 BLAKE2B fea2eb593c8be68d3cd336a4bf56346c777ba651fdb98cfe6f9063a087428ce2749793ec61f109b2fea40dd8cc44ceb19b97d308c4c69c267b2993836b2b7ae6 SHA512 bf3ef299d66e7db79fcc0f7c4cd5abfbb041e6cea4bf06f02e498d3edf7495cd92f01191865af6a5bb40b064f0659d5cf80df7a42d14976e3e963ab94e113bdd
AUX 1.4.9-0002-Disable-test_completion.patch 2879 BLAKE2B 7f1b21d92ec93e3a2606a4c3146b0e6fe343d4a437dfdb13aa60e0bbbf59f2959fee39f4d5bdb620fe57670e01a0963ad9eea3cf0309b3ea516e0931e9383c19 SHA512 2f6b5636ad3a16e70438fd2c1b62952416225dcc9acca686b1dc19ba4c2c5dbed4807f3f597e212d23ddf12de0fb0f315729da9ca86fbbc6766f4840dc83a524
+AUX 1.4.9-0003-Try-to-work-around-a-Werkzeug-change.patch 698 BLAKE2B f7064a5db51e53d70b6d30332c3f6e039873461931c5e4052136675013728792fbc98f561f6fcf62432f58bc7702e54f34d04c43586d9a07ecdc789019aec040 SHA512 3e3af6d760596a08fac6130912ed5780795975e0ade8c4f27f577453b82cbc588de9d23d9d2c1672841913d5627fe684cd8373670851e59b6fe1e0a57b138009
DIST beets-1.4.9.tar.gz 1494459 BLAKE2B 2daf77caf395143813c8b288fc376b5aec01d49281d40ba5942daf9941891146d698a1517ced958e480c6f253eadb6a7e09029e079c97e6cc17d44ac18fa0e7b SHA512 616bad4ca3ecdd05d2f59846fd67215f476ce89cc34d63bc6351efcbaf1e33e5ca783cb8a716e8597b56a7e08e6a6dc15e64b51e89dd786bfb6c5d847f66de5a
-EBUILD beets-1.4.9-r3.ebuild 4457 BLAKE2B ccb615ef9433434664715bc7fc0fa53d2acc83f490265f290fb39f9bb095abb6d0b28d1f3a989da7664297374351017500f7112aa94d910fd99d4320f10d1e85 SHA512 6ea2c348d84668cd897534a21f0265dd81af57c8b7d40aaa4fd2896cd55614f8eeee876af4ada7872c57bfcc964b0d8c6fcedf1410e61f36756a5b79cae146c3
-EBUILD beets-9999.ebuild 4457 BLAKE2B ccb615ef9433434664715bc7fc0fa53d2acc83f490265f290fb39f9bb095abb6d0b28d1f3a989da7664297374351017500f7112aa94d910fd99d4320f10d1e85 SHA512 6ea2c348d84668cd897534a21f0265dd81af57c8b7d40aaa4fd2896cd55614f8eeee876af4ada7872c57bfcc964b0d8c6fcedf1410e61f36756a5b79cae146c3
-MISC metadata.xml 2993 BLAKE2B f46b84984f6cfce8b0ce3e2589e127a5febe2536ae75eb4d7527c99cbf2bba6e155ecd4df3fd5b5348dae524287c8b542885a69a7b1790303352076ea29022c3 SHA512 28dc8f6044ccf6ceced2e9f29c1c4faba9bcaddff0608b1e3f8e14c612fac975c89bfbfe4368a6ff8e6f1f0ca2fbc2edbb25f8e7e1e7a2b1e3cf790587f39a4e
+EBUILD beets-1.4.9-r5.ebuild 4478 BLAKE2B 2b7b6f1b6392a616a54bb7080e3413d5b05acec0e5f91c6d55504957448c5ece756abf3721e4dd7b99071a383a51ebd1b935597d14367bc3d24e6dced7e6df03 SHA512 74ef800ba858523860d509d8fd0370bff59a5838daaaaa498317f4ebb6d8d675cb96f03861a6ed9b489cb43c56f2cecba3980dbcfc5075520fee9f681d3f38d6
+EBUILD beets-9999.ebuild 4478 BLAKE2B 2b7b6f1b6392a616a54bb7080e3413d5b05acec0e5f91c6d55504957448c5ece756abf3721e4dd7b99071a383a51ebd1b935597d14367bc3d24e6dced7e6df03 SHA512 74ef800ba858523860d509d8fd0370bff59a5838daaaaa498317f4ebb6d8d675cb96f03861a6ed9b489cb43c56f2cecba3980dbcfc5075520fee9f681d3f38d6
+MISC metadata.xml 1751 BLAKE2B 6bb63691dda759b84a5b5f7b407befa4a0773885c6cd7a70e39e68249fb807192673b4b91555b270d51d6783b5d55d0ca9d4d32058c1c9b7fdf51925d9a0df7e SHA512 435bfe841f81de86083a72319a45fd2d8daa5206c1f8442a3b4b30d5c0f5692a23a7d6d7003d5cc7441f204bc05be4bdfa9097ecb5dcec0be17ba5c72ee1b763
diff --git a/media-sound/beets/beets-1.4.9-r3.ebuild b/media-sound/beets/beets-1.4.9-r5.ebuild
index d07f7f6efe20..68328df9060e 100644
--- a/media-sound/beets/beets-1.4.9-r3.ebuild
+++ b/media-sound/beets/beets-1.4.9-r5.ebuild
@@ -4,11 +4,11 @@
EAPI=7
DISTUTILS_SINGLE_IMPL=1
-PYTHON_COMPAT=( python3_{6,7,8} )
+PYTHON_COMPAT=( python3_{6..8} )
PYTHON_REQ_USE="sqlite"
DISTUTILS_USE_SETUPTOOLS=rdepend
-inherit distutils-r1 bash-completion-r1
+inherit distutils-r1 bash-completion-r1 optfeature
if [[ ${PV} == "9999" ]]; then
EGIT_REPO_URI="https://github.com/beetbox/beets.git"
@@ -26,7 +26,8 @@ HOMEPAGE="https://beets.io/ https://pypi.org/project/beets/"
LICENSE="MIT"
SLOT="0"
-IUSE="badfiles chromaprint cors discogs doc ffmpeg gstreamer icu lastfm mpd replaygain test thumbnail webserver"
+IUSE="doc test"
+RESTRICT="!test? ( test )"
RDEPEND="
$(python_gen_cond_dep '
@@ -39,54 +40,6 @@ RDEPEND="
dev-python/requests[${PYTHON_MULTI_USEDEP}]
>=dev-python/six-1.9[${PYTHON_MULTI_USEDEP}]
dev-python/unidecode[${PYTHON_MULTI_USEDEP}]
- badfiles? (
- media-libs/flac
- media-sound/mp3val
- )
- chromaprint? (
- dev-python/pyacoustid[${PYTHON_MULTI_USEDEP}]
- media-libs/chromaprint[tools]
- )
- discogs? (
- dev-python/discogs-client[${PYTHON_MULTI_USEDEP}]
- )
- ffmpeg? (
- media-video/ffmpeg:0[encode]
- )
- gstreamer? (
- media-libs/gst-plugins-bad:1.0
- media-libs/gst-plugins-good:1.0
- )
- icu? (
- dev-db/sqlite[icu]
- )
- lastfm? (
- dev-python/pylast[${PYTHON_MULTI_USEDEP}]
- )
- mpd? (
- dev-python/bluelet[${PYTHON_MULTI_USEDEP}]
- dev-python/python-mpd[${PYTHON_MULTI_USEDEP}]
- )
- replaygain? (
- gstreamer? (
- dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}]
- media-plugins/gst-plugins-libav:1.0
- )
- !gstreamer? ( media-sound/mp3gain )
- )
- thumbnail? (
- dev-python/pyxdg[${PYTHON_MULTI_USEDEP}]
- || (
- dev-python/pillow[${PYTHON_MULTI_USEDEP}]
- media-gfx/imagemagick
- )
- )
- webserver? (
- dev-python/flask[${PYTHON_MULTI_USEDEP}]
- cors? (
- dev-python/flask-cors[${PYTHON_MULTI_USEDEP}]
- )
- )
')"
DEPEND="
${RDEPEND}
@@ -97,19 +50,39 @@ BDEPEND="
)
$(python_gen_cond_dep '
test? (
+ dev-db/sqlite[icu]
dev-python/beautifulsoup[${PYTHON_MULTI_USEDEP}]
+ dev-python/bluelet[${PYTHON_MULTI_USEDEP}]
+ dev-python/discogs-client[${PYTHON_MULTI_USEDEP}]
dev-python/flask[${PYTHON_MULTI_USEDEP}]
dev-python/mock[${PYTHON_MULTI_USEDEP}]
+ dev-python/pyacoustid[${PYTHON_MULTI_USEDEP}]
+ dev-python/pylast[${PYTHON_MULTI_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}]
+ dev-python/python-mpd[${PYTHON_MULTI_USEDEP}]
dev-python/pyxdg[${PYTHON_MULTI_USEDEP}]
+ || (
+ dev-python/pillow[${PYTHON_MULTI_USEDEP}]
+ media-gfx/imagemagick
+ )
dev-python/rarfile[${PYTHON_MULTI_USEDEP}]
dev-python/responses[${PYTHON_MULTI_USEDEP}]
dev-python/wheel[${PYTHON_MULTI_USEDEP}]
+ media-libs/chromaprint[tools]
+ media-libs/flac
+ media-libs/gst-plugins-bad:1.0
+ media-libs/gst-plugins-good:1.0
+ media-sound/mp3val
+ media-sound/mp3gain
+ media-plugins/gst-plugins-libav:1.0
+ media-video/ffmpeg:0[encode]
)
')"
PATCHES=(
"${FILESDIR}/${PV}-0001-compatibility-with-breaking-changes-to-the-ast-modul.patch"
"${FILESDIR}/${PV}-0002-Disable-test_completion.patch"
+ "${FILESDIR}/${PV}-0003-Try-to-work-around-a-Werkzeug-change.patch"
)
DOCS=( README.rst docs/changelog.rst )
@@ -119,6 +92,7 @@ distutils_enable_tests pytest
python_prepare_all() {
distutils-r1_python_prepare_all
+ # Tests that need network
rm test/test_art.py || die "Failed to remove test_art.py"
rm test/test_discogs.py || die "Failed to remove test_discogs.py"
rm test/test_embyupdate.py || die "Failed to remove test_embyupdate.py"
@@ -126,22 +100,6 @@ python_prepare_all() {
rm test/test_spotify.py || die "Failed to remove test_spotify.py"
# Not working and dropped in master
rm test/test_mediafile.py || die "Failed to remove test_mediafile.py"
- if ! use ffmpeg; then
- rm test/test_convert.py || die "Failed to remove test_convert.py"
- fi
- if ! use mpd; then
- rm test/test_player.py || die "Failed to remove test_player.py"
- rm test/test_mpdstats.py || die "Failed to remove test_mpdstats.py"
- fi
- if ! use replaygain; then
- rm test/test_replaygain.py || die "Failed to remove test_replaygain.py"
- fi
- if ! use thumbnail; then
- rm test/test_thumbnails.py || die "Failed to remove test_thumbnails.py"
- fi
- if ! use webserver; then
- rm test/test_web.py || die "Failed to remove test_web.py"
- fi
}
python_compile_all() {
@@ -159,4 +117,19 @@ python_install_all() {
newbashcomp "${T}/beet.bash" beet
insinto /usr/share/zsh/site-functions
newins "${WORKDIR}/${P}/extra/_beet" _beet
+
+ elog "Optional dependencies:"
+ optfeature "badfiles support" "media-libs/flac media-sound/mp3val"
+ optfeature "chromaprint support" "dev-python/pyacoustid media-libs/chromaprint[tools]"
+ optfeature "discogs support" dev-python/discogs-client
+ optfeature "ffmpeg support" media-video/ffmpeg[encode]
+ optfeature "gstreamer support" "media-libs/gst-plugins-bad media-libs/gst-plugins-good"
+ optfeature "icu support" dev-db/sqlite[icu]
+ optfeature "lastfm support" dev-python/pylast
+ optfeature "mpd support" "dev-python/bluelet dev-python/python-mpd"
+ optfeature "replaygain with gstreamer support" "dev-python/pygobject media-plugins/gst-plugins-libav"
+ optfeature "replaygain without gstreamer support" media-sound/mp3gain
+ optfeature "thumbnail support" dev-python/pyxdg "dev-python/pillow media-gfx/imagemagick"
+ optfeature "webserver support" dev-python/flask
+ optfeature "webserver cors support" dev-python/flask-cors
}
diff --git a/media-sound/beets/beets-9999.ebuild b/media-sound/beets/beets-9999.ebuild
index d07f7f6efe20..68328df9060e 100644
--- a/media-sound/beets/beets-9999.ebuild
+++ b/media-sound/beets/beets-9999.ebuild
@@ -4,11 +4,11 @@
EAPI=7
DISTUTILS_SINGLE_IMPL=1
-PYTHON_COMPAT=( python3_{6,7,8} )
+PYTHON_COMPAT=( python3_{6..8} )
PYTHON_REQ_USE="sqlite"
DISTUTILS_USE_SETUPTOOLS=rdepend
-inherit distutils-r1 bash-completion-r1
+inherit distutils-r1 bash-completion-r1 optfeature
if [[ ${PV} == "9999" ]]; then
EGIT_REPO_URI="https://github.com/beetbox/beets.git"
@@ -26,7 +26,8 @@ HOMEPAGE="https://beets.io/ https://pypi.org/project/beets/"
LICENSE="MIT"
SLOT="0"
-IUSE="badfiles chromaprint cors discogs doc ffmpeg gstreamer icu lastfm mpd replaygain test thumbnail webserver"
+IUSE="doc test"
+RESTRICT="!test? ( test )"
RDEPEND="
$(python_gen_cond_dep '
@@ -39,54 +40,6 @@ RDEPEND="
dev-python/requests[${PYTHON_MULTI_USEDEP}]
>=dev-python/six-1.9[${PYTHON_MULTI_USEDEP}]
dev-python/unidecode[${PYTHON_MULTI_USEDEP}]
- badfiles? (
- media-libs/flac
- media-sound/mp3val
- )
- chromaprint? (
- dev-python/pyacoustid[${PYTHON_MULTI_USEDEP}]
- media-libs/chromaprint[tools]
- )
- discogs? (
- dev-python/discogs-client[${PYTHON_MULTI_USEDEP}]
- )
- ffmpeg? (
- media-video/ffmpeg:0[encode]
- )
- gstreamer? (
- media-libs/gst-plugins-bad:1.0
- media-libs/gst-plugins-good:1.0
- )
- icu? (
- dev-db/sqlite[icu]
- )
- lastfm? (
- dev-python/pylast[${PYTHON_MULTI_USEDEP}]
- )
- mpd? (
- dev-python/bluelet[${PYTHON_MULTI_USEDEP}]
- dev-python/python-mpd[${PYTHON_MULTI_USEDEP}]
- )
- replaygain? (
- gstreamer? (
- dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}]
- media-plugins/gst-plugins-libav:1.0
- )
- !gstreamer? ( media-sound/mp3gain )
- )
- thumbnail? (
- dev-python/pyxdg[${PYTHON_MULTI_USEDEP}]
- || (
- dev-python/pillow[${PYTHON_MULTI_USEDEP}]
- media-gfx/imagemagick
- )
- )
- webserver? (
- dev-python/flask[${PYTHON_MULTI_USEDEP}]
- cors? (
- dev-python/flask-cors[${PYTHON_MULTI_USEDEP}]
- )
- )
')"
DEPEND="
${RDEPEND}
@@ -97,19 +50,39 @@ BDEPEND="
)
$(python_gen_cond_dep '
test? (
+ dev-db/sqlite[icu]
dev-python/beautifulsoup[${PYTHON_MULTI_USEDEP}]
+ dev-python/bluelet[${PYTHON_MULTI_USEDEP}]
+ dev-python/discogs-client[${PYTHON_MULTI_USEDEP}]
dev-python/flask[${PYTHON_MULTI_USEDEP}]
dev-python/mock[${PYTHON_MULTI_USEDEP}]
+ dev-python/pyacoustid[${PYTHON_MULTI_USEDEP}]
+ dev-python/pylast[${PYTHON_MULTI_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}]
+ dev-python/python-mpd[${PYTHON_MULTI_USEDEP}]
dev-python/pyxdg[${PYTHON_MULTI_USEDEP}]
+ || (
+ dev-python/pillow[${PYTHON_MULTI_USEDEP}]
+ media-gfx/imagemagick
+ )
dev-python/rarfile[${PYTHON_MULTI_USEDEP}]
dev-python/responses[${PYTHON_MULTI_USEDEP}]
dev-python/wheel[${PYTHON_MULTI_USEDEP}]
+ media-libs/chromaprint[tools]
+ media-libs/flac
+ media-libs/gst-plugins-bad:1.0
+ media-libs/gst-plugins-good:1.0
+ media-sound/mp3val
+ media-sound/mp3gain
+ media-plugins/gst-plugins-libav:1.0
+ media-video/ffmpeg:0[encode]
)
')"
PATCHES=(
"${FILESDIR}/${PV}-0001-compatibility-with-breaking-changes-to-the-ast-modul.patch"
"${FILESDIR}/${PV}-0002-Disable-test_completion.patch"
+ "${FILESDIR}/${PV}-0003-Try-to-work-around-a-Werkzeug-change.patch"
)
DOCS=( README.rst docs/changelog.rst )
@@ -119,6 +92,7 @@ distutils_enable_tests pytest
python_prepare_all() {
distutils-r1_python_prepare_all
+ # Tests that need network
rm test/test_art.py || die "Failed to remove test_art.py"
rm test/test_discogs.py || die "Failed to remove test_discogs.py"
rm test/test_embyupdate.py || die "Failed to remove test_embyupdate.py"
@@ -126,22 +100,6 @@ python_prepare_all() {
rm test/test_spotify.py || die "Failed to remove test_spotify.py"
# Not working and dropped in master
rm test/test_mediafile.py || die "Failed to remove test_mediafile.py"
- if ! use ffmpeg; then
- rm test/test_convert.py || die "Failed to remove test_convert.py"
- fi
- if ! use mpd; then
- rm test/test_player.py || die "Failed to remove test_player.py"
- rm test/test_mpdstats.py || die "Failed to remove test_mpdstats.py"
- fi
- if ! use replaygain; then
- rm test/test_replaygain.py || die "Failed to remove test_replaygain.py"
- fi
- if ! use thumbnail; then
- rm test/test_thumbnails.py || die "Failed to remove test_thumbnails.py"
- fi
- if ! use webserver; then
- rm test/test_web.py || die "Failed to remove test_web.py"
- fi
}
python_compile_all() {
@@ -159,4 +117,19 @@ python_install_all() {
newbashcomp "${T}/beet.bash" beet
insinto /usr/share/zsh/site-functions
newins "${WORKDIR}/${P}/extra/_beet" _beet
+
+ elog "Optional dependencies:"
+ optfeature "badfiles support" "media-libs/flac media-sound/mp3val"
+ optfeature "chromaprint support" "dev-python/pyacoustid media-libs/chromaprint[tools]"
+ optfeature "discogs support" dev-python/discogs-client
+ optfeature "ffmpeg support" media-video/ffmpeg[encode]
+ optfeature "gstreamer support" "media-libs/gst-plugins-bad media-libs/gst-plugins-good"
+ optfeature "icu support" dev-db/sqlite[icu]
+ optfeature "lastfm support" dev-python/pylast
+ optfeature "mpd support" "dev-python/bluelet dev-python/python-mpd"
+ optfeature "replaygain with gstreamer support" "dev-python/pygobject media-plugins/gst-plugins-libav"
+ optfeature "replaygain without gstreamer support" media-sound/mp3gain
+ optfeature "thumbnail support" dev-python/pyxdg "dev-python/pillow media-gfx/imagemagick"
+ optfeature "webserver support" dev-python/flask
+ optfeature "webserver cors support" dev-python/flask-cors
}
diff --git a/media-sound/beets/files/1.4.9-0003-Try-to-work-around-a-Werkzeug-change.patch b/media-sound/beets/files/1.4.9-0003-Try-to-work-around-a-Werkzeug-change.patch
new file mode 100644
index 000000000000..9833d3f3f006
--- /dev/null
+++ b/media-sound/beets/files/1.4.9-0003-Try-to-work-around-a-Werkzeug-change.patch
@@ -0,0 +1,25 @@
+From d43d54e21cde97f57f19486925ab56b419254cc8 Mon Sep 17 00:00:00 2001
+From: Adrian Sampson <adrian@radbox.org>
+Date: Thu, 6 Feb 2020 22:22:54 -0500
+Subject: [PATCH] Try to work around a Werkzeug change?
+
+---
+ beetsplug/web/__init__.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/beetsplug/web/__init__.py b/beetsplug/web/__init__.py
+index f53fb3a9..21ff5d94 100644
+--- a/beetsplug/web/__init__.py
++++ b/beetsplug/web/__init__.py
+@@ -169,7 +169,7 @@ class IdListConverter(BaseConverter):
+ return ids
+
+ def to_url(self, value):
+- return ','.join(value)
++ return ','.join(str(v) for v in value)
+
+
+ class QueryConverter(PathConverter):
+--
+2.26.2
+
diff --git a/media-sound/beets/metadata.xml b/media-sound/beets/metadata.xml
index 421001fc2f49..713634ce64ae 100644
--- a/media-sound/beets/metadata.xml
+++ b/media-sound/beets/metadata.xml
@@ -31,20 +31,6 @@
If beets doesn’t do what you want yet, writing your own plugin is
shockingly simple if you know a little Python.
</longdescription>
- <use>
- <flag name="badfiles">Validate MP3 &amp; FLAC files</flag>
- <flag name="chromaprint">Enable support for acoustic fingerprinting plugin using <pkg>media-libs/chromaprint</pkg></flag>
- <flag name="cors">Enable cors support for the webserver <pkg>dev-python/flask-cors</pkg></flag>
- <flag name="discogs">Enable support for the discogs API plugin</flag>
- <flag name="ffmpeg">Enable support for the convert plugin to transcode files via <pkg>media-video/ffmpeg</pkg></flag>
- <flag name="gstreamer">Enable support for the gstreamer backend</flag>
- <flag name="icu">Enable support for the icu plugin to support non-ASCII characters in <pkg>dev-db/sqlite</pkg></flag>
- <flag name="lastfm">Enable support for importing personal last.fm playcounts and music genres from last.fm tags</flag>
- <flag name="mpd">Enable support for <pkg>media-sound/mpd</pkg> server emulation and statistic gathered from <pkg>media-sound/mpd</pkg></flag>
- <flag name="replaygain">Enable support for Replay Gain metadata calculation during import</flag>
- <flag name="thumbnail">Enable album thumbnails generation</flag>
- <flag name="webserver">Enable embedded webserver support through <pkg>dev-python/flask</pkg></flag>
- </use>
<upstream>
<remote-id type="pypi">beets</remote-id>
</upstream>