From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 9A4D415823F for ; Sat, 18 Nov 2023 01:16:18 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id D3BE02BC013; Sat, 18 Nov 2023 01:16:17 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 69C682BC013 for ; Sat, 18 Nov 2023 01:16:17 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 26EA7335CF4 for ; Sat, 18 Nov 2023 01:16:16 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 611C5FC4 for ; Sat, 18 Nov 2023 01:16:14 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1700207835.1525b51fb1df477f8801470509e786558ab153dc.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/ X-VCS-Repository: proj/portage X-VCS-Files: lib/portage/tests/resolver/meson.build lib/portage/tests/resolver/test_alternatives_gzip.py X-VCS-Directories: lib/portage/tests/resolver/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 1525b51fb1df477f8801470509e786558ab153dc X-VCS-Branch: master Date: Sat, 18 Nov 2023 01:16:14 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: cb5304af-f000-485c-ac9c-b332321703fb X-Archives-Hash: 30793e637c107913dbe2763045cfb7cf commit: 1525b51fb1df477f8801470509e786558ab153dc Author: Zac Medico gentoo org> AuthorDate: Fri Nov 17 07:47:07 2023 +0000 Commit: Zac Medico gentoo org> CommitDate: Fri Nov 17 07:57:15 2023 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1525b51f Add test case to reproduce bug 917259 Test bug 917259, where app-alternatives/gzip is upgraded before its pigz RDEPEND is installed. This is triggered when find_smallest_cycle selects a large cycle and the topological sort produces poor results when leaf_nodes returns app-alternatives/gzip as part of a large group of nodes. This problem might be solved by implementing a finer-grained ignore_priority for leaf_nodes calls. Bug: https://bugs.gentoo.org/917259 Signed-off-by: Zac Medico gentoo.org> lib/portage/tests/resolver/meson.build | 1 + .../tests/resolver/test_alternatives_gzip.py | 248 +++++++++++++++++++++ 2 files changed, 249 insertions(+) diff --git a/lib/portage/tests/resolver/meson.build b/lib/portage/tests/resolver/meson.build index 0d8c2921e1..7d2bd367d4 100644 --- a/lib/portage/tests/resolver/meson.build +++ b/lib/portage/tests/resolver/meson.build @@ -1,6 +1,7 @@ py.install_sources( [ 'ResolverPlayground.py', + 'test_alternatives_gzip.py', 'test_aggressive_backtrack_downgrade.py', 'test_autounmask.py', 'test_autounmask_binpkg_use.py', diff --git a/lib/portage/tests/resolver/test_alternatives_gzip.py b/lib/portage/tests/resolver/test_alternatives_gzip.py new file mode 100644 index 0000000000..602ed1756f --- /dev/null +++ b/lib/portage/tests/resolver/test_alternatives_gzip.py @@ -0,0 +1,248 @@ +# Copyright 2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import pytest + +from portage.tests import TestCase +from portage.tests.resolver.ResolverPlayground import ( + ResolverPlayground, + ResolverPlaygroundTestCase, +) + + +@pytest.mark.xfail() +class AlternativesGzipTestCase(TestCase): + def testAlternativesGzip(self): + """ + Test bug 917259, where app-alternatives/gzip is upgraded before + its pigz RDEPEND is installed. This is triggered when + find_smallest_cycle selects a large cycle and the topological + sort produces poor results when leaf_nodes returns + app-alternatives/gzip as part of a large group of nodes. + This problem might be solved by implementing a finer-grained + ignore_priority for leaf_nodes calls. + """ + ebuilds = { + "app-alternatives/gzip-1": { + "EAPI": "8", + "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( >=app-arch/pigz-2.8[-symlink(-)] )", + "IUSE": "reference pigz", + "REQUIRED_USE": "^^ ( reference pigz )", + }, + "app-alternatives/gzip-0": { + "EAPI": "8", + "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( app-arch/pigz[-symlink(-)] )", + "IUSE": "reference pigz", + "REQUIRED_USE": "^^ ( reference pigz )", + }, + "app-arch/gzip-1.13": { + "EAPI": "8", + "RDEPEND": "!app-arch/pigz[symlink(-)]", + "PDEPEND": "app-alternatives/gzip", + }, + "app-arch/zstd-1.5.5": { + "EAPI": "8", + "DEPEND": ">=sys-libs/zlib-1.2.3", + "RDEPEND": ">=sys-libs/zlib-1.2.3", + }, + "app-arch/pigz-2.8": { + "EAPI": "8", + "DEPEND": ">=sys-libs/zlib-1.2.3", + "RDEPEND": ">=sys-libs/zlib-1.2.3", + "PDEPEND": "app-alternatives/gzip", + }, + "dev-lang/perl-5.36.1-r3": { + "EAPI": "8", + "BDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=", + "RDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=", + "DEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:=", + }, + "dev-libs/libgcrypt-1.10.2": { + "EAPI": "8", + "SLOT": "0", + "BDEPEND": ">=sys-devel/automake-1.16.5", + "DEPEND": "sys-libs/glibc", + "RDEPEND": "sys-libs/glibc", + }, + "dev-libs/libpcre2-10.42-r1": { + "EAPI": "8", + "SLOT": "0/3", + "DEPEND": "sys-libs/zlib", + "RDEPEND": "sys-libs/zlib", + }, + "sys-apps/locale-gen-2.23-r1": { + "EAPI": "8", + "RDEPEND": "app-alternatives/gzip", + }, + "sys-apps/systemd-253.6": { + "EAPI": "8", + "SLOT": "0/2", + "BDEPEND": "dev-lang/perl", + "DEPEND": ">=sys-apps/util-linux-2.30:= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:= dev-libs/libpcre2", + "RDEPEND": ">=sys-apps/util-linux-2.30:= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:= dev-libs/libpcre2", + }, + "sys-apps/util-linux-2.38.1-r2": { + "EAPI": "8", + "BDEPEND": ">=sys-devel/automake-1.16.5", + "DEPEND": "virtual/libcrypt:= sys-libs/zlib:= virtual/libudev:= dev-libs/libpcre2:=", + "RDEPEND": "sys-apps/systemd sys-libs/zlib:= virtual/libudev:= dev-libs/libpcre2:=", + }, + "sys-devel/automake-1.16.5-r1": { + "EAPI": "8", + "BDEPEND": "app-alternatives/gzip", + "RDEPEND": ">=dev-lang/perl-5.6", + }, + "sys-libs/glibc-2.37-r7": { + "EAPI": "8", + "BDEPEND": "sys-apps/locale-gen", + "IDEPEND": "sys-apps/locale-gen", + "RDEPEND": "dev-lang/perl", + }, + "sys-libs/libxcrypt-4.4.36": { + "BDEPEND": "dev-lang/perl", + "DEPEND": "sys-libs/glibc", + "RDEPEND": "sys-libs/glibc", + }, + "sys-libs/zlib-1.3-r1": { + "EAPI": "8", + "SLOT": "0/1", + "BDEPEND": ">=sys-devel/automake-1.16.5", + }, + "sys-libs/zlib-1.2.13-r2": { + "EAPI": "8", + "SLOT": "0/1", + "BDEPEND": ">=sys-devel/automake-1.16.5", + }, + "virtual/libcrypt-2-r1": { + "EAPI": "8", + "SLOT": "0/2", + "RDEPEND": "sys-libs/libxcrypt", + }, + "virtual/libudev-251-r2": { + "EAPI": "8", + "SLOT": "0/1", + "RDEPEND": ">=sys-apps/systemd-251:0/2", + }, + } + + installed = { + "app-alternatives/gzip-0": { + "EAPI": "8", + "RDEPEND": "reference? ( >=app-arch/gzip-1.12-r3 ) pigz? ( app-arch/pigz[-symlink(-)] )", + "IUSE": "reference pigz", + "USE": "reference", + }, + "app-arch/gzip-1.13": { + "EAPI": "8", + "RDEPEND": "!app-arch/pigz[symlink(-)]", + "PDEPEND": "app-alternatives/gzip", + }, + "app-arch/zstd-1.5.5": { + "EAPI": "8", + "DEPEND": ">=sys-libs/zlib-1.2.3", + "RDEPEND": ">=sys-libs/zlib-1.2.3", + }, + "dev-lang/perl-5.36.1-r3": { + "EAPI": "8", + "BDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=", + "RDEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=", + "DEPEND": ">=sys-libs/zlib-1.2.12 virtual/libcrypt:0/2=", + }, + "dev-libs/libgcrypt-1.10.2": { + "EAPI": "8", + "SLOT": "0", + "BDEPEND": ">=sys-devel/automake-1.16.5", + "DEPEND": "sys-libs/glibc", + "RDEPEND": "sys-libs/glibc", + }, + "dev-libs/libpcre2-10.42-r1": { + "EAPI": "8", + "SLOT": "0/3", + "DEPEND": "sys-libs/zlib", + "RDEPEND": "sys-libs/zlib", + }, + "sys-apps/locale-gen-2.23-r1": { + "EAPI": "8", + "RDEPEND": "app-alternatives/gzip", + }, + "sys-apps/systemd-253.6": { + "EAPI": "8", + "SLOT": "0/2", + "BDEPEND": "dev-lang/perl", + "DEPEND": ">=sys-apps/util-linux-2.30:0= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:0/2= dev-libs/libpcre2", + "RDEPEND": ">=sys-apps/util-linux-2.30:0= >=dev-libs/libgcrypt-1.4.5:0= virtual/libcrypt:0/2= dev-libs/libpcre2", + }, + "sys-apps/util-linux-2.38.1-r2": { + "EAPI": "8", + "BDEPEND": ">=sys-devel/automake-1.16.5", + "DEPEND": "virtual/libcrypt:0/2= sys-libs/zlib:0/1= virtual/libudev:0/1= dev-libs/libpcre2:0/3=", + "RDEPEND": "sys-apps/systemd sys-libs/zlib:0/1= virtual/libudev:0/1= dev-libs/libpcre2:0/3=", + }, + "sys-devel/automake-1.16.5-r1": { + "EAPI": "8", + "BDEPEND": "app-alternatives/gzip", + "RDEPEND": ">=dev-lang/perl-5.6", + }, + "sys-libs/glibc-2.37-r7": { + "EAPI": "8", + "BDEPEND": "sys-apps/locale-gen", + "IDEPEND": "sys-apps/locale-gen", + "RDEPEND": "dev-lang/perl", + }, + "sys-libs/libxcrypt-4.4.36": { + "BDEPEND": "dev-lang/perl", + "DEPEND": "sys-libs/glibc", + "RDEPEND": "sys-libs/glibc", + }, + "sys-libs/zlib-1.2.13-r2": { + "EAPI": "8", + "SLOT": "0/1", + "BDEPEND": ">=sys-devel/automake-1.16.5", + }, + "virtual/libcrypt-2-r1": { + "EAPI": "8", + "SLOT": "0/2", + "RDEPEND": "sys-libs/libxcrypt", + }, + "virtual/libudev-251-r2": { + "EAPI": "8", + "SLOT": "0/1", + "RDEPEND": ">=sys-apps/systemd-251:0/2", + }, + } + + world = [ + "app-alternatives/gzip", + "app-arch/gzip", + "app-arch/zstd", + "sys-apps/systemd", + ] + + user_config = { + "package.use": ("app-alternatives/gzip -reference pigz",), + } + + test_cases = ( + ResolverPlaygroundTestCase( + ["app-alternatives/gzip", "sys-libs/zlib"], + success=True, + mergelist=[ + "sys-libs/zlib-1.3-r1", + "app-arch/pigz-2.8", + "app-alternatives/gzip-1", + ], + ), + ) + + playground = ResolverPlayground( + ebuilds=ebuilds, + installed=installed, + world=world, + user_config=user_config, + ) + try: + for test_case in test_cases: + playground.run_TestCase(test_case) + self.assertEqual(test_case.test_success, True, test_case.fail_msg) + finally: + playground.cleanup()