- Do not consider self provided requirements whan computing the
authorMichael Andres <ma@suse.de>
Thu, 2 Oct 2008 15:20:29 +0000 (15:20 +0000)
committerMichael Andres <ma@suse.de>
Thu, 2 Oct 2008 15:20:29 +0000 (15:20 +0000)
  installation order.

package/libzypp.changes
zypp/solver/detail/InstallOrder.cc

index 772a481..f3f7c70 100644 (file)
@@ -1,4 +1,11 @@
 -------------------------------------------------------------------
+Thu Oct  2 17:18:19 CEST 2008 - ma@suse.de
+
+- Do not consider self provided requirements whan computing the 
+  installation order.
+- revision 11231
+
+-------------------------------------------------------------------
 Wed Oct  1 16:07:36 CEST 2008 - ma@suse.de
 
 - Rephrase missleading error message. (bnc #431229)
index 85c2485..0ca4d49 100644 (file)
@@ -222,30 +222,38 @@ InstallOrder::rdfsvisit (const PoolItem item)
 
     for (CapList::const_iterator iter = requires.begin(); iter != requires.end(); ++iter)
     {
+        bool goBack = false;
        const Capability requirement = *iter;
         PoolItemList providers;
-        
+
        XXX << "check requirement " << requirement << " of " << ITEMNAME(item) << endl;
         SATResolver satResolver(_pool, sat::Pool::instance().get());
        PoolItemList tovisit;
-        sat::WhatProvides possibleProviders(requirement);        
+        sat::WhatProvides possibleProviders(requirement);
 
        // first, look in _installed
         for_( iter, possibleProviders.begin(), possibleProviders.end() ) {
-            PoolItem provider = ResPool::instance().find( *iter );        
-            if (provider != item                                       // resolvable could provide its own requirement
-                && (_installed.find( provider ) != _installed.end()))  // and is not installed
+            PoolItem provider = ResPool::instance().find( *iter );
+            if ( provider == item )
+            {
+              goBack = true;
+              break;
+            }
+            if (_installed.find( provider ) != _installed.end())       // and is not installed
             {
                 XXX << "tovisit " << ITEMNAME(provider) << endl;
                 providers.push_back (provider);
             }
         }
 
+        if ( goBack )
+          continue;
+
        // if not found in _installed, look in _toinstall
 
        if (providers.empty()) {
             for_( iter, possibleProviders.begin(), possibleProviders.end() ) {
-                PoolItem provider = ResPool::instance().find( *iter );        
+                PoolItem provider = ResPool::instance().find( *iter );
                 if ((provider.resolvable() != item.resolvable())               // resolvable could provide its own requirement
                     && (_toinstall.find( provider ) != _toinstall.end()))      // and is not to be installed
                 {