aboutsummaryrefslogtreecommitdiff
path: root/src/nix-env
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-02 13:33:49 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-06-02 16:02:48 +0200
commit812c0dfbe24c8fe93992f77abbf1e5a975ea42f4 (patch)
treed69bcc87ce446f270f6b01f7069655223d52a626 /src/nix-env
parentf2682e6e18a76ecbfb8a12c17e3a0ca15c084197 (diff)
Allow setting the state directory as a store parameter
E.g. "local?store=/tmp/store&state=/tmp/var".
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/nix-env.cc5
-rw-r--r--src/nix-env/user-env.cc24
2 files changed, 18 insertions, 11 deletions
diff --git a/src/nix-env/nix-env.cc b/src/nix-env/nix-env.cc
index fbb0f61a1..3f0486bb6 100644
--- a/src/nix-env/nix-env.cc
+++ b/src/nix-env/nix-env.cc
@@ -692,6 +692,9 @@ static void opSetFlag(Globals & globals, Strings opFlags, Strings opArgs)
static void opSet(Globals & globals, Strings opFlags, Strings opArgs)
{
+ auto store2 = globals.state->store.dynamic_pointer_cast<LocalFSStore>();
+ if (!store2) throw Error("--set is not supported for this Nix store");
+
for (Strings::iterator i = opFlags.begin(); i != opFlags.end(); ) {
string arg = *i++;
if (parseInstallSourceOptions(globals, i, opFlags, arg)) ;
@@ -722,7 +725,7 @@ static void opSet(Globals & globals, Strings opFlags, Strings opArgs)
}
debug(format("switching to new user environment"));
- Path generation = createGeneration(globals.state->store, globals.profile, drv.queryOutPath());
+ Path generation = createGeneration(ref<LocalFSStore>(store2), globals.profile, drv.queryOutPath());
switchLink(globals.profile, generation);
}
diff --git a/src/nix-env/user-env.cc b/src/nix-env/user-env.cc
index ca27a7248..f239f6377 100644
--- a/src/nix-env/user-env.cc
+++ b/src/nix-env/user-env.cc
@@ -131,18 +131,22 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
state.store->buildPaths({topLevelDrv}, state.repair ? bmRepair : bmNormal);
/* Switch the current user environment to the output path. */
- PathLocks lock;
- lockProfile(lock, profile);
+ auto store2 = state.store.dynamic_pointer_cast<LocalFSStore>();
- Path lockTokenCur = optimisticLockProfile(profile);
- if (lockToken != lockTokenCur) {
- printMsg(lvlError, format("profile ‘%1%’ changed while we were busy; restarting") % profile);
- return false;
- }
+ if (store2) {
+ PathLocks lock;
+ lockProfile(lock, profile);
+
+ Path lockTokenCur = optimisticLockProfile(profile);
+ if (lockToken != lockTokenCur) {
+ printMsg(lvlError, format("profile ‘%1%’ changed while we were busy; restarting") % profile);
+ return false;
+ }
- debug(format("switching to new user environment"));
- Path generation = createGeneration(state.store, profile, topLevelOut);
- switchLink(profile, generation);
+ debug(format("switching to new user environment"));
+ Path generation = createGeneration(ref<LocalFSStore>(store2), profile, topLevelOut);
+ switchLink(profile, generation);
+ }
return true;
}