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:
trees[root]["parent"] = parent
+ if priority is not None:
+ trees[root]["priority"] = priority
if not strict:
portage.dep._dep_check_strict = False
mycheck = portage.dep_check(depstring, None,
finally:
if parent is not None:
trees[root].pop("parent")
+ if priority is not None:
+ trees[root].pop("priority")
portage.dep._dep_check_strict = True
if not mycheck[0]:
raise portage.exception.InvalidDependString(mycheck[1])
# Alias the trees we'll be checking availability against
parent = trees[myroot].get("parent")
+ priority = trees[myroot].get("priority")
graph_db = trees[myroot].get("graph_db")
vardb = None
if "vartree" in trees[myroot]:
all_in_graph = False
break
if all_in_graph:
- if parent is None:
+ if parent is None or priority is None:
preferred_not_installed.append(this_choice)
- else:
+ elif priority.buildtime:
# Check if the atom would result in a direct circular
# dependency and try to avoid that if it seems likely
- # to be unresolvable.
+ # to be unresolvable. This is only relevant for
+ # buildtime deps that aren't already satisfied by an
+ # installed package.
cpv_slot_list = [parent]
circular_atom = None
for atom in atoms: