From b49068c566d749130e023536d54588c948c16edf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 25 Sep 2015 11:25:25 +0200 Subject: provide public interface to hold/unhold packages We had this code lying around in apt-mark for a while now, but other frontends need this (and similar) functionality as well, so its high time that we provide a public interface in libapt for this stuff. --- apt-pkg/statechanges.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 apt-pkg/statechanges.h (limited to 'apt-pkg/statechanges.h') diff --git a/apt-pkg/statechanges.h b/apt-pkg/statechanges.h new file mode 100644 index 000000000..fa60c5864 --- /dev/null +++ b/apt-pkg/statechanges.h @@ -0,0 +1,52 @@ +#include +#include +#include + +#include + +namespace APT +{ + +/** Simple wrapper class to abstract away the differences in storing different + * states in different places potentially in different versions. + */ +class APT_PUBLIC StateChanges +{ +public: + // getter/setter for the different states + APT::VersionVector& Hold(); + void Hold(pkgCache::VerIterator const &Ver); + APT::VersionVector& Unhold(); + void Unhold(pkgCache::VerIterator const &Ver); + APT::VersionVector& Error(); + + // forgets all unsaved changes + void Discard(); + + /** commit the staged changes to the database(s). + * + * Makes the needed calls to store the requested states. + * After this call the state containers will hold only versions + * for which the storing operation succeeded. Versions where the + * storing operation failed are collected in #Error(). Note that + * error is an upper bound as states are changed in batches so it + * isn't always clear which version triggered the failure exactly. + * + * @param DiscardOutput controls if stdout/stderr should be used + * by subprocesses for (detailed) error reporting if needed. + * @return \b false if storing failed, true otherwise. + * Note that some states might be applied even if the whole operation failed. + */ + bool Save(bool const DiscardOutput = false); + + StateChanges(); + StateChanges(StateChanges&&); + StateChanges& operator=(StateChanges&&); + ~StateChanges(); + +private: + class APT_HIDDEN Private; + std::unique_ptr d; +}; + +} -- cgit v1.2.3