diff --git a/gnu/local.mk b/gnu/local.mk index 13d929c9bb2..002df1518a6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2044,8 +2044,6 @@ dist_patch_DATA = \ %D%/packages/patches/qcodeeditor-qt6.patch \ %D%/packages/patches/qtdeclarative-5-disable-qmlcache.patch \ %D%/packages/patches/qtdeclarative-disable-qmlcache.patch \ - %D%/packages/patches/quodlibet-fix-invalid-glob.patch \ - %D%/packages/patches/quodlibet-fix-mtime-tests.patch \ %D%/packages/patches/qucs-s-qucsator-rf-search.patch \ %D%/packages/patches/qxlsx-fix-include-directory.patch \ %D%/packages/patches/scn-fast-float-compat.patch \ diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index a2b0de5c6f4..7fa895872ec 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -46,7 +46,7 @@ ;;; Copyright © 2021 Thomas Albers Raviola ;;; Copyright © 2021 Maxime Devos ;;; Copyright © 2022, 2023 Sughosha -;;; Copyright © 2022 Remco van 't Veer +;;; Copyright © 2022, 2025 Remco van 't Veer ;;; Copyright © 2022, 2023 Maxim Cournoyer ;;; Copyright © 2022 Wamm K. D. ;;; Copyright © 2022 Jose G Perez Taveras @@ -8034,7 +8034,7 @@ streaming audio server.") (define-public quodlibet (package (name "quodlibet") - (version "4.5.0") + (version "4.7.1") (source (origin (method git-fetch) @@ -8042,10 +8042,8 @@ streaming audio server.") (url "https://github.com/quodlibet/quodlibet") (commit (string-append "release-" version)))) (file-name (git-file-name name version)) - (patches (search-patches "quodlibet-fix-invalid-glob.patch" - "quodlibet-fix-mtime-tests.patch")) (sha256 - (base32 "1i5k93k3bfp7hpcwkbr865mbj9jam3jv2a5k1bazcyp4f5vdrb0v")))) + (base32 "0nk2n4j0vm9ibrm3p9qwf5s0a4iwjkbvr6z23sc0v3rdxvaxrgf6")))) (build-system python-build-system) (arguments (list @@ -8064,10 +8062,8 @@ streaming audio server.") (if tests? (invoke "xvfb-run" "pytest" ;; needs network - "--ignore=tests/test_browsers_iradio.py" - ;; broken upstream - "--disable-warnings" - "--ignore=tests/quality/test_flake8.py") + "--ignore=tests/plugin/test_covers.py" + "--ignore=tests/test_browsers_iradio.py") (format #t "test suite not run~%")))) (add-after 'install 'glib-or-gtk-wrap ; ensure icons loaded (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)) @@ -8082,7 +8078,7 @@ streaming audio server.") `("GI_TYPELIB_PATH" ":" = (,gi-typelib-path)) `("GST_PLUGIN_SYSTEM_PATH" ":" suffix (,gst-plugins-path)))) '("exfalso" "quodlibet")))))))) - (native-inputs (list xvfb-run gettext-minimal)) + (native-inputs (list xvfb-run gettext-minimal python-pytest)) (inputs (list adwaita-icon-theme bash-minimal @@ -8098,7 +8094,7 @@ streaming audio server.") hicolor-icon-theme keybinder-3.0 ; keybindings outside of GNOME (librsvg-for-system) - libsoup-minimal-2 + libsoup-minimal python python-cheetah python-dbus @@ -8110,7 +8106,6 @@ streaming audio server.") python-pycairo python-pygobject python-pyinotify - python-pytest python-sgmllib3k python-toml)) (home-page "https://github.com/quodlibet/quodlibet") diff --git a/gnu/packages/patches/quodlibet-fix-invalid-glob.patch b/gnu/packages/patches/quodlibet-fix-invalid-glob.patch deleted file mode 100644 index 95f95d8aabc..00000000000 --- a/gnu/packages/patches/quodlibet-fix-invalid-glob.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 5f55431a28509fd4f4f7b40dc246f3d34fa8549e Mon Sep 17 00:00:00 2001 -From: Christoph Reiter -Date: Sun, 26 Jun 2022 23:14:28 +0200 -Subject: [PATCH] builtin cover: fix handling of invalid glob ranges with - Python 3.10.5+ (#4027) - -Previously Python would raise if an invalid range was given -to glob, but with 3.10.5 they fixed it to not match anything. -https://github.com/python/cpython/issues/89973 - -Our tests depended on the previous logic and treating the glob pattern -as a literal file name in that case. - -One could argue that this is wrong since a range that doesn't contain anything -should also not match anything, so wrap glob() to make it not match for all -Python versions in that case and adjust the tests accordingly. - -This should fix the Windows CI, which is currently the only job using 3.10.5 ---- - quodlibet/util/cover/built_in.py | 22 +++++++++++----------- - tests/test_util_cover.py | 12 +++--------- - 2 files changed, 14 insertions(+), 20 deletions(-) - -diff --git a/quodlibet/util/cover/built_in.py b/quodlibet/util/cover/built_in.py -index f2a8791a2..01474c9b6 100644 ---- a/quodlibet/util/cover/built_in.py -+++ b/quodlibet/util/cover/built_in.py -@@ -100,6 +100,15 @@ class FilesystemCover(CoverSourcePlugin): - base = self.song('~dirname') - images = [] - -+ def safe_glob(*args, **kwargs): -+ try: -+ return glob.glob(*args, **kwargs) -+ except sre_constants.error: -+ # https://github.com/python/cpython/issues/89973 -+ # old glob would fail with invalid ranges, newer one -+ # handles it correctly. -+ return [] -+ - if config.getboolean("albumart", "force_filename"): - score = 100 - for filename in config.get("albumart", "filename").split(","): -@@ -107,17 +116,8 @@ class FilesystemCover(CoverSourcePlugin): - filename = filename.strip() - - escaped_path = os.path.join(glob.escape(base), filename) -- try: -- for path in glob.glob(escaped_path): -- images.append((score, path)) -- except sre_constants.error: -- # Use literal filename if globbing causes errors -- path = os.path.join(base, filename) -- -- # We check this here, so we can search for alternative -- # files in case no preferred file was found. -- if os.path.isfile(path): -- images.append((score, path)) -+ for path in safe_glob(escaped_path): -+ images.append((score, path)) - - # So names and patterns at the start are preferred - score -= 1 -diff --git a/tests/test_util_cover.py b/tests/test_util_cover.py -index db81e4d1f..71a48ad9a 100644 ---- a/tests/test_util_cover.py -+++ b/tests/test_util_cover.py -@@ -105,15 +105,9 @@ class TCoverManager(TestCase): - config.set("albumart", "force_filename", str(True)) - config.set("albumart", "filename", "[a-2].jpg") - -- # Should match -- f = self.add_file("[a-2].jpg") -- assert path_equal( -- os.path.abspath(self._find_cover(self.song).name), f) -- -- # Should not crash -- f = self.add_file("test.jpg") -- assert not path_equal( -- os.path.abspath(self._find_cover(self.song).name), f) -+ # Invalid glob range, should not match anything -+ self.add_file("a.jpg") -+ assert self._find_cover(self.song) is None - - def test_invalid_glob_path(self): - config.set("albumart", "force_filename", str(True)) --- -2.39.2 - diff --git a/gnu/packages/patches/quodlibet-fix-mtime-tests.patch b/gnu/packages/patches/quodlibet-fix-mtime-tests.patch deleted file mode 100644 index 037f77d8689..00000000000 --- a/gnu/packages/patches/quodlibet-fix-mtime-tests.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 06a32b319f065550efe0d2a9ff10ca6bdc32b893 Mon Sep 17 00:00:00 2001 -From: Christoph Reiter -Date: Sat, 23 Jul 2022 20:15:18 +0200 -Subject: [PATCH] operon: hopefully better fix for flaky mtime tests - -copy the mtime after we write everything, so there is no chance of -it changing before we note the initial value. ---- - quodlibet/operon/commands.py | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/quodlibet/operon/commands.py b/quodlibet/operon/commands.py -index e0a5ef33a..af2dcfa8b 100644 ---- a/quodlibet/operon/commands.py -+++ b/quodlibet/operon/commands.py -@@ -227,16 +227,16 @@ class EditCommand(Command): - # write to tmp file - fd, path = tempfile.mkstemp(suffix=".txt") - -- # XXX: copy mtime here so we can test for changes in tests by -- # setting a out of date mtime on the source song file -- copy_mtime(args[0], path) -- - try: - try: - os.write(fd, dump) - finally: - os.close(fd) - -+ # XXX: copy mtime here so we can test for changes in tests by -+ # setting a out of date mtime on the source song file -+ copy_mtime(args[0], path) -+ - # only parse the result if the editor returns 0 and the mtime has - # changed - old_mtime = mtime(path) --- -2.39.2 -