Package.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
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   //    METHOD NAME : Package::Package
00031   //    METHOD TYPE : Ctor
00032   //
00033   Package::Package( const sat::Solvable & solvable_r )
00034   : ResObject( solvable_r )
00035   {}
00036 
00038   //
00039   //    METHOD NAME : Package::~Package
00040   //    METHOD TYPE : Dtor
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     // max over all identical packages
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               /* make gcc happy */ 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(); // might be deleted behind our back (bnc #530595)
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     // no id means same as package
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    // no id means same as package
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 } // namespace zypp

Generated on Tue May 5 14:43:17 2015 for libzypp by  doxygen 1.5.6