From c4cb6ea2bc77f1f9239ce81ffc7a0fa6b540b1ab Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 22 Jun 2004 08:50:25 +0000 Subject: [PATCH] * Refactoring. --- src/libstore/normalise.cc | 24 +++++------------------- src/libstore/store.cc | 3 ++- src/libutil/util.cc | 13 +++++++++++++ src/libutil/util.hh | 5 +++++ 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc index 937dbc7f9..29a6c339c 100644 --- a/src/libstore/normalise.cc +++ b/src/libstore/normalise.cc @@ -497,14 +497,8 @@ void NormalisationGoal::buildDone() /* Check the exit status. */ if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { deleteTmpDir(false); - if (WIFEXITED(status)) - throw Error(format("builder for `%1%' failed with exit code %2%") - % nePath % WEXITSTATUS(status)); - else if (WIFSIGNALED(status)) - throw Error(format("builder for `%1%' failed due to signal %2%") - % nePath % WTERMSIG(status)); - else - throw Error(format("builder for `%1%' failed died abnormally") % nePath); + throw Error(format("builder for `%1%' %2%") + % nePath % statusToString(status)); } deleteTmpDir(true); @@ -1425,17 +1419,9 @@ void SubstitutionGoal::finished() debug(format("substitute for `%1%' finished") % storePath); /* Check the exit status. */ - /* !!! cut & paste */ - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { - if (WIFEXITED(status)) - throw Error(format("builder for `%1%' failed with exit code %2%") - % storePath % WEXITSTATUS(status)); - else if (WIFSIGNALED(status)) - throw Error(format("builder for `%1%' failed due to signal %2%") - % storePath % WTERMSIG(status)); - else - throw Error(format("builder for `%1%' failed died abnormally") % storePath); - } + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + throw Error(format("builder for `%1%' %2%") + % storePath % statusToString(status)); if (!pathExists(storePath)) throw Error(format("substitute did not produce path `%1%'") % storePath); diff --git a/src/libstore/store.cc b/src/libstore/store.cc index 73c09b274..59d4430fd 100644 --- a/src/libstore/store.cc +++ b/src/libstore/store.cc @@ -164,7 +164,8 @@ void copyPath(const Path & src, const Path & dst) throw SysError("waiting for child"); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) - throw Error("cannot copy file: child died"); + throw Error(format("cannot copy `%1% to `%2%': child %3%") + % src % dst % statusToString(status)); } diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 2cfada354..d3446d38a 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -491,3 +491,16 @@ Strings unpackStrings(const string & s) return strings; } + + +string statusToString(int status) +{ + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + if (WIFEXITED(status)) + return (format("failed with exit code %2%") % WEXITSTATUS(status)).str(); + else if (WIFSIGNALED(status)) + return (format("failed due to signal %2%") % WTERMSIG(status)).str(); + else + return "died abnormally"; + } else return "succeeded"; +} diff --git a/src/libutil/util.hh b/src/libutil/util.hh index e808f4e1b..21c6774b9 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -221,4 +221,9 @@ string packStrings(const Strings & strings); Strings unpackStrings(const string & s); +/* Convert the exit status of a child as returned by wait() into an + error string. */ +string statusToString(int status); + + #endif /* !__UTIL_H */