about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/build.cc10
-rw-r--r--src/libstore/download.cc2
-rw-r--r--src/libstore/optimise-store.cc2
-rw-r--r--src/libstore/remote-store.cc3
-rw-r--r--src/libstore/store-api.cc4
-rw-r--r--src/libutil/logging.cc11
-rw-r--r--src/libutil/logging.hh8
-rw-r--r--src/nix-daemon/nix-daemon.cc11
-rw-r--r--src/nix/progress-bar.cc7
-rw-r--r--src/nix/verify.cc2
10 files changed, 41 insertions, 19 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 92626738ab27..02dcd4536a5c 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -1390,7 +1390,7 @@ void DerivationGoal::tryToBuild()
     bool buildLocally = buildMode != bmNormal || drv->willBuildLocally();
 
     auto started = [&]() {
-        act = std::make_unique<Activity>(*logger, actBuild,
+        act = std::make_unique<Activity>(*logger, lvlInfo, actBuild,
             fmt("building '%s'", drvPath), Logger::Fields{drvPath});
         mcRunningBuilds = std::make_unique<MaintainCount<uint64_t>>(worker.runningBuilds);
         worker.updateProgress();
@@ -2419,12 +2419,13 @@ struct BuilderLogger : Logger
         prevLogger.log(lvl, fs);
     }
 
-    void startActivity(ActivityId act, ActivityType type,
+    void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
         const std::string & s, const Fields & fields, ActivityId parent) override
     {
         nlohmann::json json;
         json["action"] = "start";
         json["id"] = act;
+        json["level"] = lvl;
         json["type"] = type;
         json["text"] = s;
         addFields(json, fields);
@@ -3339,7 +3340,8 @@ void DerivationGoal::flushLine()
                 if (type == actDownload)
                     builderActivities.emplace(std::piecewise_construct,
                         std::forward_as_tuple(json["id"]),
-                        std::forward_as_tuple(*logger, type, json["text"], getFields(json["fields"]), act->id));
+                        std::forward_as_tuple(*logger, (Verbosity) json["level"], type,
+                            json["text"], getFields(json["fields"]), act->id));
             }
 
             else if (action == "stop")
@@ -3686,7 +3688,7 @@ void SubstitutionGoal::tryToRun()
             /* Wake up the worker loop when we're done. */
             Finally updateStats([this]() { outPipe.writeSide = -1; });
 
