aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-08-25 14:53:50 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-08-25 15:58:35 +0200
commit0e9ddcc306f0900fc38472a2c8b9d9aa886b279e (patch)
tree564883e41ee9aee98ec1bdceed43f7d2be8f905b
parent1f56235438984d8079159d7c81ad4127c318b2dc (diff)
Restore activity metadata
This allows the progress bar to display "building perl-5.22.3" instead of "building /nix/store/<hash>-perl-5.22.3.drv".
-rw-r--r--src/libstore/build.cc7
-rw-r--r--src/libutil/logging.cc5
-rw-r--r--src/libutil/logging.hh34
-rw-r--r--src/nix/progress-bar.cc10
4 files changed, 36 insertions, 20 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index e97fcc9e2..77dee2914 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -1390,7 +1390,8 @@ void DerivationGoal::tryToBuild()
bool buildLocally = buildMode != bmNormal || drv->willBuildLocally();
auto started = [&]() {
- act = std::make_unique<Activity>(*logger, actBuild, fmt("building '%s'", drvPath));
+ act = std::make_unique<Activity>(*logger, actBuild,
+ fmt("building '%s'", drvPath), Logger::Fields{drvPath});
mcRunningBuilds = std::make_unique<MaintainCount<uint64_t>>(worker.runningBuilds);
worker.updateProgress();
};
@@ -2405,13 +2406,15 @@ struct BuilderLogger : Logger
prevLogger.log(lvl, fs);
}
- void startActivity(ActivityId act, ActivityType type, const std::string & s) override
+ void startActivity(ActivityId act, ActivityType type,
+ const std::string & s, const Fields & fields) override
{
nlohmann::json json;
json["action"] = "start";
json["id"] = act;
json["type"] = type;
json["text"] = s;
+ // FIXME: handle fields
log(lvlError, "@nix " + json.dump());
}
diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc
index 900f24e4c..87f20664e 100644
--- a/src/libutil/logging.cc
+++ b/src/libutil/logging.cc
@@ -74,10 +74,11 @@ Logger * makeDefaultLogger()
std::atomic<uint64_t> nextId{(uint64_t) getpid() << 32};
-Activity::Activity(Logger & logger, ActivityType type, const std::string & s)
+Activity::Activity(Logger & logger, ActivityType type,
+ const std::string & s, const Logger::Fields & fields)
: logger(logger), id(nextId++)
{
- logger.startActivity(id, type, s);
+ logger.startActivity(id, type, s, fields);
}
}
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 08a116175..567af361e 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -40,6 +40,19 @@ class Logger
public:
+ struct Field
+ {
+ // FIXME: use std::variant.
+ enum { tInt, tString } type;
+ uint64_t i = 0;
+ std::string s;
+ Field(const std::string & s) : type(tString), s(s) { }
+ Field(const char * s) : type(tString), s(s) { }
+ Field(const uint64_t & i) : type(tInt), i(i) { }
+ };
+
+ typedef std::vector<Field> Fields;
+
virtual ~Logger() { }
virtual void log(Verbosity lvl, const FormatOrString & fs) = 0;
@@ -51,7 +64,8 @@ public:
virtual void warn(const std::string & msg);
- virtual void startActivity(ActivityId act, ActivityType type, const std::string & s) { };
+ virtual void startActivity(ActivityId act, ActivityType type,
+ const std::string & s, const Fields & fields) { };
virtual void stopActivity(ActivityId act) { };
@@ -59,18 +73,7 @@ public:
virtual void setExpected(ActivityId act, ActivityType type, uint64_t expected) { };
- struct Field
- {
- // FIXME: use std::variant.
- enum { tInt, tString } type;
- uint64_t i = 0;
- std::string s;
- Field(const std::string & s) : type(tString), s(s) { }
- Field(const char * s) : type(tString), s(s) { }
- Field(const uint64_t & i) : type(tInt), i(i) { }
- };
-
- virtual void result(ActivityId act, ResultType type, const std::vector<Field> & fields) { };
+ virtual void result(ActivityId act, ResultType type, const Fields & fields) { };
};
struct Activity
@@ -79,7 +82,8 @@ struct Activity
const ActivityId id;
- Activity(Logger & logger, ActivityType type, const std::string & s = "");
+ Activity(Logger & logger, ActivityType type, const std::string & s = "",
+ const Logger::Fields & fields = {});
Activity(const Activity & act) = delete;
@@ -95,7 +99,7 @@ struct Activity
template<typename... Args>
void result(ResultType type, const Args & ... args)
{
- std::vector<Logger::Field> fields;
+ Logger::Fields fields;
nop{(fields.emplace_back(Logger::Field(args)), 1)...};
logger.result(id, type, fields);
}
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index f0db3be60..a692250f8 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -93,7 +93,8 @@ public:
update(state);
}
- void startActivity(ActivityId act, ActivityType type, const std::string & s) override
+ void startActivity(ActivityId act, ActivityType type, const std::string & s,
+ const Fields & fields) override
{
auto state(state_.lock());
@@ -102,6 +103,13 @@ public:
state->its.emplace(act, i);
state->activitiesByType[type].its.emplace(act, i);
+ if (type == actBuild) {
+ auto name = storePathToName(getS(fields, 0));
+ if (hasSuffix(name, ".drv"))
+ name.resize(name.size() - 4);
+ i->s = fmt("building " ANSI_BOLD "%s" ANSI_NORMAL, name);
+ }
+
update(*state);
}