1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-14 14:32:42 +01:00

Merge pull request #14530 from NixOS/nix-develop-cleanups-0

Two cleanups `nix develop`
This commit is contained in:
John Ericson 2025-11-10 22:26:46 +00:00 committed by GitHub
commit d00c419ed6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -227,11 +227,13 @@ const static std::string getEnvSh =
#include "get-env.sh.gen.hh" #include "get-env.sh.gen.hh"
; ;
/* Given an existing derivation, return the shell environment as /**
initialised by stdenv's setup script. We do this by building a * Given an existing derivation, return the shell environment as
modified derivation with the same dependencies and nearly the same * initialised by stdenv's setup script. We do this by building a
initial environment variables, that just writes the resulting * modified derivation with the same dependencies and nearly the same
environment to a file and exits. */ * initial environment variables, that just writes the resulting
* environment to a file and exits.
*/
static StorePath getDerivationEnvironment(ref<Store> store, ref<Store> evalStore, const StorePath & drvPath) static StorePath getDerivationEnvironment(ref<Store> store, ref<Store> evalStore, const StorePath & drvPath)
{ {
auto drv = evalStore->derivationFromPath(drvPath); auto drv = evalStore->derivationFromPath(drvPath);
@ -302,6 +304,8 @@ static StorePath getDerivationEnvironment(ref<Store> store, ref<Store> evalStore
bmNormal, bmNormal,
evalStore); evalStore);
// `get-env.sh` will write its JSON output to an arbitrary output
// path, so return the first non-empty output path.
for (auto & [_0, optPath] : evalStore->queryPartialDerivationOutputMap(shellDrvPath)) { for (auto & [_0, optPath] : evalStore->queryPartialDerivationOutputMap(shellDrvPath)) {
assert(optPath); assert(optPath);
auto accessor = evalStore->requireStoreObjectAccessor(*optPath); auto accessor = evalStore->requireStoreObjectAccessor(*optPath);
@ -495,19 +499,18 @@ struct Common : InstallableCommand, MixProfile
} }
} }
std::pair<BuildEnvironment, std::string> getBuildEnvironment(ref<Store> store, ref<Installable> installable) std::pair<BuildEnvironment, StorePath> getBuildEnvironment(ref<Store> store, ref<Installable> installable)
{ {
auto shellOutPath = getShellOutPath(store, installable); auto shellOutPath = getShellOutPath(store, installable);
auto strPath = store->printStorePath(shellOutPath);
updateProfile(shellOutPath); updateProfile(shellOutPath);
debug("reading environment file '%s'", strPath); debug("reading environment file '%s'", store->printStorePath(shellOutPath));
return { return {
BuildEnvironment::parseJSON(store->requireStoreObjectAccessor(shellOutPath)->readFile(CanonPath::root)), BuildEnvironment::parseJSON(store->requireStoreObjectAccessor(shellOutPath)->readFile(CanonPath::root)),
strPath}; shellOutPath,
};
} }
}; };
@ -634,7 +637,7 @@ struct CmdDevelop : Common, MixEnvironment
setEnviron(); setEnviron();
// prevent garbage collection until shell exits // prevent garbage collection until shell exits
setEnv("NIX_GCROOT", gcroot.c_str()); setEnv("NIX_GCROOT", store->printStorePath(gcroot).c_str());
Path shell = "bash"; Path shell = "bash";
bool foundInteractive = false; bool foundInteractive = false;