Imported Upstream version 15.19.0
[platform/upstream/libzypp.git] / zypp / sat / Pool.h
index dc3dade..b02d2b3 100644 (file)
@@ -19,6 +19,8 @@
 #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"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -43,7 +45,7 @@ namespace zypp
     {
       public:
         typedef detail::SolvableIterator SolvableIterator;
-       typedef zypp::detail::RepositoryIterator     RepositoryIterator;        
+       typedef zypp::detail::RepositoryIterator     RepositoryIterator;
         typedef detail::size_type        size_type;
 
       public:
@@ -65,6 +67,15 @@ namespace zypp
         /** 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;
+
+       /** Set rootdir (for file conflicts check) */
+       void rootDir( const Pathname & root_r );
+
       public:
         /** Whether \ref Pool contains repos. */
         bool reposEmpty() const;
@@ -78,30 +89,36 @@ namespace zypp
         /** Iterator behind the last \ref Repository. */
         RepositoryIterator reposEnd() const;
 
-        /** Return a \ref Repository named \c name_r.
+       /** 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.
          */
-        Repository reposInsert( const std::string & name_r );
+        Repository reposInsert( const std::string & alias_r );
 
-        /** Find a \ref Repository named \c name_r.
+        /** Find a \ref Repository named \c alias_r.
          * Returns \ref norepository if there is no such \ref Repository.
          */
-        Repository reposFind( const std::string & name_r ) const;
+        Repository reposFind( const std::string & alias_r ) const;
 
-        /** Remove a \ref Repository named \c name_r.
+        /** Remove a \ref Repository named \c alias_r.
          * \see \ref Repository::eraseFromPool
          */
-        void reposErase( const std::string & name_r )
-        { reposFind( name_r ).eraseFromPool(); }
+        void reposErase( const std::string & alias_r )
+        { reposFind( alias_r ).eraseFromPool(); }
 
       public:
-        /** Reserved system repository name \c @System. */
-        static const std::string & systemRepoName();
+        /** Reserved system repository alias \c @System. */
+        static const std::string & systemRepoAlias();
 
-        /** Return the system repository. */
-        Repository systemRepo()
-        { return reposInsert( systemRepoName() ); }
+        /** Return the system repository if it is on the pool. */
+        Repository findSystemRepo() const;
+
+        /** Return the system repository, create it if missing. */
+        Repository systemRepo();
 
       public:
         /** Load \ref Solvables from a solv-file into a \ref Repository named \c name_r.
@@ -118,6 +135,21 @@ namespace zypp
         Repository addRepoSolv( const Pathname & file_r, const RepoInfo & info_r );
 
       public:
+        /** Load \ref Solvables from a helix-file into a \ref Repository named \c name_r.
+         * Supports loading of gzip compressed files (.gz). In case of an exception
+         * the \ref Repository is removed from the \ref Pool.
+         * \throws Exception if loading the helix-file fails.
+         * \see \ref Repository::EraseFromPool
+        */
+        Repository addRepoHelix( const Pathname & file_r, const std::string & name_r );
+        /** \overload Using the files basename as \ref Repository name. */
+        Repository addRepoHelix( const Pathname & file_r );
+        /** \overload Using the \ref RepoInfo::alias \ref Repo name.
+         * Additionally stores the \ref RepoInfo. \See \ref Prool::setInfo.
+        */
+        Repository addRepoHelix( const Pathname & file_r, const RepoInfo & info_r );
+
+      public:
         /** Whether \ref Pool contains solvables. */
         bool solvablesEmpty() const;
 
@@ -130,15 +162,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() ); }
         //@}
 
@@ -150,6 +186,11 @@ namespace zypp
       public:
         /** \name Requested locales. */
         //@{
+       /** Set the default language for retrieving translated texts.
+        * Updated when calling \ref ZConfig::setTextLocale.
+        */
+       void setTextLocale( const Locale & locale_r );
+
         /** Set the requested locales.
          * Languages to be supported by the system, e.g. language specific
          * packages to be installed.
@@ -171,22 +212,55 @@ namespace zypp
         */
         const LocaleSet & getRequestedLocales() const;
 
-        /** Wheter this \ref Locale is in the set of requested locales. */
+        /** 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.
          */
         const LocaleSet & getAvailableLocales() const;
 
-        /** Wheter this \ref Locale is in the set of available locales. */
+        /** Whether this \ref Locale is in the set of available locales. */
         bool isAvailableLocale( const Locale & locale_r ) const;
         //@}
 
       public:
+       /** \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 */
+        //@{
+        /** Get ident list of all autoinstalled solvables. */
+       Queue autoInstalled() const;
+       /** Set ident list of all autoinstalled solvables. */
+       void setAutoInstalled( const Queue & autoInstalled_r );
+        //@}
+
+      public:
         /** Expert backdoor. */
-        ::_Pool * get() const;
+        detail::CPool * get() const;
       private:
         /** Default ctor */
         Pool() {}
@@ -204,6 +278,9 @@ namespace zypp
     inline bool operator!=( const Pool & lhs, const Pool & rhs )
     { return lhs.get() != rhs.get(); }
 
+    /** Create solv file content digest for zypper bash completion */
+    void updateSolvFileIndex( const Pathname & solvfile_r );
+
     /////////////////////////////////////////////////////////////////
   } // namespace sat
   ///////////////////////////////////////////////////////////////////