split commit into 2 functions
authorJiri Srain <jsrain@suse.cz>
Mon, 30 Jan 2006 09:24:25 +0000 (09:24 +0000)
committerJiri Srain <jsrain@suse.cz>
Mon, 30 Jan 2006 09:24:25 +0000 (09:24 +0000)
zypp/target/TargetImpl.cc
zypp/target/TargetImpl.h

index 8abc830..d30d4f3 100644 (file)
@@ -101,31 +101,35 @@ namespace zypp
       }
       // first uninstall what is to be uninstalled
 #warning FIXME this orderding doesn't honor the dependencies for removals
-      for (PoolItemList::const_iterator it = to_uninstall.begin();
-           it != to_uninstall.end();
-          it++)
-      {
-       if (isKind<Package>(it->resolvable()))
-       {
-         Package::constPtr p = dynamic_pointer_cast<const Package>(it->resolvable());
-         rpm().removePackage(p);
-       }
-#warning FIXME other resolvables (once more below)
-      }
+      commit(to_uninstall);
       // now install what is to be installed
       InstallOrder order(pool_r, to_install, installed);
       order.init();
       const PoolItemList & installorder(order.getTopSorted());
-      for (PoolItemList::const_iterator it = installorder.begin();
-       it != installorder.end(); it++)
+      commit(installorder);
+    }
+
+    void TargetImpl::commit(const PoolItemList & items_r)
+    {
+      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());
-         rpm().installPackage(p->getPlainRpm(),
-           p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : 0);
+         if (it->status().isToBeInstalled())
+         {
+           rpm().installPackage(p->getPlainRpm(),
+             p->installOnly() ? rpm::RpmDb::RPMINST_NOUPGRADE : 0);
+         }
+         else
+         {
+           rpm().removePackage(p);
+         }
        }
+#warning FIXME other resolvables
       }
+
     }
 
     rpm::RpmDb & TargetImpl::rpm()
index ff85ca1..2c6f770 100644 (file)
@@ -23,6 +23,7 @@
 #include "zypp/media/MediaAccess.h"
 #include "zypp/Target.h"
 #include "zypp/target/rpm/RpmDb.h"
+#include "zypp/solver/detail/Types.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -64,6 +65,9 @@ namespace zypp
 #warning Add support for multiple medias - eg. limit only to CD1
       void commit(ResPool pool_r);
 
+      /** Comomit ordered changes */
+      void commit(const PoolItemList & items_r);
+
       /** Overload to realize stream output. */
       virtual std::ostream & dumpOn( std::ostream & str ) const
       { return str << "TargetImpl"; }