Package.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #include "zypp/base/Logger.h"
00013 #include "zypp/base/String.h"
00014 #include "zypp/Package.h"
00015 #include "zypp/sat/LookupAttr.h"
00016 #include "zypp/ZYppFactory.h"
00017 #include "zypp/target/rpm/RpmDb.h"
00018 #include "zypp/target/rpm/RpmHeader.h"
00019
00020 using namespace std;
00021
00023 namespace zypp
00024 {
00025
00026 IMPL_PTR_TYPE(Package);
00027
00029
00030
00031
00032
00033 Package::Package( const sat::Solvable & solvable_r )
00034 : ResObject( solvable_r )
00035 {}
00036
00038
00039
00040
00041
00042 Package::~Package()
00043 {}
00044
00045 VendorSupportOption Package::vendorSupport() const
00046 {
00047 static const IdString support_unsupported( "support_unsupported" );
00048 static const IdString support_acc( "support_acc" );
00049 static const IdString support_l1( "support_l1" );
00050 static const IdString support_l2( "support_l2" );
00051 static const IdString support_l3( "support_l3" );
00052
00053 VendorSupportOption ret( VendorSupportUnknown );
00054
00055 sat::WhatProvides pkgs( (Capability(ident().id())) );
00056 for_( it, pkgs.begin(), pkgs.end() )
00057 {
00058 sat::Solvable solv( *it );
00059
00060 if ( solv.edition() == edition()
00061 && solv.ident() == ident()
00062 && identical( solv ) )
00063 {
00064 Keywords kwds( sat::SolvAttr::keywords, solv );
00065 for_( kit, kwds.begin(), kwds.end() )
00066 {
00067 PackageKeyword kw( *kit );
00068
00069 switch ( ret )
00070 {
00071 case VendorSupportUnknown:
00072 if ( kw == support_unsupported ) { ret = VendorSupportUnsupported; break; }
00073 case VendorSupportUnsupported:
00074 if ( kw == support_acc ) { ret = VendorSupportACC; break; }
00075 case VendorSupportACC:
00076 if ( kw == support_l1 ) { ret = VendorSupportLevel1; break; }
00077 case VendorSupportLevel1:
00078 if ( kw == support_l2 ) { ret = VendorSupportLevel2; break; }
00079 case VendorSupportLevel2:
00080 if ( kw == support_l3 ) { return VendorSupportLevel3; break; }
00081 case VendorSupportLevel3:
00082 break;
00083 }
00084 }
00085 }
00086 }
00087 return ret;
00088 }
00089
00090 bool Package::maybeUnsupported() const
00091 {
00092 static const VendorSupportOptions unsupportedOpts( VendorSupportUnknown
00093 | VendorSupportUnsupported
00094 | VendorSupportACC );
00095 return unsupportedOpts.testFlag( vendorSupport() );
00096 }
00097
00098 Changelog Package::changelog() const
00099 {
00100 Target_Ptr target( getZYpp()->getTarget() );
00101 if ( ! target )
00102 {
00103 ERR << "Target not initialized. Changelog is not available." << std::endl;
00104 return Changelog();
00105 }
00106
00107 if ( repository().isSystemRepo() )
00108 {
00109 target::rpm::RpmHeader::constPtr header;
00110 target->rpmDb().getData(name(), header);
00111 return header ? header->tag_changelog() : Changelog();
00112 }
00113 WAR << "changelog is not available for uninstalled packages" << std::endl;
00114 return Changelog();
00115 }
00116
00117 std::string Package::buildhost() const
00118 { return lookupStrAttribute( sat::SolvAttr::buildhost ); }
00119
00120 std::string Package::distribution() const
00121 { return lookupStrAttribute( sat::SolvAttr::distribution ); }
00122
00123 std::string Package::license() const
00124 { return lookupStrAttribute( sat::SolvAttr::license ); }
00125
00126 std::string Package::packager() const
00127 { return lookupStrAttribute( sat::SolvAttr::packager ); }
00128
00129 std::string Package::group() const
00130 { return lookupStrAttribute( sat::SolvAttr::group ); }
00131
00132 Package::Keywords Package::keywords() const
00133 { return Keywords( sat::SolvAttr::keywords, satSolvable() ); }
00134
00135 std::string Package::url() const
00136 { return lookupStrAttribute( sat::SolvAttr::url ); }
00137
00138 ByteCount Package::sourcesize() const
00139 { return lookupNumAttribute( sat::SolvAttr::sourcesize ); }
00140
00141 std::list<std::string> Package::authors() const
00142 {
00143 std::list<std::string> ret;
00144 str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
00145 return ret;
00146 }
00147
00148 Package::FileList Package::filelist() const
00149 { return FileList( sat::SolvAttr::filelist, satSolvable() ); }
00150
00151 CheckSum Package::checksum() const
00152 { return lookupCheckSumAttribute( sat::SolvAttr::checksum ); }
00153
00154 OnMediaLocation Package::location() const
00155 { return lookupLocation(); }
00156
00157 std::string Package::sourcePkgName() const
00158 {
00159
00160 sat::detail::IdType id( lookupIdAttribute( sat::SolvAttr::sourcename ) );
00161 return id ? IdString( id ).asString() : name();
00162 }
00163
00164 Edition Package::sourcePkgEdition() const
00165 {
00166
00167 sat::detail::IdType id( lookupIdAttribute( sat::SolvAttr::sourceevr ) );
00168 return id ? Edition( id ) : edition();
00169 }
00170
00171 std::string Package::sourcePkgType() const
00172 { return lookupStrAttribute( sat::SolvAttr::sourcearch ); }
00173
00174 std::string Package::sourcePkgLongName() const
00175 { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
00176
00177
00179 }