- completed integration of the backend in the target.
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Wed, 8 Feb 2006 17:47:09 +0000 (17:47 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Wed, 8 Feb 2006 17:47:09 +0000 (17:47 +0000)
Its is disabled to avoid breaking stanos and Klaus tests, so
to enable it, comment

//#define STORAGE_DISABLED

and it will be enabled, I dont know how to test, thats why it is
disabled by default.

zypp/target/TargetImpl.cc
zypp/target/TargetImpl.h
zypp/target/store/Backend.h
zypp/target/store/PersistentStorage.cc
zypp/target/store/PersistentStorage.h
zypp/target/store/XMLFilesBackend.cc
zypp/target/store/XMLFilesBackend.h

index c512957..83a0d38 100644 (file)
@@ -59,6 +59,9 @@ namespace zypp
     : _root(root_r)
     {
       _rpm.initDatabase(_root);
+#ifndef STORAGE_DISABLED
+      _storage.init(root_r);
+#endif
       MIL << "Initialized target on " << _root << endl;
     }
 
@@ -84,7 +87,18 @@ namespace zypp
       {
         _store.insert(*it);
       }
-      // TODO objects from the XML store
+
+#ifndef STORAGE_DISABLED
+      // resolvables stored in the zypp storage database
+      std::list<ResObject::Ptr> resolvables = _storage.storedObjects();
+      for (std::list<ResObject::Ptr>::iterator it = resolvables.begin();
+           it != resolvables.end();
+           it++)
+      {
+        _store.insert(*it);
+      }
+#endif
+
       return _store;
     }
 
@@ -119,52 +133,53 @@ namespace zypp
       getResolvablesToInsDel( pool_r, to_uninstall, to_install, to_srcinstall );
 
       if ( medianr ) {
-       MIL << "Restrict to media number " << medianr << endl;
+        MIL << "Restrict to media number " << medianr << endl;
       }
 
       commit (to_uninstall);
 
       if (medianr == 0) {                      // commit all
-       remaining_r = commit( to_install );
-       srcremaining_r = commit( to_srcinstall );
+        remaining_r = commit( to_install );
+        srcremaining_r = commit( to_srcinstall );
       }
-      else {
-       PoolItemList current_install;
-       PoolItemList current_srcinstall;
-
-       for (PoolItemList::iterator it = to_install.begin(); it != to_install.end(); ++it) {
-           Resolvable::constPtr res( it->resolvable() );
-           Package::constPtr pkg( asKind<Package>(res) );
-           if (pkg
-               && medianr != pkg->mediaId())                                                           // check medianr for packages only
-           {
-               MIL << "Package " << *pkg << ", wrong media " << pkg->mediaId() << endl;
-               remaining_r.push_back( *it );
-           }
-           else {
-               current_install.push_back( *it );
-           }
-       }
-       PoolItemList bad = commit (current_install);
-       remaining_r.insert(remaining_r.end(), bad.begin(), bad.end());
-
-       for (PoolItemList::iterator it = to_srcinstall.begin(); it != to_srcinstall.end(); ++it) {
-           Resolvable::constPtr res( it->resolvable() );
-           Package::constPtr pkg( asKind<Package>(res) );
-           if (pkg
-               && medianr != pkg->mediaId())                                                           // check medianr for packages only
-           {
-               MIL << "Package " << *pkg << ", wrong media " << pkg->mediaId() << endl;
-               srcremaining_r.push_back( *it );
-           }
-           else {
-               current_srcinstall.push_back( *it );
-           }
-       }
-       bad = commit (current_srcinstall);
-       srcremaining_r.insert(remaining_r.end(), bad.begin(), bad.end());
+      else
+      {
+        PoolItemList current_install;
+        PoolItemList current_srcinstall;
+
+        for (PoolItemList::iterator it = to_install.begin(); it != to_install.end(); ++it)
+        {
+          Resolvable::constPtr res( it->resolvable() );
+          Package::constPtr pkg( asKind<Package>(res) );
+          if (pkg && medianr != pkg->mediaId())                                                                // check medianr for packages only
+          {
+            MIL << "Package " << *pkg << ", wrong media " << pkg->mediaId() << endl;
+            remaining_r.push_back( *it );
+          }
+          else
+          {
+            current_install.push_back( *it );
+          }
+        }
+        PoolItemList bad = commit (current_install);
+        remaining_r.insert(remaining_r.end(), bad.begin(), bad.end());
+
+        for (PoolItemList::iterator it = to_srcinstall.begin(); it != to_srcinstall.end(); ++it)
+        {
+          Resolvable::constPtr res( it->resolvable() );
+          Package::constPtr pkg( asKind<Package>(res) );
+          if (pkg && medianr != pkg->mediaId()) // check medianr for packages only
+          {
+            MIL << "Package " << *pkg << ", wrong media " << pkg->mediaId() << endl;
+            srcremaining_r.push_back( *it );
+          }
+          else {
+            current_srcinstall.push_back( *it );
+          }
+        }
+        bad = commit (current_srcinstall);
+        srcremaining_r.insert(remaining_r.end(), bad.begin(), bad.end());
       }
-
       return;
     }
 
