libzypp 17.37.17
PoolItem.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#include <iostream>
13#include <zypp/base/Logger.h>
14#include <utility>
15#include <zypp-core/base/DefaultIntegral>
16
17#include <zypp/PoolItem.h>
18#include <zypp/ResPool.h>
19#include <zypp/Package.h>
20#include <zypp/VendorAttr.h>
21
22using std::endl;
23
25namespace zypp
26{
27
29 //
30 // CLASS NAME : PoolItem::Impl
31 //
39 {
40 public:
41 Impl() {}
42
44 ResStatus &&status_r )
45 : _status( std::move(status_r) )
46 , _resolvable( std::move(res_r) )
47 {}
48
49 ResStatus & status() const
50 { return _buddy > 0 ? PoolItem(buddy()).status() : _status; }
51
53 {
54 if ( !_buddy )
56 if ( _buddy < 0 )
57 return sat::Solvable( -_buddy );
58 return sat::Solvable( _buddy );
59 }
60
61 void setBuddy( const sat::Solvable & solv_r );
62
65
67 {
68 _status.setLock( false, zypp::ResStatus::USER );
69 _status.resetTransact( zypp::ResStatus::USER );
70 return _status;
71 }
72
74 {
75 _status.setLock( _status.isUserLockQueryMatch(), zypp::ResStatus::USER );
76 _status.resetTransact( zypp::ResStatus::USER );
77 return _status;
78 }
79
80 public:
81 bool isUndetermined() const
82 {
83 return status().isUndetermined();
84 }
85
86 bool isRelevant() const
87 {
88 return !status().isNonRelevant();
89 }
90
91 bool isSatisfied() const
92 {
93 return status().isSatisfied();
94 }
95
96 bool isBroken() const
97 {
98 return status().isBroken();
99 }
100
101 bool isNeeded() const
102 {
103 return status().isToBeInstalled() || ( isBroken() && ! status().isLocked() );
104 }
105
106 bool isUnwanted() const
107 {
108 return isBroken() && status().isLocked();
109 }
110
111 private:
115
120 public:
121 void saveState() const
122 { _savedStatus = status(); }
123 void restoreState() const
124 { status() = _savedStatus; }
125 bool sameState() const
126 {
127 if ( status() == _savedStatus )
128 return true;
129 // some bits changed...
130 if ( status().getTransactValue() != _savedStatus.getTransactValue()
131 && ( ! status().isBySolver() // ignore solver state changes
132 // removing a user lock also goes to bySolver
133 || _savedStatus.getTransactValue() == ResStatus::LOCKED ) )
134 return false;
135 if ( status().isLicenceConfirmed() != _savedStatus.isLicenceConfirmed() )
136 return false;
137 return true;
138 }
139 private:
142
143 public:
146 {
147 static shared_ptr<Impl> _nullimpl( new Impl );
148 return _nullimpl;
149 }
150 };
151
152
154 inline std::ostream & operator<<( std::ostream & str, const PoolItem::Impl & obj )
155 {
156 str << obj.status();
157 if (obj.resolvable())
158 str << *obj.resolvable();
159 else
160 str << "(NULL)";
161 return str;
162 }
163
164 inline void PoolItem::Impl::setBuddy( const sat::Solvable & solv_r )
165 {
166 PoolItem myBuddy( solv_r );
167 if ( myBuddy )
168 {
169 if ( myBuddy._pimpl->_buddy )
170 {
171 ERR << *this << " would be buddy2 in " << myBuddy << endl;
172 return;
173 }
174 myBuddy._pimpl->_buddy = -resolvable()->satSolvable().id();
175 _buddy = myBuddy.satSolvable().id();
176 DBG << *this << " has buddy " << myBuddy << endl;
177 }
178 }
179
181 // class PoolItem
183
185 : _pimpl( Impl::nullimpl() )
186 {}
187
188 PoolItem::PoolItem( const sat::Solvable & solvable_r )
189 : _pimpl( ResPool::instance().find( solvable_r )._pimpl )
190 {}
191
193 : _pimpl( ResPool::instance().find( resolvable_r )._pimpl )
194 {}
195
197 : _pimpl( implptr_r )
198 {}
199
201 {
202 return PoolItem( new Impl( makeResObject( solvable_r ), solvable_r.isSystem() ) );
203 }
204
207
209 { return ResPool::instance(); }
210
211
212 ResStatus & PoolItem::status() const { return _pimpl->status(); }
213 ResStatus & PoolItem::statusReset() const { return _pimpl->statusReset(); }
214 ResStatus & PoolItem::statusReinit() const { return _pimpl->statusReinit(); }
215 sat::Solvable PoolItem::buddy() const { return _pimpl->buddy(); }
216 void PoolItem::setBuddy( const sat::Solvable & solv_r ) { _pimpl->setBuddy( solv_r ); }
217 bool PoolItem::isUndetermined() const { return _pimpl->isUndetermined(); }
218 bool PoolItem::isRelevant() const { return _pimpl->isRelevant(); }
219 bool PoolItem::isSatisfied() const { return _pimpl->isSatisfied(); }
220 bool PoolItem::isBroken() const { return _pimpl->isBroken(); }
221 bool PoolItem::isNeeded() const { return _pimpl->isNeeded(); }
222 bool PoolItem::isUnwanted() const { return _pimpl->isUnwanted(); }
223
224 void PoolItem::saveState() const { _pimpl->saveState(); }
225 void PoolItem::restoreState() const { _pimpl->restoreState(); }
226 bool PoolItem::sameState() const { return _pimpl->sameState(); }
227 ResObject::constPtr PoolItem::resolvable() const { return _pimpl->resolvable(); }
228
229
230 std::ostream & operator<<( std::ostream & str, const PoolItem & obj )
231 { return str << *obj._pimpl; }
232
233} // namespace zypp
Integral type with defined initial value when default constructed.
bool isRelevant() const
Returns true if the solvable is relevant which means e.g.
Definition PoolItem.cc:218
bool isNeeded() const
This includes unlocked broken patches, as well as those already selected to be installed (otherwise c...
Definition PoolItem.cc:221
void restoreState() const
Definition PoolItem.cc:225
void saveState() const
Definition PoolItem.cc:224
ResObject::constPtr resolvable() const
Returns the ResObject::constPtr.
Definition PoolItem.cc:227
bool sameState() const
Definition PoolItem.cc:226
bool isBroken() const
Whether a relevant items requirements are broken.
Definition PoolItem.cc:220
ResStatus & status() const
Returns the current status.
Definition PoolItem.cc:212
void setBuddy(const sat::Solvable &solv_r)
Buddies are set by pool::PoolImpl.
Definition PoolItem.cc:216
bool isSatisfied() const
Whether a relevant items requirements are met.
Definition PoolItem.cc:219
bool isUnwanted() const
Broken (needed) but locked patches.
Definition PoolItem.cc:222
static PoolItem makePoolItem(const sat::Solvable &solvable_r)
PoolItem generator for pool::PoolImpl.
Definition PoolItem.cc:200
~PoolItem()
Dtor.
Definition PoolItem.cc:205
ResStatus & statusReset() const
Resets status to the default state (KEEP_STATE bySOLVER; clears any lock!).
Definition PoolItem.cc:213
ResPool pool() const
Return the ResPool the item belongs to.
Definition PoolItem.cc:208
PoolItem()
Default ctor for use in std::container.
Definition PoolItem.cc:184
sat::Solvable buddy() const
Return the buddy we share our status object with.
Definition PoolItem.cc:215
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition PoolItem.h:157
bool isUndetermined() const
No validation is performed for packages.
Definition PoolItem.cc:217
ResStatus & statusReinit() const
Resets status to it's initial state in the ResPool (KEEP_STATE bySOLVER or LOCKED byUSER).
Definition PoolItem.cc:214
TraitsType::constPtrType constPtr
Definition ResObject.h:43
Global ResObject pool.
Definition ResPool.h:62
static ResPool instance()
Singleton ctor.
Definition ResPool.cc:38
Status bitfield.
Definition ResStatus.h:55
bool isUndetermined() const
Definition ResStatus.h:222
bool isToBeInstalled() const
Definition ResStatus.h:259
bool isBroken() const
Definition ResStatus.h:228
bool isNonRelevant() const
Definition ResStatus.h:231
bool isLocked() const
Definition ResStatus.h:270
bool isSatisfied() const
Definition ResStatus.h:225
A Solvable object within the sat Pool.
Definition Solvable.h:54
IdType id() const
Expert backdoor.
Definition Solvable.h:445
static const Solvable noSolvable
Represents no Solvable.
Definition Solvable.h:80
bool isSystem() const
Return whether this Solvable belongs to the system repo.
Definition Solvable.cc:374
Definition Arch.h:364
String related utilities and Regular expression matching.
Easy-to use interface to the ZYPP dependency resolver.
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
ResObject::Ptr makeResObject(const sat::Solvable &solvable_r)
Create ResObject from sat::Solvable.
Definition ResObject.cc:43
PoolItem implementation.
Definition PoolItem.cc:39
bool isNeeded() const
Definition PoolItem.cc:101
void setBuddy(const sat::Solvable &solv_r)
Definition PoolItem.cc:164
ResStatus & status() const
Definition PoolItem.cc:49
bool sameState() const
Definition PoolItem.cc:125
ResObject::constPtr _resolvable
Definition PoolItem.cc:113
void restoreState() const
Definition PoolItem.cc:123
void saveState() const
Definition PoolItem.cc:121
sat::Solvable buddy() const
Definition PoolItem.cc:52
bool isBroken() const
Definition PoolItem.cc:96
std::ostream & operator<<(std::ostream &str, const PoolItem::Impl &obj)
Stream output.
Definition PoolItem.cc:154
static shared_ptr< Impl > nullimpl()
Offer default Impl.
Definition PoolItem.cc:145
bool isRelevant() const
Definition PoolItem.cc:86
bool isUndetermined() const
Definition PoolItem.cc:81
ResStatus _savedStatus
Definition PoolItem.cc:140
Impl(ResObject::constPtr &&res_r, ResStatus &&status_r)
Definition PoolItem.cc:43
DefaultIntegral< sat::detail::IdType, sat::detail::noId > _buddy
Definition PoolItem.cc:114
bool isSatisfied() const
Definition PoolItem.cc:91
ResStatus & statusReset() const
Definition PoolItem.cc:66
bool isUnwanted() const
Definition PoolItem.cc:106
ResStatus & statusReinit() const
Definition PoolItem.cc:73
ResObject::constPtr resolvable() const
Definition PoolItem.cc:63
Solvable satSolvable() const
Return the corresponding sat::Solvable.
#define DBG
Definition Logger.h:99
#define ERR
Definition Logger.h:102