diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2025-02-04 18:22:35 +0100 |
|---|---|---|
| committer | Julian Andres Klode <julian.klode@canonical.com> | 2025-03-09 00:12:27 +0100 |
| commit | 71d3d399d7de75a96b2911677b74ce8b59579ee9 (patch) | |
| tree | dc83390da8358ea165392034262f87c4a3750780 /apt-pkg/depcache.h | |
| parent | 1e7f123ea59d6ae3af74725d4dab846f81d122e8 (diff) | |
Introduce pkgDepCache::Transaction for transactional depcache updates
Diffstat (limited to 'apt-pkg/depcache.h')
| -rw-r--r-- | apt-pkg/depcache.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 39d34d3e4..d2a883180 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -267,6 +267,42 @@ class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace bool InstallSuggests; }; + /** + * \brief Perform changes to the depcache atomically. + * + * The default policy for a transaction is to rollback if the number of broken packages + * increased, otherwise to commit. Call commit() or rollback() to override the default + * policy. + */ + class APT_PUBLIC Transaction final + { + struct Private; + std::unique_ptr<Private> d; + + public: + enum class Behavior + { + COMMIT, + ROLLBACK, + AUTO, + }; + + explicit Transaction(pkgDepCache &cache, Behavior behavior); + /** \brief Commit the transaction immediately */ + void commit(); + /** \brief Rollback the transaction immediately */ + void rollback(); + /** \brief Like rollback, but can be called multiple times. + * + * You can for example create a new transaction, then temporarily + * rollback to the state before the previous transaction in that + * transaction. + */ + void temporaryRollback(); + /** \brief Commit or rollback the transaction based on default policy */ + ~Transaction(); + }; + private: /** The number of open "action groups"; certain post-action * operations are suppressed if this number is > 0. @@ -274,6 +310,8 @@ class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace int group_level; friend class ActionGroup; + friend class Transaction; + public: int IncreaseActionGroupLevel(); int DecreaseActionGroupLevel(); |
