From d59124280851c5d62b6ecf5aa07f6b4f6520a0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 5 Feb 2019 22:58:13 +0100 Subject: [PATCH] daemon: Emit a 'build-succeeded' event in check mode. Until now, something like "guix build sed -v1 --check" would not get a 'build-succeeded' event, which in turn meant that the spinner would not be erased upon build completion. * nix/libstore/build.cc (DerivationGoal::registerOutputs): When 'buildMode' is bmCheck and 'settings.printBuildTrace' emit a "@ build-succeeded" trace upon success. * tests/store.scm ("build-succeeded trace in check mode"): New test. --- nix/libstore/build.cc | 4 ++++ tests/store.scm | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc index f4a866c68f..06bc7601b9 100644 --- a/nix/libstore/build.cc +++ b/nix/libstore/build.cc @@ -2502,6 +2502,10 @@ void DerivationGoal::registerOutputs() throw Error(format("derivation `%1%' may not be deterministic: output `%2%' differs") % drvPath % path); } + + if (settings.printBuildTrace) + printMsg(lvlError, format("@ build-succeeded %1% -") % drvPath); + continue; } diff --git a/tests/store.scm b/tests/store.scm index e28c0c5aaa..df66feaebb 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -917,6 +917,19 @@ (build-mode check)) #f)))))))) +(test-assert "build-succeeded trace in check mode" + (string-contains + (call-with-output-string + (lambda (port) + (let ((d (build-expression->derivation + %store "foo" '(mkdir (assoc-ref %outputs "out")) + #:guile-for-build + (package-derivation %store %bootstrap-guile)))) + (build-derivations %store (list d)) + (parameterize ((current-build-output-port port)) + (build-derivations %store (list d) (build-mode check)))))) + "@ build-succeeded")) + (test-assert "build multiple times" (with-store store ;; Ask to build twice.