Author: schubi2
Date: Mon Jun 11 17:05:22 2007
New Revision: 5719
URL: http://svn.opensuse.org/viewcvs/zypp?rev=5719&view=rev
Log:
Required kmp packges FOR EACH installed/to_be_installed kernel will be
installed.
New dependency "packageand(foo:bar)" which provides an AND dependency
by
injecting a supplement/freshen.
e.G. package novell-cluster-services-kmp-smp
supplements: packageand(kernel-smp:novell-cluster-services-kmp)
Bug 255011
Modified:
trunk/libzypp/zypp/detail/ResolvableImpl.cc
Modified: trunk/libzypp/zypp/detail/ResolvableImpl.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/detail/ResolvableImpl.cc?rev=5719&r1=5718&r2=5719&view=diff
==============================================================================
--- trunk/libzypp/zypp/detail/ResolvableImpl.cc (original)
+++ trunk/libzypp/zypp/detail/ResolvableImpl.cc Mon Jun 11 17:05:22 2007
@@ -85,12 +85,36 @@
return true; // strip from provides
}
- if (cap_r.index().substr( 0, 7 ) != "locale(")
+ std::string capString = cap_r.index();
+
+ if (capString.substr( 0, 11 ) == "packageand(") {
+ // inject a supplement/freshen in order to simulate an AND dependency
+ // Required kmp packges FOR EACH installed/to_be_installed kernel will be installed.
+ // Bug 255011
+ if (capString[capString.size()-1] == ')') { // trailing ")" given ?
+ CapFactory f;
+ std::string andDep( capString, 11 ); // strip "packageand("
+ std::string::size_type pos = andDep.find( ":" ); // colon given ?
+ if (pos != std::string::npos) {
+ deps[Dep::SUPPLEMENTS].insert( f.parse( ResTraits<Package>::kind, std::string( andDep, 0, pos ) ) );
+ pos++; // skip ":"
+ std::string depString( andDep, pos, andDep.size()-pos-1 );
+ deps[Dep::FRESHENS].insert( f.parse( ResTraits<Package>::kind, depString ) );
+ } else {
+ ERR << "wrong dependency (missing \":\") : " << capString <