* `nix-store --read-log / -l PATH' shows the build log of PATH, if
available. For instance, $ nix-store -l $(which svn) | less lets you read the build log of the Subversion instance in your profile. * `nix-store -qb': if applied to a non-derivation, take the deriver.
This commit is contained in:
parent
99b0ea7c67
commit
ae6fb27f18
5 changed files with 60 additions and 4 deletions
|
@ -5,6 +5,23 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--==================================================================-->
|
||||||
|
|
||||||
|
<section><title>Release 0.11 (TBA)</title>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
|
||||||
|
<listitem><para><command>nix-store</command> has a new operation
|
||||||
|
<option>--read-log</option> (<option>-l</option>)
|
||||||
|
<parameter>paths</parameter> that shows the build log of the given
|
||||||
|
paths.</para></listitem>
|
||||||
|
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--==================================================================-->
|
<!--==================================================================-->
|
||||||
|
|
||||||
<section><title>Release 0.10.1 (October 11, 2006)</title>
|
<section><title>Release 0.10.1 (October 11, 2006)</title>
|
||||||
|
|
|
@ -1511,7 +1511,7 @@ void DerivationGoal::computeClosure()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static string drvsLogDir = "drvs";
|
string drvsLogDir = "drvs";
|
||||||
|
|
||||||
|
|
||||||
void DerivationGoal::openLogFile()
|
void DerivationGoal::openLogFile()
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
||||||
|
extern string drvsLogDir;
|
||||||
|
|
||||||
|
|
||||||
/* Ensure that the output paths of the derivation are valid. If they
|
/* Ensure that the output paths of the derivation are valid. If they
|
||||||
are already valid, this is a no-op. Otherwise, validity can
|
are already valid, this is a no-op. Otherwise, validity can
|
||||||
be reached in two ways. First, if the output paths have
|
be reached in two ways. First, if the output paths have
|
||||||
|
|
|
@ -9,6 +9,7 @@ Operations:
|
||||||
--add / -A: copy a path to the Nix store
|
--add / -A: copy a path to the Nix store
|
||||||
--delete: safely delete paths from the Nix store
|
--delete: safely delete paths from the Nix store
|
||||||
--query / -q: query information
|
--query / -q: query information
|
||||||
|
--read-log / -l: print build log of given store paths
|
||||||
|
|
||||||
--register-substitutes: register a substitute expression (dangerous!)
|
--register-substitutes: register a substitute expression (dangerous!)
|
||||||
--clear-substitutes: clear all substitutes
|
--clear-substitutes: clear all substitutes
|
||||||
|
|
|
@ -46,6 +46,17 @@ static Path fixPath(Path path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Path useDeriver(Path path)
|
||||||
|
{
|
||||||
|
if (!isDerivation(path)) {
|
||||||
|
path = queryDeriver(noTxn, path);
|
||||||
|
if (path == "")
|
||||||
|
throw Error(format("deriver of path `%1%' is not known") % path);
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Realisation the given path. For a derivation that means build it;
|
/* Realisation the given path. For a derivation that means build it;
|
||||||
for other paths it means ensure their validity. */
|
for other paths it means ensure their validity. */
|
||||||
static Path realisePath(const Path & path)
|
static Path realisePath(const Path & path)
|
||||||
|
@ -360,12 +371,12 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
||||||
for (Strings::iterator i = opArgs.begin();
|
for (Strings::iterator i = opArgs.begin();
|
||||||
i != opArgs.end(); ++i)
|
i != opArgs.end(); ++i)
|
||||||
{
|
{
|
||||||
*i = fixPath(*i);
|
Path path = useDeriver(fixPath(*i));
|
||||||
Derivation drv = derivationFromPath(*i);
|
Derivation drv = derivationFromPath(path);
|
||||||
StringPairs::iterator j = drv.env.find(bindingName);
|
StringPairs::iterator j = drv.env.find(bindingName);
|
||||||
if (j == drv.env.end())
|
if (j == drv.env.end())
|
||||||
throw Error(format("derivation `%1%' has no environment binding named `%2%'")
|
throw Error(format("derivation `%1%' has no environment binding named `%2%'")
|
||||||
% *i % bindingName);
|
% path % bindingName);
|
||||||
cout << format("%1%\n") % j->second;
|
cout << format("%1%\n") % j->second;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -404,6 +415,28 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void opReadLog(Strings opFlags, Strings opArgs)
|
||||||
|
{
|
||||||
|
if (!opFlags.empty()) throw UsageError("unknown flag");
|
||||||
|
|
||||||
|
for (Strings::iterator i = opArgs.begin();
|
||||||
|
i != opArgs.end(); ++i)
|
||||||
|
{
|
||||||
|
Path path = useDeriver(fixPath(*i));
|
||||||
|
|
||||||
|
Path logPath = (format("%1%/%2%/%3%") %
|
||||||
|
nixLogDir % drvsLogDir % baseNameOf(path)).str();
|
||||||
|
|
||||||
|
if (!pathExists(logPath))
|
||||||
|
throw Error(format("build log of derivation `%1%' is not available") % path);
|
||||||
|
|
||||||
|
/* !!! Make this run in O(1) memory. */
|
||||||
|
string log = readFile(logPath);
|
||||||
|
writeFull(STDOUT_FILENO, (const unsigned char *) log.c_str(), log.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void opRegisterSubstitutes(Strings opFlags, Strings opArgs)
|
static void opRegisterSubstitutes(Strings opFlags, Strings opArgs)
|
||||||
{
|
{
|
||||||
if (!opFlags.empty()) throw UsageError("unknown flag");
|
if (!opFlags.empty()) throw UsageError("unknown flag");
|
||||||
|
@ -663,6 +696,8 @@ void run(Strings args)
|
||||||
op = opDelete;
|
op = opDelete;
|
||||||
else if (arg == "--query" || arg == "-q")
|
else if (arg == "--query" || arg == "-q")
|
||||||
op = opQuery;
|
op = opQuery;
|
||||||
|
else if (arg == "--read-log" || arg == "-l")
|
||||||
|
op = opReadLog;
|
||||||
else if (arg == "--register-substitutes")
|
else if (arg == "--register-substitutes")
|
||||||
op = opRegisterSubstitutes;
|
op = opRegisterSubstitutes;
|
||||||
else if (arg == "--clear-substitutes")
|
else if (arg == "--clear-substitutes")
|
||||||
|
|
Loading…
Reference in a new issue