about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libutil/logging.hh5
-rw-r--r--src/nix/progress-bar.cc27
2 files changed, 14 insertions, 18 deletions
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 4b1f3b5f70cf..2ec15cb68d25 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -33,6 +33,7 @@ typedef enum {
     resCorruptedPath = 103,
     resSetPhase = 104,
     resProgress = 105,
+    resSetExpected = 106,
 } ResultType;
 
 typedef uint64_t ActivityId;
@@ -72,8 +73,6 @@ public:
 
     virtual void stopActivity(ActivityId act) { };
 
-    virtual void setExpected(ActivityId act, ActivityType type, uint64_t expected) { };
-
     virtual void result(ActivityId act, ResultType type, const Fields & fields) { };
 };
 
@@ -97,7 +96,7 @@ struct Activity
     { result(resProgress, done, expected, running, failed); }
 
     void setExpected(ActivityType type2, uint64_t expected) const
-    { logger.setExpected(id, type2, expected); }
+    { result(resSetExpected, type2, expected); }
 
     template<typename... Args>
     void result(ResultType type, const Args & ... args) const
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index 054127f6277e..70dbfd4e5964 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -192,21 +192,6 @@ public:
         update(*state);
     }
 
-    void setExpected(ActivityId act, ActivityType type, uint64_t expected) override
-    {
-        auto state(state_.lock());
-
-        auto i = state->its.find(act);
-        assert(i != state->its.end());
-        ActInfo & actInfo = *i->second;
-        auto & j = actInfo.expectedByType[type];
-        state->activitiesByType[type].expected -= j;
-        j = expected;
-        state->activitiesByType[type].expected += j;
-
-        update(*state);
-    }
-
     void result(ActivityId act, ResultType type, const std::vector<Field> & fields) override
     {
         auto state(state_.lock());
@@ -258,6 +243,18 @@ public:
             actInfo.failed = getI(fields, 3);
             update(*state);
         }
+
+        else if (type == resSetExpected) {
+            auto i = state->its.find(act);
+            assert(i != state->its.end());
+            ActInfo & actInfo = *i->second;
+            auto type = (ActivityType) getI(fields, 0);
+            auto & j = actInfo.expectedByType[type];
+            state->activitiesByType[type].expected -= j;
+            j = getI(fields, 1);
+            state->activitiesByType[type].expected += j;
+            update(*state);
+        }
     }
 
     void update()