diff --git a/src/libstore/build.cc b/src/libstore/build.cc index ba51f8591..89d363a09 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -3047,7 +3047,8 @@ void DerivationGoal::handleEOF(int fd) void DerivationGoal::flushLine() { - if (settings.verboseBuild) + if (settings.verboseBuild && + (settings.printRepeatedBuilds || curRound == 1)) printError(filterANSIEscapes(currentLogLine, true)); else { logTail.push_back(currentLogLine); diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 3194193bc..a423b4e5c 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -149,6 +149,11 @@ struct Settings { before being killed (0 means no limit). */ unsigned long maxLogSize; + /* When build-repeat > 0 and verboseBuild == true, whether to + print repeated builds (i.e. builds other than the first one) to + stderr. Hack to prevent Hydra logs from being polluted. */ + bool printRepeatedBuilds = true; + /* How often (in seconds) to poll for locks. */ unsigned int pollInterval; diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc index 2e530ae52..77ad517a7 100644 --- a/src/nix-store/nix-store.cc +++ b/src/nix-store/nix-store.cc @@ -842,6 +842,7 @@ static void opServe(Strings opFlags, Strings opArgs) settings.maxLogSize = readInt(in); if (GET_PROTOCOL_MINOR(clientVersion) >= 3) settings.set("build-repeat", std::to_string(readInt(in))); + settings.printRepeatedBuilds = false; }; while (true) {