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.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 44A21138334 for ; Thu, 12 Sep 2019 01:51:39 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 61272E096C; Thu, 12 Sep 2019 01:51:38 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 340F2E096C for ; Thu, 12 Sep 2019 01:51:37 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 8F0C134B07B for ; Thu, 12 Sep 2019 01:51:36 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id E1194771 for ; Thu, 12 Sep 2019 01:51:33 +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: <1568251881.1e61c439143b12d079e1fc344bbc0c192a84cbe0.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: lib/_emerge/, lib/portage/tests/resolver/ X-VCS-Repository: proj/portage X-VCS-Files: lib/_emerge/depgraph.py lib/portage/tests/resolver/test_aggressive_backtrack_downgrade.py X-VCS-Directories: lib/_emerge/ lib/portage/tests/resolver/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 1e61c439143b12d079e1fc344bbc0c192a84cbe0 X-VCS-Branch: master Date: Thu, 12 Sep 2019 01:51:33 +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: f5a4e98d-71c5-4dd4-b4e2-1b933fd717e0 X-Archives-Hash: 0d4e069008b08540611b729b44416eb8 commit: 1e61c439143b12d079e1fc344bbc0c192a84cbe0 Author: Zac Medico gentoo org> AuthorDate: Wed Sep 11 02:54:51 2019 +0000 Commit: Zac Medico gentoo org> CommitDate: Thu Sep 12 01:31:21 2019 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1e61c439 _add_dep: less aggressive backtracking (bug 693836) In order to suppress the sort of aggressive backtracking that can trigger undesirable downgrades as in bug 693836, do not backtrack for an unsatisfied dependency if there's an available package in the runtime package mask which was involved in a slot conflict and satisfied all involved parent atoms. Instead, discard the current depgraph in favor of other backtracking configurations that may exist. This case would not have been encountered prior to the fix for bug 692746 which enabled backtracking for the type of slot conflict that is detected here. Fixes: 994ac00aa764 ("_slot_confict_backtrack: consider masking a package matched by all parent atoms (bug 692746)") Bug: https://bugs.gentoo.org/693836 Signed-off-by: Zac Medico gentoo.org> lib/_emerge/depgraph.py | 13 ++++ .../test_aggressive_backtrack_downgrade.py | 91 ++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py index 6be1b3ec7..51614fc14 100644 --- a/lib/_emerge/depgraph.py +++ b/lib/_emerge/depgraph.py @@ -2888,6 +2888,19 @@ class depgraph(object): dep.atom.without_use if dep.atom.package else dep.atom, onlydeps=dep.onlydeps) if dep_pkg is None: + + # In order to suppress the sort of aggressive + # backtracking that can trigger undesirable downgrades + # as in bug 693836, do not backtrack if there's an + # available package which was involved in a slot + # conflict and satisfied all involved parent atoms. + for dep_pkg, reasons in self._dynamic_config._runtime_pkg_mask.items(): + if (dep.atom.match(dep_pkg) and + len(reasons) == 1 and + not reasons.get("slot conflict", True)): + self._dynamic_config._skip_restart = True + return 0 + self._dynamic_config._backtrack_infos["missing dependency"] = dep self._dynamic_config._need_restart = True if debug: diff --git a/lib/portage/tests/resolver/test_aggressive_backtrack_downgrade.py b/lib/portage/tests/resolver/test_aggressive_backtrack_downgrade.py new file mode 100644 index 000000000..fbe85dc89 --- /dev/null +++ b/lib/portage/tests/resolver/test_aggressive_backtrack_downgrade.py @@ -0,0 +1,91 @@ +# Copyright 2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +from portage.tests import TestCase +from portage.tests.resolver.ResolverPlayground import (ResolverPlayground, + ResolverPlaygroundTestCase) + +class AgressiveBacktrackDowngradeTestCase(TestCase): + + def testAgressiveBacktrackDowngrade(self): + + ebuilds = { + 'www-client/firefox-69.0' : { + 'EAPI': '7', + 'RDEPEND': '=media-libs/libvpx-1.7*:0=[postproc] media-video/ffmpeg' + }, + + 'www-client/firefox-60.9.0' : { + 'EAPI': '7', + 'RDEPEND': '' + }, + + 'media-libs/libvpx-1.8.0' : { + 'EAPI': '7', + 'SLOT' : '0/6', + 'IUSE': 'postproc', + }, + + 'media-libs/libvpx-1.7.0' : { + 'EAPI': '7', + 'SLOT' : '0/5', + 'IUSE': '+postproc', + }, + + 'media-libs/libvpx-1.6.0' : { + 'EAPI': '7', + 'SLOT' : '0/4', + 'IUSE': 'postproc', + }, + + 'media-video/ffmpeg-4.2' : { + 'EAPI': '7', + 'RDEPEND': 'media-libs/libvpx:=', + }, + } + + installed = { + 'www-client/firefox-69.0' : { + 'EAPI': '7', + 'RDEPEND': '=media-libs/libvpx-1.7*:0/5=[postproc] media-video/ffmpeg' + }, + + 'media-libs/libvpx-1.7.0' : { + 'EAPI': '7', + 'SLOT' : '0/5', + 'IUSE': '+postproc', + 'USE': 'postproc', + }, + + 'media-video/ffmpeg-4.2' : { + 'EAPI': '7', + 'RDEPEND': 'media-libs/libvpx:0/5=', + }, + } + + world = ['media-video/ffmpeg', 'www-client/firefox'] + + test_cases = ( + # Test bug 693836, where an attempt to upgrade libvpx lead + # to aggressive backtracking which ultimately triggered an + # undesirable firefox downgrade like this: + # [ebuild U ] media-libs/libvpx-1.8.0 [1.7.0] + # [ebuild UD ] www-client/firefox-60.9.0 [69.0] + # [ebuild rR ] media-video/ffmpeg-4.2 + ResolverPlaygroundTestCase( + ['@world'], + options = {'--update': True, '--deep': True}, + success = True, + mergelist = [], + ), + ) + + playground = ResolverPlayground(ebuilds=ebuilds, + installed=installed, world=world, debug=False) + 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.debug = False + playground.cleanup()