- Indicate changed pool content to the resolver. (required for #271912)
authorMichael Andres <ma@suse.de>
Thu, 2 Aug 2007 14:34:23 +0000 (14:34 +0000)
committerMichael Andres <ma@suse.de>
Thu, 2 Aug 2007 14:34:23 +0000 (14:34 +0000)
VERSION.cmake
devel/devel.ma/Basic.cc
devel/devel.ma/Parse.cc
zypp/ResPool.cc
zypp/ResPool.h
zypp/pool/PoolImpl.cc
zypp/pool/PoolImpl.h
zypp/solver/detail/Resolver.cc
zypp/solver/detail/Resolver.h

index 6846a4a..bf9c492 100644 (file)
@@ -47,4 +47,4 @@
 SET(LIBZYPP_MAJOR "3")
 SET(LIBZYPP_MINOR "13")
 SET(LIBZYPP_COMPATMINOR "13")
-SET(LIBZYPP_PATCH "6")
+SET(LIBZYPP_PATCH "7")
index 512f560..f920c04 100644 (file)
@@ -6,6 +6,7 @@
 #include <zypp/base/LogControl.h>
 #include <zypp/base/LogTools.h>
 #include <zypp/base/String.h>
+#include <zypp/base/SerialNumber.h>
 #include <zypp/PathInfo.h>
 #include <zypp/TmpPath.h>
 
@@ -29,6 +30,14 @@ int main( int argc, char * argv[] )
   INT << "===[START]==========================================" << endl;
 
   ResPool pool( getZYpp()->pool() );
+  SerialNumberWatcher poolchanged( pool.serial() );
+  USR << pool << endl;
+  USR << poolchanged << endl;
+
+  if ( poolchanged.remember( pool.serial() ) )
+  {
+    SEC << "CHANGED" << endl;
+  }
 
   const char *const lines[] = {
     "@ package",
@@ -41,11 +50,29 @@ int main( int argc, char * argv[] )
     "@ fin"
   };
 
-  //debug::addPool( lines, lines+(sizeof(lines)/sizeof(const char *const)) );
-  debug::addPool( "/tmp/a" );
+  debug::addPool( lines, lines+(sizeof(lines)/sizeof(const char *const)) );
+  //debug::addPool( "/tmp/a" );
+  USR << pool << endl;
+  if ( poolchanged.remember( pool.serial() ) )
+  {
+    SEC << "CHANGED" << endl;
+  }
   USR << pool << endl;
 
   for_each( pool.begin(), pool.end(), chk );
+  if ( poolchanged.remember( pool.serial() ) )
+  {
+    SEC << "CHANGED" << endl;
+  }
+  if ( poolchanged.remember( pool.serial() ) )
+  {
+    SEC << "CHANGED" << endl;
+  }
+  if ( poolchanged.remember( pool.serial() ) )
+  {
+    SEC << "CHANGED" << endl;
+  }
+
 
   INT << "===[END]============================================" << endl
       << endl;
index 034fed2..a2939d4 100644 (file)
@@ -345,7 +345,7 @@ int main( int argc, char * argv[] )
   USR << "pool: " << pool << endl;
   SEC << pool.knownRepositoriesSize() << endl;
 
-  if ( 1 )
+  if ( 0 )
   {
     zypp::base::LogControl::TmpLineWriter shutUp;
     getZYpp()->initTarget( sysRoot );
index b71c667..5093ddb 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "zypp/ResPool.h"
 #include "zypp/pool/PoolImpl.h"
+#include "zypp/base/SerialNumber.h"
 
 using std::endl;
 
@@ -111,6 +112,8 @@ namespace zypp
   ResPool::AdditionalCapSet & ResPool::additionaProvide() const
   { return _pimpl->additionaProvide(); }
 
+  const SerialNumber & ResPool::serial() const
+  { return _pimpl->serial(); }
 
   /******************************************************************
   **
index 457bded..48ce7e7 100644 (file)
@@ -22,6 +22,8 @@
 namespace zypp
 { /////////////////////////////////////////////////////////////////
 
+  class SerialNumber;
+
   ///////////////////////////////////////////////////////////////////
   //
   //   CLASS NAME : ResPool
@@ -55,6 +57,12 @@ namespace zypp
     ~ResPool();
 
   public:
+    /** The pools serial number. Changing whenever the
+     * whenever the content changes. (Resolvables or
+     * Dependencies).
+    */
+    const SerialNumber & serial() const;
+
     /**  */
     bool empty() const;
     /**  */
index fa56e5c..8fba2a6 100644 (file)
@@ -204,6 +204,17 @@ namespace zypp
     PoolImpl::~PoolImpl()
     {}
 
+    ///////////////////////////////////////////////////////////////////
+    //
+    // METHOD NAME : PoolImpl::serial
+    // METHOD TYPE : SerialNumber
+    //
+    const SerialNumber & PoolImpl::serial() const
+    {
+#warning INCLUDE CHECK FOR CHANGED DEPENDENCIES
+      return _serial;
+    }
+
     /******************************************************************
     **
     ** FUNCTION NAME : operator<<
@@ -283,7 +294,6 @@ namespace zypp
       _poolImpl.invalidateProxy();
     }
 
-
     /////////////////////////////////////////////////////////////////
   } // namespace pool
   ///////////////////////////////////////////////////////////////////
index 04fe3f3..3d57919 100644 (file)
@@ -16,6 +16,7 @@
 #include <map>
 
 #include "zypp/base/Easy.h"
+#include "zypp/base/SerialNumber.h"
 #include "zypp/pool/PoolTraits.h"
 #include "zypp/ResPoolProxy.h"
 #include "zypp/ZYppFactory.h"
@@ -277,7 +278,8 @@ namespace zypp
 
       /** */
       void clear()
-      { _store.clear();
+      {
+        _store.clear();
        _caphash.clear();
        _namehash.clear();
         _additionalRequire.clear();
@@ -321,10 +323,18 @@ namespace zypp
       //@}
 
     public:
-      /** */
-      ContainerT _store;
-      NameHash _namehash;
-      CapHash _caphash;
+      /** Serial number changing whenever the content
+       * (Resolvables or Dependencies) changes. */
+      const SerialNumber & serial() const;
+
+    private:
+      /** Serial number. */
+      SerialNumber _serial;
+
+    public:
+      ContainerT   _store;
+      NameHash     _namehash;
+      CapHash      _caphash;
       mutable AdditionalCapSet _additionalRequire;
       mutable AdditionalCapSet _additionaConflict;
       mutable AdditionalCapSet _additionaProvide;
@@ -336,19 +346,24 @@ namespace zypp
           _poolProxy.reset( new ResPoolProxy( self ) );
         return *_poolProxy;
       }
+
+      /** Invalidate all data we build on demand.
+       * To be called whenever the pools content changes
+       */
       void invalidateProxy()
       {
+        _serial.setDirty();
        _poolProxy.reset();
        _knownRepositoriesPtr.reset();
       }
 
       mutable shared_ptr<ResPoolProxy> _poolProxy;
 
-      private:
-       /** Set of known repositories built on demand.
-        * Invalidated on any Pool content change. Rebuilt on next access.
-       */
-       mutable scoped_ptr<KnownRepositories> _knownRepositoriesPtr;
+    private:
+      /** Set of known repositories built on demand.
+       * Invalidated on any Pool content change. Rebuilt on next access.
+       */
+      mutable scoped_ptr<KnownRepositories> _knownRepositoriesPtr;
     };
     ///////////////////////////////////////////////////////////////////
 
index 8a2964d..44ebca7 100644 (file)
@@ -59,7 +59,7 @@ using namespace std;
 IMPL_PTR_TYPE(Resolver);
 
 static const unsigned MAX_SECOND_RUNS( 3 );
-static const unsigned MAX_VALID_SOLUTIONS( 50 );       
+static const unsigned MAX_VALID_SOLUTIONS( 50 );
 static const unsigned TIMOUT_SECOND_RUN( 30 );
 
 static PoolItemSet triggeredSolution;   // only the latest state of an item is interesting
@@ -74,7 +74,7 @@ public:
         { return compareByNVRA(p1.resolvable(),p2.resolvable()) < 0; }
 };
 
-       
+
 std::ostream &
 Resolver::dumpOn( std::ostream & os ) const
 {
@@ -107,6 +107,7 @@ void assertSystemResObjectInPool()
 
 Resolver::Resolver (const ResPool & pool)
     : _pool (pool)
+    , _poolchanged( _pool.serial() )
     , _timeout_seconds (0)
     , _maxSolverPasses (0)
     , _verifying (false)
@@ -120,8 +121,13 @@ Resolver::Resolver (const ResPool & pool)
     , _forceResolve (false)
     , _upgradeMode (false)
     , _preferHighestVersion (true)
-      
-{}
+
+{
+  //if ( _poolchanged.remember( _pool.serial() ) )
+  //{
+  //  SEC << "CHANGED" << endl;
+  //}
+}
 
 
 Resolver::~Resolver()
@@ -169,7 +175,7 @@ Resolver::reset (bool resetValidResults, bool keepExtras )
 
     if (resetValidResults)
        contextPool.reset();
-    
+
 }
 
 //--------------------------------------------------------------------------------------------------
@@ -190,7 +196,7 @@ collector_cb_needed (ResolverInfo_Ptr info, void *data)
        if (needed_by->items().size() >= 1) {
            PoolItem_Ref item = info->affected();
            PoolItemList itemList = needed_by->items();
-           
+
            for (PoolItemList::const_iterator iter = itemList.begin();
                 iter != itemList.end(); iter++) {
                bool found = false;
@@ -213,19 +219,19 @@ collector_cb_needed (ResolverInfo_Ptr info, void *data)
                       && !found) {
                           ItemCapKind capKind = pos->second;
                           if (capKind.item == item) found = true;
-                          pos++;                          
-                      }                
+                          pos++;
+                      }
                if (!found) {
                    ItemCapKind capKindReverse( item, needed_by->capability(), needed_by->capKind(), needed_by->initialInstallation() );
                    collector->installs.insert (make_pair( *iter, capKindReverse));
                }
            }
