From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id /J0xCqwLVWQSIAAASxT56A (envelope-from ) for ; Fri, 05 May 2023 15:59:08 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id IKFOCawLVWTAygAAauVa8A (envelope-from ) for ; Fri, 05 May 2023 15:59:08 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id DC0B33F172 for ; Fri, 5 May 2023 15:59:07 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1puvxg-0000X6-IM; Fri, 05 May 2023 09:59:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1puvxe-0000WC-Pb for bug-guix@gnu.org; Fri, 05 May 2023 09:59:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1puvxe-0004Br-HU for bug-guix@gnu.org; Fri, 05 May 2023 09:59:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1puvxe-0007Rt-Df for bug-guix@gnu.org; Fri, 05 May 2023 09:59:02 -0400 X-Loop: help-debbugs@gnu.org Subject: bug#63205: quodlibet fails to build after python 3.10 update Resent-From: Alice BRENON Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Fri, 05 May 2023 13:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63205 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: 63205@debbugs.gnu.org Received: via spool by 63205-submit@debbugs.gnu.org id=B63205.168329511628567 (code B ref 63205); Fri, 05 May 2023 13:59:02 +0000 Received: (at 63205) by debbugs.gnu.org; 5 May 2023 13:58:36 +0000 Received: from localhost ([127.0.0.1]:57147 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1puvxD-0007Qh-AU for submit@debbugs.gnu.org; Fri, 05 May 2023 09:58:35 -0400 Received: from lxc-smtp2.ens-lyon.fr ([140.77.167.81]:40636) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1puvxB-0007QY-D7 for 63205@debbugs.gnu.org; Fri, 05 May 2023 09:58:34 -0400 Received: from localhost (localhost [127.0.0.1]) by lxc-smtp2.ens-lyon.fr (Postfix) with ESMTP id 11F9DE477A for <63205@debbugs.gnu.org>; Fri, 5 May 2023 15:58:32 +0200 (CEST) X-Virus-Scanned: by amavisd-new-2.11.0 (20160426) (Debian) at ens-lyon.fr Received: from lxc-smtp2.ens-lyon.fr ([127.0.0.1]) by localhost (lxc-smtp2.ens-lyon.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ByQn8lLMzf4q for <63205@debbugs.gnu.org>; Fri, 5 May 2023 15:58:32 +0200 (CEST) Received: from localhost (unknown [78.194.167.103]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by lxc-smtp2.ens-lyon.fr (Postfix) with ESMTPSA id ED999E3976 for <63205@debbugs.gnu.org>; Fri, 5 May 2023 15:58:31 +0200 (CEST) Date: Fri, 5 May 2023 15:58:31 +0200 From: Alice BRENON Message-ID: <20230505155831.67b54875@ens-lyon.fr> In-Reply-To: <20230505153142.27a1263f@ens-lyon.fr> References: <20230505153142.27a1263f@ens-lyon.fr> Organization: ENS de Lyon X-Mailer: Claws Mail 4.1.1 (GTK 3.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/N0aUdqq2u87yOBQcXIdc2+Y" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: bug-guix-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Seal: i=1; s=key1; d=yhetil.org; t=1683295148; a=rsa-sha256; cv=none; b=spFpaGdWwuEW9VpB778+tAgefRtpOCb8aF4jt0z9Av0NnsywWyUSwnGcZcXCQ0iEehKMpS WCum8CexdTrK3YlxhFHZZ4lpBtoV9oMJIC8u34eNrHTFNfTT8xIFP4qwB/Z01iUvkWV0pV JahQHo8Cs/N5nqMKwFBWjf9eFtUoqswS6lztA0aMiHx0GH8cSC1Ngi/nKc9d8DBYfj6KWm D88C/GcxPHnMHwSNYT4ak4G0dsE1tE2I6G05TsoFNaU+xOKG3q7XXrEzmyHpmYpHM6NwMG OoROjiFM7id6PMbYRWMUq5USz44IySoWcR5ILykHd67A1ziqBsYf1m/+T2lacg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1683295148; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post; bh=EjlFXTEi9v8Qz39bo0JG66vHtRrsW3geCiVmr5I1fT8=; b=CxzLRoppTNVwzv+q9y7tzCKwHQ5wlkQEbEAwjZJ7Ksjosclf5b+AGUSIBX05FOAKcnU1Zg Bt2EmPxGTrRdZJ+H7gFBE9zvDSxPXLI7N2hCboCsx3v7QaAEVK3gp4ojHlSnShDG+BsrRz IOqpoYucyYNBeu1Eh2na/d3giRL2RQgqw3Zaup3LDiCmkMm6h7H/bayEw9EEBI/gx1UrOD IWpBJqzgAgJp8aHSnJX263+IaE9LUiidDX206AEz4XdtaiZf3I/hS2Q7H46jc0rIUKIR6X ooQp6lN2ogAy0SiZytMAHur+cVNLXpsl8S9XZluGUx1EXZ4hXpTnL6ENyyoVkg== X-Migadu-Spam-Score: -1.71 X-Spam-Score: -1.71 X-Migadu-Queue-Id: DC0B33F172 X-Migadu-Scanner: scn0.migadu.com Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-TUID: CIfgq//uFmID --MP_/N0aUdqq2u87yOBQcXIdc2+Y Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline The second patch needs an edit because part of it doesn't apply to the actual source (4.5.0 doesn't contain 427793aa88fb57 which applied the @flaky markers to the test). But quodlibet builds again on my machine with this second patch. Le Fri, 5 May 2023 15:31:42 +0200, Alice BRENON a =C3=A9crit : > This problem seems to have been reported and fixed upstream: >=20 > https://github.com/quodlibet/quodlibet/commit/5f55431a28509fd4f4f7b40dc24= 6f3d34fa8549e >=20 > Since no newer release has been out, I guess we can backport the > commit itself. I've tried with the attached patch. The operon tests > still fail due to some weird utime magic, a problem also known and > discussed at: >=20 > https://github.com/quodlibet/quodlibet/pull/4053/commits/06a32b319f065550= efe0d2a9ff10ca6bdc32b893 >=20 > So I guess we could backport that as well. Does anyone have a better > fix ? --MP_/N0aUdqq2u87yOBQcXIdc2+Y Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0001-gnu-quodlibet-Fix-failures-in-tests.patch >From 184c009037ac04ed1c8b2892a4e111fe8b5b9540 Mon Sep 17 00:00:00 2001 Message-Id: <184c009037ac04ed1c8b2892a4e111fe8b5b9540.1683294873.git.alice.brenon@ens-lyon.fr> From: Alice BRENON Date: Fri, 5 May 2023 15:26:37 +0200 Subject: [PATCH] gnu: quodlibet: Fix failures in tests. Reported in #63205. * gnu/packages/music.scm (quodlibet): Backport patches 5f55431 and a part of 06a32b3 from upstream and reactivate passing tests. --- gnu/packages/music.scm | 7 +- .../patches/quodlibet-fix-invalid-glob.patch | 89 +++++++++++++++++++ .../patches/quodlibet-fix-mtime-tests.patch | 39 ++++++++ 3 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/quodlibet-fix-invalid-glob.patch create mode 100644 gnu/packages/patches/quodlibet-fix-mtime-tests.patch diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 446580dc52..05fb25f1b1 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -7082,6 +7082,9 @@ (define-public quodlibet (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")))) (build-system python-build-system) @@ -7105,9 +7108,7 @@ (define-public quodlibet "--ignore=tests/test_browsers_iradio.py" ;; broken upstream "--disable-warnings" - "--ignore=tests/quality" - ;; missing legacy icons in adwaita-icon-theme - "--ignore=tests/plugin/test_trayicon.py") + "--ignore=tests/quality/test_flake8.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)) 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 +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 new file mode 100644 index 0000000000..037f77d868 --- /dev/null +++ b/gnu/packages/patches/quodlibet-fix-mtime-tests.patch @@ -0,0 +1,39 @@ +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 + base-commit: 3efdc84bbd1819aeef6e2290aaf54bc88ba72dda -- 2.39.2 --MP_/N0aUdqq2u87yOBQcXIdc2+Y--