DeltaCandidates.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 extern "C"
00010 {
00011 #include <satsolver/knownid.h>
00012 }
00013
00014 #include <iostream>
00015 #include "zypp/base/Logger.h"
00016 #include "zypp/Repository.h"
00017 #include "zypp/repo/DeltaCandidates.h"
00018 #include "zypp/sat/Pool.h"
00019
00020
00021 using std::endl;
00022 using namespace zypp::packagedelta;
00023
00025 namespace zypp
00026 {
00027
00028 namespace repo
00029 {
00030
00032 struct DeltaCandidates::Impl
00033 {
00034 public:
00035 Impl()
00036 {}
00037
00038 Impl( const std::list<Repository> & repos, const std::string & pkgname = "" )
00039 : repos(repos), pkgname(pkgname)
00040 {}
00041
00042 std::list<Repository> repos;
00043 std::string pkgname;
00044
00045 private:
00046 friend Impl * rwcowClone<Impl>( const Impl * rhs );
00048 Impl * clone() const
00049 { return new Impl( *this ); }
00050 };
00052
00054 inline std::ostream & operator<<( std::ostream & str, const DeltaCandidates::Impl & obj )
00055 {
00056 return str << "DeltaCandidates::Impl";
00057 }
00058
00060
00061
00062
00064
00065 DeltaCandidates::DeltaCandidates()
00066 : _pimpl( new Impl )
00067 {}
00068
00069
00070 DeltaCandidates::DeltaCandidates(const std::list<Repository> & repos,
00071 const std::string & pkgname)
00072 : _pimpl( new Impl(repos, pkgname) )
00073 {}
00074
00075 DeltaCandidates::~DeltaCandidates()
00076 {}
00077
00078 std::list<DeltaRpm> DeltaCandidates::deltaRpms(const Package::constPtr & package) const
00079 {
00080 std::list<DeltaRpm> candidates;
00081
00082 DBG << "package: " << package << endl;
00083 for_( rit, _pimpl->repos.begin(), _pimpl->repos.end() )
00084 {
00085 sat::LookupRepoAttr q( sat::SolvAttr::repositoryDeltaInfo, *rit );
00086 for_( it, q.begin(), q.end() )
00087 {
00088 if ( _pimpl->pkgname.empty()
00089 || it.subFind( sat::SolvAttr(DELTA_PACKAGE_NAME) ).asString() == _pimpl->pkgname )
00090 {
00091 DeltaRpm delta( it );
00092
00093 if ( ! package
00094 || ( package->name() == delta.name()
00095 && package->edition() == delta.edition()
00096 && package->arch() == delta.arch() ) )
00097 {
00098 DBG << "got delta candidate: " << delta << endl;
00099 candidates.push_back( delta );
00100 }
00101 }
00102 }
00103 }
00104 return candidates;
00105 }
00106
00107 std::ostream & operator<<( std::ostream & str, const DeltaCandidates & obj )
00108 {
00109 return str << *obj._pimpl;
00110 }
00111
00113 }
00116 }