added weak
authorStefan Schubert <schubi@suse.de>
Mon, 21 Apr 2008 08:50:25 +0000 (08:50 +0000)
committerStefan Schubert <schubi@suse.de>
Mon, 21 Apr 2008 08:50:25 +0000 (08:50 +0000)
zypp/solver/detail/SolverQueueItemInstallOneOf.cc
zypp/solver/detail/SolverQueueItemInstallOneOf.h

index 4e8180d..3ba523d 100644 (file)
@@ -41,7 +41,7 @@ IMPL_PTR_TYPE(SolverQueueItemInstallOneOf);
 std::ostream &
 SolverQueueItemInstallOneOf::dumpOn( std::ostream & os ) const
 {
-    os << "[" << "InstallOneOf: ";
+    os << "[" << (_soft?"Soft":"") << "InstallOneOf: ";
     for (PoolItemList::const_iterator iter = _oneOfList.begin();
         iter != _oneOfList.end();
         iter++)
@@ -53,9 +53,11 @@ SolverQueueItemInstallOneOf::dumpOn( std::ostream & os ) const
 
 //---------------------------------------------------------------------------
 
-SolverQueueItemInstallOneOf::SolverQueueItemInstallOneOf (const ResPool & pool, const PoolItemList & itemList)
+SolverQueueItemInstallOneOf::SolverQueueItemInstallOneOf (const ResPool & pool, const PoolItemList & itemList,
+                                                         bool soft)
     : SolverQueueItem (QUEUE_ITEM_TYPE_INSTALL_ONE_OF, pool)
     , _oneOfList (itemList)
+    , _soft (soft)    
 {
 }
 
@@ -69,8 +71,14 @@ SolverQueueItemInstallOneOf::~SolverQueueItemInstallOneOf()
 bool SolverQueueItemInstallOneOf::addRule (_Queue & q)
 {
     bool ret = true;
-    MIL << "Install one of: " << endl;
-    queue_push( &(q), SOLVER_INSTALL_SOLVABLE_ONE_OF );
+    MIL << "Install one of " << (_soft ? "(soft):" : ":")<< endl;
+    
+    if (_soft) {    
+       queue_push( &(q), SOLVER_INSTALL_SOLVABLE_ONE_OF | SOLVER_WEAK);
+    } else {
+       queue_push( &(q), SOLVER_INSTALL_SOLVABLE_ONE_OF );
+    }
+    
     for (PoolItemList::const_iterator iter = _oneOfList.begin(); iter != _oneOfList.end(); iter++) {
        Id id = (*iter)->satSolvable().id();
        if (id == ID_NULL) {
@@ -91,6 +99,7 @@ SolverQueueItemInstallOneOf::copy (void) const
 {
     SolverQueueItemInstallOneOf_Ptr new_installOneOf = new SolverQueueItemInstallOneOf (pool(), _oneOfList);
     new_installOneOf->SolverQueueItem::copy(this);
+    new_installOneOf->_soft = _soft;
     
     return new_installOneOf;
 }
index b94fcdd..bd1f502 100644 (file)
@@ -48,10 +48,11 @@ class SolverQueueItemInstallOneOf : public SolverQueueItem {
   private:
 
     PoolItemList _oneOfList; // List of candidates
+    bool _soft;          // if triggered by a soft requirement (a recommends)    
 
   public:
 
-    SolverQueueItemInstallOneOf (const ResPool & pool, const PoolItemList & itemList);
+    SolverQueueItemInstallOneOf (const ResPool & pool, const PoolItemList & itemList, bool soft = false);
     virtual ~SolverQueueItemInstallOneOf();
     
     // ---------------------------------- I/O
@@ -61,6 +62,10 @@ class SolverQueueItemInstallOneOf : public SolverQueueItem {
     friend std::ostream& operator<<(std::ostream & str, const SolverQueueItemInstallOneOf & obj)
     { return obj.dumpOn (str); }
 
+    // ---------------------------------- accessors
+
+    bool isSoft (void) const { return _soft; }    
+    
     // ---------------------------------- methods
 
     virtual bool addRule (_Queue & q);