* Gives information about WHICH items require an already installed
authorStefan Schubert <schubi@suse.de>
Mon, 23 Jun 2008 13:29:01 +0000 (13:29 +0000)
committerStefan Schubert <schubi@suse.de>
Mon, 23 Jun 2008 13:29:01 +0000 (13:29 +0000)
item.
*
* \param item     Evaluate additional information for this
resolvable.
* \return A list of structures which contains:
*         item     Item which requires this capability.
*         cap      Capability which is needed
*         capKind  Kind of that capability (e.g.
Dep::REQUIRES,Dep::RECOMMENDS,... )
*
* Note: In order to have a result start a solver run before. Not
matter if it is valid or invalid.
*
*/
const solver::detail::ItemCapKindList installedSatisfied(const
PoolItem item);

zypp/Resolver.cc
zypp/Resolver.h
zypp/solver/detail/Resolver.cc
zypp/solver/detail/Resolver.h

index 45a2170..df58522 100644 (file)
@@ -138,7 +138,10 @@ namespace zypp
   const solver::detail::ItemCapKindList Resolver::installs (const PoolItem item)
   { return _pimpl->installs (item); }
   const solver::detail::ItemCapKindList Resolver::satifiedByInstalled (const PoolItem item)
-  { return _pimpl->satifiedByInstalled (item); }    
+  { return _pimpl->satifiedByInstalled (item); }
+  const solver::detail::ItemCapKindList Resolver::installedSatisfied (const PoolItem item)
+  { return _pimpl->installedSatisfied (item); }    
+    
 
 
   /////////////////////////////////////////////////////////////////
index 8599c6b..4c93287 100644 (file)
@@ -285,6 +285,22 @@ namespace zypp
     const solver::detail::ItemCapKindList satifiedByInstalled(const PoolItem item);
       
 
+    /**
+     * Gives information about WHICH items require an already installed item.
+     *
+     * \param item     Evaluate additional information for this resolvable.
+     * \return A list of structures which contains:
+     *         item     Item which requires this capability.
+     *         cap      Capability which is needed
+     *         capKind  Kind of that capability (e.g.  Dep::REQUIRES,Dep::RECOMMENDS,... )
+     *
+     * Note: In order to have a result start a solver run before. Not matter if it is valid or invalid.
+     *
+     */      
+    const solver::detail::ItemCapKindList installedSatisfied(const PoolItem item);
+      
+
+      
   private:
     solver::detail::Resolver_Ptr _pimpl;
   };
index 6511bb1..1e62d53 100644 (file)
@@ -106,7 +106,8 @@ Resolver::reset (bool keepExtras )
 
     _isInstalledBy.clear();
     _installs.clear();
-    _satifiedByInstalled.clear();    
+    _satifiedByInstalled.clear();
+    _installedSatisfied.clear();
 }
 
 void
@@ -305,7 +306,8 @@ Resolver::solverInit()
        // Resetting additional solver information
        _isInstalledBy.clear();
        _installs.clear();
-       _satifiedByInstalled.clear();                   
+       _satifiedByInstalled.clear();
+       _installedSatisfied.clear();
 }
 
 bool
@@ -493,7 +495,10 @@ Resolver::collectResolverInfo(void)
 
                    if (provider.status().staysInstalled()) { // Is already satisfied by an item which is installed
                        ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::REQUIRES, false );
-                       _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));                      
+                       _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));
+
+                       ItemCapKind installedSatisfied( *instIter, *capIt, Dep::REQUIRES, false ); 
+                       _installedSatisfied.insert (make_pair( provider, installedSatisfied));                      
                    }
                }
            }
@@ -535,7 +540,10 @@ Resolver::collectResolverInfo(void)
 
                        if (provider.status().staysInstalled()) { // Is already satisfied by an item which is installed
                            ItemCapKind capKindisInstalledBy( provider, *capIt, Dep::RECOMMENDS, false );
-                           _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));                  
+                           _satifiedByInstalled.insert (make_pair( *instIter, capKindisInstalledBy));
+
+                           ItemCapKind installedSatisfied( *instIter, *capIt, Dep::RECOMMENDS, false ); 
+                           _installedSatisfied.insert (make_pair( provider, installedSatisfied));                          
                        }                   
                    }
                }
@@ -576,6 +584,9 @@ Resolver::collectResolverInfo(void)
                        if (instIter->status().staysInstalled()) { // Is already satisfied by an item which is installed
                            ItemCapKind capKindisInstalledBy( *instIter, *capIt, Dep::SUPPLEMENTS, !alreadySetForInstallation );
                            _satifiedByInstalled.insert (make_pair( provider, capKindisInstalledBy));
+
+                           ItemCapKind installedSatisfied( provider, *capIt, Dep::SUPPLEMENTS, false ); 
+                           _installedSatisfied.insert (make_pair( *instIter, installedSatisfied));                         
                        }
                    }
                }
@@ -639,8 +650,23 @@ const ItemCapKindList Resolver::satifiedByInstalled (const PoolItem item) {
     return ret;
 }
 
+const ItemCapKindList Resolver::installedSatisfied (const PoolItem item) {
+    ItemCapKindList ret;
+    collectResolverInfo();
 
-
+    for (ItemCapKindMap::const_iterator iter = _installedSatisfied.find(item); iter != _installedSatisfied.end();) {
+       ItemCapKind info = iter->second;
+       PoolItem iterItem = iter->first;
+       if (iterItem == item) {
+           ret.push_back(info);
+           iter++;
+       } else {
+           // exit
+           iter = _installedSatisfied.end();
+       }
+    }
+    return ret;
+}
 
 
 ///////////////////////////////////////////////////////////////////
index b6edbd0..607253a 100644 (file)
@@ -129,7 +129,8 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     // Additional information about the solverrun
     ItemCapKindMap _isInstalledBy;
     ItemCapKindMap _installs;
-    ItemCapKindMap _satifiedByInstalled;    
+    ItemCapKindMap _satifiedByInstalled;
+    ItemCapKindMap _installedSatisfied;
 
 
     // Ignore Obsoletes
@@ -240,7 +241,7 @@ class Resolver : public base::ReferenceCounted, private base::NonCopyable {
     const ItemCapKindList isInstalledBy (const PoolItem item);
     const ItemCapKindList installs (const PoolItem item);
     const ItemCapKindList satifiedByInstalled (const PoolItem item);    
-    
+    const ItemCapKindList installedSatisfied (const PoolItem item);
     
 };