Imported Upstream version 17.16.0
[platform/upstream/libzypp.git] / zypp / sat / Pool.h
index 229fd80..ee3e72b 100644 (file)
@@ -19,6 +19,7 @@
 #include "zypp/sat/detail/PoolMember.h"
 #include "zypp/Repository.h"
 #include "zypp/sat/WhatProvides.h"
+#include "zypp/sat/SolvableSet.h"
 #include "zypp/sat/Queue.h"
 
 ///////////////////////////////////////////////////////////////////
@@ -32,6 +33,8 @@ namespace zypp
   namespace sat
   { /////////////////////////////////////////////////////////////////
 
+    class SolvableSpec;
+
     ///////////////////////////////////////////////////////////////////
     //
     // CLASS NAME : Pool
@@ -63,12 +66,12 @@ namespace zypp
         /** Housekeeping data serial number. */
         const SerialNumber & serial() const;
 
+        /** Serial number changing whenever resusePoolIDs==true was used. ResPool must also invalidate it's PoolItems! */
+        const SerialNumber & serialIDs() const;
+
         /** Update housekeeping data if necessary (e.g. whatprovides). */
         void prepare() const;
 
-       /** \ref prepare plus some expensive checks done before solving only. */
-       void prepareForSolving() const;
-
        /** Get rootdir (for file conflicts check) */
        Pathname rootDir() const;
 
@@ -88,6 +91,10 @@ namespace zypp
         /** Iterator behind the last \ref Repository. */
         RepositoryIterator reposEnd() const;
 
+       /** Iterate the repositories. */
+       Iterable<RepositoryIterator> repos() const
+       { return makeIterable( reposBegin(), reposEnd() ); }
+
         /** Return a \ref Repository named \c alias_r.
          * It a such a \ref Repository does not already exist
          * a new empty \ref Repository is created.
@@ -95,7 +102,7 @@ namespace zypp
         Repository reposInsert( const std::string & alias_r );
 
         /** Find a \ref Repository named \c alias_r.
-         * Returns \ref norepository if there is no such \ref Repository.
+         * Returns \ref noRepository if there is no such \ref Repository.
          */
         Repository reposFind( const std::string & alias_r ) const;
 
@@ -105,6 +112,13 @@ namespace zypp
         void reposErase( const std::string & alias_r )
         { reposFind( alias_r ).eraseFromPool(); }
 
+        /** Remove all repos from the pool.
+        * This also shrinks a pool which may have become large
+        * after having added and removed repos lots of times.
+        */
+        void reposEraseAll()
+       { while ( ! reposEmpty() ) reposErase( reposBegin()->alias() ); }
+
       public:
         /** Reserved system repository alias \c @System. */
         static const std::string & systemRepoAlias();
@@ -157,15 +171,19 @@ namespace zypp
         /** Iterator behind the last \ref Solvable. */
         SolvableIterator solvablesEnd() const;
 
+       /** Iterate the solvables. */
+       Iterable<SolvableIterator> solvables() const
+       { return makeIterable( solvablesBegin(), solvablesEnd() ); }
+
       public:
-        /** \name Iterate all Solvables matching a \c _Filter. */
+        /** \name Iterate all Solvables matching a \c TFilter. */
         //@{
-        template<class _Filter>
-        filter_iterator<_Filter,SolvableIterator> filterBegin( const _Filter & filter_r ) const
+        template<class TFilter>
+        filter_iterator<TFilter,SolvableIterator> filterBegin( const TFilter & filter_r ) const
         { return make_filter_iterator( filter_r, solvablesBegin(), solvablesEnd() ); }
 
-        template<class _Filter>
-        filter_iterator<_Filter,SolvableIterator> filterEnd( const _Filter & filter_r ) const
+        template<class TFilter>
+        filter_iterator<TFilter,SolvableIterator> filterEnd( const TFilter & filter_r ) const
         { return make_filter_iterator( filter_r, solvablesEnd(), solvablesEnd() ); }
         //@}
 
@@ -174,6 +192,10 @@ namespace zypp
         WhatProvides whatProvides( Capability cap_r ) const
         { return WhatProvides( cap_r ); }
 
+        Queue whatMatchesDep( const SolvAttr &attr, const Capability &cap ) const;
+        Queue whatMatchesSolvable ( const SolvAttr &attr, const Solvable &solv ) const;
+        Queue whatContainsDep ( const SolvAttr &attr, const Capability &cap ) const;
+
       public:
         /** \name Requested locales. */
         //@{
@@ -206,6 +228,17 @@ namespace zypp
         /** Whether this \ref Locale is in the set of requested locales. */
         bool isRequestedLocale( const Locale & locale_r ) const;
 
+
+       /** Start tracking changes based on this \a locales_r. */
+       void initRequestedLocales( const LocaleSet & locales_r );
+
+       /** Added since last initRequestedLocales. */
+       const LocaleSet & getAddedRequestedLocales() const;
+
+       /** Removed since last initRequestedLocales.*/
+       const LocaleSet & getRemovedRequestedLocales() const;
+
+
         /** Get the set of available locales.
          * This is computed from the package data so it actually
          * represents all locales packages claim to support.
@@ -217,20 +250,17 @@ namespace zypp
         //@}
 
       public:
-        /** \name Multiversion install.
-         * Ident list of all packages that can be installed in different version
-         * at the same time. (\see \ref ZConfig::multiversionSpec)
-         */
-        //@{
-        typedef IdStringSet::const_iterator MultiversionIterator;
-
-        bool multiversionEmpty() const;
-        size_t multiversionSize() const;
-        MultiversionIterator multiversionBegin() const;
-        MultiversionIterator multiversionEnd() const;
-
-        bool isMultiversion( IdString ident_r ) const;
-        //@}
+       /** \name Multiversion install.
+        * Whether the pool contains packages which are multiversion installable.
+        * \see \ref Solvable::multiversionInstall
+        * \see \ref ZConfig::multiversionSpec
+        */
+       //@{
+       typedef SolvableSet MultiversionList;
+       const MultiversionList & multiversion() const;
+       /** \deprecated Legacy, use multiversion().empty() instead. */
+       ZYPP_DEPRECATED bool multiversionEmpty() const { return multiversion().empty(); }
+       //@}
 
       public:
         /** \name Autoinstalled */
@@ -242,8 +272,15 @@ namespace zypp
         //@}
 
       public:
+        /** \name Needreboot */
+        //@{
+        /** Solvables which should trigger the reboot-needed hint if installed/updated. */
+        void setNeedrebootSpec( sat::SolvableSpec needrebootSpec_r );
+        //@}
+
+      public:
         /** Expert backdoor. */
-        ::_Pool * get() const;
+        detail::CPool * get() const;
       private:
         /** Default ctor */
         Pool() {}