@@ -175,84 +190,111 @@ namespace zypp
       PoolItemList remaining;
 
       MIL << "TargetImpl::commit(<list>)" << endl;
-      for (PoolItemList::const_iterator it = items_r.begin();
-       it != items_r.end(); it++)
+      for (PoolItemList::const_iterator it = items_r.begin(); it != items_r.end(); it++)
       {
-       if (isKind<Package>(it->resolvable()))
-       {
-         Package::constPtr p = dynamic_pointer_cast<const Package>(it->resolvable());
-         if (it->status().isToBeInstalled())
-         {
-           Pathname localfile = getRpmFile(p);
-           
+        if (isKind<Package>(it->resolvable()))
+        {
+          Package::constPtr p = dynamic_pointer_cast<const Package>(it->resolvable());
+          if (it->status().isToBeInstalled())
+          {
+            Pathname localfile = getRpmFile(p);
 #warning Exception handling
-           // create a installation progress report proxy
-           RpmInstallPackageReceiver progress(it->resolvable());
-           
-           progress.connect();
-           bool success = true;
-
-           try {
-               progress.tryLevel( target::rpm::InstallResolvableReport::RPM );
-               
-               rpm().installPackage(localfile,
-                   p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : 0);
-           }
-           catch (Exception & excpt_r) {
-               ZYPP_CAUGHT(excpt_r);
-
-               WAR << "Install failed, retrying with --nodeps" << endl;
-               try {
-                   progress.tryLevel( target::rpm::InstallResolvableReport::RPM_NODEPS );
-                   rpm().installPackage(localfile,
-                       p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : rpm::RpmDb::RPMINST_NODEPS);
-               }
-               catch (Exception & excpt_r) {
-                   ZYPP_CAUGHT(excpt_r);
-                   WAR << "Install failed again, retrying with --force --nodeps" << endl;
-
-                   try {
-                       progress.tryLevel( target::rpm::InstallResolvableReport::RPM_NODEPS_FORCE );
-                       rpm().installPackage(localfile,
-                           p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : (rpm::RpmDb::RPMINST_NODEPS|rpm::RpmDb::RPMINST_FORCE));
-                   }
-                   catch (Exception & excpt_r) {
-                       remaining.push_back( *it );
-                       success = false;
-                       ZYPP_CAUGHT(excpt_r);
-                   }
-               }
-           }
-           if (success) {
-               it->status().setStatus( ResStatus::installed );
-           }
-           progress.disconnect();
-
-         }
-         else
-         {
-           RpmRemovePackageReceiver progress(it->resolvable());
-           
-           progress.connect();
-
-           try {
-               rpm().removePackage(p);
-           }
-           catch (Exception & excpt_r) {
-               ZYPP_CAUGHT(excpt_r);
-               WAR << "Remove failed, retrying with --nodeps" << endl;
-               rpm().removePackage(p, rpm::RpmDb::RPMINST_NODEPS);
-           }
-           progress.disconnect();
-           it->status().setStatus( ResStatus::uninstalled );
-         }
-
-       }
-#warning FIXME other resolvables
-      }
-
+        // create a installation progress report proxy
+            RpmInstallPackageReceiver progress(it->resolvable());
+            progress.connect();
+            bool success = true;
+
+            try {
+              progress.tryLevel( target::rpm::InstallResolvableReport::RPM );
+                
+              rpm().installPackage(localfile,
+                  p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : 0);
+            }
+            catch (Exception & excpt_r) {
+              ZYPP_CAUGHT(excpt_r);
+              WAR << "Install failed, retrying with --nodeps" << endl;
+              try {
+                progress.tryLevel( target::rpm::InstallResolvableReport::RPM_NODEPS );
+                rpm().installPackage(localfile,
+                p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : rpm::RpmDb::RPMINST_NODEPS);
+              }
+              catch (Exception & excpt_r) 
+              {
+                ZYPP_CAUGHT(excpt_r);
+                WAR << "Install failed again, retrying with --force --nodeps" << endl;
+    
+                try {
+                  progress.tryLevel( target::rpm::InstallResolvableReport::RPM_NODEPS_FORCE );
+                  rpm().installPackage(localfile,
+                      p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : (rpm::RpmDb::RPMINST_NODEPS|rpm::RpmDb::RPMINST_FORCE));
+                }
+                catch (Exception & excpt_r) {
+                  remaining.push_back( *it );
+                  success = false;
+                  ZYPP_CAUGHT(excpt_r);
+                }
+              }
+            }
+            if (success) {
+              it->status().setStatus( ResStatus::installed );
+            }
+            progress.disconnect();
+          }
+          else
+          {
+            RpmRemovePackageReceiver progress(it->resolvable());
+            progress.connect();
+            try {
+              rpm().removePackage(p);
+            }
+            catch (Exception & excpt_r) {
+              ZYPP_CAUGHT(excpt_r);
+              WAR << "Remove failed, retrying with --nodeps" << endl;
+              rpm().removePackage(p, rpm::RpmDb::RPMINST_NODEPS);
+            }
+            progress.disconnect();
+            it->status().setStatus( ResStatus::uninstalled );
+          }
+        }
+#ifndef STORAGE_DISABLED
+        else // other resolvables
+        {
+          if (it->status().isToBeInstalled())
+          { 
+            bool success = false;
+            try
+            {
+              _storage.storeObject(it->resolvable());
+              success = true;
+            }
+            catch (Exception & excpt_r)
+            {
+              ZYPP_CAUGHT(excpt_r);
+              WAR << "Install of Resolvable from storage failed" << endl;
+            }
+            if (success)
+              it->status().setStatus( ResStatus::installed );
+          }
+          else
+          {
+            bool success = false;
+            try
+            {
+              _storage.deleteObject(it->resolvable());
+              success = true;
+            }
+            catch (Exception & excpt_r)
+            {
+              ZYPP_CAUGHT(excpt_r);
+              WAR << "Uninstall of Resolvable from storage failed" << endl;
+            }
+            if (success)
+              it->status().setStatus( ResStatus::uninstalled );
+          }
+        }
+    #endif
+      }   
       return remaining;
