Author: schubi2
Date: Fri Apr 11 16:56:58 2008
New Revision: 9541
URL: http://svn.opensuse.org/viewcvs/zypp?rev=9541&view=rev
Log:
taking satisfied/broken state from ResStatus
Modified:
trunk/libzypp/zypp/PoolItem.cc
trunk/libzypp/zypp/ResStatus.h
trunk/libzypp/zypp/sat/SATResolver.cc
Modified: trunk/libzypp/zypp/PoolItem.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/PoolItem.cc?rev=9541&r1=9540&r2=9541&view=diff
==============================================================================
--- trunk/libzypp/zypp/PoolItem.cc (original)
+++ trunk/libzypp/zypp/PoolItem.cc Fri Apr 11 16:56:58 2008
@@ -56,17 +56,17 @@
bool isRelevant() const
{
- return true;
+ return !status().isNonRelevant();
}
bool isSatisfied() const
{
- return true;
+ return status().isSatisfied();
}
bool isBroken() const
{
- return true;
+ return status().isBroken();
}
private:
@@ -195,13 +195,13 @@
{ return _pimpl->statusReset(); }
bool PoolItem::isRelevant() const
- { return _pimpl->isSatisfied(); }
+ { return _pimpl->isRelevant(); }
bool PoolItem::isSatisfied() const
{ return _pimpl->isSatisfied(); }
bool PoolItem::isBroken() const
- { return _pimpl->isSatisfied(); }
+ { return _pimpl->isBroken(); }
void PoolItem::saveState() const
{ _pimpl->saveState(); }
Modified: trunk/libzypp/zypp/ResStatus.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ResStatus.h?rev=9541&r1=9540&r2=9541&view=diff
==============================================================================
--- trunk/libzypp/zypp/ResStatus.h (original)
+++ trunk/libzypp/zypp/ResStatus.h Fri Apr 11 16:56:58 2008
@@ -179,6 +179,9 @@
bool isSuggested() const
{ return fieldValueIs<WeakField>( SUGGESTED ); }
+ bool resetWeak() const
+ { return fieldValueIs<WeakField>( NO_WEAK ); }
+
void setRecommended( bool toVal_r = true )
{ if (isSuggested())
fieldValueAssign<WeakField>( toVal_r ? SUGGESTED_AND_RECOMMENDED : SUGGESTED );
@@ -196,6 +199,9 @@
bool isUndetermined() const
{ return fieldValueIs<ValidateField>( UNDETERMINED ); }
+ ValidateValue validate() const
+ { return (ValidateValue)_bitfield.value<ValidateField>(); }
+
bool isSatisfied() const
{ return fieldValueIs<ValidateField>( SATISFIED ); }
Modified: trunk/libzypp/zypp/sat/SATResolver.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/sat/SATResolver.cc?rev=9541&r1=9540&r2=9541&view=diff
==============================================================================
--- trunk/libzypp/zypp/sat/SATResolver.cc (original)
+++ trunk/libzypp/zypp/sat/SATResolver.cc Fri Apr 11 16:56:58 2008
@@ -42,6 +42,7 @@
#include "satsolver/evr.h"
#include "satsolver/poolvendor.h"
#include "satsolver/policy.h"
+#include "satsolver/bitmap.h"
}
/////////////////////////////////////////////////////////////////////////
@@ -58,9 +59,6 @@
IMPL_PTR_TYPE(SATResolver);
-static PoolItemSet triggeredSolution; // only the latest state of an item is interesting
- // for the pool. Documents already inserted items.
-
//---------------------------------------------------------------------------
// Callbacks for SAT policies
//---------------------------------------------------------------------------
@@ -267,20 +265,13 @@
static void
SATSolutionToPool (PoolItem item, const ResStatus & status, const ResStatus::TransactByValue causer)
{
-#if 0
- if (triggeredSolution.find(item) != triggeredSolution.end()) {
- _XDEBUG("SATSolutionToPool(" << item << ") is already in the pool --> skip");
- return;
- }
-#endif
-
- triggeredSolution.insert(item);
-
- // resetting transaction only
+ // resetting
item.status().resetTransact (causer);
+ item.status().resetWeak ();
bool r;
+ // installation/deletion
if (status.isToBeInstalled()) {
r = item.status().setToBeInstalled (causer);
_XDEBUG("SATSolutionToPool(" << item << ", " << status << ") install !" << r);
@@ -293,16 +284,17 @@
r = item.status().setToBeUninstalled (causer);
_XDEBUG("SATSolutionToPool(" << item << ", " << status << ") remove !" << r);
}
- else if (status.isRecommended()) {
+
+ // recommend/suggest
+ if (status.isRecommended()) {
item.status().setRecommended(true);
_XDEBUG("SATSolutionToPool(" << item << ", " << status << ") recommended !" << r);
}
else if (status.isSuggested()) {
item.status().setSuggested(true);
_XDEBUG("SATSolutionToPool(" << item << ", " << status << ") suggested !" << r);
- } else {
- _XDEBUG("SATSolutionToPool(" << item << ", " << status << ") unchanged !");
}
+
return;
}
@@ -423,6 +415,38 @@
};
+class SetValidate : public resfilter::PoolItemFilterFunctor
+{
+ public:
+ Map installedmap, conflictsmap;
+
+ SetValidate(Solver *solv)
+ {
+ solver_create_state_maps(solv, &installedmap, &conflictsmap);
+ }
+
+ // set validation
+
+ bool operator()( PoolItem item )
+ {
+ int ret = solvable_trivial_installable_map(item.satSolvable().get(), &installedmap, &conflictsmap);
+ item.status().setUndetermined();
+
+ if (ret == -1) {
+ item.status().setNonRelevant();
+ _XDEBUG("SATSolutionToPool(" << item << " ) nonRelevant !");
+ } else if (ret == 1) {
+ item.status().setSatisfied();
+ _XDEBUG("SATSolutionToPool(" << item << " ) satisfied !");
+ } else if (ret == 0) {
+ item.status().setBroken();
+ _XDEBUG("SATSolutionToPool(" << item << " ) broken !");
+ }
+ return true;
+ }
+};
+
+
bool
SATResolver::resolvePool(const CapabilitySet & requires_caps,
const CapabilitySet & conflict_caps)
@@ -623,6 +647,13 @@
}
}
+ /* Write validation state back to pool */
+ SetValidate infoValidate(_solv);
+ invokeOnEach( _pool.begin(),
+ _pool.end(),
+ functor::not_c(resfilter::byKind<Package>()), // every solvable BUT packages
+ functor::functorRef