Per repo excludes and/or includepkgs can be used to make things work though ...
That may be hard to do ... but that is how yum works.
I haven't read much on the topic. However, here's a suggestion.
Group repos into groups. When doing yum list, list the most current packages from _each_ repogroup.
Ie, current behaviour:
[maze@tcs ~]$ yum list php Available Packages php.i386 4.3.9-3.12 updates
[maze@tcs ~]$ yum --enablerepo=centosplus list php Available Packages php.i386 5.0.4-5.centos4 centosplus
desired behaviour (assuming centosplus and updates are in different repo groups):
Available Packages php.i386 4.3.9-3.12 updates php.i386 5.0.4-5.centos4 centosplus
This means you can choose which repo to install the given package from. Possibly yum install php would now ask you to select a repogroup (ie. The package php is available from the following repogroups: 1. centos base/addons/extras/updates 2. centosplus Please select the repogroup to use for this package:)
Example groups: - centos: base/addons/extras/updates - centosplus - dag/dries - etc...
Next, keep a database (maybe just a text file) from which repo (or repogroup) each package was installed, and consider only packages from the same repogroup to be valid upgrade paths. And refuse to install stuff that would require a cross-repogroup upgrade (or make a big fat warning dialog y/n default no box).
Comments? MaZe