#ifndef ZYPP_PATCH_H
#define ZYPP_PATCH_H
+#include "zypp/base/Flags.h"
#include "zypp/sat/SolvAttr.h"
#include "zypp/ResObject.h"
CAT_DOCUMENT
};
+ /**
+ * Flags defining if and why this
+ * patch is interactive.
+ */
+ enum InteractiveFlag {
+ NoFlags = 0x0000,
+ Reboot = 0x0001,
+ Message = 0x0002,
+ License = 0x0004
+ };
+ ZYPP_DECLARE_FLAGS(InteractiveFlags, InteractiveFlag);
+
+ /**
+ * \brief Possible severity levels for (security) patches.
+ * Metadata string values are mapped to this enum to ease
+ * computations. For a string representation call
+ * \ref asSring( const Patch::SeverityFlag & ).
+ */
+ enum SeverityFlag {
+ SEV_NONE = 0, //!< no value specified
+ SEV_OTHER = 1, //!< unknown value specified
+ SEV_LOW = 1<<1, //!< Low
+ SEV_MODERATE = 1<<2, //!< Moderate
+ SEV_IMPORTANT = 1<<3, //!< Important
+ SEV_CRITICAL = 1<<4 //!< Critical
+ };
+ ZYPP_DECLARE_FLAGS(SeverityFlags, SeverityFlag);
+
public:
/**
* Issue date time. For now it is the same as
Date timestamp() const
{ return buildtime(); }
+ /** \name Patch Category */
+ //@{
/**
* Patch category (recommended, security,...)
*/
std::string category() const;
- /** Patch category as enum of wellknown categories.
+ /** This patch's category as enum of wellknown categories.
* Unknown values are mapped to \ref CAT_OTHER.
*/
Category categoryEnum() const;
+ /** Whether this patch's category matches \a category_r */
+ bool isCategory( const std::string & category_r ) const;
+
+ /** Patch category as enum of wellknown categories.
+ * Unknown values are mapped to \ref CAT_OTHER.
+ */
+ static Category categoryEnum( const std::string & category_r );
+ //@}
+
+ /** \name Patch Severity */
+ //@{
+ /**
+ * Severity string as specified in metadata.
+ * For use in computaions see \ref severityFlag.
+ */
+ std::string severity() const;
+
+ /**
+ * Severity string mapped to an enum.
+ * Unknown string values are mapped to \ref SEV_OTHER
+ */
+ SeverityFlag severityFlag() const;
+
+ /** Whether this patch's severity matches \a severity_r */
+ bool isSeverity( const std::string & severity_r ) const;
+
+ /** Severity string mapped to an enum.
+ * Unknown string values are mapped to \ref SEV_OTHER
+ */
+ static SeverityFlag severityFlag( const std::string & category_r );
+ //@}
+
/**
* Does the system need to reboot to finish the update process?
*/
std::string message( const Locale & lang_r = Locale() ) const;
/**
+ * Get the InteractiveFlags of this Patch
+ */
+ InteractiveFlags interactiveFlags() const;
+
+ /**
+ * Is the patch still interactive when ignoring this flags?
+ */
+ bool interactiveWhenIgnoring( InteractiveFlags flags_r = NoFlags ) const;
+
+ /**
* Is the patch installation interactive? (does it need user input?)
*
* For security reasons patches requiring a reboot are not
* off this behavior and include those patches (unless they actually
* contain interactive components as well, like messages or licenses).
*/
- bool interactive( bool ignoreRebootFlag_r = false ) const;
+ bool interactive() const;
public:
/**
/** Dtor */
virtual ~Patch();
};
+ ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Patch::InteractiveFlags);
+ ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Patch::SeverityFlags);
+ /** \relates Patch::SeverityFlag string representation.*/
+ std::string asString( const Patch::SeverityFlag & obj );
/**
* Query class for Patch issue references