* Put building in the store API.
This commit is contained in:
parent
e2ef5e07fd
commit
6ecb840fd1
11 changed files with 31 additions and 48 deletions
|
@ -1,4 +1,3 @@
|
||||||
#include "build.hh"
|
|
||||||
#include "misc.hh"
|
#include "misc.hh"
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
|
@ -50,7 +49,7 @@ static Expr primImport(EvalState & state, const ATermVector & args)
|
||||||
throw EvalError(format("cannot import `%1%', since path `%2%' is not valid")
|
throw EvalError(format("cannot import `%1%', since path `%2%' is not valid")
|
||||||
% path % *i);
|
% path % *i);
|
||||||
if (isDerivation(*i))
|
if (isDerivation(*i))
|
||||||
buildDerivations(singleton<PathSet>(*i));
|
store->buildDerivations(singleton<PathSet>(*i));
|
||||||
}
|
}
|
||||||
|
|
||||||
return evalFile(state, path);
|
return evalFile(state, path);
|
||||||
|
|
|
@ -5,7 +5,7 @@ libstore_la_SOURCES = \
|
||||||
db.cc references.cc pathlocks.cc gc.cc
|
db.cc references.cc pathlocks.cc gc.cc
|
||||||
|
|
||||||
pkginclude_HEADERS = \
|
pkginclude_HEADERS = \
|
||||||
store-api.hh local-store.cc derivations.hh build.hh misc.hh globals.hh \
|
store-api.hh local-store.cc derivations.hh misc.hh globals.hh \
|
||||||
db.hh references.hh pathlocks.hh gc.hh
|
db.hh references.hh pathlocks.hh gc.hh
|
||||||
|
|
||||||
libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la
|
libstore_la_LIBADD = ../libutil/libutil.la ../boost/format/libformat.la
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#include "build.hh"
|
|
||||||
#include "references.hh"
|
#include "references.hh"
|
||||||
#include "pathlocks.hh"
|
#include "pathlocks.hh"
|
||||||
#include "misc.hh"
|
#include "misc.hh"
|
||||||
|
@ -2195,7 +2194,7 @@ void Worker::waitForInput()
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
void buildDerivations(const PathSet & drvPaths)
|
void LocalStore::buildDerivations(const PathSet & drvPaths)
|
||||||
{
|
{
|
||||||
startNest(nest, lvlDebug,
|
startNest(nest, lvlDebug,
|
||||||
format("building %1%") % showPaths(drvPaths));
|
format("building %1%") % showPaths(drvPaths));
|
||||||
|
@ -2222,7 +2221,7 @@ void buildDerivations(const PathSet & drvPaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ensurePath(const Path & path)
|
void LocalStore::ensurePath(const Path & path)
|
||||||
{
|
{
|
||||||
/* If the path is already valid, we're done. */
|
/* If the path is already valid, we're done. */
|
||||||
if (store->isValidPath(path)) return;
|
if (store->isValidPath(path)) return;
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
#ifndef __BUILD_H
|
|
||||||
#define __BUILD_H
|
|
||||||
|
|
||||||
|
|
||||||
#include "types.hh"
|
|
||||||
|
|
||||||
|
|
||||||
namespace nix {
|
|
||||||
|
|
||||||
|
|
||||||
extern string drvsLogDir;
|
|
||||||
|
|
||||||
|
|
||||||
/* Ensure that the output paths of the derivation are valid. If they
|
|
||||||
are already valid, this is a no-op. Otherwise, validity can
|
|
||||||
be reached in two ways. First, if the output paths have
|
|
||||||
substitutes, then those can be used. Second, the output paths can
|
|
||||||
be created by running the builder, after recursively building any
|
|
||||||
sub-derivations. */
|
|
||||||
void buildDerivations(const PathSet & drvPaths);
|
|
||||||
|
|
||||||
/* Ensure that a path is valid. If it is not currently valid, it may
|
|
||||||
be made valid by running a substitute (if defined for the path). */
|
|
||||||
void ensurePath(const Path & storePath);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* !__BUILD_H */
|
|
|
@ -33,7 +33,6 @@ extern string nixConfDir;
|
||||||
extern string nixLibexecDir;
|
extern string nixLibexecDir;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc. global flags. */
|
/* Misc. global flags. */
|
||||||
|
|
||||||
/* Whether to keep temporary directories of failed builds. */
|
/* Whether to keep temporary directories of failed builds. */
|
||||||
|
|
|
@ -18,6 +18,9 @@ class Transaction;
|
||||||
const int nixSchemaVersion = 3;
|
const int nixSchemaVersion = 3;
|
||||||
|
|
||||||
|
|
||||||
|
extern string drvsLogDir;
|
||||||
|
|
||||||
|
|
||||||
class LocalStore : public StoreAPI
|
class LocalStore : public StoreAPI
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -56,6 +59,10 @@ public:
|
||||||
Path addTextToStore(const string & suffix, const string & s,
|
Path addTextToStore(const string & suffix, const string & s,
|
||||||
const PathSet & references);
|
const PathSet & references);
|
||||||
|
|
||||||
|
void buildDerivations(const PathSet & drvPaths);
|
||||||
|
|
||||||
|
void ensurePath(const Path & storePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Path _addToStore(bool fixed, bool recursive,
|
Path _addToStore(bool fixed, bool recursive,
|
||||||
string hashAlgo, const Path & _srcPath);
|
string hashAlgo, const Path & _srcPath);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#include "misc.hh"
|
#include "misc.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "build.hh"
|
|
||||||
#include "db.hh"
|
#include "db.hh"
|
||||||
|
|
||||||
#include <aterm2.h>
|
#include <aterm2.h>
|
||||||
|
@ -12,7 +11,7 @@ namespace nix {
|
||||||
Derivation derivationFromPath(const Path & drvPath)
|
Derivation derivationFromPath(const Path & drvPath)
|
||||||
{
|
{
|
||||||
assertStorePath(drvPath);
|
assertStorePath(drvPath);
|
||||||
ensurePath(drvPath);
|
store->ensurePath(drvPath);
|
||||||
ATerm t = ATreadFromNamedFile(drvPath.c_str());
|
ATerm t = ATreadFromNamedFile(drvPath.c_str());
|
||||||
if (!t) throw Error(format("cannot read aterm from `%1%'") % drvPath);
|
if (!t) throw Error(format("cannot read aterm from `%1%'") % drvPath);
|
||||||
return parseDerivation(t);
|
return parseDerivation(t);
|
||||||
|
|
|
@ -72,6 +72,19 @@ public:
|
||||||
a regular file containing the given string. */
|
a regular file containing the given string. */
|
||||||
virtual Path addTextToStore(const string & suffix, const string & s,
|
virtual Path addTextToStore(const string & suffix, const string & s,
|
||||||
const PathSet & references) = 0;
|
const PathSet & references) = 0;
|
||||||
|
|
||||||
|
/* Ensure that the output paths of the derivation are valid. If
|
||||||
|
they are already valid, this is a no-op. Otherwise, validity
|
||||||
|
can be reached in two ways. First, if the output paths have
|
||||||
|
substitutes, then those can be used. Second, the output paths
|
||||||
|
can be created by running the builder, after recursively
|
||||||
|
building any sub-derivations. */
|
||||||
|
virtual void buildDerivations(const PathSet & drvPaths) = 0;
|
||||||
|
|
||||||
|
/* Ensure that a path is valid. If it is not currently valid, it
|
||||||
|
may be made valid by running a substitute (if defined for the
|
||||||
|
path). */
|
||||||
|
virtual void ensurePath(const Path & storePath) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#include "profiles.hh"
|
#include "profiles.hh"
|
||||||
#include "names.hh"
|
#include "names.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "build.hh"
|
|
||||||
#include "misc.hh"
|
#include "misc.hh"
|
||||||
#include "gc.hh"
|
#include "gc.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
|
@ -152,7 +151,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems,
|
||||||
drvsToBuild.insert(i->queryDrvPath(state));
|
drvsToBuild.insert(i->queryDrvPath(state));
|
||||||
|
|
||||||
debug(format("building user environment dependencies"));
|
debug(format("building user environment dependencies"));
|
||||||
buildDerivations(drvsToBuild);
|
store->buildDerivations(drvsToBuild);
|
||||||
|
|
||||||
/* Get the environment builder expression. */
|
/* Get the environment builder expression. */
|
||||||
Expr envBuilder = parseExprFromFile(state,
|
Expr envBuilder = parseExprFromFile(state,
|
||||||
|
@ -184,7 +183,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems,
|
||||||
/* This is only necessary when installing store paths, e.g.,
|
/* This is only necessary when installing store paths, e.g.,
|
||||||
`nix-env -i /nix/store/abcd...-foo'. */
|
`nix-env -i /nix/store/abcd...-foo'. */
|
||||||
addTempRoot(i->queryOutPath(state));
|
addTempRoot(i->queryOutPath(state));
|
||||||
ensurePath(i->queryOutPath(state));
|
store->ensurePath(i->queryOutPath(state));
|
||||||
|
|
||||||
references.insert(i->queryOutPath(state));
|
references.insert(i->queryOutPath(state));
|
||||||
if (drvPath != "") references.insert(drvPath);
|
if (drvPath != "") references.insert(drvPath);
|
||||||
|
@ -212,7 +211,7 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems,
|
||||||
|
|
||||||
/* Realise the resulting store expression. */
|
/* Realise the resulting store expression. */
|
||||||
debug(format("building user environment"));
|
debug(format("building user environment"));
|
||||||
buildDerivations(singleton<PathSet>(topLevelDrv.queryDrvPath(state)));
|
store->buildDerivations(singleton<PathSet>(topLevelDrv.queryDrvPath(state)));
|
||||||
|
|
||||||
/* Switch the current user environment to the output path. */
|
/* Switch the current user environment to the output path. */
|
||||||
debug(format("switching to new user environment"));
|
debug(format("switching to new user environment"));
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "build.hh"
|
|
||||||
#include "gc.hh"
|
#include "gc.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "build.hh"
|
|
||||||
#include "misc.hh"
|
#include "misc.hh"
|
||||||
#include "gc.hh"
|
#include "gc.hh"
|
||||||
#include "archive.hh"
|
#include "archive.hh"
|
||||||
|
@ -64,7 +63,7 @@ static Path realisePath(const Path & path)
|
||||||
if (isDerivation(path)) {
|
if (isDerivation(path)) {
|
||||||
PathSet paths;
|
PathSet paths;
|
||||||
paths.insert(path);
|
paths.insert(path);
|
||||||
buildDerivations(paths);
|
store->buildDerivations(paths);
|
||||||
Path outPath = findOutput(derivationFromPath(path), "out");
|
Path outPath = findOutput(derivationFromPath(path), "out");
|
||||||
|
|
||||||
if (gcRoot == "")
|
if (gcRoot == "")
|
||||||
|
@ -76,7 +75,7 @@ static Path realisePath(const Path & path)
|
||||||
|
|
||||||
return outPath;
|
return outPath;
|
||||||
} else {
|
} else {
|
||||||
ensurePath(path);
|
store->ensurePath(path);
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,7 +96,7 @@ static void opRealise(Strings opFlags, Strings opArgs)
|
||||||
i != opArgs.end(); ++i)
|
i != opArgs.end(); ++i)
|
||||||
if (isDerivation(*i))
|
if (isDerivation(*i))
|
||||||
drvPaths.insert(*i);
|
drvPaths.insert(*i);
|
||||||
buildDerivations(drvPaths);
|
store->buildDerivations(drvPaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Strings::iterator i = opArgs.begin();
|
for (Strings::iterator i = opArgs.begin();
|
||||||
|
|
Loading…
Reference in a new issue