-
     }
 
     rpm::RpmDb & TargetImpl::rpm()
index 119fea2..2668913 100644 (file)
 #include "zypp/media/MediaAccess.h"
 #include "zypp/Target.h"
 #include "zypp/target/rpm/RpmDb.h"
+#include "zypp/target/store/PersistentStorage.h"
 #include "zypp/solver/detail/Types.h"
 
+#define STORAGE_DISABLED
+
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 { /////////////////////////////////////////////////////////////////
@@ -100,6 +103,9 @@ namespace zypp
       Pathname _root;
       /** RPM database */
       rpm::RpmDb _rpm;
+#ifndef STORAGE_DISABLED
+      zypp::storage::PersistentStorage _storage;
+#endif
     private:
       /** Null implementation */
       static TargetImpl_Ptr _nullimpl;
index f572e3c..c8782de 100644 (file)
@@ -56,25 +56,25 @@ public:
   /**
   * Stores a Resolvable in the active backend.
   */
-  virtual void storeObject( Resolvable::constPtr resolvable )  = 0;
+  virtual void storeObject( ResObject::constPtr resolvable )  = 0;
   /**
   * Deletes a Resolvable from the active backend.
   */
-  virtual void deleteObject( Resolvable::Ptr resolvable ) = 0;
+  virtual void deleteObject( ResObject::constPtr resolvable ) = 0;
 
   /**
   * Query for installed Resolvables.
   */
-  virtual std::list<Resolvable::Ptr> storedObjects() const = 0;
+  virtual std::list<ResObject::Ptr> storedObjects() const = 0;
   /**
   * Query for installed Resolvables of a certain kind
   */
-  virtual std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind) const = 0;
+  virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind) const = 0;
   /**
   * Query for installed Resolvables of a certain kind by name
   * \a partial_match allows for text search.
   */
