From 4b711bf3ce26ac2e32389ef2dfa854736cb77c0b Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 13 Nov 2020 12:59:29 +0100 Subject: [PATCH] Fix crash, tweaks --- src/libmain/progress-bar.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libmain/progress-bar.cc b/src/libmain/progress-bar.cc index 1df119b51..2ce7eb711 100644 --- a/src/libmain/progress-bar.cc +++ b/src/libmain/progress-bar.cc @@ -99,7 +99,7 @@ private: stats.expected += j.second->expected; stats.running += j.second->running; stats.failed += j.second->failed; - stats.left += j.second->expected - j.second->done; + stats.left += j.second->expected > j.second->done ? j.second->expected - j.second->done : 0; } stats.expected = std::max(stats.expected, act.expected); @@ -113,7 +113,8 @@ private: idDownload, idCopyPaths, idBuilds, - idStatus + idStatus, + idQuit }; typedef std::pair LineId; @@ -221,8 +222,10 @@ public: c = std::tolower(c); if (c == 3 || c == 'q') { + auto state(state_.lock()); + state->statusLines.insert_or_assign({idQuit, 0}, ANSI_RED "Exiting..."); + draw(*state); triggerInterrupt(); - break; } if (c == 'l') { auto state(state_.lock()); @@ -544,7 +547,8 @@ public: } removeStatusLines(state, idStatus); - state.statusLines.insert_or_assign({idStatus, 0}, line); + if (line != "") + state.statusLines.insert_or_assign({idStatus, 0}, line); if (state.activitiesByType.count(actEvaluate)) { if (!state.activitiesByType[actEvaluate].its.empty()) { @@ -565,10 +569,12 @@ public: auto pct1 = std::min((double) failed / expected, 1.0); auto pct2 = std::min((double) (failed + done) / expected, 1.0); auto pct3 = std::min((double) (failed + done + running) / expected, 1.0); - auto barLength = 60; + auto barLength = 70; size_t chars1 = barLength * pct1; size_t chars2 = barLength * pct2; size_t chars3 = barLength * pct3; + assert(chars1 <= chars2); + assert(chars2 <= chars3); return ANSI_RED + repeat("█", chars1) + ANSI_GREEN + repeat("█", chars2 - chars1) +