locking resol. added
authorStefan Schubert <schubi@suse.de>
Thu, 9 Aug 2007 11:07:06 +0000 (11:07 +0000)
committerStefan Schubert <schubi@suse.de>
Thu, 9 Aug 2007 11:07:06 +0000 (11:07 +0000)
zypp/solver/detail/Testcase.cc
zypp/solver/detail/Testcase.h

index db8e013..36a9c33 100644 (file)
@@ -232,6 +232,7 @@ bool Testcase::createTestcase(Resolver & resolver)
     RepositoryTable            repoTable;
     PoolItemList       items_to_install;
     PoolItemList       items_to_remove;
+    PoolItemList       items_locked;    
     PoolItemList       language;
     HelixResolvable    system (dumpPath + "/solver-system.xml");    
 
@@ -268,6 +269,12 @@ bool Testcase::createTestcase(Resolver & resolver)
                 && !(it->status().isBySolver())) {
                items_to_remove.push_back (*it);
            }
+           if ( it->status().isLocked()
+                && !(it->status().isBySolver())
+                && !isKind<SystemResObject>(res)) {
+               items_locked.push_back (*it);
+           }
+           
        }
     }
 
@@ -282,6 +289,11 @@ bool Testcase::createTestcase(Resolver & resolver)
        control.installResolvable (iter->resolvable()); 
     }
 
+    for (PoolItemList::const_iterator iter = items_locked.begin(); iter != items_locked.end(); iter++) {
+       control.lockResolvable (iter->resolvable());    
+    }
+    
+
     for (PoolItemList::const_iterator iter = items_to_remove.begin(); iter != items_to_remove.end(); iter++) {
        control.deleteResolvable (iter->resolvable());  
     }
@@ -372,6 +384,15 @@ void HelixControl::installResolvable(const ResObject::constPtr &resObject)
          << " version=\"" << resObject->edition().version() << "\"" << " release=\"" << resObject->edition().release() << "\"" 
          << "/>" << endl;
 }
+
+void HelixControl::lockResolvable(const ResObject::constPtr &resObject)
+{
+    Repository repo  = resObject->repository();
+    *file << "<lock channel=\"" << numstring(repo.numericId()) << "\" kind=\"" << toLower (resObject->kind().asString()) << "\""
+         << " name=\"" << resObject->name() << "\"" << " arch=\"" << resObject->arch().asString() << "\""
+         << " version=\"" << resObject->edition().version() << "\"" << " release=\"" << resObject->edition().release() << "\"" 
+         << "/>" << endl;
+}
     
 void HelixControl::deleteResolvable(const ResObject::constPtr &resObject)
 {
index a559905..c9dca79 100644 (file)
@@ -101,6 +101,7 @@ class  HelixControl {
     ~HelixControl ();
 
     void installResolvable (const ResObject::constPtr &resObject);
+    void lockResolvable (const ResObject::constPtr &resObject);    
     void deleteResolvable (const ResObject::constPtr &resObject);
     void addDependencies (const CapSet &capRequire, const CapSet &capConflict);
     std::string filename () { return dumpFile; }