[gentoo-commits] proj/portage:master commit in: lib/_emerge/resolver/, lib/_emerge/

2024-01-05 Thread Sam James
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/

2023-12-06 Thread Zac Medico
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/

2023-02-10 Thread Sam James
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/

2022-03-27 Thread Sam James
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/

2021-10-03 Thread Sam James
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/

2021-10-03 Thread Sam James
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/

2021-08-15 Thread Michał Górny
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/, ...

2021-03-06 Thread Zac Medico
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/

2020-09-20 Thread Zac Medico
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/

2020-08-03 Thread Zac Medico
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/

2020-08-03 Thread Zac Medico
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/

2020-08-03 Thread Zac Medico
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/

2020-08-02 Thread Zac Medico
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/

2020-07-22 Thread Zac Medico
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/

2019-09-01 Thread Zac Medico
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/

2019-01-19 Thread Zac Medico
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