Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / target / TargetImpl.h
index e0cae34..0b6c015 100644 (file)
 #define ZYPP_TARGET_TARGETIMPL_H
 
 #include <iosfwd>
-#include <list>
 #include <set>
 
 #include "zypp/base/ReferenceCounted.h"
 #include "zypp/base/NonCopyable.h"
-#include "zypp/base/DefaultFalseBool.h"
 #include "zypp/base/PtrTypes.h"
-#include "zypp/ResStore.h"
 #include "zypp/PoolItem.h"
 #include "zypp/ZYppCommit.h"
 
 #include "zypp/media/MediaAccess.h"
 #include "zypp/Target.h"
 #include "zypp/target/rpm/RpmDb.h"
-#include "zypp/target/store/PersistentStorage.h"
 #include "zypp/target/TargetException.h"
+#include "zypp/target/RequestedLocalesFile.h"
+#include "zypp/target/SolvIdentFile.h"
+#include "zypp/target/HardLocksFile.h"
+#include "zypp/ManagedFile.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -39,6 +39,7 @@ namespace zypp
   { /////////////////////////////////////////////////////////////////
 
     DEFINE_PTR_TYPE(TargetImpl);
+    class CommitPackageCache;
 
     ///////////////////////////////////////////////////////////////////
     //
@@ -62,55 +63,78 @@ namespace zypp
 
     public:
       /** Ctor. */
-      TargetImpl(const Pathname & root_r = "/");
+      TargetImpl(const Pathname & root_r = "/", bool doRebuild_r = false );
       /** Dtor. */
       virtual ~TargetImpl();
 
       /** Null implementation */
       static TargetImpl_Ptr nullimpl();
 
-      void load();
-
-    public:
+      /**
+       * generates the unique anonymous id which is called
+       * when creating the target
+       */
+      void createAnonymousId() const;
 
       /**
-       * load resolvables of certain kind in the internal store
-       * and return a iterator
-       * successive calls will be faster as resolvables are cached-
+       * generates a cache of the last product flavor
        */
-      ResStore::resfilter_const_iterator byKindBegin( const ResObject::Kind & kind_r  ) const;
-      ResStore::resfilter_const_iterator byKindEnd( const ResObject::Kind & kind_r ) const;
+      void createLastDistributionFlavorCache() const;
+
+      /** \name Solv file handling.
+       * If target solv file is outdated, but (non-root-)user has
+       * no permission to  create it at the default location, we
+       * use a temporary one.
+       */
+      //@{
+    private:
+      /** The systems default solv file location. */
+      Pathname defaultSolvfilesPath() const;
+
+      /** The solv file location actually in use (default or temp). */
+      Pathname solvfilesPath() const
+      { return solvfilesPathIsTemp() ? _tmpSolvfilesPath : defaultSolvfilesPath(); }
+
+      /** Whether we're using a temp. solvfile. */
+      bool solvfilesPathIsTemp() const
+      { return ! _tmpSolvfilesPath.empty(); }
+
+      Pathname _tmpSolvfilesPath;
+
+    public:
+      void load( bool force = true );
+
+      void unload();
+
+      void reload();
+
+      void clearCache();
+
+      bool buildCache();
+      //@}
+
+    public:
 
       /** The root set for this target */
-      Pathname root() const;
+      Pathname root() const
+      { return _root; }
 
-      /** Commit changes in the pool */
-      ZYppCommitResult commit( ResPool pool_r, const ZYppCommitPolicy & policy_r );
+      /** The directory to store things. */
+      Pathname home() const
+      { return home( _root ); }
 
-      ZYPP_DEPRECATED int commit( ResPool pool_r, unsigned int medianr,
-                                  PoolItemList & errors_r,
-                                  PoolItemList & remaining_r,
-                                  PoolItemList & srcremaining_r,
-                                  bool dry_run = false )
-      {
-        ZYppCommitPolicy policy;
-        policy.restrictToMedia( medianr ).dryRun( dry_run );
-        ZYppCommitResult res = commit( pool_r, policy );
-        errors_r.swap( res._errors );
-        remaining_r.swap( res._remaining );
-        srcremaining_r.swap( res._srcremaining );
-        return res._result;
-      }
+      static Pathname home( const Pathname & root_r )
+      { return root_r / "/var/lib/zypp"; }
 
-      /** Commit ordered changes
-       *  @param pool_r only needed for #160792
-       *  @return uncommitted ones (due to error)
-       */
-      PoolItemList commit( const PoolItemList & items_r, const ZYppCommitPolicy & policy_r, const ResPool & pool_r );
+      /** Commit changes in the pool */
+      ZYppCommitResult commit( ResPool pool_r, const ZYppCommitPolicy & policy_r );
 
       /** Install a source package on the Target. */
       void installSrcPackage( const SrcPackage_constPtr & srcPackage_r );
 
+      /** Provides a source package on the Target. */
+      ManagedFile provideSrcPackage( const SrcPackage_constPtr & srcPackage_r );
+
       /** Overload to realize stream output. */
       virtual std::ostream & dumpOn( std::ostream & str ) const
       {
@@ -124,32 +148,80 @@ namespace zypp
       Needed to evaluate split provides during Resolver::Upgrade() */
       bool providesFile (const std::string & path_str, const std::string & name_str) const;
 
-      /** Return the resolvable which provides path_str (rpm -qf)
-      return NULL if no resolvable provides this file  */
-      ResObject::constPtr whoOwnsFile (const std::string & path_str) const;
-
-      /** Set the log file for target */
-      bool setInstallationLogfile(const Pathname & path_r);
+      /** Return name of package owning \a path_str
+       * or empty string if no installed package owns \a path_str. */
+      std::string whoOwnsFile (const std::string & path_str) const
+      { return _rpm.whoOwnsFile (path_str); }
 
       /** return the last modification date of the target */
       Date timestamp() const;
 
-     /**
-      * reload the target in future calls if
-      * needed.
-      * note the loading can actually be delayed, but
-      * the next call to resolvables must reflect the
-      * status of the system.
-     */
-     void reset();
+      /** \copydoc Target::baseProduct() */
+      Product::constPtr baseProduct() const;
+
+      /** \copydoc Target::requestedLocales() */
+      LocaleSet requestedLocales() const
+      { return _requestedLocalesFile.locales(); }
+      /** \overload */
+      static LocaleSet requestedLocales( const Pathname & root_r );
+
+      /** \copydoc Target::targetDistribution() */
+      std::string targetDistribution() const;
+      /** \overload */
+      static std::string targetDistribution( const Pathname & root_r );
+
+      /** \copydoc Target::targetDistributionRelease()*/
+      std::string targetDistributionRelease() const;
+      /** \overload */
+      static std::string targetDistributionRelease( const Pathname & root_r );
+
+      /** \copydoc Target::targetDistributionFlavor()*/
+      std::string targetDistributionFlavor() const;
+      /** \overload */
+      static std::string targetDistributionFlavor( const Pathname & root_r );
+
+      /** \copydoc Target::distributionVersion()*/
+      Target::DistributionLabel distributionLabel() const;
+      /** \overload */
+      static Target::DistributionLabel distributionLabel( const Pathname & root_r );
+
+      /** \copydoc Target::distributionVersion()*/
+      std::string distributionVersion() const;
+      /** \overload */
+      static std::string distributionVersion( const Pathname & root_r );
+
+      /** \copydoc Target::distributionFlavor() */
+      std::string distributionFlavor() const;
+      /** \overload */
+      static std::string distributionFlavor( const Pathname & root_r );
+
+      /** \copydoc Target::anonymousUniqueId() */
+      std::string anonymousUniqueId() const;
+      /** \overload */
+      static std::string anonymousUniqueId( const Pathname & root_r );
 
+    private:
+      /** Commit ordered changes (internal helper) */
+      void commit( const ZYppCommitPolicy & policy_r,
+                  CommitPackageCache & packageCache_r,
+                  ZYppCommitResult & result_r );
+
+      /** Commit helper checking for file conflicts after download. */
+      void commitFindFileConflicts( const ZYppCommitPolicy & policy_r, ZYppCommitResult & result_r );
     protected:
-      /** All resolvables provided by the target. */
-      ResStore _store;
       /** Path to the target */
       Pathname _root;
       /** RPM database */
       rpm::RpmDb _rpm;
+      /** Requested Locales database */
+      RequestedLocalesFile _requestedLocalesFile;
+      /** user/auto installed database */
+      SolvIdentFile _autoInstalledFile;
+      /** Hard-Locks database */
+      HardLocksFile _hardLocksFile;
+      /** Cache distributionVersion */
+      mutable std::string _distributionVersion;
+
     private:
       /** Null implementation */
       static TargetImpl_Ptr _nullimpl;