Hide away PackageProvider implementation details
authorMichael Andres <ma@suse.de>
Tue, 24 Jul 2012 13:26:28 +0000 (15:26 +0200)
committerMichael Andres <ma@suse.de>
Wed, 1 Aug 2012 13:27:42 +0000 (15:27 +0200)
VERSION.cmake
zypp/repo/PackageProvider.cc
zypp/repo/PackageProvider.h

index 5f87f4c..5d1dbe4 100644 (file)
@@ -60,8 +60,8 @@
 #
 SET(LIBZYPP_MAJOR "11")
 SET(LIBZYPP_COMPATMINOR "6")
-SET(LIBZYPP_MINOR "6")
-SET(LIBZYPP_PATCH "3")
+SET(LIBZYPP_MINOR "7")
+SET(LIBZYPP_PATCH "0")
 #
 # LAST RELEASED: 11.6.3 (6)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
index bac24d1..6eb4628 100644 (file)
@@ -15,8 +15,8 @@
 #include "zypp/base/Logger.h"
 #include "zypp/base/Gettext.h"
 #include "zypp/base/UserRequestException.h"
+#include "zypp/base/NonCopyable.h"
 #include "zypp/repo/PackageProvider.h"
-#include "zypp/repo/RepoProvideFile.h"
 #include "zypp/repo/Applydeltarpm.h"
 #include "zypp/repo/PackageDelta.h"
 
