| 1 | #include <apt-pkg/pkgcache.h> |
| 2 | #include <apt-pkg/cacheset.h> |
| 3 | #include <apt-pkg/macros.h> |
| 4 | |
| 5 | #include <memory> |
| 6 | |
| 7 | namespace APT |
| 8 | { |
| 9 | |
| 10 | /** Simple wrapper class to abstract away the differences in storing different |
| 11 | * states in different places potentially in different versions. |
| 12 | */ |
| 13 | class APT_PUBLIC StateChanges |
| 14 | { |
| 15 | public: |
| 16 | // getter/setter for the different states |
| 17 | #define APT_GETTERSETTER(Name) \ |
| 18 | APT::VersionVector& Name(); \ |
| 19 | void Name(pkgCache::VerIterator const &Ver) |
| 20 | APT_GETTERSETTER(Hold); |
| 21 | APT_GETTERSETTER(Unhold); |
| 22 | APT_GETTERSETTER(Install); |
| 23 | APT_GETTERSETTER(Remove); |
| 24 | APT_GETTERSETTER(Purge); |
| 25 | APT::VersionVector& Error(); |
| 26 | #undef APT_GETTERSETTER |
| 27 | |
| 28 | // operate on all containers at once |
| 29 | void clear(); |
| 30 | bool empty() const; |
| 31 | |
| 32 | /** commit the staged changes to the database(s). |
| 33 | * |
| 34 | * Makes the needed calls to store the requested states. |
| 35 | * After this call the state containers will hold only versions |
| 36 | * for which the storing operation succeeded. Versions where the |
| 37 | * storing operation failed are collected in #Error(). Note that |
| 38 | * error is an upper bound as states are changed in batches so it |
| 39 | * isn't always clear which version triggered the failure exactly. |
| 40 | * |
| 41 | * @param DiscardOutput controls if stdout/stderr should be used |
| 42 | * by subprocesses for (detailed) error reporting if needed. |
| 43 | * @return \b false if storing failed, true otherwise. |
| 44 | * Note that some states might be applied even if the whole operation failed. |
| 45 | */ |
| 46 | bool Save(bool const DiscardOutput = false); |
| 47 | |
| 48 | StateChanges(); |
| 49 | StateChanges(StateChanges&&); |
| 50 | StateChanges& operator=(StateChanges&&); |
| 51 | ~StateChanges(); |
| 52 | |
| 53 | private: |
| 54 | class APT_HIDDEN Private; |
| 55 | std::unique_ptr<Private> d; |
| 56 | }; |
| 57 | |
| 58 | } |