refactor(tvix): Replace several DiscardLogsSink() with std::cerr

Introduces the actual log sink in several places where we actually
want the build logs to thread through correctly.

This should cover *most* build paths.

Change-Id: I735dff8a79f7e35a5874eb89b4abb980f9703dc2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1827
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2020-08-21 02:07:17 +01:00 committed by tazjin
parent 262af89f81
commit 06681c35a9
7 changed files with 15 additions and 24 deletions

View file

@ -2,6 +2,7 @@
#include <algorithm>
#include <cstring>
#include <iostream>
#include <regex>
#include <absl/strings/str_split.h>
@ -92,11 +93,7 @@ void EvalState::realiseContext(const PathSet& context) {
store->queryMissing(drvs, willBuild, willSubstitute, unknown, downloadSize,
narSize);
// TODO(tazjin): Figure out where these logs are supposed to go ...
// unless we keep a per-store stream open persistently there's no
// "generic" way to send logs anywhere for cases like this (IFD).
auto discard_logs = DiscardLogsSink();
nix::util::OkOrThrow(store->buildPaths(discard_logs, drvs));
nix::util::OkOrThrow(store->buildPaths(std::cerr, drvs));
}
/* Load and evaluate an expression from path specified by the

View file

@ -6,7 +6,7 @@
namespace nix {
struct RegisterPrimOp {
typedef std::vector<std::tuple<std::string, size_t, PrimOpFun>> PrimOps;
using PrimOps = std::vector<std::tuple<std::string, size_t, PrimOpFun> >;
static PrimOps* primOps;
/* You can register a constant by passing an arity of 0. fun
will get called during EvalState initialization, so there

View file

@ -359,8 +359,7 @@ static void _main(int argc, char** argv) {
}
if (!dryRun) {
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(discard_logs, paths, buildMode));
util::OkOrThrow(store->buildPaths(std::cerr, paths, buildMode));
}
};

View file

@ -722,10 +722,8 @@ static void opSet(Globals& globals, Strings opFlags, Strings opArgs) {
if (globals.dryRun) {
return;
}
auto discard_logs = DiscardLogsSink();
nix::util::OkOrThrow(globals.state->store->buildPaths(
discard_logs, paths,
globals.state->repair != 0u ? bmRepair : bmNormal));
std::cerr, paths, globals.state->repair != 0u ? bmRepair : bmNormal));
} else {
printMissing(globals.state->store, {drv.queryOutPath()});
if (globals.dryRun) {

View file

@ -1,5 +1,7 @@
#include "nix-env/user-env.hh"
#include <iostream>
#include <glog/logging.h>
#include "libexpr/eval-inline.hh"
@ -38,9 +40,8 @@ bool createUserEnv(EvalState& state, DrvInfos& elems, const Path& profile,
}
DLOG(INFO) << "building user environment dependencies";
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(state.store->buildPaths(
discard_logs, drvsToBuild, state.repair != 0u ? bmRepair : bmNormal));
std::cerr, drvsToBuild, state.repair != 0u ? bmRepair : bmNormal));
/* Construct the whole top level derivation. */
PathSet references;
@ -140,7 +141,7 @@ bool createUserEnv(EvalState& state, DrvInfos& elems, const Path& profile,
/* Realise the resulting store expression. */
DLOG(INFO) << "building user environment";
util::OkOrThrow(state.store->buildPaths(
discard_logs, {topLevelDrv}, state.repair != 0u ? bmRepair : bmNormal));
std::cerr, {topLevelDrv}, state.repair != 0u ? bmRepair : bmNormal));
/* Switch the current user environment to the output path. */
auto store2 = state.store.dynamic_pointer_cast<LocalFSStore>();

View file

@ -69,8 +69,7 @@ static PathSet realisePath(Path path, bool build = true) {
if (isDerivation(p.first)) {
if (build) {
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(discard_logs, {path}));
util::OkOrThrow(store->buildPaths(std::cerr, {path}));
}
Derivation drv = store->derivationFromPath(p.first);
rootNr++;
@ -186,9 +185,8 @@ static void opRealise(Strings opFlags, Strings opArgs) {
}
/* Build all paths at the same time to exploit parallelism. */
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(
discard_logs, PathSet(paths.begin(), paths.end()), buildMode));
std::cerr, PathSet(paths.begin(), paths.end()), buildMode));
if (!ignoreUnknown) {
for (auto& i : paths) {
@ -1006,8 +1004,7 @@ static void opServe(Strings opFlags, Strings opArgs) {
does one path at a time. */
if (!willSubstitute.empty()) {
try {
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(discard_logs, willSubstitute));
util::OkOrThrow(store->buildPaths(std::cerr, willSubstitute));
} catch (Error& e) {
LOG(WARNING) << e.msg();
}
@ -1069,8 +1066,7 @@ static void opServe(Strings opFlags, Strings opArgs) {
try {
MonitorFdHup monitor(in.fd);
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(discard_logs, paths));
util::OkOrThrow(store->buildPaths(std::cerr, paths));
out << 0;
} catch (Error& e) {
assert(e.status);

View file

@ -1,3 +1,4 @@
#include <iostream>
#include <regex>
#include <utility>
@ -274,8 +275,7 @@ Buildables build(
if (mode == DryRun) {
printMissing(store, pathsToBuild);
} else if (mode == Build) {
auto discard_logs = DiscardLogsSink();
util::OkOrThrow(store->buildPaths(discard_logs, pathsToBuild));
util::OkOrThrow(store->buildPaths(std::cerr, pathsToBuild));
}
return buildables;