diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-12-29 11:20:18 +0100 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-12-31 02:29:20 +0100 |
commit | 0161280405fe5aa256dc9df6a56106dd3a1a6f38 (patch) | |
tree | 5ebd9f6acba147639e345c1bb63cc679cdc35620 | |
parent | 48c1ae9c85c2b2b529b3c0ba80da3927351f9395 (diff) |
ensure generation of valid EDSP error stanzas
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
-rw-r--r-- | apt-pkg/edsp.cc | 8 | ||||
-rwxr-xr-x | test/integration/test-external-dependency-solver-protocol | 11 |
2 files changed, 16 insertions, 3 deletions
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index b80b9a456..a2520441b 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -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"); } /*}}}*/ diff --git a/test/integration/test-external-dependency-solver-protocol b/test/integration/test-external-dependency-solver-protocol index d126cd84b..2c451d5f9 100755 --- a/test/integration/test-external-dependency-solver-protocol +++ b/test/integration/test-external-dependency-solver-protocol @@ -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' |