If you have a package called "foo" with a dependency like "|| ( bar baz )", have baz installed, and run "emerge -evpt world" or "emerge -evpt foo", emerge will merge baz to fulfill the dependency, not bar. This is rather confusing at best and probably a bug. Place the vdb entry is picked up is dep_zapdeps, but I have no idea how to fix it.
Not a bug necessarily, more a documentation mismatch. Generally I think both behaviors are wanted, and most people prefer the current behavior I think (for rebuilding their systems).
Therefore it should probably be an emerge option (--emptytree and --emptytree-ignore-vdb or something like that).
Not a bug. Of course Portage should not overrule installed dependencies. There is no preference in || unless none of the possible dependencies is installed and Portage has to chose one. And changing this would e.g. have the side effect that someone who prefers the monolithic KDE doing emerge -e would face a lot of blockers, because Portage would try to install the split ebuilds, which have to block their monolithic counterparts.
I think --emptytree (and any variations on the concept) actually belong in the domain of package sets.
(In reply to comment #3)
> I think --emptytree (and any variations on the concept) actually belong in the
> domain of package sets.
Depends on your intention. If you want to rebuild your system then sure, `emerge --depclean; emerge --oneshot @everything` is a useful replacement for `emerge -e world`. But including --emtpytree in general in packagesets, while possible, doesn't strike me as a good idea, as it would effectively duplicate the dep resolver.
This is simply a preference issue if vdb should be ignored completely or not (though implementation is likely more complex than adding a new option)