From dcdfeb3ac830598f4c8833b9ebf9dd4994229e26 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Kupec?= Date: Wed, 14 Apr 2010 11:23:14 +0200 Subject: [PATCH] one more install case & fix --- src/SolverRequester.cc | 17 ++++++++++------- src/SolverRequester.h | 5 +++-- tests/SolverRequester_test.cc | 30 ++++++++++++++++++++++++------ tests/data/misc/repodata/primary.xml.gz | Bin 1057 -> 1649 bytes tests/data/misc/repodata/repomd.xml | 6 +++--- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/SolverRequester.cc b/src/SolverRequester.cc index 8eb9349..de73c4a 100644 --- a/src/SolverRequester.cc +++ b/src/SolverRequester.cc @@ -143,22 +143,25 @@ void SolverRequester::install(const Capability & cap, const string & repoalias) for_(sit, bestMatches.begin(), bestMatches.end()) { Selectable::Ptr s(asSelectable()(*sit)); - if (s->hasInstalledObj()) + PoolItem instobj(s->installedObj()); + if (instobj) { - if (_requested_inst) - addFeedback(Feedback::ALREADY_INSTALLED, - cap, repoalias, PoolItem(), s->installedObj()); - // whether user requested specific repo/version/arch bool userconstraints = cap.detail().isVersioned() || cap.detail().hasArch() || !_opts.from_repos.empty() || !repoalias.empty(); + // check vendor (since PoolItemBest does not do it) + bool changes_vendor = instobj->vendor() != (*sit)->vendor(); PoolItem best; - if (userconstraints || !(best = s->updateCandidateObj())) + if (userconstraints) updateTo(cap, repoalias, *sit); - else + else if ((best = s->updateCandidateObj())) updateTo(cap, repoalias, best); + else if (changes_vendor) + updateTo(cap, repoalias, instobj); + else + updateTo(cap, repoalias, *sit); } else if (_requested_inst) { diff --git a/src/SolverRequester.h b/src/SolverRequester.h index 16a2579..b7bc597 100644 --- a/src/SolverRequester.h +++ b/src/SolverRequester.h @@ -132,6 +132,7 @@ public: : _id(id) , _reqcap(reqcap) , _reqrepo(reqrepo) + , _objsel(selected) , _objinst(installed) {} @@ -150,10 +151,10 @@ public: zypp::Capability _reqcap; std::string _reqrepo; - /** The installed object */ - zypp::PoolItem _objinst; /** The selected object */ zypp::PoolItem _objsel; + /** The installed object */ + zypp::PoolItem _objinst; }; public: diff --git a/tests/SolverRequester_test.cc b/tests/SolverRequester_test.cc index 23f19c0..af33950 100644 --- a/tests/SolverRequester_test.cc +++ b/tests/SolverRequester_test.cc @@ -90,7 +90,6 @@ BOOST_AUTO_TEST_CASE(install3) sr.install(rawargs); - BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::ALREADY_INSTALLED)); BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::SET_TO_INSTALL)); BOOST_CHECK_EQUAL(sr.toInstall().size(), 1); BOOST_CHECK(hasPoolItem(sr.toInstall(), "zypper", Edition("1.0.13-0.1.1"), Arch_x86_64)); @@ -190,8 +189,8 @@ BOOST_AUTO_TEST_CASE(install8) } // request : install 'info' -// response: Already installed. Update candidate info-4.13-1.1 is available -// but has different vendor +// response: Already installed. Update to info-4.12-1.111. Update candidate +// info-4.13-1.1 is available, too, but has different vendor. BOOST_AUTO_TEST_CASE(install9) { MIL << "<============install9===============>" << endl; @@ -202,7 +201,6 @@ BOOST_AUTO_TEST_CASE(install9) sr.install(rawargs); - BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::ALREADY_INSTALLED)); BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::SET_TO_INSTALL)); BOOST_CHECK_EQUAL(sr.toInstall().size(), 1); BOOST_CHECK(hasPoolItem(sr.toInstall(), "info", Edition("4.12-1.111"), Arch_x86_64)); @@ -226,6 +224,25 @@ BOOST_AUTO_TEST_CASE(install10) BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::NO_UPD_CANDIDATE)); } +// request : install diffutils +// response: Already installed. Update candidate diffutils-2.9.0-1 is available +// but has different vendor. +BOOST_AUTO_TEST_CASE(install11) +{ + MIL << "<============install11===============>" << endl; + + vector rawargs; + rawargs.push_back("diffutils"); + SolverRequester sr; + + sr.install(rawargs); + + BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::ALREADY_INSTALLED)); + BOOST_CHECK(!sr.hasFeedback(SolverRequester::Feedback::SET_TO_INSTALL)); + BOOST_CHECK(sr.toInstall().empty()); + BOOST_CHECK(sr.hasFeedback(SolverRequester::Feedback::UPD_CANDIDATE_CHANGES_VENDOR)); +} + /////////////////////////////////////////////////////////////////////////// // remove @@ -400,13 +417,14 @@ BOOST_AUTO_TEST_CASE(remove8) // requested package is not installed, update says NOT_INSTALLED or // NO_INSTALLED_PROVIDER whereas install says SET_TO_INSTALL. In case the // requested package is installed, update just performs the update; install -// first says ALREADY_INSTALLED, and then performs the update. +// says ALREADY_INSTALLED (in case no update is selected) or performs +// the update. // // In other words: // install == get the best available version to system (while abiding policies) // This means also update. // update == the same as install, but only if some version of the package is -// already installed. If not, just say so and quit. +// already installed. If not, just say so and quit. /////////////////////////////////////////////////////////////////////////// diff --git a/tests/data/misc/repodata/primary.xml.gz b/tests/data/misc/repodata/primary.xml.gz index 683a9aaa1c2412ba1df7cd88133567333a2a11e1..4269fb55a901639da114aa3ea2382097f13c5d58 100644 GIT binary patch delta 1593 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 S(C&X=a`G23s&d-K4gdfXc=|d3 diff --git a/tests/data/misc/repodata/repomd.xml b/tests/data/misc/repodata/repomd.xml index 4f5b7bc..b4a367c 100644 --- a/tests/data/misc/repodata/repomd.xml +++ b/tests/data/misc/repodata/repomd.xml @@ -2,8 +2,8 @@ - 71a0027b2ac4239ce27fbfa4302cc39dd03de234 - 1271084467.0 - 85af54786e9ab0699bea6c6abf7b3eb24cbcd48e + d2e362c86072cbe1b508974b0361a350c585ea82 + 1271235907.0 + f63e98962d5a77187106f7ea9b6a432cc2117594 -- 2.7.4