nix-super/src/nix/log.cc
Eelco Dolstra 5b86451f02
Add a "nix log" command
This replaces "nix-store --read-log". It checks the local store and
any configured substituters for the requested logs.
2017-03-15 16:48:29 +01:00

58 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "command.hh"
#include "common-args.hh"
#include "installables.hh"
#include "shared.hh"
#include "store-api.hh"
using namespace nix;
struct CmdLog : StoreCommand, MixInstallables
{
CmdLog()
{
}
std::string name() override
{
return "log";
}
std::string description() override
{
return "show the build log of the specified packages or paths";
}
void run(ref<Store> store) override
{
auto elems = evalInstallables(store);
PathSet paths;
for (auto & elem : elems) {
if (elem.isDrv)
paths.insert(elem.drvPath);
else
paths.insert(elem.outPaths.begin(), elem.outPaths.end());
}
auto subs = getDefaultSubstituters();
subs.push_front(store);
for (auto & path : paths) {
bool found = false;
for (auto & sub : subs) {
auto log = sub->getBuildLog(path);
if (!log) continue;
std::cout << *log;
found = true;
break;
}
if (!found)
throw Error("build log of path %s is not available", path);
}
}
};
static RegisterCommand r1(make_ref<CmdLog>());