mirror of
https://github.com/NixOS/nix
synced 2025-07-03 02:01:48 +02:00
* Big cleanup of the semantics of paths, strings, contexts, string
concatenation and string coercion. This was a big mess (see e.g. NIX-67). Contexts are now folded into strings, so that they don't cause evaluation errors when they're not expected. The semantics of paths has been clarified (see nixexpr-ast.def). toString() and coerceToString() have been merged. Semantic change: paths are now copied to the store when they're in a concatenation (and in most other situations - that's the formalisation of the meaning of a path). So "foo " + ./bla evaluates to "foo /nix/store/hash...-bla", not "foo /path/to/current-dir/bla". This prevents accidental impurities, and is more consistent with the treatment of derivation outputs, e.g., `"foo " + bla' where `bla' is a derivation. (Here `bla' would be replaced by the output path of `bla'.)
This commit is contained in:
parent
4c9aa821b9
commit
d7efd76394
17 changed files with 331 additions and 396 deletions
|
@ -167,18 +167,18 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems,
|
|||
Path drvPath = keepDerivations ? i->queryDrvPath(state) : "";
|
||||
ATerm t = makeAttrs(ATmakeList5(
|
||||
makeBind(toATerm("type"),
|
||||
makeStr(toATerm("derivation")), makeNoPos()),
|
||||
makeStr("derivation"), makeNoPos()),
|
||||
makeBind(toATerm("name"),
|
||||
makeStr(toATerm(i->name)), makeNoPos()),
|
||||
makeStr(i->name), makeNoPos()),
|
||||
makeBind(toATerm("system"),
|
||||
makeStr(toATerm(i->system)), makeNoPos()),
|
||||
makeStr(i->system), makeNoPos()),
|
||||
makeBind(toATerm("drvPath"),
|
||||
makePath(toATerm(drvPath)), makeNoPos()),
|
||||
makeStr(drvPath), makeNoPos()),
|
||||
makeBind(toATerm("outPath"),
|
||||
makePath(toATerm(i->queryOutPath(state))), makeNoPos())
|
||||
makeStr(i->queryOutPath(state)), makeNoPos())
|
||||
));
|
||||
manifest = ATinsert(manifest, t);
|
||||
inputs = ATinsert(inputs, makeStr(toATerm(i->queryOutPath(state))));
|
||||
inputs = ATinsert(inputs, makeStr(i->queryOutPath(state)));
|
||||
|
||||
/* This is only necessary when installing store paths, e.g.,
|
||||
`nix-env -i /nix/store/abcd...-foo'. */
|
||||
|
@ -196,11 +196,11 @@ static void createUserEnv(EvalState & state, const DrvInfos & elems,
|
|||
|
||||
Expr topLevel = makeCall(envBuilder, makeAttrs(ATmakeList3(
|
||||
makeBind(toATerm("system"),
|
||||
makeStr(toATerm(thisSystem)), makeNoPos()),
|
||||
makeStr(thisSystem), makeNoPos()),
|
||||
makeBind(toATerm("derivations"),
|
||||
makeList(ATreverse(inputs)), makeNoPos()),
|
||||
makeBind(toATerm("manifest"),
|
||||
makePath(toATerm(manifestFile)), makeNoPos())
|
||||
makeStr(manifestFile), makeNoPos())
|
||||
)));
|
||||
|
||||
/* Instantiate it. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue