Inside depgraph._select_atoms(), only trigger the circular dependency
authorZac Medico <zmedico@gentoo.org>
Wed, 11 Feb 2009 20:34:40 +0000 (20:34 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 11 Feb 2009 20:34:40 +0000 (20:34 -0000)
avoidance code for buildtime dependencies. This solves a problem with
virtual/mysql inappropriately pulling in mysql-community from PDEPEND
when satisfying deps of plain mysql. Thanks to Krzysiek Pawlik <nelchael@g.o>
for reporting this issue:
http://archives.gentoo.org/gentoo-dev/msg_efce154d642fe6ede38d084a33c7f949.xml

svn path=/main/trunk/; revision=12599

pym/_emerge/__init__.py

index cbd46b1d469c6807e3bf53b982d3f66252bdbeb6..a6d9ec257c0df23336d0e6786d99f1027e79f36a 100644 (file)
@@ -5118,7 +5118,8 @@ class depgraph(object):
                                vardb = self.roots[dep_root].trees["vartree"].dbapi
                                try:
                                        selected_atoms = self._select_atoms(dep_root,
-                                               dep_string, myuse=myuse, parent=pkg, strict=strict)
+                                               dep_string, myuse=myuse, parent=pkg, strict=strict,
+                                               priority=dep_priority)
                                except portage.exception.InvalidDependString, e:
                                        show_invalid_depstring_notice(jbigkey, dep_string, str(e))
                                        return 0
@@ -5751,12 +5752,20 @@ class depgraph(object):
                return self._select_atoms_highest_available(*pargs, **kwargs)
 
        def _select_atoms_highest_available(self, root, depstring,
-               myuse=None, parent=None, strict=True, trees=None):
+               myuse=None, parent=None, strict=True, trees=None, priority=None):
                """This will raise InvalidDependString if necessary. If trees is
                None then self._filtered_trees is used."""
                pkgsettings = self.pkgsettings[root]
                if trees is None:
                        trees = self._filtered_trees
+               if not getattr(priority, "buildtime", False):
+                       # The parent should only be passed to dep_check() for buildtime
+                       # dependencies since that's the only case when it's appropriate
+                       # to trigger the circular dependency avoidance code which uses it.
+                       # It's important not to trigger the same circular dependency
+                       # avoidance code for runtime dependencies since it's not needed
+                       # and it can promote an incorrect package choice.
+                       parent = None
                if True:
                        try:
                                if parent is not None: