diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-08-29T13·13+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-08-29T13·13+0200 |
commit | c8235c531355d612d48f633f8a6ace5fcd97f5fe (patch) | |
tree | c54d398380ef786e6895b5427774bbd750566b31 /src/nix/progress-bar.cc | |
parent | 05d68a6e23127e490193599f75489006830b302c (diff) |
nix run: Flush the progress bar before starting the command
Diffstat (limited to 'src/nix/progress-bar.cc')
-rw-r--r-- | src/nix/progress-bar.cc | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc index 341866679186..f48cfa13b4c4 100644 --- a/src/nix/progress-bar.cc +++ b/src/nix/progress-bar.cc @@ -95,6 +95,8 @@ private: uint64_t filesLinked = 0, bytesLinked = 0; uint64_t corruptedPaths = 0, untrustedPaths = 0; + + bool active = true; }; Sync<State> state_; @@ -107,7 +109,14 @@ public: ~ProgressBar() { + stop(); + } + + void stop() + { auto state(state_.lock()); + if (!state->active) return; + state->active = true; std::string status = getStatus(*state); writeToStderr("\r\e[K"); if (status != "") @@ -268,6 +277,8 @@ public: void update(State & state) { + if (!state.active) return; + std::string line; std::string status = getStatus(state); @@ -385,21 +396,16 @@ public: } }; -StartProgressBar::StartProgressBar() +void startProgressBar() { - if (isatty(STDERR_FILENO)) { - prev = logger; - logger = new ProgressBar(); - } + logger = new ProgressBar(); } -StartProgressBar::~StartProgressBar() +void stopProgressBar() { - if (prev) { - auto bar = logger; - logger = prev; - delete bar; - } + auto progressBar = dynamic_cast<ProgressBar *>(logger); + if (progressBar) progressBar->stop(); + } } |