Solving the famous “smart” case 3
In my last post, I showed how sat-solver (solver’s ZYpp uses) would solve correctly the “case 2″ included in smart’s README, an exercise smart uses to claim its “smartness” (because apt and yum can’t handle them).
How does it with case 3?
That’s another interesting case which was tested with APT-RPM and YUM.
In this case, there’s a package
Aversion 1.0 installed in the system, and there are two versions available for upgrading: 1.5 and 2.0. Version 1.5 may be installed without problems, but version 2.0 has a dependency onB, which is not available anywhere.In this case, the best possibility is upgrading to 1.5, since upgrading to 2.0 is not an option.
Here both yum and apt fail:
Just like APT, YUM selected version 2.0 and didn’t consider the availability of an intermediate version.
But smart does the right thing:
Smart correctly selects the intermediate version 1.5, which is the only viable possibility given the current options.
So, we setup a repository packages.xml with A version 1.5 and 2.0 ( 2.0 requiring an non-existing B) and a system.xml representing the installed packages, with only A 1.0 installed. We put all together in a test.xml file, and select a “upgrade” action.
We run the already introduced deptestomatic:
# deptestomatic test.xml >!> Solution #1: >!> upgrade A-1.0-1.noarch => A-1.5-1.noarch[test] >!> !unflag A-2.0-1.noarch[test] >!> installs=0, upgrades=1, uninstalls=0
And we confirm, that ZYpp (sat-solver) would also select A 1.5 as expected.
May 21st, 2008 at 12:46 am
[...] Duncan Mac-Vicar P. homepage « Solving the famous “smart” case 3 [...]