about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-08-21T01·07+0100
committertazjin <mail@tazj.in>2020-08-21T01·35+0000
commit06681c35a9191656b8f3a9a343e21457a71a947d (patch)
tree68f05e9e535f7951c196c930c317d0132287247e
parent262af89f81eda6ce26845563141481d447e04a06 (diff)
refactor(tvix): Replace several DiscardLogsSink() with std::cerr r/1698
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
-rw-r--r--third_party/nix/src/libexpr/primops.cc7
-rw-r--r--third_party/nix/src/libexpr/primops.hh2
-rw-r--r--third_party/nix/src/nix-build/nix-build.cc3
-rw-r--r--third_party/nix/src/nix-env/nix-env.cc4
-rw-r--r--third_party/nix/src/nix-env/user-env.cc7
-rw-r--r--third_party/nix/src/nix-store/nix-store.cc12
-rw-r--r--third_party/nix/src/nix/installables.cc4
7 files changed, 15 insertions, 24 deletions
diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc
index 1684c20413c5..04a44311a259 100644
--- a/third_party/nix/src/libexpr/primops.cc
+++ b/third_party/nix/src/libexpr/primops.cc
@@ -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
diff --git a/third_party/nix/src/libexpr/primops.hh b/third_party/nix/src/libexpr/primops.hh
index 0c9f6ccab1f7..ab5f64720273 100644
--- a/third_party/nix/src/libexpr/primops.hh
+++ b/third_party/nix/src/libexpr/primops.hh
@@ -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
diff --git a/third_party/nix/src/nix-build/nix-build.cc b/third_party/nix/src/nix-build/nix-build.cc
index cc2d8bc2fbe9..6d1dd80944ed 100644
--- a/third_party/nix/src/nix-build/nix-build.cc
+++ b/third_party/nix/src/nix-build/nix-build.cc
@@ -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));
     }
   };
 
diff --git a/third_party/nix/src/nix-env/nix-env.cc b/third_party/nix/src/nix-env/nix-env.cc
index e42fc29c2267..9c0931e7f4ad 100644
--- a/third_party/nix/src/nix-env/nix-env.cc
+++ b/third_party/nix/src/nix-env/nix-env.cc
@@ -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) {
diff --git a/third_party/nix/src/nix-env/user-env.cc b/third_party/nix/src/nix-env/user-env.cc
index e3124a60e385..bce5c44f9591 100644
--- a/third_party/nix/src/nix-env/user-env.cc
+++ b/third_party/nix/src/nix-env/user-env.cc
@@ -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>();
diff --git a/third_party/nix/src/nix-store/nix-store.cc b/third_party/nix/src/nix-store/nix-store.cc
index 101ab01ef9e7..535903d823ed 100644
--- a/third_party/nix/src/nix-store/nix-store.cc
+++ b/third_party/nix/src/nix-store/nix-store.cc
@@ -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);
diff --git a/third_party/nix/src/nix/installables.cc b/third_party/nix/src/nix/installables.cc
index b5980ce47624..7aa26b0dee8c 100644
--- a/third_party/nix/src/nix/installables.cc
+++ b/third_party/nix/src/nix/installables.cc
@@ -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;