mirror of
https://github.com/NixOS/nix
synced 2025-06-27 00:11:17 +02:00
* Dirty hack to make nix-push work properly on derivations: the
derivation should be a source rather than a derivation dependency of the call to the NAR derivation. Otherwise the derivation (and all its dependencies) will be built as a side-effect, which may not even succeed.
This commit is contained in:
parent
82ae85de27
commit
f8713e1287
2 changed files with 24 additions and 10 deletions
|
@ -366,12 +366,18 @@ static Expr prim_derivationStrict(EvalState & state, const ATermVector & args)
|
|||
attributes should be added as dependencies of the resulting
|
||||
derivation. */
|
||||
for (PathSet::iterator i = context.begin(); i != context.end(); ++i) {
|
||||
debug(format("derivation uses `%1%'") % *i);
|
||||
assert(isStorePath(*i));
|
||||
if (isDerivation(*i))
|
||||
drv.inputDrvs[*i] = singleton<StringSet>("out");
|
||||
Path path = *i;
|
||||
bool buildDrv = true;
|
||||
if (path.at(0) == '=') {
|
||||
buildDrv = false;
|
||||
path = string(path, 1);
|
||||
}
|
||||
debug(format("derivation uses `%1%'") % path);
|
||||
assert(isStorePath(path));
|
||||
if (buildDrv && isDerivation(path))
|
||||
drv.inputDrvs[path] = singleton<StringSet>("out");
|
||||
else
|
||||
drv.inputSrcs.insert(*i);
|
||||
drv.inputSrcs.insert(path);
|
||||
}
|
||||
|
||||
/* Do we have all required attributes? */
|
||||
|
@ -498,9 +504,17 @@ static Expr prim_storePath(EvalState & state, const ATermVector & args)
|
|||
Path path = canonPath(coerceToPath(state, args[0], context));
|
||||
if (!isInStore(path))
|
||||
throw EvalError(format("path `%1%' is not in the Nix store") % path);
|
||||
if (!store->isValidPath(path))
|
||||
throw EvalError(format("store path `%1%' is not valid") % path);
|
||||
context.insert(toStorePath(path));
|
||||
Path path2 = toStorePath(path);
|
||||
if (!store->isValidPath(path2))
|
||||
throw EvalError(format("store path `%1%' is not valid") % path2);
|
||||
/* If this is a derivation, mark it so it doesn't get built;
|
||||
i.e. we want the dependency as a "source" dependency. This is
|
||||
to make nix-push work properly (we want it to create a NAR
|
||||
archive of the derivation, not build the derivation as a
|
||||
side-effect). The `=' is a special marker that gets stripped
|
||||
off by prim_derivationStrict. */
|
||||
if (isDerivation(path2)) path2 = "=" + path2;
|
||||
context.insert(path2);
|
||||
return makeStr(path, context);
|
||||
}
|
||||
|
||||
|
@ -578,6 +592,7 @@ static Expr prim_toFile(EvalState & state, const ATermVector & args)
|
|||
for (PathSet::iterator i = context.begin(); i != context.end(); ++i) {
|
||||
if (isDerivation(*i))
|
||||
throw EvalError(format("in `toFile': the file `%1%' cannot refer to derivation outputs") % name);
|
||||
/* !!! */
|
||||
refs.insert(*i);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue