aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env/user-env.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-env/user-env.cc')
-rw-r--r--src/nix-env/user-env.cc26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/nix-env/user-env.cc b/src/nix-env/user-env.cc
index 7b9a88281..8e4ecda4e 100644
--- a/src/nix-env/user-env.cc
+++ b/src/nix-env/user-env.cc
@@ -32,16 +32,16 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
{
/* Build the components in the user environment, if they don't
exist already. */
- PathSet drvsToBuild;
+ std::vector<StorePathWithOutputs> drvsToBuild;
for (auto & i : elems)
if (i.queryDrvPath() != "")
- drvsToBuild.insert(i.queryDrvPath());
+ drvsToBuild.push_back({state.store->parseStorePath(i.queryDrvPath())});
debug(format("building user environment dependencies"));
state.store->buildPaths(drvsToBuild, state.repair ? bmRepair : bmNormal);
/* Construct the whole top level derivation. */
- PathSet references;
+ StorePathSet references;
Value manifest;
state.mkList(manifest, elems.size());
unsigned int n = 0;
@@ -77,10 +77,10 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
/* This is only necessary when installing store paths, e.g.,
`nix-env -i /nix/store/abcd...-foo'. */
- state.store->addTempRoot(j.second);
- state.store->ensurePath(j.second);
+ state.store->addTempRoot(state.store->parseStorePath(j.second));
+ state.store->ensurePath(state.store->parseStorePath(j.second));
- references.insert(j.second);
+ references.insert(state.store->parseStorePath(j.second));
}
// Copy the meta attributes.
@@ -95,14 +95,14 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
vMeta.attrs->sort();
v.attrs->sort();
- if (drvPath != "") references.insert(drvPath);
+ if (drvPath != "") references.insert(state.store->parseStorePath(drvPath));
}
/* Also write a copy of the list of user environment elements to
the store; we need it for future modifications of the
environment. */
- Path manifestFile = state.store->addTextToStore("env-manifest.nix",
- (format("%1%") % manifest).str(), references);
+ auto manifestFile = state.store->addTextToStore("env-manifest.nix",
+ fmt("%s", manifest), references);
/* Get the environment builder expression. */
Value envBuilder;
@@ -113,7 +113,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
Value args, topLevel;
state.mkAttrs(args, 3);
mkString(*state.allocAttr(args, state.symbols.create("manifest")),
- manifestFile, {manifestFile});
+ state.store->printStorePath(manifestFile), {state.store->printStorePath(manifestFile)});
args.attrs->push_back(Attr(state.symbols.create("derivations"), &manifest));
args.attrs->sort();
mkApp(topLevel, envBuilder, args);
@@ -123,13 +123,15 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
state.forceValue(topLevel);
PathSet context;
Attr & aDrvPath(*topLevel.attrs->find(state.sDrvPath));
- Path topLevelDrv = state.coerceToPath(aDrvPath.pos ? *(aDrvPath.pos) : noPos, *(aDrvPath.value), context);
+ auto topLevelDrv = state.store->parseStorePath(state.coerceToPath(aDrvPath.pos ? *(aDrvPath.pos) : noPos, *(aDrvPath.value), context));
Attr & aOutPath(*topLevel.attrs->find(state.sOutPath));
Path topLevelOut = state.coerceToPath(aOutPath.pos ? *(aOutPath.pos) : noPos, *(aOutPath.value), context);
/* Realise the resulting store expression. */
debug("building user environment");
- state.store->buildPaths({topLevelDrv}, state.repair ? bmRepair : bmNormal);
+ std::vector<StorePathWithOutputs> topLevelDrvs;
+ topLevelDrvs.push_back(StorePathWithOutputs{topLevelDrv.clone()});
+ state.store->buildPaths(topLevelDrvs, state.repair ? bmRepair : bmNormal);
/* Switch the current user environment to the output path. */
auto store2 = state.store.dynamic_pointer_cast<LocalFSStore>();