about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-08-20T00·25+0100
committertazjin <mail@tazj.in>2020-08-20T11·48+0000
commit883de9b8d71b9cb984d8ff315b4dcc30e0ca9082 (patch)
tree2a8175cd758f2d8c08157a3790b08f8886e36726
parentdfc351b4634aff4c56a08ab4f47139ccaf6dc652 (diff)
feat(tvix): Add a no-op stream buffer for discarding build logs r/1684
In some cases we don't have anywhere for the build logs to go. Until
we understand those cases fully and can get rid of them, this null
sink implementation can be used.

Change-Id: Ib93c43caf268e2c01c43d59737a829e8c43d223e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1792
Tested-by: BuildkiteCI
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Reviewed-by: glittershark <grfn@gws.fyi>
-rw-r--r--third_party/nix/src/libstore/store-api.cc13
-rw-r--r--third_party/nix/src/libstore/store-api.hh6
2 files changed, 19 insertions, 0 deletions
diff --git a/third_party/nix/src/libstore/store-api.cc b/third_party/nix/src/libstore/store-api.cc
index fc33c7ce57..3ada63532c 100644
--- a/third_party/nix/src/libstore/store-api.cc
+++ b/third_party/nix/src/libstore/store-api.cc
@@ -1,6 +1,8 @@
 #include "libstore/store-api.hh"
 
 #include <future>
+#include <ostream>
+#include <streambuf>
 #include <utility>
 
 #include <absl/status/status.h>
@@ -23,6 +25,17 @@
 
 namespace nix {
 
+namespace {
+class NullStream : public std::streambuf {
+ public:
+  int overflow(int c) override { return c; }
+};
+
+static NullStream NULL_STREAM{};
+}  // namespace
+
+std::ostream DiscardLogsSink() { return std::ostream(&NULL_STREAM); }
+
 std::optional<BuildMode> BuildModeFrom(nix::proto::BuildMode mode) {
   switch (mode) {
     case nix::proto::BuildMode::Normal:
diff --git a/third_party/nix/src/libstore/store-api.hh b/third_party/nix/src/libstore/store-api.hh
index b1c0b50de3..39769dfb3c 100644
--- a/third_party/nix/src/libstore/store-api.hh
+++ b/third_party/nix/src/libstore/store-api.hh
@@ -19,6 +19,12 @@
 
 namespace nix {
 
+// Create a no-op stream buffer used to discard build output in cases
+// where we don't have a build log sink to thread through.
+//
+// TODO(tazjin): Get rid of this and do *something* with those logs.
+std::ostream DiscardLogsSink();
+
 MakeError(SubstError, Error);
 MakeError(BuildError, Error); /* denotes a permanent build failure */
 MakeError(InvalidPath, Error);