-           
+
        }
     }
 }
-       
-void 
+
+void
 Resolver::collectResolverInfo(void)
 {
     ResolverContext_Ptr collectContext = context(); // best context or failed context
@@ -243,7 +249,7 @@ Resolver::collectResolverInfo(void)
 const ItemCapKindList Resolver::isInstalledBy (const PoolItem_Ref item) {
     ItemCapKindList ret;
     collectResolverInfo();
-     
+
     for (ItemCapKindMap::const_iterator iter = _isInstalledBy.find(item); iter != _isInstalledBy.end();) {
        ItemCapKind info = iter->second;
        PoolItem_Ref iterItem = iter->first;
@@ -253,7 +259,7 @@ const ItemCapKindList Resolver::isInstalledBy (const PoolItem_Ref item) {
        } else {
            // exit
            iter = _isInstalledBy.end();
-       }       
+       }
     }
     return ret;
 }
@@ -261,7 +267,7 @@ const ItemCapKindList Resolver::isInstalledBy (const PoolItem_Ref item) {
 const ItemCapKindList Resolver::installs (const PoolItem_Ref item) {
     ItemCapKindList ret;
     collectResolverInfo();
-    
+
     for (ItemCapKindMap::const_iterator iter = _installs.find(item); iter != _installs.end();) {
        ItemCapKind info = iter->second;
        PoolItem_Ref iterItem = iter->first;
@@ -271,9 +277,9 @@ const ItemCapKindList Resolver::installs (const PoolItem_Ref item) {
        } else {
            // exit
            iter = _installs.end();
-       }       
+       }
     }
-    return ret;    
+    return ret;
 }
 
 