-            Activity act(*logger, actSubstitute, "", Logger::Fields{storePath, sub->getUri()});
+            Activity act(*logger, actSubstitute, Logger::Fields{storePath, sub->getUri()});
             PushActivity pact(act.id);
 
             copyStorePath(ref<Store>(sub), ref<Store>(worker.store.shared_from_this()),
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index a20999176778..625e781b4528 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -85,7 +85,7 @@ struct CurlDownloader : public Downloader
         DownloadItem(CurlDownloader & downloader, const DownloadRequest & request)
             : downloader(downloader)
             , request(request)
-            , act(*logger, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct)
+            , act(*logger, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct)
         {
             if (!request.expectedETag.empty())
                 requestHeaders = curl_slist_append(requestHeaders, ("If-None-Match: " + request.expectedETag).c_str());
diff --git a/src/libstore/optimise-store.cc b/src/libstore/optimise-store.cc
index f1325ba5a1ce..891540ae4c1d 100644
--- a/src/libstore/optimise-store.cc
+++ b/src/libstore/optimise-store.cc
@@ -266,7 +266,7 @@ void LocalStore::optimiseStore(OptimiseStats & stats)
         addTempRoot(i);
         if (!isValidPath(i)) continue; /* path was GC'ed, probably */
         {
-            Activity act(*logger, actUnknown, fmt("optimising path '%s'", i));
+            Activity act(*logger, lvlTalkative, actUnknown, fmt("optimising path '%s'", i));
             optimisePath_(&act, stats, realStoreDir + "/" + baseNameOf(i), inodeHash);
         }
         done++;
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index f0e3502bf79a..1af84cff5ba8 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -679,11 +679,12 @@ void RemoteStore::Connection::processStderr(Sink * sink, Source * source)
 
         else if (msg == STDERR_START_ACTIVITY) {
             auto act = readNum<ActivityId>(from);
+            auto lvl = (Verbosity) readInt(from);
             auto type = (ActivityType) readInt(from);
             auto s = readString(from);
             auto fields = readFields(from);
             auto parent = readNum<ActivityId>(from);
-            logger->startActivity(act, type, s, fields, parent);
+            logger->startActivity(act, lvl, type, s, fields, parent);
         }
 
         else if (msg == STDERR_STOP_ACTIVITY) {
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index f07376852711..7a8a3f7dee04 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -565,7 +565,7 @@ void Store::buildPaths(const PathSet & paths, BuildMode buildMode)
 void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
     const Path & storePath, RepairFlag repair, CheckSigsFlag checkSigs)
 {
-    Activity act(*logger, actCopyPath, fmt("copying path '%s'", storePath),
+    Activity act(*logger, lvlInfo, actCopyPath, fmt("copying path '%s'", storePath),
         {storePath, srcStore->getUri(), dstStore->getUri()});
     PushActivity pact(act.id);
 
@@ -623,7 +623,7 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const PathSet & storePa
     for (auto & path : storePaths)
         if (!valid.count(path)) missing.insert(path);
 
-    Activity act(*logger, actCopyPaths, fmt("copying %d paths", missing.size()));
+    Activity act(*logger, lvlInfo, actCopyPaths, fmt("copying %d paths", missing.size()));
 
     std::atomic<size_t> nrDone{0};
     std::atomic<uint64_t> bytesExpected{0};
diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc
index b103b902eab0..e38a460537ea 100644
--- a/src/libutil/logging.cc
+++ b/src/libutil/logging.cc
@@ -45,6 +45,13 @@ public:
 
         writeToStderr(prefix + (tty ? fs.s : filterANSIEscapes(fs.s)) + "\n");
     }
+
+    void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
+        const std::string & s, const Fields & fields, ActivityId parent)
+    {
+        if (lvl <= verbosity && !s.empty())
+            log(lvl, s + "...");
+    }
 };
 
 Verbosity verbosity = lvlInfo;
@@ -76,11 +83,11 @@ Logger * makeDefaultLogger()
 
 std::atomic<uint64_t> nextId{(uint64_t) getpid() << 32};
 
-Activity::Activity(Logger & logger, ActivityType type,
+Activity::Activity(Logger & logger, Verbosity lvl, ActivityType type,
     const std::string & s, const Logger::Fields & fields, ActivityId parent)
     : logger(logger), id(nextId++)
 {
-    logger.startActivity(id, type, s, fields, parent);
+    logger.startActivity(id, lvl, type, s, fields, parent);
 }
 
 }
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index e3e7c8e6f330..84fffa820f4c 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -68,7 +68,7 @@ public:
 
     virtual void warn(const std::string & msg);
 
-    virtual void startActivity(ActivityId act, ActivityType type,
+    virtual void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
         const std::string & s, const Fields & fields, ActivityId parent) { };
 
     virtual void stopActivity(ActivityId act) { };
@@ -84,9 +84,13 @@ struct Activity
 
     const ActivityId id;
 
-    Activity(Logger & logger, ActivityType type, const std::string & s = "",
+    Activity(Logger & logger, Verbosity lvl, ActivityType type, const std::string & s = "",
         const Logger::Fields & fields = {}, ActivityId parent = curActivity);
 
+    Activity(Logger & logger, ActivityType type,
+        const Logger::Fields & fields = {}, ActivityId parent = curActivity)
+        : Activity(logger, lvlError, type, "", fields, parent) { };
+
     Activity(const Activity & act) = delete;
 
     ~Activity()
diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc
index 9f1d619e59bf..dbf301a91533 100644
--- a/src/nix-daemon/nix-daemon.cc
+++ b/src/nix-daemon/nix-daemon.cc
@@ -149,12 +149,17 @@ struct TunnelLogger : public Logger
         }
     }
 
-    void startActivity(ActivityId act, ActivityType type,
+    void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
         const std::string & s, const Fields & fields, ActivityId parent) override
     {
-        if (GET_PROTOCOL_MINOR(clientVersion) < 20) return;
+        if (GET_PROTOCOL_MINOR(clientVersion) < 20) {
+            if (!s.empty())
+                log(lvl, s + "...");
+            return;
+        }
+
         StringSink buf;
-        buf << STDERR_START_ACTIVITY << act << type << s << fields << parent;
+        buf << STDERR_START_ACTIVITY << act << lvl << type << s << fields << parent;
         enqueueMsg(*buf.s);
     }
 
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index 70dbfd4e5964..341866679186 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -126,9 +126,12 @@ public:
         update(state);
     }
 
-    void startActivity(ActivityId act, ActivityType type, const std::string & s,
-        const Fields & fields, ActivityId parent) override
+    void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
+        const std::string & s, const Fields & fields, ActivityId parent) override
     {
+        if (lvl <= verbosity && !s.empty())
+            log(lvl, s + "...");
+
         auto state(state_.lock());
 
         state->activities.emplace_back(ActInfo());
diff --git a/src/nix/verify.cc b/src/nix/verify.cc
index 7156341396d3..4913d990097d 100644
--- a/src/nix/verify.cc
+++ b/src/nix/verify.cc
@@ -79,7 +79,7 @@ struct CmdVerify : StorePathsCommand
             try {
                 checkInterrupt();
 
-                Activity act2(*logger, actUnknown, fmt("checking '%s'", storePath));
+                Activity act2(*logger, lvlInfo, actUnknown, fmt("checking '%s'", storePath));
 
                 MaintainCount<std::atomic<size_t>> mcActive(active);
                 update();