[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/_emerge/
commit: 7402c4f2b9eef426134aca6a6ba71bbbd6389dac Author: Sam James gentoo org> AuthorDate: Fri Jan 5 11:25:51 2024 + Commit: Sam James gentoo org> CommitDate: Fri Jan 5 11:25:51 2024 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=7402c4f2 lib/_emerge: codespell fixes Signed-off-by: Sam James gentoo.org> lib/_emerge/depgraph.py | 2 +- lib/_emerge/resolver/circular_dependency.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py index efe084a780..a2865cad23 100644 --- a/lib/_emerge/depgraph.py +++ b/lib/_emerge/depgraph.py @@ -11927,7 +11927,7 @@ def _resume_depgraph( ) or parent_node.operation not in ("merge", "nomerge"): continue # We need to traverse all priorities here, in order to -# ensure that a package with an unsatisfied depenedency +# ensure that a package with an unsatisfied dependency # won't get pulled in, even indirectly via a soft # dependency. unsatisfied_stack.append((parent_node, atom)) diff --git a/lib/_emerge/resolver/circular_dependency.py b/lib/_emerge/resolver/circular_dependency.py index cd612e3130..6c21423083 100644 --- a/lib/_emerge/resolver/circular_dependency.py +++ b/lib/_emerge/resolver/circular_dependency.py @@ -189,7 +189,7 @@ class circular_dependency_handler: if len(affecting_use) > self.MAX_AFFECTING_USE: # Limit the number of combinations explored (bug #555698). -# First, discard irrelevent flags that are not enabled. +# First, discard irrelevant flags that are not enabled. # Since extract_affecting_use doesn't distinguish between # positive and negative effects (flag? vs. !flag?), assume # a positive relationship. @@ -254,8 +254,8 @@ class circular_dependency_handler: continue # Check if a USE change conflicts with use requirements of the parents. -# If a requiremnet is hard, ignore the suggestion. -# If the requirment is conditional, warn the user that other changes might be needed. +# If a requirement is hard, ignore the suggestion. +# If the requirement is conditional, warn the user that other changes might be needed. followup_change = False parent_parent_atoms = self.depgraph._dynamic_config._parent_atoms.get( changed_parent
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 036a0785d2595defc55ef03e424ffdf739a108b1 Author: Zac Medico gentoo org> AuthorDate: Wed Dec 6 00:26:17 2023 + Commit: Zac Medico gentoo org> CommitDate: Wed Dec 6 16:06:00 2023 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=036a0785 circular_dependency: Handle SonameAtom Treat soname deps is as unconditional for now. In some cases they can be avoided by a rebuild with changed USE, but ebuilds sometimes do not specify the corresponding conditional dependency (especially for system packages like gcc which provides libstdc++.so.6 and libgcc_s.so.1). Bug: https://bugs.gentoo.org/919311 Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/circular_dependency.py | 15 +-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/_emerge/resolver/circular_dependency.py b/lib/_emerge/resolver/circular_dependency.py index c88b18a574..cd612e3130 100644 --- a/lib/_emerge/resolver/circular_dependency.py +++ b/lib/_emerge/resolver/circular_dependency.py @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Gentoo Authors +# Copyright 2010-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 import logging @@ -132,9 +132,20 @@ class circular_dependency_handler: for ppkg, atom in parent_atoms: if ppkg == parent: changed_parent = ppkg -parent_atom = atom.unevaluated_atom +parent_atom = atom break +if parent_atom.package: +parent_atom = parent_atom.unevaluated_atom +else: +# Treat soname deps as unconditional for now. In some +# cases they can be avoided by a rebuild with changed +# USE, but ebuilds sometimes do not specify the +# corresponding conditional dependency (especially for +# system packages like gcc which provides libstdc++.so.6 +# and libgcc_s.so.1). +continue + try: affecting_use = extract_affecting_use( dep, parent_atom, eapi=parent.eapi
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/_emerge/, lib/portage/dep/
commit: 32d6700c84d4c41392f26eab89ffb48c6a4104fd Author: Oskari Pirhonen gmail com> AuthorDate: Sat Feb 11 02:14:10 2023 + Commit: Sam James gentoo org> CommitDate: Sat Feb 11 02:54:54 2023 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=32d6700c Fix issues causing CI to fail Signed-off-by: Oskari Pirhonen gmail.com> Closes: https://github.com/gentoo/portage/pull/985 Signed-off-by: Sam James gentoo.org> lib/_emerge/AbstractEbuildProcess.py | 4 +++- lib/_emerge/resolver/backtracking.py | 2 +- lib/portage/dep/__init__.py | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/_emerge/AbstractEbuildProcess.py b/lib/_emerge/AbstractEbuildProcess.py index f457e4609..0e6786eed 100644 --- a/lib/_emerge/AbstractEbuildProcess.py +++ b/lib/_emerge/AbstractEbuildProcess.py @@ -27,7 +27,9 @@ portage.proxy.lazyimport.lazyimport( class AbstractEbuildProcess(SpawnProcess): -__slots__ = ("phase", "settings",) + ( +__slots__ = ( +"phase", +"settings", "_build_dir", "_build_dir_unlock", "_ipc_daemon", diff --git a/lib/_emerge/resolver/backtracking.py b/lib/_emerge/resolver/backtracking.py index 6fbfdd89c..9cbe65411 100644 --- a/lib/_emerge/resolver/backtracking.py +++ b/lib/_emerge/resolver/backtracking.py @@ -270,7 +270,7 @@ class Backtracker: # Not all config changes require a restart, that's why they can appear together # with other conflicts. if "config" in infos: -self._feedback_config(infos["config"], explore=(len(infos) == 1)) +self._feedback_config(infos["config"], explore=len(infos) == 1) # There is at most one of the following types of conflicts for a given restart. if "slot conflict" in infos: diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py index 889d98263..d0c5a45cc 100644 --- a/lib/portage/dep/__init__.py +++ b/lib/portage/dep/__init__.py @@ -1499,8 +1499,8 @@ class Atom(str): allow_build_id = True blocker_prefix = "" -if "!" == s[:1]: -blocker = self._blocker(forbid_overlap=("!" == s[1:2])) +if s[:1] == "!": +blocker = self._blocker(forbid_overlap=s[1:2] == "!") if blocker.overlap.forbid: blocker_prefix = s[:2] s = s[2:]
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 2f7278309bcc13e7fe8b9303124b743e3434871e Author: Philipp Rösner protonmail com> AuthorDate: Sun Mar 27 20:46:04 2022 + Commit: Sam James gentoo org> CommitDate: Sun Mar 27 23:06:33 2022 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=2f727830 lib/_emerge/resolver: fix typos Fix typos in comments and class/function descriptions in the lib/_emerge/resolver scripts Signed-off-by: Philipp Rösner protonmail.com> Closes: https://github.com/gentoo/portage/pull/797 Signed-off-by: Sam James gentoo.org> lib/_emerge/resolver/output.py | 2 +- lib/_emerge/resolver/package_tracker.py | 8 lib/_emerge/resolver/slot_collision.py | 24 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py index 7b5602a78..6e569ea48 100644 --- a/lib/_emerge/resolver/output.py +++ b/lib/_emerge/resolver/output.py @@ -46,7 +46,7 @@ from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice class Display: -"""Formats and outputs the depgrah supplied it for merge/re-merge, etc. +"""Formats and outputs the depgraph supplied it for merge/re-merge, etc. __call__() @param depgraph: list diff --git a/lib/_emerge/resolver/package_tracker.py b/lib/_emerge/resolver/package_tracker.py index 7f7f2ca36..8631b78d6 100644 --- a/lib/_emerge/resolver/package_tracker.py +++ b/lib/_emerge/resolver/package_tracker.py @@ -75,7 +75,7 @@ class PackageTracker: and there is already a to-be-installed package added that has the same root, catpkg and slot. These cannot co-exist. A cpv conflict is a situation where a to-be-installed package is added to the package tracker via ``add_pkg()``, and -there is already a to-be-installed package add that has the same root, catpkg, and version+revision. These cannot +there is already a to-be-installed package added that has the same root, catpkg, and version+revision. These cannot co-exist. The package tracker does not prevent slot and cpv conflicts from occurring. Instead, it allows them to be recorded @@ -225,7 +225,7 @@ class PackageTracker: def discard_pkg(self, pkg): """ Removes the package from the tracker. -Does not raises KeyError if it is not present. +Does not raise KeyError if it is not present. """ try: self.remove_pkg(pkg) @@ -263,7 +263,7 @@ class PackageTracker: def conflicts(self): """ -Iterates over the curently existing conflicts. +Iterates over the currently existing conflicts. """ if self._conflicts_cache is None: self._conflicts_cache = [] @@ -369,7 +369,7 @@ class PackageTracker: class PackageTrackerDbapiWrapper: """ -A wrpper class that provides parts of the legacy +A wrapper class that provides parts of the legacy dbapi interface. Remove it once all consumers have died. """ diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py index 0b063b5f3..4f30cb675 100644 --- a/lib/_emerge/resolver/slot_collision.py +++ b/lib/_emerge/resolver/slot_collision.py @@ -22,7 +22,7 @@ class slot_conflict_handler: go away. This class focuses on cases where this can be achieved with a change in USE settings. -1) Find out if what causes a given slot conflict. There are +1) Find out what causes a given slot conflict. There are three possibilities: a) One parent needs foo-1:0 and another one needs foo-2:0, @@ -36,7 +36,7 @@ class slot_conflict_handler: enabled, this case is treated in the same way as c). c) Neither a 'version based conflict' nor an 'unspecific -conflict'. Ignoring use deps would result result in an +conflict'. Ignoring use deps would result in an 'unspecific conflict'. This is called a 'specific conflict'. This is the only conflict we try to find suggestions for. @@ -63,7 +63,7 @@ class slot_conflict_handler: * The parent package is 'installed'. * The conflict package is 'installed'. -USE of 'installed' packages can't be changed. This always requires an +USE of 'installed' packages can't be changed. This always requires a non-installed package. During this procedure, contradictions may occur. In this case the @@ -126,10 +126,10 @@ class slot_conflict_handler: self._prepare_conflict_msg_and_check_for_specificity() -# a list of dicts that hold the needed USE values to solve all conflicts +# a list of dicts that holds the needed USE values to solve all conflicts self.solutions = [] -# a list of dicts that hold the needed USE changes to solve all conflicts +# a list of dicts that holds the needed USE changes to solve all
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 601b5728bc0c1f76c28d41aae68fd946f19fd0f9 Author: Sam James gentoo org> AuthorDate: Fri Oct 1 06:17:12 2021 + Commit: Sam James gentoo org> CommitDate: Mon Oct 4 00:24:31 2021 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=601b5728 lib/_emerge/resolver/output_helpers.py: explicitly state 'all satisfied' This makes things a bit less confusing and tries to avoid users focusing on (soft) blocks which aren't actually the problem they're hitting. Signed-off-by: Sam James gentoo.org> Closes: https://github.com/gentoo/portage/pull/760 Signed-off-by: Sam James gentoo.org> lib/_emerge/resolver/output_helpers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py index f80b79ccf..6ce812189 100644 --- a/lib/_emerge/resolver/output_helpers.py +++ b/lib/_emerge/resolver/output_helpers.py @@ -163,6 +163,8 @@ class _PackageCounters: myoutput.append( bad(" (%s unsatisfied)") % (self.blocks - self.blocks_satisfied) ) +else: +myoutput.append(" (all satisfied)") return "".join(myoutput)
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 9c5689bc065080ec665ee5250d20146cadf760d6 Author: Sam James gentoo org> AuthorDate: Fri Oct 1 05:48:16 2021 + Commit: Sam James gentoo org> CommitDate: Mon Oct 4 00:24:31 2021 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=9c5689bc lib/_emerge/resolver/output.py: say 'soft blocking' explicitly Before: ``` [blocks b ] >perl-core/Scalar-List-Utils-1.550.0-r999 (">perl-core/Scalar-List-Utils-1.550.0-r999" is blocking virtual/perl-Scalar-List-Utils-1.550.0) ``` After: ``` [blocks b ] >perl-core/Scalar-List-Utils-1.550.0-r999 (">perl-core/Scalar-List-Utils-1.550.0-r999" is soft blocking virtual/perl-Scalar-List-Utils-1.550.0) ``` This should make it a little bit clearer when a block matters, especially given we already explicitly say 'hard blocking' for the opposite case. Signed-off-by: Sam James gentoo.org> lib/_emerge/resolver/output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py index e891d84c0..7b5602a78 100644 --- a/lib/_emerge/resolver/output.py +++ b/lib/_emerge/resolver/output.py @@ -108,7 +108,7 @@ class Display: if blocker.atom.blocker.overlap.forbid: blocking_desc = "hard blocking" else: -blocking_desc = "blocking" +blocking_desc = "soft blocking" if self.resolved != blocker.atom: addl += colorize( self.blocker_style,
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 7a4bf042dcc322ead982b151e2a459b3455c6f29 Author: Michał Górny gentoo org> AuthorDate: Sat Aug 7 15:58:02 2021 + Commit: Michał Górny gentoo org> CommitDate: Sat Aug 7 17:17:16 2021 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=7a4bf042 emerge: Sort USE flags in output using combined alnum sort Sort USE flags in output by a combined sort that treats sequences of digits as numbers and sorts them numerically rather than lexically. As a result, python3_10 now sorts after python3_9. Ideally, we'd just respect the order from profiles/desc but this should work as an intermediate solution until we figure out how to implement that. Bug: https://bugs.gentoo.org/show_bug.cgi?id=788346 Signed-off-by: Michał Górny gentoo.org> lib/_emerge/resolver/output_helpers.py | 21 +++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py index 3e93f..f639f84b3 100644 --- a/lib/_emerge/resolver/output_helpers.py +++ b/lib/_emerge/resolver/output_helpers.py @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Gentoo Authors +# Copyright 2010-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 """Contains private support functions for the Display class @@ -8,6 +8,8 @@ in output.py __all__ = ( ) +import re + from portage import os from portage._sets.base import InternalPackageSet from portage.exception import PackageSetNotFound @@ -214,6 +216,21 @@ class _DisplayConfig: self.pkg = depgraph._pkg +_alnum_sort_re = re.compile(r'(\d+)') + + +def _alnum_sort_key(x): + def _convert_even_to_int(it): + it = iter(it) + try: + while True: + yield next(it) + yield int(next(it)) + except StopIteration: + pass + return tuple(_convert_even_to_int(_alnum_sort_re.split(x))) + + def _create_use_string(conf, name, cur_iuse, iuse_forced, cur_use, old_iuse, old_use, is_new, feature_flags, reinst_flags): @@ -233,7 +250,7 @@ def _create_use_string(conf, name, cur_iuse, iuse_forced, cur_use, removed_iuse = set(old_iuse).difference(cur_iuse) any_iuse = cur_iuse.union(old_iuse) any_iuse = list(any_iuse) - any_iuse.sort() + any_iuse.sort(key=_alnum_sort_key) for flag in any_iuse: flag_str = None
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/portage/util/, lib/_emerge/, ...
commit: 21c6c0c1088ded78397594bfd78102361f8d837b Author: Matt Turner gentoo org> AuthorDate: Thu Mar 4 19:23:47 2021 + Commit: Zac Medico gentoo org> CommitDate: Sat Mar 6 09:05:16 2021 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=21c6c0c1 lib: Remove outdated Python 2 comments Fixes: 788c0e8bb ("Remove from __future__ import unicode_literals") Signed-off-by: Matt Turner gentoo.org> Signed-off-by: Zac Medico gentoo.org> bin/egencache | 2 -- lib/_emerge/Package.py | 9 - lib/_emerge/Scheduler.py| 2 -- lib/_emerge/UseFlagDisplay.py | 2 -- lib/_emerge/resolver/output.py | 2 -- lib/portage/cache/flat_hash.py | 3 --- lib/portage/tests/unicode/test_string_format.py | 9 - lib/portage/util/digraph.py | 3 --- 8 files changed, 32 deletions(-) diff --git a/bin/egencache b/bin/egencache index 9b6df2e7d..fc18b892f 100755 --- a/bin/egencache +++ b/bin/egencache @@ -2,8 +2,6 @@ # Copyright 2009-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 -# unicode_literals for compat with TextIOWrapper in Python 2 - import argparse import platform import signal diff --git a/lib/_emerge/Package.py b/lib/_emerge/Package.py index 995af6311..0ee25b90a 100644 --- a/lib/_emerge/Package.py +++ b/lib/_emerge/Package.py @@ -453,15 +453,6 @@ class Package(Task): else: qacat = k + ".syntax" - # For unicode safety with python-2.x we need to avoid - # using the string format operator with a non-unicode - # format string, since that will result in the - # PortageException.__str__() method being invoked, - # followed by unsafe decoding that may result in a - # UnicodeDecodeError. Therefore, use unicode_literals - # to ensure that format strings are unicode, so that - # PortageException.__unicode__() is used when necessary - # in python-2.x. if not self.installed: categorized_error = False if e.errors: diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py index 465f928a0..0ed2ee530 100644 --- a/lib/_emerge/Scheduler.py +++ b/lib/_emerge/Scheduler.py @@ -1188,8 +1188,6 @@ class Scheduler(PollScheduler): printer.eerror(line) printer.eerror("") for failed_pkg in self._failed_pkgs_all: - # Use unicode_literals to force unicode format string so - # that Package.__unicode__() is called in python2. msg = " %s" % (failed_pkg.pkg,) if failed_pkg.postinst_failure: msg += " (postinst failed)" diff --git a/lib/_emerge/UseFlagDisplay.py b/lib/_emerge/UseFlagDisplay.py index 5e3ba400d..fffc8144a 100644 --- a/lib/_emerge/UseFlagDisplay.py +++ b/lib/_emerge/UseFlagDisplay.py @@ -111,8 +111,6 @@ def pkg_use_display(pkg, opts, modified_use=None): flags.sort(key=UseFlagDisplay.sort_combined) else: flags.sort(key=UseFlagDisplay.sort_separated) - # Use unicode_literals to force unicode format string so - # that UseFlagDisplay.__unicode__() is called in python2. flag_displays.append('%s="%s"' % (varname, ' '.join("%s" % (f,) for f in flags))) diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py index 0c90abefb..dea8a4be8 100644 --- a/lib/_emerge/resolver/output.py +++ b/lib/_emerge/resolver/output.py @@ -554,8 +554,6 @@ class Display: """ writemsg_stdout('\n%s\n' % (self.counters,), noiselevel=-1) if show_repos: - # Use unicode_literals to force unicode format string so - # that RepoDisplay.__unicode__() is called in python2. writemsg_stdout("%s" % (self.conf.repo_display,), noiselevel=-1) diff --git a/lib/portage/cache/flat_hash.py b/lib/portage/cache/flat_hash.py index 7d48bae81..25930f0a4 100644 --- a/lib/portage/cache/flat_hash.py +++ b/lib/portage/cache/flat_hash.py @@ -73,9 +73,6 @@ class database(fs_template.FsBased): v = values.get(k) if not v: continue - # NOTE: This format string requires unicode_literals, so that - # k and v are coerced to unicode, in order to prevent TypeError - # when writing raw bytes
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/_emerge/, lib/portage/tests/resolver/
commit: 9afc5d5a808ca66173b1d803469cd44bc24e99be Author: Zac Medico gentoo org> AuthorDate: Sat Sep 19 23:18:16 2020 + Commit: Zac Medico gentoo org> CommitDate: Sun Sep 20 22:59:06 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=9afc5d5a _slot_confict_backtrack: group similar missed updates (bug 743115) When a slot conflict occurs due to a missed update, and some other similar update(s) are available, add the similar update(s) to the runtime package mask for the same backtracking choice. This reduces minimum number of backtrack tries required to solve the test case for bug 743115 from 7 to 4, where the difference of 3 corresponds to the number of other similar setuptools updates available. Bug: https://bugs.gentoo.org/743115 Signed-off-by: Zac Medico gentoo.org> lib/_emerge/depgraph.py| 25 ++ lib/_emerge/resolver/backtracking.py | 7 +++--- .../resolver/test_slot_operator_missed_update.py | 2 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py index 7281d8692..0bb0352e7 100644 --- a/lib/_emerge/depgraph.py +++ b/lib/_emerge/depgraph.py @@ -1795,15 +1795,32 @@ class depgraph: self._dynamic_config._parent_atoms.get(to_be_masked, set()) conflict_atoms = set(parent_atom for parent_atom in all_parents \ if parent_atom not in parent_atoms) - backtrack_data.append((to_be_masked, conflict_atoms)) + + similar_pkgs = [] + if conflict_atoms: + # If the conflict has been triggered by a missed update, then + # we can avoid excessive backtracking if we detect similar missed + # updates and mask them as part of the same backtracking choice. + for similar_pkg in self._iter_similar_available(to_be_masked, slot_atom): + if similar_pkg in conflict_pkgs: + continue + similar_conflict_atoms = [] + for parent_atom in conflict_atoms: + parent, atom = parent_atom + if not atom.match(similar_pkg): + similar_conflict_atoms.append(parent_atom) + if similar_conflict_atoms: + similar_pkgs.append((similar_pkg, set(similar_conflict_atoms))) + similar_pkgs.append((to_be_masked, conflict_atoms)) + backtrack_data.append(tuple(similar_pkgs)) # Prefer choices that minimize conflict atoms. This is intended # to take precedence over the earlier package version sort. The # package version sort is still needed or else choices for the # testOverlapSlotConflict method of VirtualMinimizeChildrenTestCase # become non-deterministic. - backtrack_data.sort(key=lambda item: len(item[1])) - to_be_masked = backtrack_data[-1][0] + backtrack_data.sort(key=lambda similar_pkgs: len(similar_pkgs[-1][1])) + to_be_masked = [item[0] for item in backtrack_data[-1]] self._dynamic_config._backtrack_infos.setdefault( "slot conflict", []).append(backtrack_data) @@ -1814,7 +1831,7 @@ class depgraph: "", "backtracking due to slot conflict:", " first package: %s" % existing_node, - " package to mask: %s" % to_be_masked, + " package(s) to mask: %s" % str(to_be_masked), " slot: %s" % slot_atom, " parents: %s" % ", ".join( "(%s, '%s')" % (ppkg, atom) for ppkg, atom in all_parents diff --git a/lib/_emerge/resolver/backtracking.py b/lib/_emerge/resolver/backtracking.py index bc3fb3206..ca94623ac 100644 --- a/lib/_emerge/resolver/backtracking.py +++ b/lib/_emerge/resolver/backtracking.py @@ -166,13 +166,14 @@ class Backtracker: self._feedback_slot_conflict(conflicts_data[0]) def _feedback_slot_conflict(self, conflict_data): - for pkg, parent_atoms in conflict_data: + for similar_pkgs in conflict_data: new_node = copy.deepcopy(self._current_node) new_node.depth += 1 new_node.mask_steps += 1
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 02fc63f5d1f0dd66578adcb7e42443ae95540982 Author: Aaron Bauman gentoo org> AuthorDate: Mon Aug 3 22:43:07 2020 + Commit: Zac Medico gentoo org> CommitDate: Mon Aug 3 23:28:01 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=02fc63f5 lib/_emerge/resolver/output_helpers.py: fix whitespace Signed-off-by: Aaron Bauman gentoo.org> Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/output_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/_emerge/resolver/output_helpers.py b/lib/_emerge/resolver/output_helpers.py index 25aa925b4..932e66e1b 100644 --- a/lib/_emerge/resolver/output_helpers.py +++ b/lib/_emerge/resolver/output_helpers.py @@ -588,7 +588,7 @@ class PkgInfo: """Simple class to hold instance attributes for current information about the pkg being printed. """ - + __slots__ = ("attr_display", "built", "cp", "ebuild_path", "fetch_symbol", "merge", "oldbest", "oldbest_list", "operation", "ordered", "previous_pkg",
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 4aac767b0bde663567c16ccaf8f214c67fb3b6a0 Author: Aaron Bauman gentoo org> AuthorDate: Mon Aug 3 20:20:19 2020 + Commit: Zac Medico gentoo org> CommitDate: Mon Aug 3 21:15:42 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=4aac767b lib/_emerge/resolver/slot_collision.py: drop unused-import Signed-off-by: Aaron Bauman gentoo.org> Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/slot_collision.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py index 2b8f59953..7accb89f4 100644 --- a/lib/_emerge/resolver/slot_collision.py +++ b/lib/_emerge/resolver/slot_collision.py @@ -3,8 +3,6 @@ from __future__ import print_function - -from portage import _encodings, _unicode_encode from _emerge.AtomArg import AtomArg from _emerge.Package import Package from _emerge.PackageArg import PackageArg
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: c449a5bab005dab8596b16b07934cc00ea05f8c8 Author: Aaron Bauman gentoo org> AuthorDate: Mon Aug 3 19:05:46 2020 + Commit: Zac Medico gentoo org> CommitDate: Mon Aug 3 19:21:35 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=c449a5ba lib/_emerge/resolver/output.py: fix unused-import Signed-off-by: Aaron Bauman gentoo.org> Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/output.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py index 9483898de..1dcb47020 100644 --- a/lib/_emerge/resolver/output.py +++ b/lib/_emerge/resolver/output.py @@ -8,8 +8,6 @@ __all__ = ( "Display", "format_unmatched_atom", ) - -import portage from portage import os from portage.dbapi.dep_expand import dep_expand from portage.dep import Atom, cpvequal, _repo_separator, _slot_separator
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 602d2cd487bb48788e9654a7b7fd5a3be34150d9 Author: Aaron Bauman gentoo org> AuthorDate: Mon Aug 3 02:53:42 2020 + Commit: Zac Medico gentoo org> CommitDate: Mon Aug 3 03:07:31 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=602d2cd4 lib/_emerge/resolver/slot_collision.py: fix redefined-builtin W0622 * This fixes the referenced warning by renaming the 'id' variable to 'name' and the 'type' variable to 'atype' * Additional cosmetic/style changes found along the way. Signed-off-by: Aaron Bauman gentoo.org> Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/slot_collision.py | 74 +- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/lib/_emerge/resolver/slot_collision.py b/lib/_emerge/resolver/slot_collision.py index cc16287de..2b8f59953 100644 --- a/lib/_emerge/resolver/slot_collision.py +++ b/lib/_emerge/resolver/slot_collision.py @@ -591,14 +591,14 @@ class slot_conflict_handler: version_violated = False slot_violated = False use = [] - for (type, sub_type), parents in collision_reasons.items(): + for (ctype, sub_type), parents in collision_reasons.items(): for x in parents: if parent == x[0] and atom == x[1]: - if type == "version": + if ctype == "version": version_violated = True - elif type == "slot": + elif ctype == "slot": slot_violated = True - elif type == "use": + elif ctype == "use": use.append(sub_type) break @@ -934,64 +934,64 @@ class slot_conflict_handler: msg += "}" msg += "]\n" writemsg(msg, noiselevel=-1) - + required_changes = {} - for id, pkg in enumerate(config): + for idx, pkg in enumerate(config): if not pkg.installed: - #We can't change the USE of installed packages. - for flag in all_involved_flags[id]: + # We can't change the USE of installed packages. + for flag in all_involved_flags[idx]: if not pkg.iuse.is_valid_flag(flag): continue - state = all_involved_flags[id][flag] + state = all_involved_flags[idx][flag] self._force_flag_for_package(required_changes, pkg, flag, state) - #Go through all (parent, atom) pairs for the current slot conflict. - for ppkg, atom in all_conflict_atoms_by_slotatom[id]: + # Go through all (parent, atom) pairs for the current slot conflict. + for ppkg, atom in all_conflict_atoms_by_slotatom[idx]: if not atom.package: continue use = atom.unevaluated_atom.use if not use: - #No need to force something for an atom without USE conditionals. - #These atoms are already satisfied. + # No need to force something for an atom without USE conditionals. + # These atoms are already satisfied. continue - for flag in all_involved_flags[id]: - state = all_involved_flags[id][flag] + for flag in all_involved_flags[idx]: +
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/_emerge/
commit: 25021f0b92c1898c3cc56bc2e446b4f1d57e49aa Author: Alec Warner gentoo org> AuthorDate: Wed Jul 22 03:53:05 2020 + Commit: Zac Medico gentoo org> CommitDate: Wed Jul 22 16:52:57 2020 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=25021f0b Fix R0205 in _emerge. Inheriting from object is not required in py3. Signed-off-by: Alec Warner gentoo.org> Change-Id: Ia12500d590ef3b7f5852b6af03801d40a8af8fa2 Signed-off-by: Zac Medico gentoo.org> lib/_emerge/BlockerCache.py | 2 +- lib/_emerge/BlockerDB.py| 2 +- lib/_emerge/DepPriorityNormalRange.py | 2 +- lib/_emerge/DepPrioritySatisfiedRange.py| 2 +- lib/_emerge/DependencyArg.py| 2 +- lib/_emerge/FakeVartree.py | 2 +- lib/_emerge/JobStatusDisplay.py | 2 +- lib/_emerge/Package.py | 4 ++-- lib/_emerge/PollScheduler.py| 2 +- lib/_emerge/ProgressHandler.py | 2 +- lib/_emerge/RootConfig.py | 2 +- lib/_emerge/Scheduler.py| 2 +- lib/_emerge/UseFlagDisplay.py | 2 +- lib/_emerge/UserQuery.py| 2 +- lib/_emerge/actions.py | 2 +- lib/_emerge/depgraph.py | 16 lib/_emerge/main.py | 4 ++-- lib/_emerge/resolver/DbapiProvidesIndex.py | 2 +- lib/_emerge/resolver/backtracking.py| 6 +++--- lib/_emerge/resolver/circular_dependency.py | 2 +- lib/_emerge/resolver/output.py | 2 +- lib/_emerge/resolver/output_helpers.py | 8 lib/_emerge/resolver/package_tracker.py | 4 ++-- lib/_emerge/resolver/slot_collision.py | 8 lib/_emerge/search.py | 4 ++-- lib/_emerge/stdout_spinner.py | 2 +- 26 files changed, 45 insertions(+), 45 deletions(-) diff --git a/lib/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py index 5f8fb360e..9fa3a0d95 100644 --- a/lib/_emerge/BlockerCache.py +++ b/lib/_emerge/BlockerCache.py @@ -21,7 +21,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping): # it's wasteful to update it for every vdb change. _cache_threshold = 5 - class BlockerData(object): + class BlockerData: __slots__ = ("__weakref__", "atoms", "counter") diff --git a/lib/_emerge/BlockerDB.py b/lib/_emerge/BlockerDB.py index 6122e73a8..356f25bee 100644 --- a/lib/_emerge/BlockerDB.py +++ b/lib/_emerge/BlockerDB.py @@ -14,7 +14,7 @@ from _emerge.Package import Package from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice -class BlockerDB(object): +class BlockerDB: def __init__(self, fake_vartree): root_config = fake_vartree._root_config diff --git a/lib/_emerge/DepPriorityNormalRange.py b/lib/_emerge/DepPriorityNormalRange.py index 86395549f..5f3f3da70 100644 --- a/lib/_emerge/DepPriorityNormalRange.py +++ b/lib/_emerge/DepPriorityNormalRange.py @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 from _emerge.DepPriority import DepPriority -class DepPriorityNormalRange(object): +class DepPriorityNormalRange: """ DepPriority properties Index Category diff --git a/lib/_emerge/DepPrioritySatisfiedRange.py b/lib/_emerge/DepPrioritySatisfiedRange.py index 391f5409b..e056e676f 100644 --- a/lib/_emerge/DepPrioritySatisfiedRange.py +++ b/lib/_emerge/DepPrioritySatisfiedRange.py @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 from _emerge.DepPriority import DepPriority -class DepPrioritySatisfiedRange(object): +class DepPrioritySatisfiedRange: """ DepPriority Index Category diff --git a/lib/_emerge/DependencyArg.py b/lib/_emerge/DependencyArg.py index 2d24359f2..4bb24d0ef 100644 --- a/lib/_emerge/DependencyArg.py +++ b/lib/_emerge/DependencyArg.py @@ -5,7 +5,7 @@ import sys from portage import _encodings, _unicode_encode -class DependencyArg(object): +class DependencyArg: __slots__ = ('arg', 'force_reinstall', 'internal', 'reset_depth', 'root_config') diff --git a/lib/_emerge/FakeVartree.py b/lib/_emerge/FakeVartree.py index 6070aeabb..b993cdb0d 100644 --- a/lib/_emerge/FakeVartree.py +++ b/lib/_emerge/FakeVartree.py @@ -18,7 +18,7 @@ from portage.versions import _pkg_str from _emerge.resolver.DbapiProvidesIndex import PackageDbapiProvidesIndex -class FakeVardbGetPath(object): +class FakeVardbGetPath: """ Implements the vardbapi.getpath() method which is used in error handling code for the Package class and vartree.get_provide(). diff --git a/lib/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py index 2ef3f8465..8986e90db 100644 --- a/lib/_emerge/JobStatusDisplay.py +++ b/lib/_emerge/JobStatusDisplay.py
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/portage/tests/resolver/, lib/_emerge/
commit: 994ac00aa764615ec6d319c7c1cb8123cf9f2aa1 Author: Zac Medico gentoo org> AuthorDate: Sat Aug 24 22:30:29 2019 + Commit: Zac Medico gentoo org> CommitDate: Sun Sep 1 17:33:54 2019 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=994ac00a _slot_confict_backtrack: consider masking a package matched by all parent atoms (bug 692746) When a slot conflict occurs involving a package that is matched by all involved parent atoms, consider masking the package in order to avoid a possible missed update. The included unit test demonstrates the case fixed by this patch. There are 2 previously existing unit tests that require larger backtracking values in order to succeed with this patch, since more possible solutions are now considered. Bug: https://bugs.gentoo.org/692746 Signed-off-by: Zac Medico gentoo.org> lib/_emerge/depgraph.py| 5 ++ lib/_emerge/resolver/backtracking.py | 9 +++ .../resolver/test_slot_conflict_update_virt.py | 79 ++ .../resolver/test_slot_operator_complete_graph.py | 2 +- .../test_slot_operator_runtime_pkg_mask.py | 2 +- 5 files changed, 95 insertions(+), 2 deletions(-) diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py index 08240af67..6be1b3ec7 100644 --- a/lib/_emerge/depgraph.py +++ b/lib/_emerge/depgraph.py @@ -1768,6 +1768,11 @@ class depgraph(object): debug = "--debug" in self._frozen_config.myopts existing_node = next(self._dynamic_config._package_tracker.match( root, slot_atom, installed=False)) + if existing_node not in conflict_pkgs: + # Even though all parent atoms match existing_node, + # consider masking it in order to avoid a missed update + # as in bug 692746. + conflict_pkgs.append(existing_node) # In order to avoid a missed update, first mask lower versions # that conflict with higher versions (the backtracker visits # these in reverse order). diff --git a/lib/_emerge/resolver/backtracking.py b/lib/_emerge/resolver/backtracking.py index c29b9d42a..99e4565c8 100644 --- a/lib/_emerge/resolver/backtracking.py +++ b/lib/_emerge/resolver/backtracking.py @@ -135,11 +135,20 @@ class Backtracker(object): continue entry_is_valid = False + any_conflict_parents = False for ppkg, patom in runtime_pkg_mask[pkg].get("slot conflict", set()): + any_conflict_parents = True if ppkg not in runtime_pkg_mask: entry_is_valid = True break + else: + if not any_conflict_parents: + # Even though pkg was involved in a slot conflict + # where it was matched by all involved parent atoms, + # consider masking it in order to avoid a missed + # update as in bug 692746. + entry_is_valid = True if not entry_is_valid: return False diff --git a/lib/portage/tests/resolver/test_slot_conflict_update_virt.py b/lib/portage/tests/resolver/test_slot_conflict_update_virt.py new file mode 100644 index 0..0bac095b8 --- /dev/null +++ b/lib/portage/tests/resolver/test_slot_conflict_update_virt.py @@ -0,0 +1,79 @@ +# 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 SlotConflictUpdateVirtTestCase(TestCase): + + def testSlotConflictUpdateVirt(self): + + ebuilds = { + "dev-db/mysql-connector-c-6.1.11-r2" : { + "EAPI": "7", + "SLOT" : "0/18" + }, + + "dev-db/mysql-connector-c-8.0.17-r3" : { + "EAPI": "7", + "SLOT" : "0/21" + }, + + "virtual/libmysqlclient-18-r1" : { + "EAPI": "7", + "SLOT" : "0/18", + "RDEPEND": "dev-db/mysql-connector-c:0/18", + }, + + "virtual/libmysqlclient-21" : { + "EAPI": "7", + "SLOT" : "0/21", + "RDEPEND":
[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/
commit: 9cce0dad3f45b15f8f069a552ac6c91b9dfdd769 Author: Arfrever Frehtes Taifersar Arahesis Apache Org> AuthorDate: Fri Jan 18 08:42:09 2019 + Commit: Zac Medico gentoo org> CommitDate: Sun Jan 20 07:05:17 2019 + URL:https://gitweb.gentoo.org/proj/portage.git/commit/?id=9cce0dad emerge: compare new slot USE to installed slot For new-slot package installation, show USE flags added/deleted in comparison with highest installed other-slot package instance Bug: https://bugs.gentoo.org/675756 Signed-off-by: Arfrever Frehtes Taifersar Arahesis Apache.Org> Signed-off-by: Zac Medico gentoo.org> lib/_emerge/resolver/output.py | 13 + 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py index 24340576c..ed88cc51f 100644 --- a/lib/_emerge/resolver/output.py +++ b/lib/_emerge/resolver/output.py @@ -1,4 +1,4 @@ -# Copyright 2010-2018 Gentoo Foundation +# Copyright 2010-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 """Resolver output display operation. @@ -673,9 +673,14 @@ class Display(object): pkg_info.previous_pkg = self.vardb.match_pkgs( Atom('=' + pkg.cpv))[0] else: - slot_matches = self.vardb.match_pkgs(pkg.slot_atom) - if slot_matches: - pkg_info.previous_pkg = slot_matches[0] + cp_slot_matches = self.vardb.match_pkgs(pkg.slot_atom) + if cp_slot_matches: + pkg_info.previous_pkg = cp_slot_matches[0] + else: + cp_matches = self.vardb.match_pkgs(Atom(pkg.cp)) + if cp_matches: + # Use highest installed other-slot package instance. + pkg_info.previous_pkg = cp_matches[-1] return pkg_info