@@ -350,7 +356,7 @@ Resolver::addPoolItemToRemove (PoolItem_Ref item)
     }
     if (!found) {
        _items_to_remove.push_back (item);
-       _items_to_remove.unique ();     
+       _items_to_remove.unique ();
     }
 }
 
@@ -512,7 +518,7 @@ bool
 Resolver::verifySystem (bool considerNewHardware)
 {
     UndoTransact resetting (ResStatus::APPL_HIGH);
-    
+
     _DEBUG ("Resolver::verifySystem() " << (considerNewHardware ? "consider new hardware":""));
 
     invokeOnEach ( _pool.begin(), _pool.end(),
@@ -529,7 +535,7 @@ Resolver::verifySystem (bool considerNewHardware)
     invokeOnEach( pool().byKindBegin( ResTraits<Pattern>::kind ),
                  pool().byKindEnd( ResTraits<Pattern>::kind ),
                  resfilter::ByInstalled ( ),
-                 functor::functorRef<bool,PoolItem>(info) );    
+                 functor::functorRef<bool,PoolItem>(info) );
 
 
     _verifying = true;
@@ -547,9 +553,9 @@ Resolver::verifySystem (bool considerNewHardware)
     DoTransact setting (ResStatus::APPL_HIGH);
 
     invokeOnEach ( _pool.begin(), _pool.end(),
-                  resfilter::ByTransact( ),                    
-                  functor::functorRef<bool,PoolItem>(setting) );    
-    
+                  resfilter::ByTransact( ),
+                  functor::functorRef<bool,PoolItem>(setting) );
+
     return success;
 }
 
