Nix 2.26.3
Nix, the purely functional package manager; unstable internal interfaces
 
Loading...
Searching...
No Matches
build-result.hh
Go to the documentation of this file.
1#pragma once
3
4#include "realisation.hh"
5#include "derived-path.hh"
6
7#include <string>
8#include <chrono>
9#include <optional>
10
11namespace nix {
12
14{
21 enum Status {
22 Built = 0,
23 Substituted,
24 AlreadyValid,
25 PermanentFailure,
26 InputRejected,
27 OutputRejected,
32 TimedOut,
33 MiscFailure,
34 DependencyFailed,
35 LogLimitExceeded,
36 NotDeterministic,
37 ResolvesToAlreadyValid,
38 NoSubstituters,
39 } status = MiscFailure;
40
47 std::string errorMsg;
48
49 std::string toString() const {
50 auto strStatus = [&]() {
51 switch (status) {
52 case Built: return "Built";
53 case Substituted: return "Substituted";
54 case AlreadyValid: return "AlreadyValid";
55 case PermanentFailure: return "PermanentFailure";
56 case InputRejected: return "InputRejected";
57 case OutputRejected: return "OutputRejected";
58 case TransientFailure: return "TransientFailure";
59 case CachedFailure: return "CachedFailure";
60 case TimedOut: return "TimedOut";
61 case MiscFailure: return "MiscFailure";
62 case DependencyFailed: return "DependencyFailed";
63 case LogLimitExceeded: return "LogLimitExceeded";
64 case NotDeterministic: return "NotDeterministic";
65 case ResolvesToAlreadyValid: return "ResolvesToAlreadyValid";
66 case NoSubstituters: return "NoSubstituters";
67 default: return "Unknown";
68 };
69 }();
70 return strStatus + ((errorMsg == "") ? "" : " : " + errorMsg);
71 }
72
76 unsigned int timesBuilt = 0;
77
84 bool isNonDeterministic = false;
85
91
96 time_t startTime = 0, stopTime = 0;
97
101 std::optional<std::chrono::microseconds> cpuUser, cpuSystem;
102
103 bool operator ==(const BuildResult &) const noexcept;
104 std::strong_ordering operator <=>(const BuildResult &) const noexcept;
105
106 bool success()
107 {
108 return status == Built || status == Substituted || status == AlreadyValid || status == ResolvesToAlreadyValid;
109 }
110
111 void rethrow()
112 {
113 throw Error("%s", errorMsg);
114 }
115};
116
120struct KeyedBuildResult : BuildResult
121{
126
127 // Hack to work around a gcc "may be used uninitialized" warning.
128 KeyedBuildResult(BuildResult res, DerivedPath path)
129 : BuildResult(std::move(res)), path(std::move(path))
130 { }
131};
132
133}
Strings res
Definition lexer.l:2566
unsigned int status
Definition lexer.l:663
std::map< OutputName, Realisation > SingleDrvOutputs
Definition realisation.hh:87
Definition build-result.hh:14
SingleDrvOutputs builtOutputs
Definition build-result.hh:90
time_t startTime
Definition build-result.hh:96
std::string errorMsg
Definition build-result.hh:47
Status
Definition build-result.hh:21
@ TransientFailure
possibly transient
Definition build-result.hh:29
@ CachedFailure
no longer used
Definition build-result.hh:31
bool isNonDeterministic
Definition build-result.hh:84
unsigned int timesBuilt
Definition build-result.hh:76
std::optional< std::chrono::microseconds > cpuUser
Definition build-result.hh:101
Definition derived-path.hh:229
DerivedPath path
Definition build-result.hh:125