forward port
[platform/upstream/libzypp.git] / zypp / Package.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/Package.cc
10  *
11 */
12 #include "zypp/base/Logger.h"
13 #include "zypp/base/String.h"
14 #include "zypp/Package.h"
15 #include "zypp/sat/LookupAttr.h"
16 #include "zypp/ZYppFactory.h"
17 #include "zypp/target/rpm/RpmDb.h"
18 #include "zypp/target/rpm/RpmHeader.h"
19
20 using namespace std;
21
22 ///////////////////////////////////////////////////////////////////
23 namespace zypp
24 { /////////////////////////////////////////////////////////////////
25
26   IMPL_PTR_TYPE(Package);
27
28   ///////////////////////////////////////////////////////////////////
29   //
30   //    METHOD NAME : Package::Package
31   //    METHOD TYPE : Ctor
32   //
33   Package::Package( const sat::Solvable & solvable_r )
34   : ResObject( solvable_r )
35   {}
36
37   ///////////////////////////////////////////////////////////////////
38   //
39   //    METHOD NAME : Package::~Package
40   //    METHOD TYPE : Dtor
41   //
42   Package::~Package()
43   {}
44
45   VendorSupportOption Package::vendorSupport() const
46   {
47       Keywords kw(keywords());
48
49       for_( it, kw.begin(), kw.end() )
50       {
51           if ( *it == "support_unsupported")
52               return VendorSupportUnsupported;
53           if ( *it == "support_acc")
54               return VendorSupportACC;
55
56           if ( *it == "support_l1")
57               return VendorSupportLevel1;
58           if ( *it == "support_l2")
59               return VendorSupportLevel2;
60           if ( *it == "support_l3")
61               return VendorSupportLevel3;
62       }
63       return VendorSupportUnknown;
64   }
65
66   bool Package::maybeUnsupported() const
67   {
68       if ( ( vendorSupport() == VendorSupportUnknown ) ||
69            ( vendorSupport() == VendorSupportACC ) ||
70            ( vendorSupport() == VendorSupportUnsupported ) )
71           return true;
72       return false;
73   }
74
75   Changelog Package::changelog() const
76   {
77       Target_Ptr target( getZYpp()->getTarget() );
78       if ( ! target )
79       {
80         ERR << "Target not initialized. Changelog is not available." << std::endl;
81         return Changelog();
82       }
83
84       if ( repository().isSystemRepo() )
85       {
86           target::rpm::RpmHeader::constPtr header;
87           target->rpmDb().getData(name(), header);
88           return header ? header->tag_changelog() : Changelog(); // might be deleted behind our back (bnc #530595)
89       }
90       WAR << "changelog is not available for uninstalled packages" << std::endl;
91       return Changelog();
92   }
93
94   std::string Package::buildhost() const
95   { return lookupStrAttribute( sat::SolvAttr::buildhost ); }
96
97   std::string Package::distribution() const
98   { return lookupStrAttribute( sat::SolvAttr::distribution ); }
99
100   std::string Package::license() const
101   { return lookupStrAttribute( sat::SolvAttr::license ); }
102
103   std::string Package::packager() const
104   { return lookupStrAttribute( sat::SolvAttr::packager ); }
105
106   std::string Package::group() const
107   { return lookupStrAttribute( sat::SolvAttr::group ); }
108
109   Package::Keywords Package::keywords() const
110   { return Keywords( sat::SolvAttr::keywords, satSolvable() ); }
111
112   std::string Package::url() const
113   { return lookupStrAttribute( sat::SolvAttr::url ); }
114
115   ByteCount Package::sourcesize() const
116   { return lookupNumAttribute( sat::SolvAttr::sourcesize ); }
117
118   std::list<std::string> Package::authors() const
119   {
120     std::list<std::string> ret;
121     str::split( lookupStrAttribute( sat::SolvAttr::authors ), std::back_inserter(ret), "\n" );
122     return ret;
123   }
124
125   Package::FileList Package::filelist() const
126   { return FileList( sat::SolvAttr::filelist, satSolvable() ); }
127
128   CheckSum Package::checksum() const
129   { return lookupCheckSumAttribute( sat::SolvAttr::checksum ); }
130
131   OnMediaLocation Package::location() const
132   { return lookupLocation(); }
133
134   std::string Package::sourcePkgName() const
135   {
136     // no id means same as package
137     sat::detail::IdType id( lookupIdAttribute( sat::SolvAttr::sourcename ) );
138     return id ? IdString( id ).asString() : name();
139   }
140
141   Edition Package::sourcePkgEdition() const
142   {
143    // no id means same as package
144     sat::detail::IdType id( lookupIdAttribute( sat::SolvAttr::sourceevr ) );
145     return id ? Edition( id ) : edition();
146   }
147
148   std::string Package::sourcePkgType() const
149   { return lookupStrAttribute( sat::SolvAttr::sourcearch ); }
150
151   std::string Package::sourcePkgLongName() const
152   { return str::form( "%s-%s.%s", sourcePkgName().c_str(), sourcePkgEdition().c_str(), sourcePkgType().c_str() ); }
153
154
155   /////////////////////////////////////////////////////////////////
156 } // namespace zypp
157 ///////////////////////////////////////////////////////////////////