@@ -571,7 +577,7 @@ solution_to_pool (PoolItem_Ref item, const ResStatus & status, void *data)
 
     // resetting transaction only
     item.status().resetTransact((data != NULL) ? ResStatus::APPL_LOW : ResStatus::SOLVER );
-    
+
     bool r;
 
     if (status.isToBeInstalled()) {
@@ -649,7 +655,7 @@ Resolver::establishState( ResolverContext_Ptr context )
                                    _ignoreInstalledItem,
                                    _ignoreArchitectureItem);
     context->setForceResolve( _forceResolve );
-    context->setEstablishContext( _establish_context );    
+    context->setEstablishContext( _establish_context );
     context->setPreferHighestVersion ( _preferHighestVersion );
     context->setUpgradeMode( _upgradeMode );
 
@@ -689,7 +695,7 @@ Resolver::establishPool ()
     ResolverContext_Ptr solution = bestContext();
 
     if (solution) {                                            // copy solution back to pool
-       triggeredSolution.clear();      
+       triggeredSolution.clear();
        solution->foreachMarked (solution_to_pool, (void *)1);  // as APPL_LOW
     }
     else {
@@ -774,7 +780,7 @@ Resolver::freshenState( ResolverContext_Ptr context,
                                    _ignoreInstalledItem,
                                    _ignoreArchitectureItem );
     context->setForceResolve( _forceResolve );
-    context->setEstablishContext( _establish_context );        
+    context->setEstablishContext( _establish_context );
     context->setPreferHighestVersion( _preferHighestVersion );
     context->setUpgradeMode( _upgradeMode );
 
@@ -794,9 +800,9 @@ Resolver::freshenState( ResolverContext_Ptr context,
 
     // process the queue
     resolveDependencies( context );
-    
+
     if (resetAfterSolve) {
-       reset( false, true ); //resetValidResults,keepExtras    
+       reset( false, true ); //resetValidResults,keepExtras
        context->setEstablishing( false );
        _best_context = context;
     }
@@ -891,7 +897,7 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
            ignoreRequires.insert(make_pair(PoolItem_Ref(), *cit));
        }
     }
-    
+
     // Initialize all ignoring dependencies
     initial_queue->context()->setIgnoreCababilities (_ignoreConflicts,
                                                     ignoreRequires,
@@ -899,7 +905,7 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
                                                     _ignoreInstalledItem,
                                                     _ignoreArchitectureItem);
     initial_queue->context()->setForceResolve( _forceResolve );
