diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-12-11 21:38:02 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-12-11 21:38:02 +0000 |
commit | 00cf943a1640410a134ac70bf52f85b05a3f2b03 (patch) | |
tree | c7ea4eb3d7b0b72e1ec4aa513d6f92e64af86c9c | |
parent | 4b34f215b65c5e057f283b16d906aaabb8e8f513 (diff) | |
download | portage-00cf943a1640410a134ac70bf52f85b05a3f2b03.tar.gz portage-00cf943a1640410a134ac70bf52f85b05a3f2b03.tar.bz2 portage-00cf943a1640410a134ac70bf52f85b05a3f2b03.zip |
For bug #157823, ignore blocker collisions between two packages that are already installed if no merge is currently scheduled for either of those package slots. These blockers will be handled as necessary the next time that a merge of either package is triggered.
svn path=/main/trunk/; revision=5272
-rwxr-xr-x | bin/emerge | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/bin/emerge b/bin/emerge index 0a35d4907..88c59c53d 100755 --- a/bin/emerge +++ b/bin/emerge @@ -1520,6 +1520,19 @@ class depgraph: self.blocker_parents[blocker] = myparents myparents.add(myparent) + modified_slots = {} + if self.blocker_parents: + for myroot in self.trees: + myslots = {} + modified_slots[myroot] = myslots + final_db = self.mydbapi[myroot] + for mycpv, mynode in self.pkg_node_map[myroot].iteritems(): + mytype, myroot, mycpv, mystatus = mynode + if mystatus == "merge": + slot_atom = "%s:%s" % (portage.dep_getkey(mycpv), + final_db.aux_get(mycpv, ["SLOT"])[0]) + modified_slots[myroot][slot_atom] = mycpv + for blocker in self.blocker_parents.keys(): mytype, myroot, mydep = blocker initial_db = self.trees[myroot]["vartree"].dbapi @@ -1544,6 +1557,7 @@ class depgraph: pdbapi = self.trees[proot][self.pkg_tree_map[ptype]].dbapi pslot = pdbapi.aux_get(pcpv, ["SLOT"])[0] pslot_atom = "%s:%s" % (portage.dep_getkey(pcpv), pslot) + parent_static = pslot_atom not in modified_slots[proot] unresolved_blocks = False depends_on_order = set() for cpv in blocked_initial: @@ -1554,6 +1568,11 @@ class depgraph: # node matters. In any case, this particular block is # automatically resolved. continue + if parent_static and \ + slot_atom not in modified_slots[myroot]: + # This blocker will be handled the next time that a + # merge of either package is triggered. + continue if pstatus == "merge" and \ slot_atom not in blocked_slots_final.values(): upgrade_matches = final_db.match(slot_atom) @@ -1573,6 +1592,11 @@ class depgraph: # The parent blocks itself, so the merge order does not # need to be enforced. continue + if parent_static and \ + slot_atom not in modified_slots[myroot]: + # This blocker will be handled the next time that a + # merge of either package is triggered. + continue # None of the above blocker resolutions techniques apply, # so apparently this one is unresolvable. unresolved_blocks = True |