From 1fe58bd8a747f9c6d5b27c521fbf3d7b281e130d Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Fri, 17 May 2024 20:01:50 +0000 Subject: [PATCH] nix cat/dump-path/key: stop progress bar before writeFull These commands outputs data that may not end with a newline. This causes problems when the progress bar redraws, as that completely wipes the last line of output. As nix key generate-secret outputs a single line of text with no output, it shows up entirely blank, making it look like nothing happened. Fixes: https://git.lix.systems/lix-project/lix/issues/320 Change-Id: I5ac706d71d839b6dfa760b60a351414cd96297cf --- src/nix/cat.cc | 6 +++++- src/nix/dump-path.cc | 3 +++ src/nix/sigs.cc | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/nix/cat.cc b/src/nix/cat.cc index 60aa66ce0..678edd9a1 100644 --- a/src/nix/cat.cc +++ b/src/nix/cat.cc @@ -2,6 +2,7 @@ #include "store-api.hh" #include "fs-accessor.hh" #include "nar-accessor.hh" +#include "progress-bar.hh" using namespace nix; @@ -17,7 +18,10 @@ struct MixCat : virtual Args if (st.type != FSAccessor::Type::tRegular) throw Error("path '%1%' is not a regular file", path); - writeFull(STDOUT_FILENO, accessor->readFile(path)); + auto file = accessor->readFile(path); + + stopProgressBar(); + writeFull(STDOUT_FILENO, file); } }; diff --git a/src/nix/dump-path.cc b/src/nix/dump-path.cc index c4edc894b..fb32dddb7 100644 --- a/src/nix/dump-path.cc +++ b/src/nix/dump-path.cc @@ -1,6 +1,7 @@ #include "command.hh" #include "store-api.hh" #include "archive.hh" +#include "progress-bar.hh" using namespace nix; @@ -20,6 +21,7 @@ struct CmdDumpPath : StorePathCommand void run(ref store, const StorePath & storePath) override { + stopProgressBar(); FdSink sink(STDOUT_FILENO); store->narFromPath(storePath, sink); sink.flush(); @@ -55,6 +57,7 @@ struct CmdDumpPath2 : Command void run() override { + stopProgressBar(); FdSink sink(STDOUT_FILENO); dumpPath(path, sink); sink.flush(); diff --git a/src/nix/sigs.cc b/src/nix/sigs.cc index 730aa6532..eeb14e29a 100644 --- a/src/nix/sigs.cc +++ b/src/nix/sigs.cc @@ -3,6 +3,7 @@ #include "store-api.hh" #include "thread-pool.hh" #include "signals.hh" +#include "progress-bar.hh" #include @@ -220,6 +221,8 @@ struct CmdKey : NixMultiCommand { if (!command) throw UsageError("'nix key' requires a sub-command."); + + stopProgressBar(); command->second->run(); } };