libzypp  17.32.5
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 
22 using std::endl;
23 
25 namespace 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 
64  { return _resolvable; }
65 
67  {
70  return _status;
71  }
72 
74  {
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
134  return false;
136  return false;
137  return true;
138  }
139  private:
142 
143  public:
145  static shared_ptr<Impl> nullimpl()
146  {
147  static shared_ptr<Impl> _nullimpl( new Impl );
148  return _nullimpl;
149  }
150  };
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 
192  PoolItem::PoolItem( const ResObject::constPtr & resolvable_r )
193  : _pimpl( ResPool::instance().find( resolvable_r )._pimpl )
194  {}
195 
196  PoolItem::PoolItem( Impl * implptr_r )
197  : _pimpl( implptr_r )
198  {}
199 
201  {
202  return PoolItem( new Impl( makeResObject( solvable_r ), solvable_r.isSystem() ) );
203  }
204 
206  {}
207 
209  { return ResPool::instance(); }
210 
211 
212  ResStatus & PoolItem::status() const { return _pimpl->status(); }
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(); }
226  bool PoolItem::sameState() const { return _pimpl->sameState(); }
228 
229 
230  std::ostream & operator<<( std::ostream & str, const PoolItem & obj )
231  { return str << *obj._pimpl; }
232 
233 } // namespace zypp
bool isBroken() const
Definition: PoolItem.cc:96
A Solvable object within the sat Pool.
Definition: Solvable.h:53
PoolItem()
Default ctor for use in std::container.
Definition: PoolItem.cc:184
IdType id() const
Expert backdoor.
Definition: Solvable.h:433
DefaultIntegral< sat::detail::IdType, sat::detail::noId > _buddy
Definition: PoolItem.cc:114
bool sameState() const
Definition: PoolItem.cc:226
bool isToBeInstalled() const
Definition: ResStatus.h:258
void setBuddy(const sat::Solvable &solv_r)
Buddies are set by pool::PoolImpl.
Definition: PoolItem.cc:216
bool isNonRelevant() const
Definition: ResStatus.h:230
ResStatus & status() const
Returns the current status.
Definition: PoolItem.cc:212
String related utilities and Regular expression matching.
sat::Solvable buddy() const
Return the buddy we share our status object with.
Definition: PoolItem.cc:215
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
Definition: SerialNumber.cc:52
Definition: Arch.h:363
bool isBroken() const
Definition: ResStatus.h:227
TransactValue getTransactValue() const
Definition: ResStatus.h:284
std::ostream & operator<<(std::ostream &str, const PoolItem::Impl &obj)
Definition: PoolItem.cc:154
bool sameState() const
Definition: PoolItem.cc:125
void saveState() const
Definition: PoolItem.cc:121
bool resetTransact(TransactByValue causer_r)
Not the same as setTransact( false ).
Definition: ResStatus.h:489
~PoolItem()
Dtor.
Definition: PoolItem.cc:205
bool isSatisfied() const
Whether a relevant items requirements are met.
Definition: PoolItem.cc:219
void setBuddy(const sat::Solvable &solv_r)
Definition: PoolItem.cc:164
bool isRelevant() const
Definition: PoolItem.cc:86
bool isNeeded() const
Definition: PoolItem.cc:101
ResObject::constPtr resolvable() const
Returns the ResObject::constPtr.
Definition: PoolItem.cc:227
#define ERR
Definition: Logger.h:98
static const Solvable noSolvable
Represents no Solvable.
Definition: Solvable.h:80
ResStatus _savedStatus
Definition: PoolItem.cc:140
Impl(ResObject::constPtr &&res_r, ResStatus &&status_r)
Definition: PoolItem.cc:43
bool isBroken() const
Whether a relevant items requirements are broken.
Definition: PoolItem.cc:220
bool isUndetermined() const
Definition: PoolItem.cc:81
ResStatus & statusReset() const
Resets status to the default state (KEEP_STATE bySOLVER; clears any lock!).
Definition: PoolItem.cc:213
bool isUserLockQueryMatch() const
Definition: ResStatus.h:344
static shared_ptr< Impl > nullimpl()
Offer default Impl.
Definition: PoolItem.cc:145
bool isUndetermined() const
No validation is performed for packages.
Definition: PoolItem.cc:217
PoolItem implementation.
Definition: PoolItem.cc:38
void restoreState() const
Definition: PoolItem.cc:225
bool isSatisfied() const
Definition: ResStatus.h:224
static PoolItem makePoolItem(const sat::Solvable &solvable_r)
PoolItem generator for pool::PoolImpl.
Definition: PoolItem.cc:200
bool setLock(bool toLock_r, TransactByValue causer_r)
Apply a lock (prevent transaction).
Definition: ResStatus.h:392
TraitsType::constPtrType constPtr
Definition: ResObject.h:43
void restoreState() const
Definition: PoolItem.cc:123
bool isSystem() const
Return whether this Solvable belongs to the system repo.
Definition: Solvable.cc:374
ResObject::constPtr _resolvable
Definition: PoolItem.cc:113
bool isRelevant() const
Returns true if the solvable is relevant which means e.g.
Definition: PoolItem.cc:218
ResStatus & statusReset() const
Definition: PoolItem.cc:66
ResStatus & status() const
Definition: PoolItem.cc:49
bool isLicenceConfirmed() const
Definition: ResStatus.h:180
ResPool pool() const
Return the ResPool the item belongs to.
Definition: PoolItem.cc:208
Global ResObject pool.
Definition: ResPool.h:61
bool isUndetermined() const
Definition: ResStatus.h:221
bool isUnwanted() const
Definition: PoolItem.cc:106
bool isSatisfied() const
Definition: PoolItem.cc:91
bool isLocked() const
Definition: ResStatus.h:269
ResObject::constPtr resolvable() const
Definition: PoolItem.cc:63
Status bitfield.
Definition: ResStatus.h:53
bool isNeeded() const
This includes unlocked broken patches, as well as those already selected to be installed (otherwise c...
Definition: PoolItem.cc:221
ResObject::Ptr makeResObject(const sat::Solvable &solvable_r)
Create ResObject from sat::Solvable.
Definition: ResObject.cc:43
Combining sat::Solvable and ResStatus.
Definition: PoolItem.h:50
sat::Solvable buddy() const
Definition: PoolItem.cc:52
ResStatus & statusReinit() const
Definition: PoolItem.cc:73
bool isUnwanted() const
Broken (needed) but locked patches.
Definition: PoolItem.cc:222
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: PoolItem.h:157
Easy-to use interface to the ZYPP dependency resolver.
Definition: Application.cc:19
Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: SolvableType.h:57
ResStatus & statusReinit() const
Resets status to it&#39;s initial state in the ResPool (KEEP_STATE bySOLVER or LOCKED byUSER)...
Definition: PoolItem.cc:214
bool isBySolver() const
Definition: ResStatus.h:295
#define DBG
Definition: Logger.h:95
void saveState() const
Definition: PoolItem.cc:224
static ResPool instance()
Singleton ctor.
Definition: ResPool.cc:38