summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/quodlibet-fix-invalid-glob.patch
diff options
context:
space:
mode:
authorAlice BRENON <alice.brenon@ens-lyon.fr>2023-05-05 15:26:37 +0200
committerEfraim Flashner <efraim@flashner.co.il>2023-06-13 09:43:37 +0300
commitb188c41d930dbe8142c1f377d3c8f2580ff1277c (patch)
treea10d1747f247e0e98046343280529cf601686d51 /gnu/packages/patches/quodlibet-fix-invalid-glob.patch
parent63f8af77ec7be5434290f443140e5c00832940e3 (diff)
gnu: quodlibet: Fix compatibility with python-3.10.
Reported in #63205. * gnu/packages/music.scm (quodlibet)[source]: Add two backported patches. [arguments]: Adjust 'check phase to change skipped tests. * gnu/packages/patches/quodlibet-fix-invalid-glob.patch, gnu/packages/patches/quodlibet-fix-mtime-tests.patch: New files. * gnu/local.mk (dist_patch_DATA): Register them. Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Diffstat (limited to 'gnu/packages/patches/quodlibet-fix-invalid-glob.patch')
-rw-r--r--gnu/packages/patches/quodlibet-fix-invalid-glob.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/gnu/packages/patches/quodlibet-fix-invalid-glob.patch b/gnu/packages/patches/quodlibet-fix-invalid-glob.patch
new file mode 100644
index 0000000000..95f95d8aab
--- /dev/null
+++ b/gnu/packages/patches/quodlibet-fix-invalid-glob.patch
@@ -0,0 +1,89 @@
+From 5f55431a28509fd4f4f7b40dc246f3d34fa8549e Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+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
+