-    initial_queue->context()->setEstablishContext( _establish_context );       
+    initial_queue->context()->setEstablishContext( _establish_context );
     initial_queue->context()->setPreferHighestVersion( _preferHighestVersion );
     initial_queue->context()->setUpgradeMode( _upgradeMode );
     initial_queue->context()->setTryAllPossibilities( _tryAllPossibilities );
@@ -953,14 +959,14 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
     for (CapSet::const_iterator iter = _extra_caps.begin(); iter != _extra_caps.end(); iter++) {
        initial_queue->addExtraCapability (*iter);
     }
-    
+
     // adding "external" requires
     additionalCapSet = pool().additionalRequire();
     for (ResPool::AdditionalCapSet::const_iterator it = additionalCapSet.begin();
         it != additionalCapSet.end(); it++) {
        CapSet cset = it->second;
        for (CapSet::const_iterator cit = cset.begin(); cit != cset.end(); ++cit) {
-           initial_queue->addExtraCapability (*cit);       
+           initial_queue->addExtraCapability (*cit);
        }
     }
 
@@ -974,7 +980,7 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
         it != additionalCapSet.end(); it++) {
        CapSet cset = it->second;
        for (CapSet::const_iterator cit = cset.begin(); cit != cset.end(); ++cit) {
-           initial_queue->addExtraConflict (*cit);         
+           initial_queue->addExtraConflict (*cit);
        }
     }
 
@@ -1030,7 +1036,7 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
                    << " ) reached -> exit" << endl;
                break;
        }
-             
+
        ResolverQueue_Ptr queue = _pending_queues.front();
        _pending_queues.pop_front();
        ResolverContext_Ptr context = queue->context();
@@ -1093,7 +1099,7 @@ Resolver::resolveDependencies (const ResolverContext_Ptr context)
           << " / Prun " << (long) _pruned_queues.size()
           << " / Defr " << (long) _deferred_queues.size()
           << " / Invl " << (long) _invalid_queues.size() );
-    
+
     return _best_context && _best_context->isValid();
 }
 
@@ -1165,14 +1171,14 @@ struct CollectTransact : public resfilter::PoolItemFilterFunctor
                WAR << "Can't find " << item << " for re-installation" << endl;
            }
        }
-       
+
         if (status.isLocked()
             && status.isUninstalled()) {
             // This item could be selected by solver in a former run. Now it
             // is locked. So we will have to evaluate a new solver run.
             resolver.addPoolItemToLockUninstalled (item);
         }
-       
+
        return true;
     }
 };
@@ -1233,11 +1239,11 @@ Resolver::resolvePool( bool tryAllPossibilities )
            << endl;
        MIL << "Solver run with ALL possibilities"
            << endl;
-       if (_maxSolverPasses <= 0) 
-           _maxSolverPasses = MAX_SECOND_RUNS;         
-       if (_timeout_seconds <= 0) 
+       if (_maxSolverPasses <= 0)
+           _maxSolverPasses = MAX_SECOND_RUNS;
+       if (_timeout_seconds <= 0)
            _timeout_seconds = TIMOUT_SECOND_RUN;
-       
+
        MIL << "But no longer than " << MAX_SECOND_RUNS << " runs or "
            << TIMOUT_SECOND_RUN << " seconds" << endl;
        MIL << "================================================================" << endl;
@@ -1261,18 +1267,18 @@ Resolver::resolvePool( bool tryAllPossibilities )
     PoolItemList _completeItems_to_install = _items_to_install;
     PoolItemList _completeItems_to_remove = _items_to_remove;
     PoolItemList _completeItems_to_lockUninstalled = _items_to_lockUninstalled;
-    
+
     // We have to find a valid context in order to recycle it.
     saveContext = contextPool.findContext (_items_to_install, _items_to_remove, _items_to_lockUninstalled);
     // _items_to_install, _items_to_remove contains addition items which has been selected but are
