new commit. enabled if cmake -DZYPP_REFACTORING=1
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Tue, 19 Jun 2007 15:56:06 +0000 (15:56 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Tue, 19 Jun 2007 15:56:06 +0000 (15:56 +0000)
zypp/CMakeLists.txt
zypp/repo/RepoProvideFile.cc
zypp/target/TargetImpl.cc

index d3c4bf6..fc01743 100644 (file)
@@ -3,6 +3,11 @@
 ####################################################################
 
 ADD_DEFINITIONS(-DLOCALEDIR=\\\"/usr/share/libzypp\\\" -DTEXTDOMAIN=\\\"zypp\\\" )
+
+IF(ZYPP_REFACTORING)
+  ADD_DEFINITIONS(-DZYPP_REFACTORING)
+ENDIF(ZYPP_REFACTORING)
+
 ADD_EXECUTABLE(mkarray ${CMAKE_SOURCE_DIR}/zypp/cache/schema/mkarray.c )
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
 #FILE(WRITE filename "message to write"... )
index 1e90c7a..2a70cb8 100644 (file)
@@ -12,6 +12,7 @@
 #include <iostream>
 #include <fstream>
 #include <sstream>
+#include <set>
 #include "zypp/base/Logger.h"
 
 #include "zypp/repo/RepoProvideFile.h"
@@ -19,6 +20,7 @@
 #include "zypp/MediaSetAccess.h"
 
 using std::endl;
+using std::set;
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -91,29 +93,35 @@ namespace zypp
 
       Url url;
       RepoInfo info = repo_r.info();
-      // FIXME we only support the first url for now.
-      if ( info.baseUrls().empty() )
+      set<Url> urls = info.baseUrls();
+      if ( urls.empty() )
         ZYPP_THROW(Exception("No url in repository."));
-      else
-        url = * info.baseUrls().begin();
       
-      MediaSetAccess access(url);
-      
-      ManagedFile ret( access.provideFile(loc_r),
-                      RepoReleaseFile( repo_r, loc_r.filename(), loc_r.medianr() ) );
-
-      if ( loc_r.checksum().empty() )
-        {
-          // no checksum in metadata
-          WAR << "No checksum in metadata " << loc_r << endl;
-        }
-      else
+      for ( RepoInfo::urls_const_iterator it = urls.begin();
+            it != urls.end();
+            ++it )
+      {
+        url = *it;
+        try
         {
-          std::ifstream input( ret->asString().c_str() );
-          CheckSum retChecksum( loc_r.checksum().type(), input );
-          input.close();
-
-          if ( loc_r.checksum() != retChecksum )
+        
+          MediaSetAccess access(url);
+          
+          ManagedFile ret( access.provideFile(loc_r),
+                          RepoReleaseFile( repo_r, loc_r.filename(), loc_r.medianr() ) );
+    
+          if ( loc_r.checksum().empty() )
+          {
+            // no checksum in metadata
+            WAR << "No checksum in metadata " << loc_r << endl;
+          }
+          else
+          {
+            std::ifstream input( ret->asString().c_str() );
+            CheckSum retChecksum( loc_r.checksum().type(), input );
+            input.close();
+  
+            if ( loc_r.checksum() != retChecksum )
             {
               // failed integity check
               std::ostringstream err;
@@ -129,10 +137,17 @@ namespace zypp
               else
                 WAR << "NO failOnChecksumError: " << err.str() << endl;
             }
+          }
+    
+          MIL << "sourceProvideFile at " << ret << endl;
+          return ret;
         }
-
-      MIL << "sourceProvideFile at " << ret << endl;
-      return ret;
+        catch ( const Exception &e )
+        {
+          ERR << "Trying next url" << endl;
+          continue;
+        }
+      } // iteration over urls
     }
 
     /////////////////////////////////////////////////////////////////
index 0bc6d0d..e8b140b 100644 (file)
 
 #include "zypp/pool/GetResolvablesToInsDel.h"
 #include "zypp/solver/detail/Helper.h"
+
+#ifdef ZYPP_REFACTORING
+#include "zypp/repo/DeltaCandidates.h"
+#include "zypp/repo/PackageProvider.h"
+#else
 #include "zypp/source/PackageProvider.h"
+#endif
 
 using namespace std;
 using namespace zypp;
@@ -224,11 +230,22 @@ namespace zypp
     {
       // Redirect PackageProvider queries for installed editions
       // (in case of patch/delta rpm processing) to rpmDb.
+#ifdef ZYPP_REFACTORING
+      repo::PackageProviderPolicy packageProviderPolicy;
+#else
       source::PackageProviderPolicy packageProviderPolicy;
+#endif
       packageProviderPolicy.queryInstalledCB( QueryInstalledEditionHelper() );
 
       Package::constPtr p = asKind<Package>(pi.resolvable());
+#ifdef ZYPP_REFACTORING
+      // FIXME no repo list
+      std::set<Repository> repos;
+      repo::DeltaCandidates deltas(repos);
+      repo::PackageProvider pkgProvider( p, deltas, packageProviderPolicy );
+#else
       source::PackageProvider pkgProvider( p, packageProviderPolicy );
+#endif
       return pkgProvider.providePackage();
     }