ref: refs/heads/master
commit 57b36ce7fcec5b541857f01a4f5e245f2a7b8635
Author: Michael Andres
Date: Thu Mar 12 18:37:27 2009 +0100
Add Resolver::setSolveSrcPackages to per default disable solving of source package dependencies. We will later allow to enable it per package.
---
zypp/Resolver.cc | 4 ++++
zypp/Resolver.h | 13 +++++++++++++
zypp/solver/detail/Resolver.cc | 2 ++
zypp/solver/detail/Resolver.h | 12 ++++++++----
zypp/solver/detail/SATResolver.cc | 10 ++++++++--
zypp/solver/detail/SATResolver.h | 10 +++++++++-
6 files changed, 44 insertions(+), 7 deletions(-)
diff --git a/zypp/Resolver.cc b/zypp/Resolver.cc
index 22a7880..ba3bfa0 100644
--- a/zypp/Resolver.cc
+++ b/zypp/Resolver.cc
@@ -101,6 +101,10 @@ namespace zypp
void Resolver::setDefaultSystemVerification() { _pimpl->setVerifyingMode(indeterminate ); }
bool Resolver::systemVerification() const { return _pimpl->isVerifyingMode(); }
+ void Resolver::setSolveSrcPackages( bool yesno_r ) { _pimpl->setSolveSrcPackages( yesno_r ); }
+ void Resolver::setDefaultSolveSrcPackages() { _pimpl->setSolveSrcPackages(indeterminate ); }
+ bool Resolver::solveSrcPackages() const { return _pimpl->solveSrcPackages(); }
+
void Resolver::addRequire (const Capability & capability)
{ _pimpl->addExtraRequire( capability ); }
void Resolver::addConflict (const Capability & capability)
diff --git a/zypp/Resolver.h b/zypp/Resolver.h
index 671abb2..48206a9 100644
--- a/zypp/Resolver.h
+++ b/zypp/Resolver.h
@@ -195,6 +195,19 @@ namespace zypp
bool systemVerification() const;
/**
+ * Set whether to solve source packages build dependencies per default.
+ * Usually turned off and if, enabled per source package.
+ * \NOTE This affects only source packges selected in the \ref ResPool. No solver rule
+ * will be generated for them. Source packages requested via e.g. \ref addRequire will
+ * always be solved.
+ * \NOTE Be carefull. The older the source package is, the stranger may be the
+ * result of solving it's build dependencies.
+ */
+ void setSolveSrcPackages( bool yesno_r );
+ void setDefaultSolveSrcPackages();
+ bool solveSrcPackages() const;
+
+ /**
* Adding additional requirement
*
*/
diff --git a/zypp/solver/detail/Resolver.cc b/zypp/solver/detail/Resolver.cc
index 906605f..e6da90e 100644
--- a/zypp/solver/detail/Resolver.cc
+++ b/zypp/solver/detail/Resolver.cc
@@ -75,6 +75,7 @@ Resolver::Resolver (const ResPool & pool)
, _updateMode(false)
, _verifying(false)
, _onlyRequires(indeterminate)
+ , _solveSrcPackages( false )
, _ignorealreadyrecommended(false)
{
@@ -281,6 +282,7 @@ Resolver::solverInit()
_satResolver->setAllowvirtualconflicts(false);
_satResolver->setNoupdateprovide(false);
_satResolver->setDosplitprovides(false);
+ _satResolver->setSolveSrcPackages( solveSrcPackages() );
if (_upgradeMode) {
_satResolver->setAllowdowngrade(true);
diff --git a/zypp/solver/detail/Resolver.h b/zypp/solver/detail/Resolver.h
index c6c2dee..ae04208 100644
--- a/zypp/solver/detail/Resolver.h
+++ b/zypp/solver/detail/Resolver.h
@@ -111,6 +111,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
TriBool _onlyRequires; // do install required resolvables only
// no recommended resolvables, language
// packages, hardware packages (modalias)
+ bool _solveSrcPackages; // whether to generate solver jobs for selected source packges.
bool _ignorealreadyrecommended; //ignore recommended packages that have already been recommended by the installed packages
@@ -183,10 +184,13 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
bool doUpgrade( zypp::UpgradeStatistics & opt_stats_r );
PoolItemList problematicUpdateItems( void ) const;
- bool isUpgradeMode(){ return _upgradeMode;}; // Resolver has been called with doUpgrade
- bool isUpdateMode(){ return _updateMode;}; // Resolver has been called with doUpdate
- bool isVerifyingMode(){ return _verifying;}; // The system will be checked
- void setVerifyingMode( TriBool state_r ) { _verifying = ( state_r == indeterminate ) ? false : bool(state_r); };
+ bool isUpgradeMode() const { return _upgradeMode;};// Resolver has been called with doUpgrade
+ bool isUpdateMode() const { return _updateMode;}; // Resolver has been called with doUpdate
+ bool isVerifyingMode() const { return _verifying;}; // The system will be checked
+ void setVerifyingMode( TriBool state_r ) { _verifying = ( state_r == indeterminate ) ? false : bool(state_r); }
+
+ bool solveSrcPackages() const { return _solveSrcPackages; }
+ void setSolveSrcPackages( TriBool state_r ) { _solveSrcPackages = ( state_r == indeterminate ) ? false : bool(state_r); }
ResolverProblemList problems () const;
void applySolutions (const ProblemSolutionList &solutions);
diff --git a/zypp/solver/detail/SATResolver.cc b/zypp/solver/detail/SATResolver.cc
index bbb39a0..d812f48 100644
--- a/zypp/solver/detail/SATResolver.cc
+++ b/zypp/solver/detail/SATResolver.cc
@@ -123,7 +123,7 @@ SATResolver::dumpOn( std::ostream & os ) const
os << " ignorealreadyrecommended = " << _solv->ignorealreadyrecommended << endl;
os << " distupgrade = " << _distupgrade << endl;
os << " distupgrade_removeunsupported = " << _distupgrade_removeunsupported << endl;
-
+ os << " solveSrcPackages = " << _solveSrcPackages << endl;
} else {
os << "<NULL>";
}
@@ -335,6 +335,12 @@ struct SATCollectTransact : public resfilter::PoolItemFilterFunctor
return true; // back out here, dont re-queue former solver result
}
+ if ( item.satSolvable().isKind<SrcPackage>() && ! resolver.solveSrcPackages() )
+ {
+ // Later we may continue on a per source package base.
+ return true; // dont process this source package.
+ }
+
if (status.isToBeInstalled()) {
resolver.addPoolItemToInstall(item); // -> install!
}
@@ -716,7 +722,7 @@ SATResolver::resolvePool(const CapabilitySet & requires_caps,
if (ret)
solverEnd(); // remove solver only if no errors happend. Need it for solving problems
- MIL << "SATResolver::resolvePool() done. Ret:" << ret << endl;
+ (ret?MIL:WAR) << "SATResolver::resolvePool() done. Ret:" << ret << endl;
return ret;
}
diff --git a/zypp/solver/detail/SATResolver.h b/zypp/solver/detail/SATResolver.h
index 655c6c4..144816d 100644
--- a/zypp/solver/detail/SATResolver.h
+++ b/zypp/solver/detail/SATResolver.h
@@ -56,7 +56,11 @@ namespace zypp
///////////////////////////////////////////////////////////////////
//
// CLASS NAME : SATResolver
-
+/**
+ * \todo The way solver options are passed as individual booleans from Resolver
+ * via solver::detail::Resolver to SATResolver is pedestrian and error prone.
+ * Introdce a dedicated solver option structure which is passed down as a whole.
+*/
class SATResolver : public base::ReferenceCounted, private base::NonCopyable {
private:
@@ -91,6 +95,7 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable {
bool _ignorealreadyrecommended; // true: ignore recommended packages that were already recommended by the installed packages
bool _distupgrade;
bool _distupgrade_removeunsupported;
+ bool _solveSrcPackages; // false: generate no job rule for source packages selected in the pool
// ---------------------------------- methods
std::string SATprobleminfoString (Id problem, std::string &detail, Id &ignoreId);
@@ -194,6 +199,9 @@ class SATResolver : public base::ReferenceCounted, private base::NonCopyable {
bool onlyRequires () const {return _onlyRequires;}
void setOnlyRequires ( const bool onlyRequires) { _onlyRequires = onlyRequires;}
+ bool solveSrcPackages() const { return _solveSrcPackages; }
+ void setSolveSrcPackages( bool state_r ) { _solveSrcPackages = state_r; }
+
PoolItemList problematicUpdateItems( void ) const { return _problem_items; }
PoolItemList resultItemsToInstall () { return _result_items_to_install; }
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org