libzypp 17.37.17
Transaction.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
11#ifndef ZYPP_SAT_TRANSACTION_H
12#define ZYPP_SAT_TRANSACTION_H
13
14#include <iosfwd>
15
16#include <zypp/base/PtrTypes.h>
17#include <zypp/base/Flags.h>
18#include <zypp/base/Iterator.h>
19#include <zypp-core/base/DefaultIntegral>
20
22#include <zypp/sat/Solvable.h>
23#include <zypp/sat/Queue.h>
24
25#include <zypp/PoolItem.h>
26
28namespace zypp
29{
31 namespace sat
32 {
33
34 namespace detail
35 {
40 }
41
51 class ZYPP_API Transaction : public SolvIterMixin<Transaction, detail::Transaction_const_iterator>
52 {
53 friend std::ostream & operator<<( std::ostream & str, const Transaction & obj );
54 friend std::ostream & dumpOn( std::ostream & str, const Transaction & obj );
55 friend bool operator==( const Transaction & lhs, const Transaction & rhs );
56
57 public:
59 class Step;
60
69
72 {
73 STEP_TODO = (1 << 0),
74 STEP_DONE = (1 << 1),
75 STEP_ERROR = (1 << 2),
76 };
77
79
80 public:
81 struct LoadFromPoolType {};
83
84 public:
87
90
93
94 public:
96 bool valid() const;
97
99 explicit operator bool() const
100 { return valid(); }
101
107 bool order();
108
110 bool empty() const;
111
113 size_t size() const;
114
117
119 const_iterator begin() const;
121 iterator begin();
122
124 const_iterator end() const;
126 iterator end();
127
129 const_iterator find( const sat::Solvable & solv_r ) const;
130 iterator find( const sat::Solvable & solv_r );
132 const_iterator find( const ResObject::constPtr & resolvable_r ) const;
133 iterator find( const ResObject::constPtr & resolvable_r );
135 const_iterator find( const PoolItem & pi_r ) const;
136 iterator find( const PoolItem & pi_r );
137
138 public:
153 struct FilterAction;
155
157 bool actionEmpty( StepStages filter_r = StepStages() ) const;
158
160 size_t actionSize( StepStages filter_r = StepStages() ) const;
161
163 action_iterator actionBegin( StepStages filter_r = StepStages() ) const;
164
167
169 Iterable<action_iterator> action( StepStages filter_r = StepStages() ) const;
171
172 public:
176 int installedResult( Queue & result_r ) const;
177
180
182 void autoInstalled( const StringQueue & queue_r );
183
184 public:
186 struct Impl;
187 private:
190 };
191
192 ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Transaction::StepStages);
193
195 std::ostream & operator<<( std::ostream & str, const Transaction & obj ) ZYPP_API;
196
198 std::ostream & dumpOn( std::ostream & str, const Transaction & obj ) ZYPP_API;
199
201 bool operator==( const Transaction & lhs, const Transaction & rhs ) ZYPP_API;
202
204 inline bool operator!=( const Transaction & lhs, const Transaction & rhs )
205 { return !( lhs == rhs ); }
206
207
219 {
220 friend std::ostream & operator<<( std::ostream & str, const Step & obj );
221
222 public:
223 Step();
224 Step( const RW_pointer<Impl> & pimpl_r, detail::IdType id_r )
225 : _solv( id_r )
226 , _pimpl( pimpl_r )
227 {}
228
229 public:
231 StepType stepType() const;
232
234 StepStage stepStage() const;
235
237 void stepStage( StepStage val_r );
238
244 { return _solv; }
245
256
257 IdString ident() const;
258
260 Edition edition() const;
261
263 Arch arch() const;
265
267 operator const Solvable &() const { return _solv; }
269 operator Solvable &() { return _solv; }
270
271 private:
275 };
276
278 std::ostream & operator<<( std::ostream & str, const Transaction::Step & obj ) ZYPP_API;
279
281 std::ostream & operator<<( std::ostream & str, Transaction::StepType obj ) ZYPP_API;
282
284 std::ostream & operator<<( std::ostream & str, Transaction::StepStage obj ) ZYPP_API;
285
287 namespace detail
288 {
289
292 class Transaction_iterator : public boost::iterator_adaptor<
293 Transaction_iterator // Derived
294 , const detail::IdType * // Base
295 , Transaction::Step // Value
296 , boost::forward_traversal_tag // CategoryOrTraversal
297 , Transaction::Step // Reference
298 >
299 {
300 public:
302 Transaction_iterator( const RW_pointer<Transaction::Impl> & pimpl_r, base_type id_r )
303 : Transaction_iterator::iterator_adaptor_( id_r )
304 , _pimpl( pimpl_r )
305 {}
306
307 private:
309
310 reference dereference() const
311 { return Transaction::Step( _pimpl, *base() ); }
312
313 private:
317 };
318
321 class Transaction_const_iterator : public boost::iterator_adaptor<
322 Transaction_const_iterator // Derived
323 , const detail::IdType * // Base
324 , const Transaction::Step // Value
325 , boost::forward_traversal_tag // CategoryOrTraversal
326 , const Transaction::Step // Reference
327 >
328 {
329 public:
333 : Transaction_const_iterator::iterator_adaptor_( id_r )
334 , _pimpl( pimpl_r )
335 {}
336
337 private:
339
340 reference dereference() const
341 { return Transaction::Step( _pimpl, *base() ); }
342
343 private:
346 };
347
349 } // namespace detail
351
353 { return( resolvable_r ? find( resolvable_r->satSolvable() ) : end() ); }
354
356 { return( resolvable_r ? find( resolvable_r->satSolvable() ) : end() ); }
357
359 { return find( pi_r.satSolvable() ); }
360
362 { return find( pi_r.satSolvable() ); }
363
364
366 {
368 FilterAction( StepStages filter_r ) : _filter( filter_r ) {}
369
370 bool operator()( const Transaction::Step & step_r ) const
371 {
373 return false; // no action
374 return !_filter || _filter.testFlag( step_r.stepStage() );
375 }
376
377 StepStages _filter;
378 };
379
380 inline Transaction::action_iterator Transaction::actionBegin( StepStages filter_r ) const
381 { return make_filter_begin( FilterAction( filter_r ), *this ); }
382
385
386 inline bool Transaction::actionEmpty( StepStages filter_r ) const
387 { return( actionBegin( filter_r ) == actionEnd() ); }
388
389 inline size_t Transaction::actionSize( StepStages filter_r ) const
390 {
391 size_t cnt = 0;
392 for_( it, actionBegin( filter_r ), actionEnd() )
393 ++cnt;
394 return cnt;
395 }
396
398 { return makeIterable( actionBegin( filter_r ), actionEnd() ); }
399
401 } // namespace sat
404} // namespace zypp
406#endif // ZYPP_SAT_TRANSACTION_H
std::ostream & operator<<(std::ostream &str, const zypp::sat::detail::CDataiterator *obj)
An iterator over the subset of elements of some sequence which satisfy a given predicate.
Architecture.
Definition Arch.h:37
Edition represents [epoch:]version[-release]
Definition Edition.h:61
Access to the sat-pools string space.
Definition IdString.h:44
Iterable< TIterator > makeIterable(TIterator &&begin_r, TIterator &&end_r)
convenient construction.
Definition Iterable.h:88
Combining sat::Solvable and ResStatus.
Definition PoolItem.h:51
TraitsType::constPtrType constPtr
Definition ResObject.h:43
Libsolv Id queue wrapper.
Definition Queue.h:36
A Solvable object within the sat Pool.
Definition Solvable.h:54
A single step within a Transaction.
Step(const RW_pointer< Impl > &pimpl_r, detail::IdType id_r)
StepType stepType() const
Type of action to perform in this step.
StepStage stepStage() const
Step action result.
friend std::ostream & operator<<(std::ostream &str, const Step &obj)
RW_pointer< Impl > _pimpl
Pointer to implementation.
Solvable satSolvable() const
Return the corresponding Solvable.
Libsolv transaction wrapper.
Definition Transaction.h:52
ZYPP_DECLARE_FLAGS(StepStages, StepStage)
size_t actionSize(StepStages filter_r=StepStages()) const
Number of steps in [filtered] transaction steps.
detail::Transaction_iterator iterator
const_iterator end() const
Iterator behind the last TransactionStep.
bool actionEmpty(StepStages filter_r=StepStages()) const
Whether the [filtered] transaction contains any steps .
RW_pointer< Impl > _pimpl
Pointer to implementation.
bool operator!=(const Transaction &lhs, const Transaction &rhs)
int installedResult(Queue &result_r) const
Return all packages that would be installed after the transaction is run.
StringQueue autoInstalled() const
Return the ident strings of all packages that would be auto-installed after the transaction is run.
friend std::ostream & dumpOn(std::ostream &str, const Transaction &obj)
const_iterator begin() const
Iterator to the first TransactionStep.
detail::Transaction_const_iterator const_iterator
bool valid() const
Whether transaction actually contains data and also fits the current pools content.
Transaction()
Default ctor: empty transaction.
Iterable< action_iterator > action(StepStages filter_r=StepStages()) const
Iterate the [filtered] transaction steps.
friend bool operator==(const Transaction &lhs, const Transaction &rhs)
static constexpr LoadFromPoolType loadFromPool
Definition Transaction.h:82
const_iterator find(const sat::Solvable &solv_r) const
Return iterator pointing to solv_r or end.
StepType
Type of (rpm) action to perform in a Step.
Definition Transaction.h:63
@ TRANSACTION_MULTIINSTALL
[M] Install(multiversion) item (
Definition Transaction.h:67
@ TRANSACTION_INSTALL
[+] Install(update) item
Definition Transaction.h:66
@ TRANSACTION_IGNORE
[ ] Nothing (includes implicit deletes due to obsoletes and non-package actions)
Definition Transaction.h:64
@ TRANSACTION_ERASE
[-] Delete item
Definition Transaction.h:65
action_iterator actionBegin(StepStages filter_r=StepStages()) const
Pointer to the 1st action step in [filtered] transaction.
filter_iterator< FilterAction, const_iterator > action_iterator
action_iterator actionEnd() const
Pointer behind the last action step in transaction.
StepStage
Step action result.
Definition Transaction.h:72
@ STEP_DONE
[OK] success
Definition Transaction.h:74
@ STEP_TODO
[__] unprocessed
Definition Transaction.h:73
Transaction_const_iterator(const RW_pointer< Transaction::Impl > &pimpl_r, base_type id_r)
RW_pointer< Transaction::Impl > _pimpl
Pointer to implementation.
RW_pointer< Transaction::Impl > _pimpl
Pointer to implementation.
Transaction_iterator(const RW_pointer< Transaction::Impl > &pimpl_r, base_type id_r)
String related utilities and Regular expression matching.
int IdType
Generic Id type.
Definition PoolMember.h:104
Libsolv interface
bool empty() const
Whether neither idents nor provides are set.
std::ostream & operator<<(std::ostream &str, const FileConflicts &obj)
Queue StringQueue
Queue with String ids.
Definition Queue.h:28
std::ostream & dumpOn(std::ostream &str, const LocaleSupport &obj)
bool operator==(const Map &lhs, const Map &rhs)
Definition Map.cc:125
Easy-to use interface to the ZYPP dependency resolver.
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_begin(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::begin().
Definition Iterator.h:101
const Arch Arch_armv7hnl Arch_armv7nhl ZYPP_API
Definition Arch.h:247
filter_iterator< TFilter, typename TContainer::const_iterator > make_filter_end(TFilter f, const TContainer &c)
Convenience to create filter_iterator from container::end().
Definition Iterator.h:117
Wrapper for const correct access via Smart pointer types.
Definition PtrTypes.h:293
Solvable satSolvable() const
Return the corresponding sat::Solvable.
bool operator()(const Transaction::Step &step_r) const
Transaction implementation.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition Easy.h:27
#define ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Name)
Definition Flags.h:177