fix in generating testcases. e.g. modaliases will be written back in the original...
authorStefan Schubert <schubi@suse.de>
Mon, 25 Feb 2008 15:53:49 +0000 (15:53 +0000)
committerStefan Schubert <schubi@suse.de>
Mon, 25 Feb 2008 15:53:49 +0000 (15:53 +0000)
zypp/solver/detail/Testcase.cc
zypp/solver/detail/Testcase.h

index dbf33ff..84c78b1 100644 (file)
@@ -27,6 +27,7 @@
 #include "zypp/base/PtrTypes.h"
 #include "zypp/Capabilities.h"
 #include "zypp/sat/Solvable.h"
+#include "zypp/sat/detail/PoolImpl.h"
 
 
 /////////////////////////////////////////////////////////////////////////
@@ -95,7 +96,50 @@ template<>
 std::string helixXML( const Capability &cap )
 {
     stringstream str;
-    str << "<dep name='" << xml_escape(cap.asString()) << "'  />" << endl;
+    CapDetail detail = cap.detail();
+    if (detail.isSimple()) {
+       if (detail.isVersioned()) {
+           str << "<dep name='" << xml_escape(detail.name().asString()) << "'"
+               << " op='" << xml_escape(detail.op().asString()) << "'"
+               << " version='" <<  xml_escape(detail.ed().version()) << "'";
+           if (!detail.ed().release().empty())
+               str << " release='" << xml_escape(detail.ed().release()) << "'";
+           if (detail.ed().epoch() != Edition::noepoch)
+               str << " epoch='" << xml_escape(numstring(detail.ed().epoch())) << "'";    
+           str << " />" << endl;       
+       } else {
+           str << "<dep name='" << xml_escape(cap.asString()) << "' />" << endl;
+       }
+    } else if (detail.isExpression()) {
+       if (detail.capRel() == CapDetail::CAP_AND
+           && detail.lhs().detail().isNamed()
+           && detail.rhs().detail().isNamed()) {
+           // packageand dependency
+           str << "<dep name='packageand("
+               << IdString(detail.lhs().id()) << ","           
+               << IdString(detail.rhs().id()) << ")' />" << endl;
+       } else {
+           // modalias ?
+           IdString packageName;
+           if (detail.capRel() == CapDetail::CAP_AND) {
+               packageName = IdString(detail.lhs().id());
+               detail = detail.rhs().detail();
+           }
+           if (detail.capRel() == CapDetail::CAP_NAMESPACE
+               && detail.lhs().id() == NAMESPACE_MODALIAS) {
+               str << "<dep name='modalias(";
+               if (!packageName.empty())
+                   str << packageName << ":";
+               str << IdString(detail.rhs().id()) << ")' />" << endl;
+           } else {
+               str << "<!--- ignoring '" << xml_escape(cap.asString()) << "' -->" << endl;     
+               MIL << "ignoring " << cap << " cause this format will be supported" << endl;
+           }
+       }
+    } else {
+       str << "<!--- ignoring '" << xml_escape(cap.asString()) << "' -->" << endl;     
+       MIL << "ignoring " << cap << " cause this format will be supported" << endl;
+    }
 
     return str.str();
 }
@@ -344,7 +388,7 @@ bool Testcase::createTestcase(Resolver & resolver, bool dumpPool, bool runSolver
 
     // writing control file "*-test.xml"
 
-    HelixControl control (dumpPath + "/solver-test.xml.gz",
+    HelixControl control (dumpPath + "/solver-test.xml",
                          repoTable,
                          ZConfig::instance().systemArchitecture(),
                          language);
index 7f1da3b..df63a1c 100644 (file)
@@ -102,7 +102,7 @@ class  HelixControl {
                  const RepositoryTable & sourceTable,
                  const Arch & systemArchitecture,
                  const PoolItemList &languages,                  
-                 const std::string & systemPath = "solver-system.xml");
+                 const std::string & systemPath = "solver-system.xml.gz");
     HelixControl ();    
     ~HelixControl ();