libzypp  16.6.1
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 
99  break; // intentionally no default:
100  }
101  return false;
102  }
103 
105  {
106  Target_Ptr target( getZYpp()->getTarget() );
107  if ( ! target )
108  {
109  ERR << "Target not initialized. Changelog is not available." << std::endl;
110  return Changelog();
111  }
112 
113  if ( repository().isSystemRepo() )
114  {
116  target->rpmDb().getData(name(), header);
117  return header ? header->tag_changelog() : Changelog(); // might be deleted behind our back (bnc #530595)
118  }
119  WAR << "changelog is not available for uninstalled packages" << std::endl;
120  return Changelog();
121  }
122 
123  std::string Package::buildhost() const
125 
126  std::string Package::distribution() const
128 
129  std::string Package::license() const
131 
132  std::string Package::packager() const
134 
135  std::string Package::group() const
137 
140 
141  std::string Package::url() const
143 
146 
147  std::list<std::string> Package::authors() const
148  {
149  std::list<std::string> ret;
150  str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
151  return ret;
152  }
153 
156 
159 
161  { return lookupLocation(); }
162 
163  namespace
164  {
165  bool schemeIsLocalDir( const Url & url_r )
166  {
167  std::string s( url_r.getScheme() );
168  return s == "dir" || s == "file";
169  }
170  }
171 
173  {
174  OnMediaLocation loc( location() );
175  PathInfo pi( repoInfo().packagesPath() / loc.filename() );
176 
177  if ( ! pi.isExist() )
178  return Pathname(); // no file in cache
179 
180  if ( loc.checksum().empty() )
181  {
182  Url url( repoInfo().url() );
183  if ( ! schemeIsLocalDir( url ) )
184  return Pathname(); // same name but no checksum to verify
185 
186  // for local repos compare with the checksum in repo
187  if ( CheckSum( CheckSum::md5Type(), std::ifstream( (url.getPathName() / loc.filename()).c_str() ) )
188  != CheckSum( CheckSum::md5Type(), std::ifstream( pi.c_str() ) ) )
189  return Pathname(); // same name but wrong checksum
190  }
191  else
192  {
193  if ( loc.checksum() != CheckSum( loc.checksum().type(), std::ifstream( pi.c_str() ) ) )
194  return Pathname(); // same name but wrong checksum
195  }
196 
197  return pi.path(); // the right one
198  }
199 
200  std::string Package::sourcePkgName() const
201  {
202  // no id means same as package
204  return id ? IdString( id ).asString() : name();
205  }
206 
208  {
209  // no id means same as package
211  return id ? Edition( id ) : edition();
212  }
213 
214  std::string Package::sourcePkgType() const
216 
217  std::string Package::sourcePkgLongName() const
218  { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
219 
220 
222 } // namespace zypp
std::string getScheme() const
Returns the scheme name of the URL.
Definition: Url.cc:527
Package keywords.
std::string distribution() const
Definition: Package.cc:126
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
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.
Store and operate with byte count.
Definition: ByteCount.h:30
ByteCount sourcesize() const
Size of corresponding the source package.
Definition: Package.cc:144
std::list< ChangelogEntry > Changelog
List of ChangelogEntry.
Definition: Changelog.h:53
std::string url() const
Don&#39;t ship it as class Url, because it might be in fact anything but a legal Url. ...
Definition: Package.cc:141
Pathname cachedLocation() const
Location of the downloaded package in cache or an empty path.
Definition: Package.cc:172
std::string sourcePkgType() const
The type of the source rpm ("src" or "nosrc").
Definition: Package.cc:214
The support for this package is unknown.
sat::ArrayAttr< PackageKeyword, IdString > Keywords
Definition: Package.h:41
Definition: Arch.h:339
OnMediaLocation location() const
Location of the resolvable in the repository.
Definition: Package.cc:160
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...
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \)
Split line_r into words.
Definition: String.h:519
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
Changelog changelog() const
Get the package change log.
Definition: Package.cc:104
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:139
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Definition: String.cc:36
std::string buildhost() const
Definition: Package.cc:123
#define ERR
Definition: Logger.h:66
OnMediaLocation lookupLocation() const
Definition: SolvableType.h:140
bool maybeUnsupported() const
True if the vendor support for this package is unknown or explictly unsupported.
Definition: Package.cc:87
static const SolvAttr sourceevr
Definition: SolvAttr.h:102
virtual ~Package()
Dtor.
Definition: Package.cc:45
Edition sourcePkgEdition() const
Edition of the source rpm this package was built from.
Definition: Package.cc:207
static const SolvAttr url
Definition: SolvAttr.h:104
std::string sourcePkgLongName() const
The source rpms "name-version-release.type".
Definition: Package.cc:217
std::string group() const
Definition: Package.cc:135
std::string packager() const
Definition: Package.cc:132
static const SolvAttr license
Definition: SolvAttr.h:93
#define WAR
Definition: Logger.h:65
FileList filelist() const
Return the packages filelist (if available).
Definition: Package.cc:154
The package is known to be unsupported by the vendor.
VendorSupportOption vendorSupport() const
Returns the level of supportability the vendor gives to this package.
Definition: Package.cc:48
static const SolvAttr authors
Definition: SolvAttr.h:98
CheckSum checksum() const
Checksum the source says this package should have.
Definition: Package.cc:157
Keywords keywords() const
Definition: Package.cc:138
Base for resolvable objects.
Definition: ResObject.h:38
static const SolvAttr buildhost
Definition: SolvAttr.h:91
std::string type() const
Definition: CheckSum.cc:167
static const SolvAttr checksum
Definition: SolvAttr.h:86
static const SolvAttr sourcename
Definition: SolvAttr.h:101
const Pathname & filename() const
The path to the resource relatve to the url and path.
std::string sourcePkgName() const
Name of the source rpm this package was built from.
Definition: Package.cc:200
bool empty() const
Definition: CheckSum.cc:173
A sat capability.
Definition: Capability.h:59
std::string getPathName(EEncoding eflag=zypp::url::E_DECODED) const
Returns the path name from the URL.
Definition: Url.cc:598
Additional Customer Contract necessary.
static const SolvAttr sourcesize
Definition: SolvAttr.h:97
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:137
static const SolvAttr keywords
Definition: SolvAttr.h:96
std::string license() const
Definition: Package.cc:129
Wrapper class for ::stat/::lstat.
Definition: PathInfo.h:220
static const SolvAttr group
Definition: SolvAttr.h:95
static const SolvAttr filelist
Definition: SolvAttr.h:99
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:136
sat::ArrayAttr< std::string, std::string > FileList
Definition: Package.h:42
std::string asString() const
Conversion to std::string
Definition: IdString.h:91
bool identical(const Solvable &rhs) const
Definition: SolvableType.h:90
static const SolvAttr distribution
Definition: SolvAttr.h:92
static const std::string & md5Type()
Definition: CheckSum.cc:28
std::string lookupStrAttribute(const SolvAttr &attr) const
Definition: SolvableType.h:133
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
std::list< std::string > authors() const
Definition: Package.cc:147
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
Url manipulation class.
Definition: Url.h:87
#define IMPL_PTR_TYPE(NAME)
const CheckSum & checksum() const
the checksum of the resource