libzypp  17.5.0
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 zyppintern
27 {
28  using namespace zypp;
29 
30  inline bool schemeIsLocalDir( const Url & url_r )
31  {
32  const std::string & s( url_r.getScheme() );
33  return s == "dir" || s == "file";
34  }
35 
36  // here and from SrcPackage.cc
37  Pathname cachedLocation( const OnMediaLocation & loc_r, const RepoInfo & repo_r )
38  {
39  PathInfo pi( repo_r.packagesPath() / repo_r.path() / loc_r.filename() );
40 
41  if ( ! pi.isExist() )
42  return Pathname(); // no file in cache
43 
44  if ( loc_r.checksum().empty() )
45  {
46  Url url( repo_r.url() );
47  if ( ! schemeIsLocalDir( url ) )
48  return Pathname(); // same name but no checksum to verify
49 
50  // for local repos compare with the checksum in repo
51  if ( CheckSum( CheckSum::md5Type(), std::ifstream( (url.getPathName() / repo_r.path() / loc_r.filename()).c_str() ) )
52  != CheckSum( CheckSum::md5Type(), std::ifstream( pi.c_str() ) ) )
53  return Pathname(); // same name but wrong checksum
54  }
55  else
56  {
57  if ( loc_r.checksum() != CheckSum( loc_r.checksum().type(), std::ifstream( pi.c_str() ) ) )
58  return Pathname(); // same name but wrong checksum
59  }
60 
61  return pi.path(); // the right one
62  }
63 } // namespace zyppintern
65 
67 namespace zypp
68 {
69 
71 
73  //
74  // METHOD NAME : Package::Package
75  // METHOD TYPE : Ctor
76  //
77  Package::Package( const sat::Solvable & solvable_r )
78  : ResObject( solvable_r )
79  {}
80 
82  //
83  // METHOD NAME : Package::~Package
84  // METHOD TYPE : Dtor
85  //
87  {}
88 
90  {
91  static const IdString support_unsupported( "support_unsupported" );
92  static const IdString support_acc( "support_acc" );
93  static const IdString support_l1( "support_l1" );
94  static const IdString support_l2( "support_l2" );
95  static const IdString support_l3( "support_l3" );
96 
98  // max over all identical packages
99  for ( const auto & solv : sat::WhatProvides( (Capability(ident().id())) ) )
100  {
101  if ( solv.edition() == edition()
102  && solv.ident() == ident()
103  && identical( solv ) )
104  {
105  for ( PackageKeyword kw : Keywords( sat::SolvAttr::keywords, solv ) )
106  {
107  switch ( ret )
108  {
110  if ( kw == support_unsupported ) { ret = VendorSupportUnsupported; break; }
112  if ( kw == support_acc ) { ret = VendorSupportACC; break; }
113  case VendorSupportACC:
114  if ( kw == support_l1 ) { ret = VendorSupportLevel1; break; }
115  case VendorSupportLevel1:
116  if ( kw == support_l2 ) { ret = VendorSupportLevel2; break; }
117  case VendorSupportLevel2:
118  if ( kw == support_l3 ) { return VendorSupportLevel3; break; }
119  case VendorSupportLevel3:
120  /* make gcc happy */ break;
121  }
122  }
123  }
124  }
125  return ret;
126  }
127 
129  {
130  switch ( vendorSupport() )
131  {
134  case VendorSupportACC:
135  return true;
136 
137  case VendorSupportLevel1:
138  case VendorSupportLevel2:
139  case VendorSupportLevel3:
140  break; // intentionally no default:
141  }
142  return false;
143  }
144 
146  {
147  Target_Ptr target( getZYpp()->getTarget() );
148  if ( ! target )
149  {
150  ERR << "Target not initialized. Changelog is not available." << std::endl;
151  return Changelog();
152  }
153 
154  if ( repository().isSystemRepo() )
155  {
157  target->rpmDb().getData(name(), header);
158  return header ? header->tag_changelog() : Changelog(); // might be deleted behind our back (bnc #530595)
159  }
160  WAR << "changelog is not available for uninstalled packages" << std::endl;
161  return Changelog();
162  }
163 
164  std::string Package::buildhost() const
166 
167  std::string Package::distribution() const
169 
170  std::string Package::license() const
172 
173  std::string Package::packager() const
175 
176  std::string Package::group() const
178 
181 
182  std::string Package::url() const
184 
187 
188  std::list<std::string> Package::authors() const
189  {
190  std::list<std::string> ret;
191  str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
192  return ret;
193  }
194 
197 
200 
202  { return lookupLocation(); }
203 
205  { return zyppintern::cachedLocation( location(), repoInfo() ); }
206 
207  std::string Package::sourcePkgName() const
208  {
209  // no id means same as package
211  return id ? IdString( id ).asString() : name();
212  }
213 
215  {
216  // no id means same as package
218  return id ? Edition( id ) : edition();
219  }
220 
221  std::string Package::sourcePkgType() const
223 
224  std::string Package::sourcePkgLongName() const
225  { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
226 
227 
229 } // namespace zypp
std::string getScheme() const
Returns the scheme name of the URL.
Definition: Url.cc:527
Package keywords.
Pathname path() const
Repository path.
Definition: RepoInfo.cc:580
std::string distribution() const
Definition: Package.cc:167
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
Pathname cachedLocation(const OnMediaLocation &loc_r, const RepoInfo &repo_r)
Definition: Package.cc:37
bool schemeIsLocalDir(const Url &url_r)
Definition: Package.cc:30
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:185
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:182
Pathname cachedLocation() const
Location of the downloaded package in cache or an empty path.
Definition: Package.cc:204
std::string sourcePkgType() const
The type of the source rpm ("src" or "nosrc").
Definition: Package.cc:221
The support for this package is unknown.
sat::ArrayAttr< PackageKeyword, IdString > Keywords
Definition: Package.h:41
Definition: Arch.h:344
What is known about a repository.
Definition: RepoInfo.h:71
OnMediaLocation location() const
Location of the resolvable in the repository.
Definition: Package.cc:201
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
Url url
Definition: MediaCurl.cc:196
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:502
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:145
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:164
#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:128
Url url() const
Pars pro toto: The first repository url.
Definition: RepoInfo.h:131
static const SolvAttr sourceevr
Definition: SolvAttr.h:102
virtual ~Package()
Dtor.
Definition: Package.cc:86
Edition sourcePkgEdition() const
Edition of the source rpm this package was built from.
Definition: Package.cc:214
static const SolvAttr url
Definition: SolvAttr.h:104
std::string sourcePkgLongName() const
The source rpms "name-version-release.type".
Definition: Package.cc:224
std::string group() const
Definition: Package.cc:176
std::string packager() const
Definition: Package.cc:173
Package interface.
Definition: Package.h:32
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:195
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:89
static const SolvAttr authors
Definition: SolvAttr.h:98
CheckSum checksum() const
Checksum the source says this package should have.
Definition: Package.cc:198
Keywords keywords() const
Definition: Package.cc:179
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:207
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
Pathname packagesPath() const
Path where this repo packages are cached.
Definition: RepoInfo.cc:541
std::string license() const
Definition: Package.cc:170
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
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:188
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