When calculating the missing dependencies for an ebuild to be installed
by entropy, it's necessary to walk two levels deep minimum to handle meta
packages and split ebuilds. This has a nasty side effect for virtual packages
since all the potential candidates that could satisfy the virtual are
included. This means for anything that has a dependency on virtual/jdk, every
possible jdk is installed side-by-side. For anything that depends on
virtual/mta, every possible mta is installed one by one (because these conflict
and substitute each other, each subsequent install uninstalls the previous
package which is a massive waste of time, bandwidth and effort).
This commit walks through the dependency list looking for any virtual packages.
For each one, the first-level dependencies of the virtual are collected. Only
dependencies of the target package which are not also dependencies of the virtual
are installed. This means only one package that satisfies the virtual will end up
being installed.
When calculating the missing dependencies for an ebuild to be installed by entropy, it's necessary to walk two levels deep minimum to handle meta packages and split ebuilds. This has a nasty side effect for virtual packages since all the potential candidates that could satisfy the virtual are included. This means for anything that has a dependency on virtual/jdk, every possible jdk is installed side-by-side. For anything that depends on virtual/mta, every possible mta is installed one by one (because these conflict and substitute each other, each subsequent install uninstalls the previous package which is a massive waste of time, bandwidth and effort).
This commit walks through the dependency list looking for any virtual packages. For each one, the first-level dependencies of the virtual are collected. Only dependencies of the target package which are not also dependencies of the virtual are installed. This means only one package that satisfies the virtual will end up being installed.