libzypp  15.22.2
Package.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #include <iostream>
13 #include <fstream>
14 
15 #include "zypp/base/Logger.h"
16 #include "zypp/base/String.h"
17 #include "zypp/Package.h"
18 #include "zypp/sat/LookupAttr.h"
19 #include "zypp/ZYppFactory.h"
20 #include "zypp/target/rpm/RpmDb.h"
22 
23 using namespace std;
24 
26 namespace zypp
27 {
28 
29  IMPL_PTR_TYPE(Package);
30 
32  //
33  // METHOD NAME : Package::Package
34  // METHOD TYPE : Ctor
35  //
36  Package::Package( const sat::Solvable & solvable_r )
37  : ResObject( solvable_r )
38  {}
39 
41  //
42  // METHOD NAME : Package::~Package
43  // METHOD TYPE : Dtor
44  //
46  {}
47 
49  {
50  static const IdString support_unsupported( "support_unsupported" );
51  static const IdString support_acc( "support_acc" );
52  static const IdString support_l1( "support_l1" );
53  static const IdString support_l2( "support_l2" );
54  static const IdString support_l3( "support_l3" );
55 
57  // max over all identical packages
58  for ( const auto & solv : sat::WhatProvides( (Capability(ident().id())) ) )
59  {
60  if ( solv.edition() == edition()
61  && solv.ident() == ident()
62  && identical( solv ) )
63  {
64  for ( PackageKeyword kw : Keywords( sat::SolvAttr::keywords, solv ) )
65  {
66  switch ( ret )
67  {
69  if ( kw == support_unsupported ) { ret = VendorSupportUnsupported; break; }
71  if ( kw == support_acc ) { ret = VendorSupportACC; break; }
72  case VendorSupportACC:
73  if ( kw == support_l1 ) { ret = VendorSupportLevel1; break; }
75  if ( kw == support_l2 ) { ret = VendorSupportLevel2; break; }
77  if ( kw == support_l3 ) { return VendorSupportLevel3; break; }
79  /* make gcc happy */ break;
80  }
81  }
82  }
83  }
84  return ret;
85  }
86 
88  {
89  switch ( vendorSupport() )
90  {
93  case VendorSupportACC:
94  return true;
95  }
96  return false;
97  }
98 
100  {
101  Target_Ptr target( getZYpp()->getTarget() );
102  if ( ! target )
103  {
104  ERR << "Target not initialized. Changelog is not available." << std::endl;
105  return Changelog();
106  }
107 
108  if ( repository().isSystemRepo() )
109  {
111  target->rpmDb().getData(name(), header);
112  return header ? header->tag_changelog() : Changelog(); // might be deleted behind our back (bnc #530595)
113  }
114  WAR << "changelog is not available for uninstalled packages" << std::endl;
115  return Changelog();
116  }
117 
118  std::string Package::buildhost() const
120 
121  std::string Package::distribution() const
123 
124  std::string Package::license() const
126 
127  std::string Package::packager() const
129 
130  std::string Package::group() const
132 
135 
136  std::string Package::url() const
138 
141 
142  std::list<std::string> Package::authors() const
143  {
144  std::list<std::string> ret;
145  str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
146  return ret;
147  }
148 
151 
154 
156  { return lookupLocation(); }
157 
158  namespace
159  {
160  bool schemeIsLocalDir( const Url & url_r )
161  {
162  std::string s( url_r.getScheme() );
163  return s == "dir" || s == "file";
164  }
165  }
166 
167  Pathname Package::cachedLocation() const
168  {
169  OnMediaLocation loc( location() );
170  PathInfo pi( repoInfo().packagesPath() / loc.filename() );
171 
172  if ( ! pi.isExist() )
173  return Pathname(); // no file in cache
174 
175  if ( loc.checksum().empty() )
176  {
177  Url url( repoInfo().url() );
178  if ( ! schemeIsLocalDir( url ) )
179  return Pathname(); // same name but no checksum to verify
180 
181  // for local repos compare with the checksum in repo
182  if ( CheckSum( CheckSum::md5Type(), std::ifstream( (url.getPathName() / loc.filename()).c_str() ) )
183  != CheckSum( CheckSum::md5Type(), std::ifstream( pi.c_str() ) ) )
184  return Pathname(); // same name but wrong checksum
185  }
186  else
187  {
188  if ( loc.checksum() != CheckSum( loc.checksum().type(), std::ifstream( pi.c_str() ) ) )
189  return Pathname(); // same name but wrong checksum
190  }
191 
192  return pi.path(); // the right one
193  }
194 
195  std::string Package::sourcePkgName() const
196  {
197  // no id means same as package
199  return id ? IdString( id ).asString() : name();
200  }
201 
203  {
204  // no id means same as package
206  return id ? Edition( id ) : edition();
207  }
208 
209  std::string Package::sourcePkgType() const
211 
212  std::string Package::sourcePkgLongName() const
213  { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
214 
215 
217 } // namespace zypp
Package keywords.
int IdType
Generic Id type.
Definition: PoolMember.h:104
A Solvable object within the sat Pool.
Definition: Solvable.h:53
Container of Solvable providing a Capability (read only).
Definition: WhatProvides.h:87
intrusive_ptr< const RpmHeader > constPtr
Definition: RpmHeader.h:64
std::string sourcePkgName() const
Name of the source rpm this package was built from.
Definition: Package.cc:195
bool empty() const
Definition: CheckSum.cc:173
VendorSupportOption vendorSupport() const
Returns the level of supportability the vendor gives to this package.
Definition: Package.cc:48
Describes a path on a certain media amongs as the information required to download it...
Problem isolation, which means technical support designed to duplicate customer problems, isolate problem area and provide resolution for problems not resolved by Level 1 Support.
std::string lookupStrAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:131
std::string license() const
Definition: Package.cc:124
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:134
Store and operate with byte count.
Definition: ByteCount.h:30
OnMediaLocation location() const
Location of the resolvable in the repository.
Definition: Package.cc:155
std::string getPathName(EEncoding eflag=zypp::url::E_DECODED) const
Returns the path name from the URL.
Definition: Url.cc:598
bool identical(const Solvable &rhs) const
Definition: SolvableType.h:88
std::list< ChangelogEntry > Changelog
List of ChangelogEntry.
Definition: Changelog.h:53
FileList filelist() const
Return the packages filelist (if available).
Definition: Package.cc:149
The support for this package is unknown.
std::string url() const
Don't ship it as class Url, because it might be in fact anything but a legal Url. ...
Definition: Package.cc:136
sat::ArrayAttr< PackageKeyword, IdString > Keywords
Definition: Package.h:41
bool maybeUnsupported() const
True if the vendor support for this package is unknown or explictly unsupported.
Definition: Package.cc:87
static const SolvAttr packager
Definition: SolvAttr.h:94
Problem resolution, which means technical support designed to resolve complex problems by engaging en...
Access to the sat-pools string space.
Definition: IdString.h:41
Problem determination, which means technical support designed to provide compatibility information...
Edition represents [epoch:]version[-release]
Definition: Edition.h:60
LookupAttr::TransformIterator based container to retrieve list attributes.
Definition: LookupAttr.h:592
static const SolvAttr sourcearch
Definition: SolvAttr.h:100
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Definition: String.cc:36
std::list< std::string > authors() const
Definition: Package.cc:142
#define ERR
Definition: Logger.h:66
std::string asString() const
Conversion to std::string
Definition: IdString.h:91
ByteCount sourcesize() const
Size of corresponding the source package.
Definition: Package.cc:139
static const SolvAttr sourceevr
Definition: SolvAttr.h:102
Edition sourcePkgEdition() const
Edition of the source rpm this package was built from.
Definition: Package.cc:202
virtual ~Package()
Dtor.
Definition: Package.cc:45
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t")
Split line_r into words.
Definition: String.h:518
static const SolvAttr url
Definition: SolvAttr.h:104
Keywords keywords() const
Definition: Package.cc:133
static const SolvAttr license
Definition: SolvAttr.h:93
#define WAR
Definition: Logger.h:65
std::string packager() const
Definition: Package.cc:127
OnMediaLocation lookupLocation() const
Definition: SolvableType.h:137
The package is known to be unsupported by the vendor.
static const SolvAttr authors
Definition: SolvAttr.h:98
Base for resolvable objects.
Definition: ResObject.h:38
static const SolvAttr buildhost
Definition: SolvAttr.h:91
static const SolvAttr checksum
Definition: SolvAttr.h:86
std::string type() const
Definition: CheckSum.cc:167
std::string group() const
Definition: Package.cc:130
static const SolvAttr sourcename
Definition: SolvAttr.h:101
std::string sourcePkgType() const
The type of the source rpm ("src" or "nosrc").
Definition: Package.cc:209
A sat capability.
Definition: Capability.h:59
const Pathname & filename() const
The path to the resource relatve to the url and path.
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
Additional Customer Contract necessary.
static const SolvAttr sourcesize
Definition: SolvAttr.h:97
std::string sourcePkgLongName() const
The source rpms "name-version-release.type".
Definition: Package.cc:212
static const SolvAttr keywords
Definition: SolvAttr.h:96
std::string buildhost() const
Definition: Package.cc:118
static const SolvAttr group
Definition: SolvAttr.h:95
static const SolvAttr filelist
Definition: SolvAttr.h:99
Pathname cachedLocation() const
Location of the downloaded package in cache or an empty path.
Definition: Package.cc:167
sat::ArrayAttr< std::string, std::string > FileList
Definition: Package.h:42
std::string getScheme() const
Returns the scheme name of the URL.
Definition: Url.cc:527
static const SolvAttr distribution
Definition: SolvAttr.h:92
static const std::string & md5Type()
Definition: CheckSum.cc:28
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:136
std::string distribution() const
Definition: Package.cc:121
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:135
Url manipulation class.
Definition: Url.h:87
Changelog changelog() const
Get the package change log.
Definition: Package.cc:99
#define IMPL_PTR_TYPE(NAME)
const CheckSum & checksum() const
the checksum of the resource
CheckSum checksum() const
Checksum the source says this package should have.
Definition: Package.cc:152