libzypp 17.31.31
Selectable.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
15#include <zypp/ui/Selectable.h>
17#include <zypp/ResPool.h>
18
20namespace zypp
21{
23 namespace ui
24 {
25
27
29 { return ResPool::instance().proxy().lookup( ident_r ); }
30
32 //
33 // METHOD NAME : Selectable::Selectable
34 // METHOD TYPE : Ctor
35 //
37 : _pimpl( pimpl_r )
38 {}
39
41 //
42 // METHOD NAME : Selectable::~Selectable
43 // METHOD TYPE : Dtor
44 //
47
49 //
50 // Forward to implementation.
51 // Restrict PoolItems to ResObject::constPtr!
52 //
54
56 { return _pimpl->ident(); }
57
59 { return _pimpl->kind(); }
60
61 const std::string & Selectable::name() const
62 { return _pimpl->name(); }
63
65 { return _pimpl->status(); }
66
68 { return _pimpl->setStatus( state_r, causer_r ); }
69
71 { return _pimpl->installedObj(); }
72
74 { return _pimpl->candidateObj(); }
75
77 { return _pimpl->candidateObjFrom( repo_r ); }
78
80 { return _pimpl->updateCandidateObj(); }
81
83 { return _pimpl->highestAvailableVersionObj(); }
84
86 { return _pimpl->identIsAutoInstalled(); }
87
88 bool Selectable::identicalAvailable( const PoolItem & rhs ) const
89 { return _pimpl->identicalAvailable( rhs ); }
90
91 bool Selectable::identicalInstalled( const PoolItem & rhs ) const
92 { return _pimpl->identicalInstalled( rhs ); }
93
95 { return _pimpl->identicalAvailableObj( rhs ); }
96
98 { return _pimpl->identicalInstalledObj( rhs ); }
99
101 { return _pimpl->setCandidate( newCandidate_r, causer_r ); }
102
104 { return _pimpl->setCandidate( PoolItem( newCandidate_r ), causer_r ); }
105
106 bool Selectable::setOnSystem( const PoolItem & newCandidate_r, ResStatus::TransactByValue causer_r )
107 {
108 if ( identicalInstalled( newCandidate_r ) )
109 return setFate( UNMODIFIED, causer_r );
110 return setCandidate( newCandidate_r, causer_r ) && setFate( TO_INSTALL, causer_r );
111 }
112
114 { return _pimpl->theObj(); }
115
117
119 { return _pimpl->availableEmpty(); }
120
122 { return _pimpl->availableSize(); }
123
125 { return _pimpl->availableBegin(); }
126
128 { return _pimpl->availableEnd(); }
129
131
133 { return _pimpl->installedEmpty(); }
134
136 { return _pimpl->installedSize(); }
137
139 { return _pimpl->installedBegin(); }
140
142 { return _pimpl->installedEnd(); }
143
145
147 { return _pimpl->picklistEmpty(); }
148
150 { return _pimpl->picklistSize(); }
151
153 { return _pimpl->picklistBegin(); }
154
156 { return _pimpl->picklistEnd(); }
157
160
162 {
164 for ( const auto & pi : picklist() )
165 {
166 if ( pi == solv_r )
167 return idx;
168 ++idx;
169 }
170 return picklistNoPos;
171 }
172
174
176 { return _pimpl->hasBlacklisted(); }
177
179 { return _pimpl->hasBlacklistedInstalled(); }
180
182 { return _pimpl->hasRetracted(); }
183
185 { return _pimpl->hasRetractedInstalled(); }
186
188 { return _pimpl->hasPtf(); }
189
191 { return _pimpl->hasPtfInstalled(); }
192
193
195 { return _pimpl->isUnmaintained(); }
196
198 { return _pimpl->multiversionInstall(); }
199
200 bool Selectable::pickInstall( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
201 { return _pimpl->pickInstall( pi_r, causer_r, yesno_r ); }
202
203 bool Selectable::pickDelete( const PoolItem & pi_r, ResStatus::TransactByValue causer_r, bool yesno_r )
204 { return _pimpl->pickDelete( pi_r, causer_r, yesno_r ); }
205
207 { return _pimpl->pickStatus( pi_r ); }
208
210 { return _pimpl->setPickStatus( pi_r, state_r, causer_r ); }
211
213
215 { return _pimpl->isUndetermined(); }
216
218 { return _pimpl->isRelevant(); }
219
221 { return _pimpl->isSatisfied(); }
222
224 { return _pimpl->isBroken(); }
225
227 {
228 return fate() == TO_INSTALL || ( ! locked() && isBroken() );
229 }
230
232 {
233 return locked() && isBroken() ;
234 }
235
237 { return _pimpl->modifiedBy(); }
238
240 { return _pimpl->hasLicenceConfirmed(); }
241
243 { _pimpl->setLicenceConfirmed( val_r ); }
244
246 { return _pimpl->hasLocks(); }
247
249 {
250 switch ( status() ) {
251 case S_Update:
252 case S_Install:
253 case S_AutoUpdate:
254 case S_AutoInstall:
255 return TO_INSTALL;
256 break;
257
258 case S_Del:
259 case S_AutoDel:
260 return TO_DELETE;
261 break;
262
263 case S_Protected:
264 case S_Taboo:
265 case S_KeepInstalled:
266 case S_NoInst:
267 break;
268 }
269 return UNMODIFIED;
270 };
271
273 {
274 switch ( fate_r )
275 {
276 case TO_INSTALL:
277 return setStatus( hasInstalledObj() ? S_Update : S_Install, causer_r );
278 break;
279
280 case TO_DELETE:
281 return setStatus( S_Del, causer_r );
282 break;
283
284 case UNMODIFIED:
285 switch ( status() ) {
286 case S_Protected:
287 case S_Taboo:
288 return true;
289 break;
290 default:
291 return setStatus( hasInstalledObj() ? S_KeepInstalled : S_NoInst, causer_r );
292 break;
293 }
294 break;
295 }
296 return false;
297 }
298
300 {
301 return( hasInstalledObj() || setStatus( S_Install, causer_r ) );
302 }
303
305 {
306 if ( ! hasInstalledObj() )
307 return setStatus( S_Install, causer_r );
308
309 PoolItem cand( candidateObj() );
310 if ( ! cand )
311 return true;
312
313 return( installedObj()->edition() >= cand->edition()
314 || setStatus( S_Update, causer_r ) );
315 }
316
318 {
319 return( ! hasInstalledObj() || setStatus( S_Del, causer_r ) );
320 }
321
322 /******************************************************************
323 **
324 ** FUNCTION NAME : operator<<
325 ** FUNCTION TYPE : std::ostream &
326 */
327 std::ostream & operator<<( std::ostream & str, const Selectable & obj )
328 { return str << *(obj._pimpl); }
329
330 std::ostream & dumpOn( std::ostream & str, const Selectable & obj )
331 { return dumpOn( str, *(obj._pimpl) ); }
332
334 } // namespace ui
337} // namespace zypp
Access to the sat-pools string space.
Definition IdString.h:43
Combining sat::Solvable and ResStatus.
Definition PoolItem.h:51
Resolvable kinds.
Definition ResKind.h:33
TraitsType::constPtrType constPtr
Definition ResObject.h:43
ui::Selectable::Ptr lookup(const pool::ByIdent &ident_r) const
static ResPool instance()
Singleton ctor.
Definition ResPool.cc:37
ResPoolProxy proxy() const
preliminary
Definition ResPool.cc:58
Main filter selecting PoolItems by name and kind.
Definition ByIdent.h:27
A Solvable object within the sat Pool.
Definition Solvable.h:54
Collects PoolItems of same kind and name.
Definition Selectable.h:52
bool hasRetractedInstalled() const
True if this Selectable contains an installed retracted item.
bool setStatus(Status state_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Try to set a new Status.
Definition Selectable.cc:67
available_iterator availableEnd() const
bool hasPtfInstalled() const
True if this Selectable contains an installed ptf item.
SelectableTraits::available_size_type available_size_type
Definition Selectable.h:62
installed_size_type installedSize() const
SelectableTraits::picklist_iterator picklist_iterator
Definition Selectable.h:67
picklist_iterator picklistBegin() const
bool multiversionInstall() const
Whether at least one of the available packages has multiversionInstall set.
Iterable< picklist_iterator > picklist() const
Definition Selectable.h:284
Status pickStatus(const PoolItem &pi_r) const
Compute the ui::Status for an individual PoolItem.
bool isUnmaintained() const
True if this package has no replacement from the available repositories.
picklist_size_type picklistSize() const
bool setDeleted(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets deleted if it is installed.
bool isSatisfied() const
Whether a relevant patchs requirements are met.
static Ptr get(const pool::ByIdent &ident_r)
Get the Selctable.
Definition Selectable.cc:28
installed_iterator installedBegin() const
bool locked() const
True if locked (subclass of unmodified).
Definition Selectable.h:471
available_size_type availableSize() const
intrusive_ptr< Selectable > Ptr
Definition Selectable.h:57
static constexpr const picklist_size_type picklistNoPos
Returned by picklistPos if the Item does not belong to the picklist.
Definition Selectable.h:288
void setLicenceConfirmed(bool val_r=true)
Set LicenceConfirmed bit.
ResStatus::TransactByValue modifiedBy() const
Return who caused the modification.
SelectableTraits::installed_size_type installed_size_type
Definition Selectable.h:65
PoolItem installedObj() const
The last Installed object.
Definition Selectable.cc:70
PoolItem highestAvailableVersionObj() const
Simply the highest available version, ignoring priorities and policies.
Definition Selectable.cc:82
bool hasLocks() const
True if it includes locked items (don't mix this with the locked status).
bool hasRetracted() const
True if this Selectable contains available retracted items.
bool hasBlacklistedInstalled() const
True if this Selectable contains an installed blacklisted item (retracted,ptf,...).
picklist_iterator picklistEnd() const
bool setInstalled(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets installed if it is not.
bool hasBlacklisted() const
True if this Selectable contains available blacklisted items (retracted,ptf,...).
Selectable(Impl_Ptr pimpl_r)
Default ctor.
Definition Selectable.cc:36
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition Selectable.h:565
IdString ident() const
The identifier.
Definition Selectable.cc:55
installed_iterator installedEnd() const
PoolItem updateCandidateObj() const
The best candidate for update, if there is one.
Definition Selectable.cc:79
PoolItem candidateObjFrom(Repository repo_r) const
The best candidate provided by a specific Repository, if there is one.
Definition Selectable.cc:76
bool setUpToDate(ResStatus::TransactByValue causer_r=ResStatus::USER)
Take care the item gets installed if it is not, or is older.
const std::string & name() const
The ResObjects name.
Definition Selectable.cc:61
SelectableTraits::installed_iterator installed_iterator
Definition Selectable.h:64
bool hasPtf() const
True if this Selectable contains available ptf items.
SelectableTraits::available_iterator available_iterator
Iterates over ResObject::constPtr.
Definition Selectable.h:61
PoolItem theObj() const
An object you could use as pars pro toto.
bool availableEmpty() const
shared_ptr< Impl > Impl_Ptr
Definition Selectable.h:557
bool identIsAutoInstalled() const
Whether this ident is flagged as AutoInstalled.
Definition Selectable.cc:85
available_iterator availableBegin() const
bool pickInstall(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER, bool yesno_r=true)
Select a specific available item for installation.
bool setOnSystem(const PoolItem &newCandidate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Arrange the specified candidate (out of available objects) to be on system after commit.
PoolItem setCandidate(const PoolItem &newCandidate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Set a candidate (out of available objects).
bool isRelevant() const
Returns true if the patch is relevant which means that at least one package of the patch is installed...
bool isUnwanted() const
Broken (needed) but locked patches.
PoolItem candidateObj() const
The 'best' or 'most interesting' among all available objects.
Definition Selectable.cc:73
bool identicalAvailable(const PoolItem &rhs) const
True if rhs is installed and one with the same content is available.
Definition Selectable.cc:88
bool isBroken() const
Whether a relevant patchs requirements are broken.
bool hasInstalledObj() const
True if installed object is present.
Definition Selectable.h:311
bool setPickStatus(const PoolItem &pi_r, Status state_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
Assign a new status to a specific item.
Status status() const
Return the current Status.
Definition Selectable.cc:64
bool hasLicenceConfirmed() const
Return value of LicenceConfirmed bit.
bool identicalInstalled(const PoolItem &rhs) const
True if rhs has the same content as an installed one.
Definition Selectable.cc:91
PoolItem identicalAvailableObj(const PoolItem &rhs) const
Return an available Object with the same content as rhs.
Definition Selectable.cc:94
bool isUndetermined() const
Returns true for packages, because packages are not classified by the solver.
ResKind kind() const
The ResObjects kind.
Definition Selectable.cc:58
bool setFate(Fate fate_r, ResStatus::TransactByValue causer_r=ResStatus::USER)
bool pickDelete(const PoolItem &pi_r, ResStatus::TransactByValue causer_r=ResStatus::USER, bool yesno_r=true)
Select a specific installed item for deletion.
bool isNeeded() const
This includes unlocked broken patches, as well as those already selected to be installed.
bool picklistEmpty() const
SelectableTraits::picklist_size_type picklist_size_type
Definition Selectable.h:68
PoolItem identicalInstalledObj(const PoolItem &rhs) const
\Return an installed Object with the same content as rhs.
Definition Selectable.cc:97
bool installedEmpty() const
picklist_size_type picklistPos(const PoolItem &pi_r) const
Return the position of pi_r in the piclist or picklistNoPos.
String related utilities and Regular expression matching.
Status
UI status Status values calculated by Selectable.
Definition Status.h:35
@ S_AutoUpdate
Definition Status.h:44
@ S_Taboo
Definition Status.h:37
@ S_AutoInstall
Definition Status.h:45
@ S_Install
Definition Status.h:41
@ S_AutoDel
Definition Status.h:43
@ S_NoInst
Definition Status.h:48
@ S_Protected
Definition Status.h:36
@ S_KeepInstalled
Definition Status.h:47
@ S_Del
Definition Status.h:39
@ S_Update
Definition Status.h:40
std::ostream & operator<<(std::ostream &str, const Selectable &obj)
std::ostream & dumpOn(std::ostream &str, const Selectable &obj)
Easy-to use interface to the ZYPP dependency resolver.
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Edition edition() const
#define IMPL_PTR_TYPE(NAME)