@@ -28,11 +28,10 @@ using std::endl;
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
-{ /////////////////////////////////////////////////////////////////
+{
   ///////////////////////////////////////////////////////////////////
   namespace repo
-  { /////////////////////////////////////////////////////////////////
-
+  {
     ///////////////////////////////////////////////////////////////////
     //
     // CLASS NAME : PackageProviderPolicy
@@ -49,29 +48,56 @@ namespace zypp
     }
 
     ///////////////////////////////////////////////////////////////////
-    //
-    // CLASS NAME : PackageProvider
-    //
+    /// \class PackageProvider::Impl
+    /// \brief PackageProvider implementation.
     ///////////////////////////////////////////////////////////////////
-
+    class PackageProvider::Impl : private base::NonCopyable
+    {
+      typedef shared_ptr<void>                                     ScopedGuard;
+      typedef callback::SendReport<repo::DownloadResolvableReport> Report;
+
+      typedef packagedelta::DeltaRpm                         DeltaRpm;
+
+    public:
+      /** Ctor taking the Package to provide. */
+      Impl( RepoMediaAccess &access,
+           const Package::constPtr & package,
+           const DeltaCandidates & deltas,
+           const PackageProviderPolicy & policy_r );
+
+    public:
+      /** Provide the package.
+       * \throws Exception.
+      */
+      ManagedFile providePackage() const;
+
+    private:
+      ManagedFile doProvidePackage() const;
+      ManagedFile tryDelta( const DeltaRpm & delta_r ) const;
+
+    private:
+      ScopedGuard newReport() const;
+      Report & report() const;
+      bool progressDeltaDownload( int value ) const;
+      void progressDeltaApply( int value ) const;
+      bool progressPackageDownload( int value ) const;
+      bool failOnChecksumError() const;
+      bool queryInstalled( const Edition & ed_r = Edition() ) const;
+
+    private:
+      PackageProviderPolicy      _policy;
+      Package::constPtr          _package;
+      mutable bool               _retry;
+      mutable shared_ptr<Report> _report;
+      DeltaCandidates            _deltas;
+      RepoMediaAccess &          _access;
+    };
     ///////////////////////////////////////////////////////////////////
-    namespace
-    { /////////////////////////////////////////////////////////////////
-
-      inline std::string defRpmFileName( const Package::constPtr & package )
-      {
-        std::ostringstream ret;
-        ret << package->name() << '-' << package->edition() << '.' << package->arch() << ".rpm";
-        return ret.str();
-      }
 
-      /////////////////////////////////////////////////////////////////
-    } // namespace source
-    ///////////////////////////////////////////////////////////////////
-    PackageProvider::PackageProvider(  RepoMediaAccess &access,
-                                      const Package::constPtr & package,
-                                      const DeltaCandidates & deltas,
-                                      const PackageProviderPolicy & policy_r )
+    PackageProvider::Impl::Impl(  RepoMediaAccess &access,
+                                 const Package::constPtr & package,
+                                 const DeltaCandidates & deltas,
+                                 const PackageProviderPolicy & policy_r )
     : _policy( policy_r )
     , _package( package )
     , _retry(false)
@@ -79,10 +105,7 @@ namespace zypp
     , _access(access)
     {}
 
-    PackageProvider::~PackageProvider()
-    {}
-
-    ManagedFile PackageProvider::providePackage() const
+    ManagedFile PackageProvider::Impl::providePackage() const
     {
       Url url;
       RepoInfo info = _package->repoInfo();
@@ -171,7 +194,7 @@ namespace zypp
       return ret;
     }
 
-    ManagedFile PackageProvider::doProvidePackage() const
+    ManagedFile PackageProvider::Impl::doProvidePackage() const
     {
       Url url;
       RepoInfo info = _package->repoInfo();
@@ -212,12 +235,12 @@ namespace zypp
       OnMediaLocation loc = _package->location();
 
       ProvideFilePolicy policy;
-      policy.progressCB( bind( &PackageProvider::progressPackageDownload, this, _1 ) );
-      policy.failOnChecksumErrorCB( bind( &PackageProvider::failOnChecksumError, this ) );
+      policy.progressCB( bind( &PackageProvider::Impl::progressPackageDownload, this, _1 ) );
+      policy.failOnChecksumErrorCB( bind( &PackageProvider::Impl::failOnChecksumError, this ) );
       return _access.provideFile( _package->repoInfo(), loc, policy );
     }
 
-    ManagedFile PackageProvider::tryDelta( const DeltaRpm & delta_r ) const
+    ManagedFile PackageProvider::Impl::tryDelta( const DeltaRpm & delta_r ) const
     {
       if ( delta_r.baseversion().edition() != Edition::noedition
            && ! queryInstalled( delta_r.baseversion().edition() ) )
@@ -232,7 +255,7 @@ namespace zypp
       try
         {
           ProvideFilePolicy policy;
-          policy.progressCB( bind( &PackageProvider::progressDeltaDownload, this, _1 ) );
+          policy.progressCB( bind( &PackageProvider::Impl::progressDeltaDownload, this, _1 ) );
           delta = _access.provideFile( delta_r.repository().info(), delta_r.location(), policy );
         }
       catch ( const Exception & excpt )
@@ -253,7 +276,7 @@ namespace zypp
       Pathname destination( _package->repoInfo().packagesPath() / _package->location().filename() );
 
       if ( ! applydeltarpm::provide( delta, destination,
-                                     bind( &PackageProvider::progressDeltaApply, this, _1 ) ) )
+                                     bind( &PackageProvider::Impl::progressDeltaApply, this, _1 ) ) )
         {
           report()->problemDeltaApply( _("applydeltarpm failed.") );
           return ManagedFile();
@@ -263,7 +286,7 @@ namespace zypp
       return ManagedFile( destination, filesystem::unlink );
     }
 
-    PackageProvider::ScopedGuard PackageProvider::newReport() const
+    PackageProvider::Impl::ScopedGuard PackageProvider::Impl::newReport() const
     {
       _report.reset( new Report );
       return shared_ptr<void>( static_cast<void*>(0),
@@ -273,19 +296,19 @@ namespace zypp
                                      ref(_report) ) );
     }
 
-    PackageProvider::Report & PackageProvider::report() const
+    PackageProvider::Impl::Report & PackageProvider::Impl::report() const
     { return *_report; }
 
-    bool PackageProvider::progressDeltaDownload( int value ) const
+    bool PackageProvider::Impl::progressDeltaDownload( int value ) const
     { return report()->progressDeltaDownload( value ); }
 
-    void PackageProvider::progressDeltaApply( int value ) const
+    void PackageProvider::Impl::progressDeltaApply( int value ) const
     { return report()->progressDeltaApply( value ); }
 
-    bool PackageProvider::progressPackageDownload( int value ) const
+    bool PackageProvider::Impl::progressPackageDownload( int value ) const
     { return report()->progress( value, _package ); }
 
-    bool PackageProvider::failOnChecksumError() const
+    bool PackageProvider::Impl::failOnChecksumError() const
     {
       std::string package_str = _package->name() + "-" + _package->edition().asString();
 
@@ -307,13 +330,28 @@ namespace zypp
       return true; // anyway a failure
     }
 
-    bool PackageProvider::queryInstalled( const Edition & ed_r ) const
+    bool PackageProvider::Impl::queryInstalled( const Edition & ed_r ) const
     { return _policy.queryInstalled( _package->name(), ed_r, _package->arch() ); }
 
+    ///////////////////////////////////////////////////////////////////
+    // class PackageProvider
+    ///////////////////////////////////////////////////////////////////
+
+    PackageProvider::PackageProvider( RepoMediaAccess & access,
+                                     const Package::constPtr & package,
+                                     const DeltaCandidates & deltas,
+                                     const PackageProviderPolicy & policy_r )
+    : _pimpl( new Impl( access, package, deltas, policy_r ) )
+    {}
+
+    PackageProvider::~PackageProvider()
+    {}
+
+    ManagedFile PackageProvider::providePackage() const
+    { return _pimpl->providePackage(); }
+
 
-    /////////////////////////////////////////////////////////////////
   } // namespace repo
   ///////////////////////////////////////////////////////////////////
