#ifndef ZYPP_PATCH_H
#define ZYPP_PATCH_H
+#include "zypp/base/Flags.h"
#include "zypp/sat/SolvAttr.h"
#include "zypp/ResObject.h"
public:
typedef sat::SolvableSet Contents;
+ enum Category {
+ CAT_OTHER,
+ CAT_YAST,
+ CAT_SECURITY,
+ CAT_RECOMMENDED,
+ CAT_OPTIONAL,
+ 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;
+ /** 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?
*/
bool rebootSuggested() const;
-
+
/**
* Does the patch affect the package manager itself?
* restart is suggested then
bool restartSuggested() const;
/**
- * Use \ref rebootSuggested()
+ * Does the patch needs the user to relogin to take effect?
+ * relogin is suggested then
*/
- ZYPP_DEPRECATED bool reboot_needed() const
- { return rebootSuggested(); }
+ bool reloginSuggested() const;
/**
- * Use \ref restartSuggested()
+ * \short Information or warning to be displayed to the user
*/
- ZYPP_DEPRECATED bool affects_pkg_manager() const
- { return restartSuggested(); }
+ 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
+ * installed in an unattended mode. They are considered to be
+ * \c interactive so the user gets informed about the need for
+ * reboot. \a ignoreRebootFlag_r may be used to explicitly turn
+ * off this behavior and include those patches (unless they actually
+ * contain interactive components as well, like messages or licenses).
*/
bool interactive() const;
*/
ReferenceIterator referencesEnd() const;
-
- public:
- /** Patch ID
- * \deprecated Seems to be unsused autobuild interal data?
- */
- ZYPP_DEPRECATED std::string id() const
- { return std::string(); }
-
- /** The list of all atoms building the patch
- * \deprecated Try contents().
- */
- typedef std::list<ResObject::Ptr> AtomList;
- ZYPP_DEPRECATED AtomList atoms() const
- { return AtomList(); }
-
protected:
friend Ptr make<Self>( const sat::Solvable & solvable_r );
/** Ctor */
/** 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
, sat::LookupAttr::iterator // Base
, int // Value
, boost::forward_traversal_tag // CategoryOrTraversal
- , int
+ , int // Reference
>
{
public:
* "bugzilla"
*/
std::string type() const;
+
private:
friend class boost::iterator_core_access;
-
int dereference() const { return 0; }
- void increment();
- private:
- sat::LookupAttr::iterator _hrefit;
- sat::LookupAttr::iterator _titleit;
- sat::LookupAttr::iterator _typeit;
};
inline Patch::ReferenceIterator Patch::referencesBegin() const