]> git.saurik.com Git - apt.git/commitdiff
implement correct error reporting
authorDavid Kalnischkies <kalnischkies@gmail.com>
Sat, 7 May 2011 13:49:51 +0000 (15:49 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sat, 7 May 2011 13:49:51 +0000 (15:49 +0200)
apt-pkg/edsp.cc
apt-pkg/edsp.h
cmdline/apt-dump-solver.cc
cmdline/apt-internal-solver.cc

index d604110ef6bc37e6c5a27e6d19a05b461f475c1b..7ece92d2e4ef433096fbc3c0dccac9b97869501d 100644 (file)
@@ -256,6 +256,11 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache) {
                        else
                                std::clog << msg << std::endl;
                        continue;
+               } else if (section.Exists("Error") == true) {
+                       std::cerr << "The solver encountered an error of type: " << section.FindS("Error") << std::endl;
+                       std::cerr << "The following information might help you to understand what is wrong:" << std::endl;
+                       std::cerr << SubstVar(SubstVar(section.FindS("Message"), "\n .\n", "\n\n"), "\n ", "\n") << std::endl << std::endl;
+                       break;
                } else if (section.Exists("Autoremove") == true)
                        type = "Autoremove";
                else
@@ -457,8 +462,13 @@ bool EDSP::WriteProgress(unsigned short const percent, const char* const message
        return true;
 }
                                                                        /*}}}*/
-bool EDSP::WriteError(std::string const &message, FILE* output) { return false; }
-
+// EDSP::WriteError - format an error message to be send to file descriptor /*{{{*/
+bool EDSP::WriteError(char const * const uuid, std::string const &message, FILE* output) {
+       fprintf(output, "Error: %s\n", uuid);
+       fprintf(output, "Message: %s\n\n", SubstVar(SubstVar(message, "\n\n", "\n.\n"), "\n", "\n ").c_str());
+       return true;
+}
+                                                                       /*}}}*/
 // EDSP::ExecuteSolver - fork requested solver and setup ipc pipes     {{{*/
 bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_out) {
        std::vector<std::string> const solverDirs = _config->FindVector("Dir::Bin::Solvers");
index 98a70d7f6b24515c52717c3900971f265174887b..210188d038dd75ad11a2e81c5da5059c9f3d0b85 100644 (file)
@@ -171,8 +171,13 @@ public:
         *
         *  The first line of the message should be a short description
         *  of the error so it can be used for dialog titles or alike
+        *
+        *  \param uuid of this error message
+        *  \param message is free form text to discribe the error
+        *  \param output the front-end listens for error messages
         */
-       bool static WriteError(std::string const &message, FILE* output);
+       bool static WriteError(char const * const uuid, std::string const &message, FILE* output);
+
 
        /** \brief executes the given solver and returns the pipe ends
         *
index 5bcfe4f0614098e705086dd082a90c22cb17052b..dab0cc6fd63a0059f6eb3f72c0ce08bcc2464cf5 100644 (file)
@@ -46,5 +46,5 @@ int main(int argc,const char *argv[])                                 /*{{{*/
        fclose(output);
        fclose(input);
 
-       EDSP::WriteError("I am too dumb, i can just dump!", stdout);
+       EDSP::WriteError("ERR_JUST_DUMPING", "I am too dumb, i can just dump!\nPlease use one of my friends instead!", stdout);
 }
index df6a6f569142818e50cf0a548ef1973e0199ee78..ad00a0e2327cc14aee74e9dfd83e6c1479805d0b 100644 (file)
@@ -158,16 +158,16 @@ int main(int argc,const char *argv[])                                     /*{{{*/
 
        if (upgrade == true) {
                if (pkgAllUpgrade(CacheFile) == false) {
-                       EDSP::WriteError("An upgrade error occured", output);
+                       EDSP::WriteError("ERR_UNSOLVABLE_UPGRADE", "An upgrade error occured", output);
                        return 0;
                }
        } else if (distUpgrade == true) {
                if (pkgDistUpgrade(CacheFile) == false) {
-                       EDSP::WriteError("An dist-upgrade error occured", output);
+                       EDSP::WriteError("ERR_UNSOLVABLE_DIST_UPGRADE", "An dist-upgrade error occured", output);
                        return 0;
                }
        } else if (Fix.Resolve() == false) {
-               EDSP::WriteError("An error occured", output);
+               EDSP::WriteError("ERR_UNSOLVABLE", "An error occured", output);
                return 0;
        }