#include <iostream>
#include <fstream>
#include <sstream>
+#include <set>
#include "zypp/base/Logger.h"
#include "zypp/repo/RepoProvideFile.h"
#include "zypp/MediaSetAccess.h"
using std::endl;
+using std::set;
///////////////////////////////////////////////////////////////////
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;
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
}
/////////////////////////////////////////////////////////////////
#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;
{
// 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();
}