rpm-software-management / libdnf

Package management library.
GNU Lesser General Public License v2.1
184 stars 139 forks source link

hawkey.subject: get_best_selectors only obsoleters of latest #1624

Closed m-blaha closed 1 year ago

m-blaha commented 1 year ago

In situation where a package exists in multiple versions and some older version is being obsoleted, any of obsoleters was considered a valid solution.

The result could be really misleading. For example let's have this package set:

systemd-udev-1.0

systemd-udev-2.0 Obsoletes: systemd-udev < 2

systemd-boot-unsigned-2.0 Obsoletes: systemd-udev < 2

In this case dnf install systemd-udev may lead to installation of systemd-boot-unsigned which is probably not what the user expected. The reason is the split in the upgrade-path created by obsolete and both branches - systemd-udev-2.0 and systemd-boot-unsigned-2.0 are considered valid.

With this patch install command takes into account only obsoleters of the best version of the package so the dnf install systemd-udev results in correct installation of systemd-udev-2.0 package.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2183279 Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2176263