X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/83b880c6505a20247239d897b7387bba37942993..89901946f936446f439b95f1a9a85ac942ac2c92:/apt-pkg/contrib/error.h diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h index ed8c19153..e56999b14 100644 --- a/apt-pkg/contrib/error.h +++ b/apt-pkg/contrib/error.h @@ -148,7 +148,7 @@ public: /*{{{*/ * Most of the stuff we consider as "error" is also "fatal" for * the user as the application will not have the expected result, * but a fatal message here means that it gets printed directly - * to stderr in addiction to adding it to the list as the error + * to stderr in addition to adding it to the list as the error * leads sometimes to crashes and a maybe duplicated message * is better than "Segfault" as the only displayed text * @@ -229,13 +229,13 @@ public: /*{{{*/ /** \brief is the list empty? * - * The default checks if the list is empty or contains only notices, - * if you want to check if also no notices happened set the parameter - * flag to \b false. + * Can be used to check if the current stack level doesn't include + * anything equal or more severe than a given threshold, defaulting + * to warning level for historic reasons. * - * \param threshold minimim level considered + * \param threshold minimum level considered * - * \return \b true if an the list is empty, \b false otherwise + * \return \b true if the list is empty, \b false otherwise */ bool empty(MsgType const &threshold = WARNING) const APT_PURE; @@ -252,12 +252,11 @@ public: /*{{{*/ /** \brief outputs the list of messages to the given stream * - * Note that all messages are discarded, also the notices - * displayed or not. + * Note that all messages are discarded, even undisplayed ones. * * \param[out] out output stream to write the messages in - * \param threshold minimim level considered - * \param mergeStack + * \param threshold minimum level considered + * \param mergeStack if true recursively dumps the entire stack */ void DumpErrors(std::ostream &out, MsgType const &threshold = WARNING, bool const &mergeStack = true); @@ -317,15 +316,30 @@ private: /*{{{*/ Item(char const *Text, MsgType const &Type) : Text(Text), Type(Type) {}; - friend std::ostream& operator<< (std::ostream &out, Item i) { + APT_HIDDEN friend std::ostream& operator<< (std::ostream &out, Item i) { switch(i.Type) { case FATAL: - case ERROR: out << "E"; break; - case WARNING: out << "W"; break; - case NOTICE: out << "N"; break; - case DEBUG: out << "D"; break; + case ERROR: out << 'E'; break; + case WARNING: out << 'W'; break; + case NOTICE: out << 'N'; break; + case DEBUG: out << 'D'; break; + } + out << ": "; + std::string::size_type line_start = 0; + std::string::size_type line_end; + while ((line_end = i.Text.find_first_of("\n\r", line_start)) != std::string::npos) { + if (line_start != 0) + out << std::endl << " "; + out << i.Text.substr(line_start, line_end - line_start); + line_start = i.Text.find_first_not_of("\n\r", line_end + 1); + if (line_start == std::string::npos) + break; } - return out << ": " << i.Text; + if (line_start == 0) + out << i.Text; + else if (line_start != std::string::npos) + out << std::endl << " " << i.Text.substr(line_start); + return out; } }; @@ -333,7 +347,7 @@ private: /*{{{*/ bool PendingFlag; struct MsgStack { - std::list const Messages; + std::list Messages; bool const PendingFlag; MsgStack(std::list const &Messages, bool const &Pending) :