-  virtual std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind, const std::string & name, bool partial_match = false) const = 0;
+  virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind, const std::string & name, bool partial_match = false) const = 0;
 
 
   /////////////////////////////////////////////////////////
index fd93d7f..8bc267a 100644 (file)
@@ -78,32 +78,32 @@ void PersistentStorage::doTest()
 }
 
 void
-PersistentStorage::storeObject( Resolvable::constPtr resolvable )
+PersistentStorage::storeObject( ResObject::constPtr resolvable )
 {
   d->backend->storeObject(resolvable);
 }
 
 void
-PersistentStorage::deleteObject( Resolvable::Ptr resolvable )
+PersistentStorage::deleteObject( ResObject::constPtr resolvable )
 {
 
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 PersistentStorage::storedObjects() const
 {
   return d->backend->storedObjects();
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 PersistentStorage::storedObjects(const Resolvable::Kind kind) const
 {
-  //list<Resolvable::Ptr>::iterator it;
+  //list<ResObject::Ptr>::iterator it;
   //it = find(nums.begin(), nums.end(), 3); // Search the list.
   return d->backend->storedObjects(kind);
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 PersistentStorage::storedObjects(const Resolvable::Kind kind, const std::string & name, bool partial_match) const
 {
   return d->backend->storedObjects(kind, name, partial_match);
index 033c6df..c888f56 100644 (file)
@@ -68,24 +68,24 @@ namespace zypp
       /**
        * Stores a Resolvable in the active backend.
        */
-      void storeObject( Resolvable::constPtr resolvable );
+      void storeObject( ResObject::constPtr resolvable );
       /**
        * Deletes a Resolvable from the active backend.
        */
-      void deleteObject( Resolvable::Ptr resolvable );
+      void deleteObject( ResObject::constPtr resolvable );
       /**
        * Query for installed Resolvables.
        */
-      std::list<Resolvable::Ptr> storedObjects() const;
+      std::list<ResObject::Ptr> storedObjects() const;
        /**
        * Query for installed Resolvables of a certain kind.
        */
-      std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind kind) const;
+      std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind kind) const;
        /**
        * Query for installed Resolvables of a certain kind by name
        * \a partial_match allows for text search.
        */
-      std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind kind, const std::string & name, bool partial_match = false) const;
+      std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind kind, const std::string & name, bool partial_match = false) const;
 
       /////////////////////////////////////////////////////////
       // SOURCES API