-  /////////////////////////////////////////////////////////////////
 } // namespace zypp
 ///////////////////////////////////////////////////////////////////
index 2931e2e..7dae714 100644 (file)
 
 #include <iosfwd>
 
-#include "zypp/base/NonCopyable.h"
-
 #include "zypp/ZYppCallbacks.h"
 #include "zypp/Package.h"
 #include "zypp/ManagedFile.h"
-#include "zypp/repo/RepoProvideFile.h"
 #include "zypp/repo/DeltaCandidates.h"
+#include "zypp/repo/RepoProvideFile.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
-{ /////////////////////////////////////////////////////////////////
+{
   ///////////////////////////////////////////////////////////////////
   namespace repo
-  { /////////////////////////////////////////////////////////////////
+  {
 
     ///////////////////////////////////////////////////////////////////
-    //
-    // CLASS NAME : PackageProviderPolicy
-    //
-    /** */
+    /// \class PackageProviderPolicy
+    /// \brief Policies and options for \ref PackageProvider
+    ///////////////////////////////////////////////////////////////////
     class PackageProviderPolicy
     {
     public:
@@ -55,22 +52,16 @@ namespace zypp
     ///////////////////////////////////////////////////////////////////
 
     ///////////////////////////////////////////////////////////////////
-    //
-    // CLASS NAME : PackageProvider
-    //
-    /** Provide a package from a Source.
-     * Use available deltarpm if apropriate.
-    */
-    class PackageProvider : private base::NonCopyable
+    /// \class PackageProvider
+    /// \brief Provide a package from a Repo.
+    ///
+    /// Use available deltarpm if apropriate.
+    ///////////////////////////////////////////////////////////////////
+    class PackageProvider
     {
-      typedef shared_ptr<void>                                       ScopedGuard;
-      typedef callback::SendReport<repo::DownloadResolvableReport> Report;
-
-      typedef packagedelta::DeltaRpm                         DeltaRpm;
-
     public:
       /** Ctor taking the Package to provide. */
-      PackageProvider( RepoMediaAccess &access,
+      PackageProvider( RepoMediaAccess & access,
                        const Package::constPtr & package,
                        const DeltaCandidates & deltas,
                        const PackageProviderPolicy & policy_r = PackageProviderPolicy() );
@@ -82,33 +73,15 @@ namespace zypp
       */
       ManagedFile providePackage() const;
 
+    public:
+      class Impl;              ///< Implementation class.
     private:
-      ManagedFile doProvidePackage() const;
-      ManagedFile tryDelta( const DeltaRpm & delta_r ) const;
-
-    private:
-      ScopedGuard newReport() const;
-      Report & report() const;
-      bool progressDeltaDownload( int value ) const;
-      void progressDeltaApply( int value ) const;
-      bool progressPackageDownload( int value ) const;
-      bool failOnChecksumError() const;
-      bool queryInstalled( const Edition & ed_r = Edition() ) const;
-
-    private:
-      PackageProviderPolicy      _policy;
-      Package::constPtr          _package;
-      mutable bool               _retry;
-      mutable shared_ptr<Report> _report;
-      DeltaCandidates            _deltas;
-      RepoMediaAccess &          _access;
+      RW_pointer<Impl> _pimpl; ///< Pointer to implementation.
     };
     ///////////////////////////////////////////////////////////////////
 
-    /////////////////////////////////////////////////////////////////
   } // namespace repo
   ///////////////////////////////////////////////////////////////////
-  /////////////////////////////////////////////////////////////////
 } // namespace zypp
 ///////////////////////////////////////////////////////////////////
 #endif // ZYPP_SOURCE_PACKAGEPROVIDER_H