From 138c9f812ce57803cb2f0a22b05abb95a7c0c1cf Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Tue, 19 Jun 2007 15:56:06 +0000 Subject: [PATCH] new commit. enabled if cmake -DZYPP_REFACTORING=1 --- zypp/CMakeLists.txt | 5 ++++ zypp/repo/RepoProvideFile.cc | 61 +++++++++++++++++++++++++++----------------- zypp/target/TargetImpl.cc | 17 ++++++++++++ 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/zypp/CMakeLists.txt b/zypp/CMakeLists.txt index d3c4bf6..fc01743 100644 --- a/zypp/CMakeLists.txt +++ b/zypp/CMakeLists.txt @@ -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"... ) diff --git a/zypp/repo/RepoProvideFile.cc b/zypp/repo/RepoProvideFile.cc index 1e90c7a..2a70cb8 100644 --- a/zypp/repo/RepoProvideFile.cc +++ b/zypp/repo/RepoProvideFile.cc @@ -12,6 +12,7 @@ #include #include #include +#include #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 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 } ///////////////////////////////////////////////////////////////// diff --git a/zypp/target/TargetImpl.cc b/zypp/target/TargetImpl.cc index 0bc6d0d..e8b140b 100644 --- a/zypp/target/TargetImpl.cc +++ b/zypp/target/TargetImpl.cc @@ -40,7 +40,13 @@ #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(pi.resolvable()); +#ifdef ZYPP_REFACTORING + // FIXME no repo list + std::set repos; + repo::DeltaCandidates deltas(repos); + repo::PackageProvider pkgProvider( p, deltas, packageProviderPolicy ); +#else source::PackageProvider pkgProvider( p, packageProviderPolicy ); +#endif return pkgProvider.providePackage(); } -- 2.7.4