]> git.saurik.com Git - apt.git/commitdiff
ensure generation of valid EDSP error stanzas
authorDavid Kalnischkies <david@kalnischkies.de>
Thu, 29 Dec 2016 10:20:18 +0000 (11:20 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sat, 31 Dec 2016 01:29:20 +0000 (02:29 +0100)
The crude way of preparing a message to be a multiline value failed at
generation valid deb822 in case the error message ended with a new line
like the resolving errors from apt do. apt itself can parse these, but
other tools like grep-dctrl choke on it, so be nice and print valid.

Reported-By: Johannes 'josch' Schauer on IRC
apt-pkg/edsp.cc
test/integration/test-external-dependency-solver-protocol

index b80b9a45679963899b26e12458a07e6e213bfc4f..a2520441b154e735da751b30754a4a231b633f3a 100644 (file)
@@ -931,14 +931,18 @@ bool EDSP::WriteProgress(unsigned short const percent, const char* const message
 }
                                                                        /*}}}*/
 // EDSP::WriteError - format an error message to be send to file descriptor /*{{{*/
+static std::string formatMessage(std::string const &msg)
+{
+       return SubstVar(SubstVar(APT::String::Strip(msg), "\n\n", "\n.\n"), "\n", "\n ");
+}
 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());
+       fprintf(output, "Message: %s\n\n", formatMessage(message).c_str());
        return true;
 }
 bool EDSP::WriteError(char const * const uuid, std::string const &message, FileFd &output) {
        return WriteOkay(output, "Error: ", uuid, "\n",
-             "Message: ", SubstVar(SubstVar(message, "\n\n", "\n.\n"), "\n", "\n "),
+             "Message: ", formatMessage(message),
              "\n\n");
 }
                                                                        /*}}}*/
index d126cd84b4c87cea1571c15be77df97daf419216..2c451d5f95abf234a6f108b274d300f853f25939 100755 (executable)
@@ -148,7 +148,16 @@ testsuccess aptget upgrade -s --solver apt
 testfailure aptget install awesome badstuff -s
 testfailure aptget install awesome badstuff -s --solver apt
 testsuccess grep 'ERR_UNSOLVABLE' rootdir/tmp/testfailure.output
-
+msgtest 'A resolving error is format as' 'valid parseable EDSP error'
+if dpkg-checkbuilddeps -d 'dctrl-tools' /dev/null >/dev/null 2>&1; then
+       if apthelper cat-file rootdir/var/log/apt/edsp.last.xz | aptinternalsolver > solver.result 2>&1; then
+               testsuccess --nomsg grep-dctrl -FError ERR -- solver.result
+       else
+               msgfail
+       fi
+else
+       msgskip 'dctrl-tools not installed'
+fi
 configarchitecture 'armel'
 testfailure aptget install --solver apt awesomecoolstuff:i386 -s
 msgtest 'An invalid EDSP file generates a' 'hard error'