about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-08-31T13·25+0200
committerEelco Dolstra <edolstra@gmail.com>2017-08-31T13·25+0200
commitfd73c1e20a7aaefcb69db3e6b2f081e1a5e20406 (patch)
treed3134fc81e2895e3e2837df6eb457efab28e3fea
parentc2154d4c8422ddc1c201d503bb52edff854af2ad (diff)
Add an activity for binary cache queries
-rw-r--r--src/libstore/binary-cache-store.cc7
-rw-r--r--src/libstore/download.cc2
-rw-r--r--src/libutil/logging.hh1
-rw-r--r--src/nix/progress-bar.cc13
4 files changed, 19 insertions, 4 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index 403b4687287e..556fa3d59355 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -313,6 +313,11 @@ void BinaryCacheStore::queryPathInfoUncached(const Path & storePath,
         std::function<void(std::shared_ptr<ValidPathInfo>)> success,
         std::function<void(std::exception_ptr exc)> failure)
 {
+    auto uri = getUri();
+    auto act = std::make_shared<Activity>(*logger, lvlTalkative, actQueryPathInfo,
+        fmt("querying info about '%s' on '%s'", storePath, uri), Logger::Fields{storePath, uri});
+    PushActivity pact(act->id);
+
     auto narInfoFile = narInfoFileFor(storePath);
 
     getFile(narInfoFile,
@@ -323,6 +328,8 @@ void BinaryCacheStore::queryPathInfoUncached(const Path & storePath,
 
             callSuccess(success, failure, (std::shared_ptr<ValidPathInfo>)
                 std::make_shared<NarInfo>(*this, *data, narInfoFile));
+
+            (void) act; // force Activity into this lambda to ensure it stays alive
         },
         failure);
 }
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index 625e781b4528..054244c7b8b7 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, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {}, request.parentAct)
+            , act(*logger, lvlTalkative, actDownload, fmt("downloading '%s'", request.uri), {request.uri}, request.parentAct)
         {
             if (!request.expectedETag.empty())
                 requestHeaders = curl_slist_append(requestHeaders, ("If-None-Match: " + request.expectedETag).c_str());
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 414309a52463..21898c03a276 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -24,6 +24,7 @@ typedef enum {
     actOptimiseStore = 106,
     actVerifyPaths = 107,
     actSubstitute = 108,
+    actQueryPathInfo = 109,
 } ActivityType;
 
 typedef enum {
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index 9bc40523970a..0c42fe5cc136 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -138,11 +138,11 @@ public:
     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());
 
+        if (lvl <= verbosity && !s.empty())
+            log(*state, lvl, s + "...");
+
         state->activities.emplace_back(ActInfo());
         auto i = std::prev(state->activities.end());
         i->s = s;
@@ -163,7 +163,13 @@ public:
             i->s = fmt("fetching " ANSI_BOLD "%s" ANSI_NORMAL " from %s", name, getS(fields, 1));
         }
 
+        if (type == actQueryPathInfo) {
+            auto name = storePathToName(getS(fields, 0));
+            i->s = fmt("querying about " ANSI_BOLD "%s" ANSI_NORMAL " on %s", name, getS(fields, 1));
+        }
+
         if ((type == actDownload && hasAncestor(*state, actCopyPath, parent))
+            || (type == actDownload && hasAncestor(*state, actQueryPathInfo, parent))
             || (type == actCopyPath && hasAncestor(*state, actSubstitute, parent)))
             i->visible = false;
 
@@ -189,6 +195,7 @@ public:
 
         auto i = state->its.find(act);
         if (i != state->its.end()) {
+
             auto & actByType = state->activitiesByType[i->second->type];
             actByType.done += i->second->done;
             actByType.failed += i->second->failed;