libzypp  15.3.0
Transaction.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
11 extern "C"
12 {
13  struct _Transaction;
14 }
15 #ifndef ZYPP_SAT_TRANSACTION_H
16 #define ZYPP_SAT_TRANSACTION_H
17 
18 #include <iosfwd>
19 
20 #include "zypp/base/PtrTypes.h"
21 #include "zypp/base/Flags.h"
22 #include "zypp/base/Iterator.h"
24 
25 #include "zypp/sat/SolvIterMixin.h"
26 #include "zypp/sat/Solvable.h"
27 #include "zypp/sat/Queue.h"
28 
29 #include "zypp/PoolItem.h"
30 
32 namespace zypp
33 {
34  namespace sat
36  {
37 
38  namespace detail
39  {
41  class Transaction_iterator;
43  class Transaction_const_iterator;
44  }
45 
55  class Transaction : public SolvIterMixin<Transaction, detail::Transaction_const_iterator>
56  {
57  friend std::ostream & operator<<( std::ostream & str, const Transaction & obj );
58  friend std::ostream & dumpOn( std::ostream & str, const Transaction & obj );
59  friend bool operator==( const Transaction & lhs, const Transaction & rhs );
60 
61  public:
63  class Step;
64 
66  enum StepType
67  {
72  };
73 
75  enum StepStage
76  {
77  STEP_TODO = (1 << 0),
78  STEP_DONE = (1 << 1),
79  STEP_ERROR = (1 << 2),
80  };
81 
82  ZYPP_DECLARE_FLAGS(StepStages,StepStage);
83 
84  public:
85  struct LoadFromPoolType {};
87 
88  public:
90  Transaction();
91 
94 
96  ~Transaction();
97 
98  public:
100  bool valid() const;
101 
103  explicit operator bool() const
104  { return valid(); }
105 
111  bool order();
112 
114  bool empty() const;
115 
117  size_t size() const;
118 
121 
123  const_iterator begin() const;
125  iterator begin();
126 
128  const_iterator end() const;
130  iterator end();
131 
133  const_iterator find( const sat::Solvable & solv_r ) const;
134  iterator find( const sat::Solvable & solv_r );
136  const_iterator find( const ResObject::constPtr & resolvable_r ) const;
137  iterator find( const ResObject::constPtr & resolvable_r );
139  const_iterator find( const PoolItem & pi_r ) const;
140  iterator find( const PoolItem & pi_r );
141 
142  public:
157  struct FilterAction;
158  typedef filter_iterator<FilterAction,const_iterator> action_iterator;
159 
161  bool actionEmpty( StepStages filter_r = StepStages() ) const;
162 
164  size_t actionSize( StepStages filter_r = StepStages() ) const;
165 
167  action_iterator actionBegin( StepStages filter_r = StepStages() ) const;
168 
170  action_iterator actionEnd() const;
171 
173 
174  public:
178  int installedResult( Queue & result_r ) const;
179 
181  StringQueue autoInstalled() const;
182 
184  void autoInstalled( const StringQueue & queue_r );
185 
186  public:
188  class Impl;
189  private:
192  };
193 
194  ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Transaction::StepStages);
195 
197  std::ostream & operator<<( std::ostream & str, const Transaction & obj );
198 
200  std::ostream & dumpOn( std::ostream & str, const Transaction & obj );
201 
203  bool operator==( const Transaction & lhs, const Transaction & rhs );
204 
206  inline bool operator!=( const Transaction & lhs, const Transaction & rhs )
207  { return !( lhs == rhs ); }
208 
209 
221  {
222  friend std::ostream & operator<<( std::ostream & str, const Step & obj );
223 
224  public:
225  Step();
226  Step( const RW_pointer<Impl> & pimpl_r, detail::IdType id_r )
227  : _solv( id_r )
228  , _pimpl( pimpl_r )
229  {}
230 
231  public:
233  StepType stepType() const;
234 
236  StepStage stepStage() const;
237 
239  void stepStage( StepStage val_r );
240 
246  { return _solv; }
247 
259  IdString ident() const;
260 
262  Edition edition() const;
263 
265  Arch arch() const;
267 
269  operator const Solvable &() const { return _solv; }
271  operator Solvable &() { return _solv; }
272 
273  private:
277  };
278 
280  std::ostream & operator<<( std::ostream & str, const Transaction::Step & obj );
281 
283  std::ostream & operator<<( std::ostream & str, Transaction::StepType obj );
284 
286  std::ostream & operator<<( std::ostream & str, Transaction::StepStage obj );
287 
289  namespace detail
290  {
291 
294  class Transaction_iterator : public boost::iterator_adaptor<
295  Transaction_iterator // Derived
296  , const detail::IdType * // Base
297  , Transaction::Step // Value
298  , boost::forward_traversal_tag // CategoryOrTraversal
299  , Transaction::Step // Reference
300  >
301  {
302  public:
304  Transaction_iterator( const RW_pointer<Transaction::Impl> & pimpl_r, base_type id_r )
305  : Transaction_iterator::iterator_adaptor_( id_r )
306  , _pimpl( pimpl_r )
307  {}
308 
309  private:
310  friend class boost::iterator_core_access;
311 
312  reference dereference() const
313  { return Transaction::Step( _pimpl, *base() ); }
314 
315  private:
319  };
320 
323  class Transaction_const_iterator : public boost::iterator_adaptor<
324  Transaction_const_iterator // Derived
325  , const detail::IdType * // Base
326  , const Transaction::Step // Value
327  , boost::forward_traversal_tag // CategoryOrTraversal
328  , const Transaction::Step // Reference
329  >
330  {
331  public:
335  : Transaction_const_iterator::iterator_adaptor_( id_r )
336  , _pimpl( pimpl_r )
337  {}
338 
339  private:
340  friend class boost::iterator_core_access;
341 
342  reference dereference() const
343  { return Transaction::Step( _pimpl, *base() ); }
344 
345  private:
348  };
349 
351  } // namespace detail
353 
355  { return( resolvable_r ? find( resolvable_r->satSolvable() ) : end() ); }
356 
358  { return( resolvable_r ? find( resolvable_r->satSolvable() ) : end() ); }
359 
361  { return find( pi_r.satSolvable() ); }
362 
364  { return find( pi_r.satSolvable() ); }
365 
366 
368  {
370  FilterAction( StepStages filter_r ) : _filter( filter_r ) {}
371 
372  bool operator()( const Transaction::Step & step_r ) const
373  {
374  if ( step_r.stepType() == Transaction::TRANSACTION_IGNORE )
375  return false; // no action
376  return !_filter || _filter.testFlag( step_r.stepStage() );
377  }
378 
379  StepStages _filter;
380  };
381 
382  inline Transaction::action_iterator Transaction::actionBegin( StepStages filter_r ) const
383  { return make_filter_begin( FilterAction( filter_r ), *this ); }
384 
386  { return make_filter_end( FilterAction(), *this ); }
387 
388  inline bool Transaction::actionEmpty( StepStages filter_r ) const
389  { return( actionBegin( filter_r ) == actionEnd() ); }
390 
391  inline size_t Transaction::actionSize( StepStages filter_r ) const
392  {
393  size_t cnt = 0;
394  for_( it, actionBegin( filter_r ), actionEnd() )
395  ++cnt;
396  return cnt;
397  }
398 
400  } // namespace sat
403 } // namespace zypp
405 #endif // ZYPP_SAT_TRANSACTION_H
StringQueue autoInstalled() const
Return the ident strings of all packages that would be auto-installed after the transaction is run...
Definition: Transaction.cc:357
int IdType
Generic Id type.
Definition: PoolMember.h:82
A Solvable object within the sat Pool.
Definition: Solvable.h:55
friend bool operator==(const Transaction &lhs, const Transaction &rhs)
Definition: Transaction.cc:375
[M] Install(multiversion) item (
Definition: Transaction.h:71
ZYPP_DECLARE_FLAGS(StepStages, StepStage)
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: Transaction.h:276
Architecture.
Definition: Arch.h:36
friend std::ostream & dumpOn(std::ostream &str, const Transaction &obj)
Definition: Transaction.cc:366
size_t actionSize(StepStages filter_r=StepStages()) const
Number of steps in [filtered] transaction steps.
Definition: Transaction.h:391
RW_pointer< Transaction::Impl > _pimpl
Pointer to implementation.
Definition: Transaction.h:347
const_iterator find(const sat::Solvable &solv_r) const
Return iterator pointing to solv_r or end.
Definition: Transaction.cc:348
String related utilities and Regular expression matching.
StepStage
Step action result.
Definition: Transaction.h:75
Transaction()
Default ctor: empty transaction.
Definition: Transaction.cc:313
Access to the sat-pools string space.
Definition: IdString.h:39
Libsolv transaction wrapper.
Definition: Transaction.h:55
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:27
Edition represents [epoch:]version[-release]
Definition: Edition.h:60
filter_iterator< _Filter, typename _Container::const_iterator > make_filter_begin(_Filter f, const _Container &c)
Convenience to create filter_iterator from container::begin().
Definition: Iterator.h:99
TraitsType::constPtrType constPtr
Definition: ResObject.h:50
Transaction_const_iterator(const RW_pointer< Transaction::Impl > &pimpl_r, base_type id_r)
Definition: Transaction.h:334
Step(const RW_pointer< Impl > &pimpl_r, detail::IdType id_r)
Definition: Transaction.h:226
const_iterator begin() const
Iterator to the first TransactionStep.
Definition: Transaction.cc:336
int installedResult(Queue &result_r) const
Return all packages that would be installed after the transaction is run.
Definition: Transaction.cc:354
StepStage stepStage() const
Step action result.
Definition: Transaction.cc:390
[ ] Nothing (includes implicit deletes due to obsoletes and non-package actions)
Definition: Transaction.h:68
Base class providing common iterator types based on a Solvable iterator.
StepType stepType() const
Type of action to perform in this step.
Definition: Transaction.cc:387
filter_iterator< FilterAction, const_iterator > action_iterator
Definition: Transaction.h:157
Transaction_iterator(const RW_pointer< Transaction::Impl > &pimpl_r, base_type id_r)
Definition: Transaction.h:304
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: Transaction.h:188
friend std::ostream & operator<<(std::ostream &str, const Transaction &obj)
Definition: Transaction.cc:363
bool actionEmpty(StepStages filter_r=StepStages()) const
Whether the [filtered] transaction contains any steps .
Definition: Transaction.h:388
A single step within a Transaction.
Definition: Transaction.h:220
detail::Transaction_const_iterator const_iterator
Definition: Transaction.h:120
Transaction implementation.
Definition: Transaction.cc:47
bool order()
Order transaction steps for commit.
Definition: Transaction.cc:327
ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Transaction::StepStages)
bool valid() const
Whether transaction actually contains data and also fits the current pools content.
Definition: Transaction.cc:324
action_iterator actionEnd() const
Pointer behind the last action step in transaction.
Definition: Transaction.h:385
Solvable satSolvable() const
Return the corresponding Solvable.
Definition: Transaction.h:245
Libsolv Id queue wrapper.
Definition: Queue.h:38
StepType
Type of (rpm) action to perform in a Step.
Definition: Transaction.h:66
size_t size() const
Number of steps in transaction steps.
Definition: Transaction.cc:333
action_iterator actionBegin(StepStages filter_r=StepStages()) const
Pointer to the 1st action step in [filtered] transaction.
Definition: Transaction.h:382
static constexpr LoadFromPoolType loadFromPool
Definition: Transaction.h:86
bool empty() const
Whether the transaction contains any steps.
Definition: Transaction.cc:330
const_iterator end() const
Iterator behind the last TransactionStep.
Definition: Transaction.cc:342
sat::Solvable satSolvable() const
Return the corresponding sat::Solvable.
Definition: PoolItem.h:114
filter_iterator< _Filter, typename _Container::const_iterator > make_filter_end(_Filter f, const _Container &c)
Convenience to create filter_iterator from container::end().
Definition: Iterator.h:115
FilterAction(StepStages filter_r)
Definition: Transaction.h:370
Reference to a PoolItem connecting ResObject and ResStatus.
Definition: PoolItem.h:50
bool operator()(const Transaction::Step &step_r) const
Definition: Transaction.h:372
RW_pointer< Transaction::Impl > _pimpl
Pointer to implementation.
Definition: Transaction.h:318
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
detail::Transaction_iterator iterator
Definition: Transaction.h:119
bool operator!=(const Transaction &lhs, const Transaction &rhs)
Definition: Transaction.h:206