index 032b1c8..d20e1ee 100644 (file)
@@ -219,13 +219,13 @@ XMLFilesBackend::dirForResolvableKind( Resolvable::Kind kind ) const
 }
 
 std::string
-XMLFilesBackend::dirForResolvable( Resolvable::constPtr resolvable ) const
+XMLFilesBackend::dirForResolvable( ResObject::constPtr resolvable ) const
 {
   return dirForResolvableKind(resolvable->kind());
 }
 
 std::string
-XMLFilesBackend::fullPathForResolvable( Resolvable::constPtr resolvable ) const
+XMLFilesBackend::fullPathForResolvable( ResObject::constPtr resolvable ) const
 {
   std::string filename;
   // only append edition if there is one
@@ -235,7 +235,7 @@ XMLFilesBackend::fullPathForResolvable( Resolvable::constPtr resolvable ) const
 }
 
 void
-XMLFilesBackend::storeObject( Resolvable::constPtr resolvable )
+XMLFilesBackend::storeObject( ResObject::constPtr resolvable )
 {
   std::string xml = castedToXML(resolvable);
   std::string filename = fullPathForResolvable(resolvable);
@@ -256,7 +256,7 @@ XMLFilesBackend::storeObject( Resolvable::constPtr resolvable )
 }
 
 void
-XMLFilesBackend::deleteObject( Resolvable::Ptr resolvable )
+XMLFilesBackend::deleteObject( ResObject::constPtr resolvable )
 {
   // only remove the file
   std::string filename = fullPathForResolvable(resolvable);
@@ -271,10 +271,10 @@ XMLFilesBackend::deleteObject( Resolvable::Ptr resolvable )
   }
 }
 