-    // not solved with that context. They will be solved now. 
+    // not solved with that context. They will be solved now.
     // If we have not found any former fitting context, saveContext is NULL. So the solver
     // make a complete run
 
     if (saveContext != NULL) {
         // create a new context in order not overwriting the old
         saveContext = new ResolverContext (saveContext->pool(), saveContext->architecture(), saveContext);
-       saveContext->setTryAllPossibilities( true );    
+       saveContext->setTryAllPossibilities( true );
     }
 
     bool have_solution = resolveDependencies (saveContext);             // resolve !
@@ -1280,7 +1286,7 @@ Resolver::resolvePool( bool tryAllPossibilities )
     if (have_solution) {                                       // copy solution back to pool
        MIL << "Have solution, copying back to pool" << endl;
        ResolverContext_Ptr solution = bestContext();
-       triggeredSolution.clear();      
+       triggeredSolution.clear();
        solution->foreachMarked (solution_to_pool, NULL);
 #if 1
        _XDEBUG( "Pool after resolve" );
@@ -1288,7 +1294,7 @@ Resolver::resolvePool( bool tryAllPossibilities )
 #endif
         // insert best_context in ContextPool for further solver runs
         contextPool.addContext( solution,_completeItems_to_install, _completeItems_to_remove, _completeItems_to_lockUninstalled);
-       
+
     }
     else {
        MIL << "!!! Have NO solution !!! Additional solver information:" << endl;
@@ -1298,17 +1304,17 @@ Resolver::resolvePool( bool tryAllPossibilities )
            counter++;
            MIL << "-----------------------------------------------------------------" << endl;
            MIL << counter++ << ". failed queue:" << endl;
-           ResolverQueue_Ptr invalid = *iter;    
+           ResolverQueue_Ptr invalid = *iter;
 //         invalid->context()->spewInfo (); No additional information needed here
            MIL << *invalid->context() << endl;
-           MIL << "-----------------------------------------------------------------" << endl;         
+           MIL << "-----------------------------------------------------------------" << endl;
        }
     }
 
     if (tryAllPossibilities) {
        _tryAllPossibilities = saveTryAllPossibilities; // reset to old value
     }
-       
+
     return have_solution;
 }
 
