nix dev-shell: Add --profile flag

This is useful to prevent the shell environment from being
garbage-collected.
This commit is contained in:
Eelco Dolstra 2019-07-12 16:10:58 +02:00
parent 990b5b2dcf
commit 7ba928116e
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -66,7 +66,7 @@ BuildEnvironment readEnvironment(const Path & path)
modified derivation with the same dependencies and nearly the same modified derivation with the same dependencies and nearly the same
initial environment variables, that just writes the resulting initial environment variables, that just writes the resulting
environment to a file and exits. */ environment to a file and exits. */
BuildEnvironment getDerivationEnvironment(ref<Store> store, Derivation drv) Path getDerivationEnvironment(ref<Store> store, Derivation drv)
{ {
auto builder = baseNameOf(drv.builder); auto builder = baseNameOf(drv.builder);
if (builder != "bash") if (builder != "bash")
@ -101,7 +101,7 @@ BuildEnvironment getDerivationEnvironment(ref<Store> store, Derivation drv)
assert(store->isValidPath(shellOutPath)); assert(store->isValidPath(shellOutPath));
return readEnvironment(shellOutPath); return shellOutPath;
} }
struct Common : InstallableCommand struct Common : InstallableCommand
@ -175,7 +175,7 @@ struct Common : InstallableCommand
} }
}; };
struct CmdDevShell : Common struct CmdDevShell : Common, MixProfile
{ {
std::string description() override std::string description() override
{ {
@ -193,6 +193,10 @@ struct CmdDevShell : Common
"To get the build environment of the default package of flake in the current directory:", "To get the build environment of the default package of flake in the current directory:",
"nix dev-shell" "nix dev-shell"
}, },
Example{
"To store the build environment in a profile:",
"nix dev-shell --profile /tmp/my-shell"
},
}; };
} }
@ -206,7 +210,11 @@ struct CmdDevShell : Common
auto & drvPath = *drvs.begin(); auto & drvPath = *drvs.begin();
auto buildEnvironment = getDerivationEnvironment(store, store->derivationFromPath(drvPath)); auto shellOutPath = getDerivationEnvironment(store, store->derivationFromPath(drvPath));
updateProfile(shellOutPath);
auto buildEnvironment = readEnvironment(shellOutPath);
auto [rcFileFd, rcFilePath] = createTempFile("nix-shell"); auto [rcFileFd, rcFilePath] = createTempFile("nix-shell");
@ -259,7 +267,9 @@ struct CmdPrintDevEnv : Common
auto & drvPath = *drvs.begin(); auto & drvPath = *drvs.begin();
auto buildEnvironment = getDerivationEnvironment(store, store->derivationFromPath(drvPath)); auto buildEnvironment = readEnvironment(
getDerivationEnvironment(store,
store->derivationFromPath(drvPath)));
stopProgressBar(); stopProgressBar();