-Resolvable::Ptr XMLFilesBackend::resolvableFromFile( std::string file_path, Resolvable::Kind kind ) const
+ResObject::Ptr XMLFilesBackend::resolvableFromFile( std::string file_path, Resolvable::Kind kind ) const
 {
   //DBG << "[" << resolvableKindToString( kind, false ) << "] - " << file_path << std::endl;
-  Resolvable::Ptr resolvable;
+  ResObject::Ptr resolvable;
   std::ifstream res_file(file_path.c_str());
   if ( kind == ResTraits<zypp::Patch>::kind )
   {
@@ -338,18 +338,18 @@ Resolvable::Ptr XMLFilesBackend::resolvableFromFile( std::string file_path, Reso
   return resolvable;
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 XMLFilesBackend::storedObjects() const
 {
   DBG << std::endl;
-  std::list<Resolvable::Ptr> objects;
+  std::list<ResObject::Ptr> objects;
 
   std::set<Resolvable::Kind>::const_iterator it_kinds;
   for ( it_kinds = d->kinds.begin() ; it_kinds != d->kinds.end(); ++it_kinds )
   {
     Resolvable::Kind kind = (*it_kinds);
-    std::list<Resolvable::Ptr> objects_for_kind = storedObjects(kind);
-    std::list<Resolvable::Ptr>::iterator it;
+    std::list<ResObject::Ptr> objects_for_kind = storedObjects(kind);
+    std::list<ResObject::Ptr>::iterator it;
     for( it = objects_for_kind.begin(); it != objects_for_kind.end(); ++it)
     {
       //DBG << "adding objects back" << std::endl;
@@ -359,10 +359,10 @@ XMLFilesBackend::storedObjects() const
   return objects;
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 XMLFilesBackend::storedObjects(const Resolvable::Kind kind) const
 {
-  std::list<Resolvable::Ptr> objects;
+  std::list<ResObject::Ptr> objects;
   std::string dir_path = dirForResolvableKind(kind);
   DBG << "Reading objects of kind " << resolvableKindToString(kind) << " in " << dir_path << std::endl;
   directory_iterator end_iter;
@@ -370,7 +370,7 @@ XMLFilesBackend::storedObjects(const Resolvable::Kind kind) const
   if ( !exists( dir_path ) )
   {
     ERR << "path " << dir_path << " does not exists. Required to read objects of kind " << resolvableKindToString(kind) << std::endl;
-    return std::list<Resolvable::Ptr>();
+    return std::list<ResObject::Ptr>();
   }
 
   for ( directory_iterator dir_itr( dir_path ); dir_itr != end_iter; ++dir_itr )
@@ -382,16 +382,16 @@ XMLFilesBackend::storedObjects(const Resolvable::Kind kind) const
   return objects;
 }
 
-std::list<Resolvable::Ptr>
+std::list<ResObject::Ptr>
 XMLFilesBackend::storedObjects(const Resolvable::Kind kind, const std::string & name, bool partial_match) const
 {
-  std::list<Resolvable::Ptr> result;
-  std::list<Resolvable::Ptr> all;
+  std::list<ResObject::Ptr> result;
+  std::list<ResObject::Ptr> all;
   all = storedObjects(kind);
-  std::list<Resolvable::Ptr>::const_iterator it;
+  std::list<ResObject::Ptr>::const_iterator it;
   for( it = all.begin(); it != all.end(); ++it)
   {
-    Resolvable::Ptr item = *it;
+    ResObject::Ptr item = *it;
     if (item->name() == name )
       result.push_back(item);
   }
index da871c3..f5c9b2b 100644 (file)
@@ -66,24 +66,24 @@ public:
   /**
     * Stores a Resolvable in the active backend.
     */
-  virtual void storeObject( Resolvable::constPtr resolvable ) ;
+  virtual void storeObject( ResObject::constPtr resolvable ) ;
   /**
     * Deletes a Resolvable from the active backend.
     */
-  virtual void deleteObject( Resolvable::Ptr resolvable );
+  virtual void deleteObject( ResObject::constPtr resolvable );
   /**
     * Deletes a Resolvable from the active backend.
     */
-  virtual std::list<Resolvable::Ptr> storedObjects() const;
+  virtual std::list<ResObject::Ptr> storedObjects() const;
    /**
     * Query for installed Resolvables of a certain kind
     */
-  virtual std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind) const;
+  virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind) const;
   /**
     * Query for installed Resolvables of a certain kind by name
     * \a partial_match allows for text search.
     */
-  virtual std::list<Resolvable::Ptr> storedObjects(const Resolvable::Kind, const std::string & name, bool partial_match = false) const;
+  virtual std::list<ResObject::Ptr> storedObjects(const Resolvable::Kind, const std::string & name, bool partial_match = false) const;
 
   /////////////////////////////////////////////////////////
   // SOURCES API
@@ -110,7 +110,7 @@ public:
   /**
     * Directory where the xml file is stored (for the given resolvable)
     */
-  std::string dirForResolvable( Resolvable::constPtr resolvable ) const;
+  std::string dirForResolvable( ResObject::constPtr resolvable ) const;
   /**
     * Directory where the xml file is stored (for the given resolvable kind)
     */
@@ -119,12 +119,12 @@ public:
     * Full path to the xml file for a given resolvable
     * Does not care if the resolvable is yet stored or not
     */
-  std::string fullPathForResolvable( Resolvable::constPtr resolvable ) const;
+  std::string fullPathForResolvable( ResObject::constPtr resolvable ) const;
    /**
     * Full path to the xml file for a given resolvable
     * Does not care if the resolvable is yet stored or not
     */
-  Resolvable::Ptr resolvableFromFile( std::string file_path, Resolvable::Kind kind ) const;
+  ResObject::Ptr resolvableFromFile( std::string file_path, Resolvable::Kind kind ) const;
 
   Patch::Ptr createPatch( const zypp::parser::yum::YUMPatchData & parsed ) const;
   Message::Ptr createMessage( const zypp::parser::yum::YUMPatchMessage & parsed ) const;