@@ -1343,7 +1349,7 @@ Resolver::transactResObject( ResObject::constPtr robj, bool install,
 {
     MIL << "transactResObject()" << endl;
     MIL << "is obsolete; use resolvePool() instead" << endl;
-    
+
     return true;
 }
 
@@ -1352,7 +1358,7 @@ bool
 Resolver::transactResKind( Resolvable::Kind kind )
 {
     MIL << "transactResKind(" << kind << ")" << endl;
-    MIL << "is obsolete; use resolvePool() instead" << endl;    
+    MIL << "is obsolete; use resolvePool() instead" << endl;
 
     return true;
 }
index 1885b43..50a5177 100644 (file)
@@ -31,6 +31,7 @@
 #include "zypp/base/PtrTypes.h"
 
 #include "zypp/ResPool.h"
+#include "zypp/base/SerialNumber.h"
 
 #include "zypp/solver/detail/Types.h"
 #include "zypp/solver/detail/ResolverQueue.h"
@@ -54,7 +55,7 @@ namespace zypp
     /////////////////////////////////////////////////////////////////////
     namespace detail
     { ///////////////////////////////////////////////////////////////////
-       
+
     ///////////////////////////////////////////////////////////////////
     //
     // CLASS NAME : ItemCapKind
@@ -77,7 +78,7 @@ namespace zypp
            { }
     };
     typedef std::multimap<PoolItem_Ref,ItemCapKind> ItemCapKindMap;
-    typedef std::list<ItemCapKind> ItemCapKindList;    
+    typedef std::list<ItemCapKind> ItemCapKindList;
 
 ///////////////////////////////////////////////////////////////////
 //
@@ -87,12 +88,13 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
   private:
     ResPool _pool;
+    SerialNumberWatcher _poolchanged;
 
     unsigned _timeout_seconds;
     unsigned _maxSolverPasses;
     bool _verifying;
     bool _testing;
-    
+
     // In order reducing solver time we are reducing the branches
     // by skipping resolvables which have worse architecture,edition
     // than a resolvable which provides the same cababilities.
@@ -106,8 +108,8 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     PoolItemList _items_to_establish;
     PoolItemList _items_to_remove;
     PoolItemList _items_to_verify;
-    PoolItemList _items_to_lockUninstalled;    
-  
+    PoolItemList _items_to_lockUninstalled;
+
     // pool of valid contexts which are "recycled" in order to fasten the solver
     ContextPool contextPool;
 
@@ -117,7 +119,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     // Additional information about the solverrun
     ItemCapKindMap _isInstalledBy;
     ItemCapKindMap _installs;
-    
+
     CapSet _extra_caps;
     CapSet _extra_conflicts;
 
@@ -125,17 +127,17 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
     // These conflict should be ignored of the concering item
     IgnoreMap _ignoreConflicts;
-    // These requires should be ignored of the concering item    
+    // These requires should be ignored of the concering item
     IgnoreMap _ignoreRequires;
-    // These obsoletes should be ignored of the concering item    
-    IgnoreMap _ignoreObsoletes;    
+    // These obsoletes should be ignored of the concering item
+    IgnoreMap _ignoreObsoletes;
     // Ignore architecture of the item
     PoolItemList _ignoreArchitecture;
     // Ignore the status "installed" of the item
     PoolItemList _ignoreInstalledItem;
     // Ignore the architecture of the item
-    PoolItemList _ignoreArchitectureItem;    
-    
+    PoolItemList _ignoreArchitectureItem;
+
 
     ResolverQueueList _pending_queues;
     ResolverQueueList _pruned_queues;
@@ -147,7 +149,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
     ResolverContext_Ptr _best_context;
     // Context of the last establishing call ( without any transaction )
-    ResolverContext_Ptr _establish_context;    
+    ResolverContext_Ptr _establish_context;
     bool _timed_out;
 
     std::set<Repository> _subscribed;
@@ -159,14 +161,14 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
                         // This behaviour is favourited by ZMD
     bool _upgradeMode;  // Resolver has been called with doUpgrade
     bool _preferHighestVersion; // Prefer the result with the newest version
-                                //if there are more solver results. 
+                                //if there are more solver results.
 
     // helpers
     bool doesObsoleteCapability (PoolItem_Ref candidate, const Capability & cap);
     bool doesObsoleteItem (PoolItem_Ref candidate, PoolItem_Ref installed);
 
     void collectResolverInfo (void);
-    
+
 
   public:
 
@@ -179,7 +181,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     friend std::ostream& operator<<(std::ostream& str, const Resolver & obj)
     { return obj.dumpOn (str); }
     void dumpTaskList(const PoolItemList &install, const PoolItemList &remove );
-    
+
     // ---------------------------------- accessors
 
     QueueItemList initialItems () const { return _initial_items; }
@@ -231,7 +233,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     void addIgnoreObsoletes (const PoolItem_Ref item,
                             const Capability & capability);
     void addIgnoreInstalledItem (const PoolItem_Ref item);
-    void addIgnoreArchitectureItem (const PoolItem_Ref item);    
+    void addIgnoreArchitectureItem (const PoolItem_Ref item);
 
     void setForceResolve (const bool force) { _forceResolve = force; }
     const bool forceResolve() { return _forceResolve; }
@@ -240,7 +242,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
     void setTryAllPossibilities (const bool tryAllPossibilities) { _tryAllPossibilities = tryAllPossibilities; }
     const bool tryAllPossibilities () { return _tryAllPossibilities; };
-    
+
     bool verifySystem (bool considerNewHardware = false);
     void establishState (ResolverContext_Ptr context = NULL);
     bool establishPool (void);
@@ -269,7 +271,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
 
     // Get more information about the solverrun
     // Which item will be installed by another item or triggers an item for
-    // installation    
+    // installation
     const ItemCapKindList isInstalledBy (const PoolItem_Ref item);
     const ItemCapKindList installs (const PoolItem_Ref item);