libzypp  14.48.5
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() / 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() / 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  static const VendorSupportOptions unsupportedOpts( VendorSupportUnknown
132  | VendorSupportACC );
133  return unsupportedOpts.testFlag( vendorSupport() );
134  }
135 
137  {
138  Target_Ptr target( getZYpp()->getTarget() );
139  if ( ! target )
140  {
141  ERR << "Target not initialized. Changelog is not available." << std::endl;
142  return Changelog();
143  }
144 
145  if ( repository().isSystemRepo() )
146  {
148  target->rpmDb().getData(name(), header);
149  return header ? header->tag_changelog() : Changelog(); // might be deleted behind our back (bnc #530595)
150  }
151  WAR << "changelog is not available for uninstalled packages" << std::endl;
152  return Changelog();
153  }
154 
155  std::string Package::buildhost() const
157 
158  std::string Package::distribution() const
160 
161  std::string Package::license() const
163 
164  std::string Package::packager() const
166 
167  std::string Package::group() const
169 
172 
173  std::string Package::url() const
175 
178 
179  std::list<std::string> Package::authors() const
180  {
181  std::list<std::string> ret;
182  str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
183  return ret;
184  }
185 
188 
191 
193  { return lookupLocation(); }
194 
195  Pathname Package::cachedLocation() const
196  { return zyppintern::cachedLocation( location(), repoInfo() ); }
197 
198  std::string Package::sourcePkgName() const
199  {
200  // no id means same as package
202  return id ? IdString( id ).asString() : name();
203  }
204 
206  {
207  // no id means same as package
209  return id ? Edition( id ) : edition();
210  }
211 
212  std::string Package::sourcePkgType() const
214 
215  std::string Package::sourcePkgLongName() const
216  { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
217 
218 
220 } // namespace zypp
Package keywords.
int IdType
Generic Id type.
Definition: PoolMember.h:130
A Solvable object within the sat Pool.
Definition: Solvable.h:55
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:198
Pathname cachedLocation(const OnMediaLocation &loc_r, const RepoInfo &repo_r)
Definition: Package.cc:37
bool empty() const
Definition: CheckSum.cc:173
bool schemeIsLocalDir(const Url &url_r)
Definition: Package.cc:30
VendorSupportOption vendorSupport() const
Returns the level of supportability the vendor gives to this package.
Definition: Package.cc:89
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.
unsigned split(const C_Str &line_r, _OutputIterator result_r, const C_Str &sepchars_r=" \t")
Split line_r into words.
Definition: String.h:511
Repository repository() const
Definition: ResObject.h:184
std::string license() const
Definition: Package.cc:161
Store and operate with byte count.
Definition: ByteCount.h:30
OnMediaLocation location() const
Location of the resolvable in the repository.
Definition: Package.cc:192
std::string getPathName(EEncoding eflag=zypp::url::E_DECODED) const
Returns the path name from the URL.
Definition: Url.cc:598
std::list< ChangelogEntry > Changelog
List of ChangelogEntry.
Definition: Changelog.h:53
FileList filelist() const
Return the packages filelist (if available).
Definition: Package.cc:186
std::string lookupStrAttribute(const SolvAttr &attr) const
returns the string attribute value for attr or an empty string if it does not exists.
Definition: Solvable.cc:144
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:173
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:128
What is known about a repository.
Definition: RepoInfo.h:72
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:39
Url url
Definition: MediaCurl.cc:180
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:591
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:179
Pathname packagesPath() const
Path where this repo packages are cached.
Definition: RepoInfo.cc:477
#define ERR
Definition: Logger.h:49
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
returns the id attribute value for attr or detail::noId if it does not exists.
Definition: Solvable.cc:182
IdString ident() const
Definition: Resolvable.h:60
std::string asString() const
Conversion to std::string
Definition: IdString.h:83
ByteCount sourcesize() const
Size of corresponding the source package.
Definition: Package.cc:176
static const SolvAttr sourceevr
Definition: SolvAttr.h:102
Edition sourcePkgEdition() const
Edition of the source rpm this package was built from.
Definition: Package.cc:205
std::string name() const
Definition: Resolvable.h:73
virtual ~Package()
Dtor.
Definition: Package.cc:86
OnMediaLocation lookupLocation() const
returns OnMediaLocation data: This is everything we need to download e.g.
Definition: Solvable.cc:230
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
returns the CheckSum attribute value for attr or an empty CheckSum if ir does not exist...
Definition: Solvable.cc:188
static const SolvAttr url
Definition: SolvAttr.h:104
Package interface.
Definition: Package.h:32
Keywords keywords() const
Definition: Package.cc:170
static const SolvAttr license
Definition: SolvAttr.h:93
const sat::Solvable & satSolvable() const
Access the corresponding ::Solvable.
Definition: Resolvable.h:136
#define WAR
Definition: Logger.h:48
RepoInfo repoInfo() const
RepoInfo associated with the repository providing this resolvable.
Definition: ResObject.h:190
std::string packager() const
Definition: Package.cc:164
The package is known to be unsupported by the vendor.
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
returns the numeric attribute value for attr or 0 if it does not exists.
Definition: Solvable.cc:170
static const SolvAttr authors
Definition: SolvAttr.h:98
Interface base for resolvable objects (common data).
Definition: ResObject.h:44
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:167
static const SolvAttr sourcename
Definition: SolvAttr.h:101
std::string sourcePkgType() const
The type of the source rpm ("src" or "nosrc").
Definition: Package.cc:212
A sat capability.
Definition: Capability.h:59
const Pathname & filename() const
The path to the resource relatve to the url and path.
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:215
static const SolvAttr keywords
Definition: SolvAttr.h:96
std::string buildhost() const
Definition: Package.cc:155
Url url() const
Pars pro toto: The first repository url.
Definition: RepoInfo.h:128
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:195
Edition edition() const
Definition: Resolvable.h:76
IdType id() const
Expert backdoor.
Definition: Solvable.h:288
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
std::string distribution() const
Definition: Package.cc:158
Url manipulation class.
Definition: Url.h:87
Changelog changelog() const
Get the package change log.
Definition: Package.cc:136
#define IMPL_PTR_TYPE(NAME)
const CheckSum & checksum() const
the checksum of the resource
bool identical(Solvable rhs) const
Test whether two Solvables have the same content.
Definition: Solvable.cc:489
CheckSum checksum() const
Checksum the source says this package should have.
Definition: Package.cc:189