errorinfo constructor test

This commit is contained in:
Ben Burdette 2020-04-29 18:57:05 -06:00
parent 2d0f766a77
commit 39ff80d031
4 changed files with 16 additions and 5 deletions

View file

@ -23,6 +23,16 @@ int main()
logger->logEI(e.info()); logger->logEI(e.info());
} }
// ErrorInfo constructor
try {
auto e = Error("generic error");
throw DemoError(e.info());
} catch (Error &e) {
logger->logEI(e.info());
}
// For completeness sake, info through vomit levels. // For completeness sake, info through vomit levels.
// But this is maybe a heavy format for those. // But this is maybe a heavy format for those.
logger->logEI( logger->logEI(

View file

@ -284,7 +284,7 @@ void BinaryCacheStore::narFromPath(const StorePath & storePath, Sink & sink)
try { try {
getFile(info->url, *decompressor); getFile(info->url, *decompressor);
} catch (NoSuchBinaryCacheFile & e) { } catch (NoSuchBinaryCacheFile & e) {
throw SubstituteGone(e.what()); throw SubstituteGone(e.info());
} }
decompressor->finish(); decompressor->finish();

View file

@ -365,7 +365,7 @@ void RemoteStore::queryPathInfoUncached(const StorePath & path,
} catch (Error & e) { } catch (Error & e) {
// Ugly backwards compatibility hack. // Ugly backwards compatibility hack.
if (e.msg().find("is not valid") != std::string::npos) if (e.msg().find("is not valid") != std::string::npos)
throw InvalidPath(e.what()); throw InvalidPath(e.info());
throw; throw;
} }
if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 17) { if (GET_PROTOCOL_MINOR(conn->daemonVersion) >= 17) {

View file

@ -83,6 +83,7 @@ class BaseError : public std::exception
protected: protected:
string prefix_; // used for location traces etc. string prefix_; // used for location traces etc.
ErrorInfo err; ErrorInfo err;
std::optional<string> what_; std::optional<string> what_;
const string& calcWhat() const string& calcWhat()
{ {
@ -107,18 +108,18 @@ public:
.hint = hintfmt(args...) .hint = hintfmt(args...)
} }
, status(status) , status(status)
{ } { }
template<typename... Args> template<typename... Args>
BaseError(const Args & ... args) BaseError(const Args & ... args)
: err { .level = lvlError, : err { .level = lvlError,
.hint = hintfmt(args...) .hint = hintfmt(args...)
} }
{ } { }
BaseError(ErrorInfo e) BaseError(ErrorInfo e)
: err(e) : err(e)
{ } { }
virtual const char* sname() const { return "BaseError"; } virtual const char* sname() const { return "BaseError"; }