forked from lix-project/lix
Set environment variables for .attrs.json & .attrs.sh
This way no derivation has to expect that these files are in the `cwd` during the build. This is problematic for `nix-shell` where these files would have to be inserted into the nix-shell's `cwd` which can become problematic with e.g. recursive `nix-shell`. To remain backwards-compatible, the location inside the build sandbox will be kept, however using these files directly should be deprecated from now on.
This commit is contained in:
parent
3b5429aec1
commit
3944a120ec
|
@ -1093,8 +1093,10 @@ void LocalDerivationGoal::writeStructuredAttrs()
|
||||||
|
|
||||||
writeFile(tmpDir + "/.attrs.sh", rewriteStrings(jsonSh, inputRewrites));
|
writeFile(tmpDir + "/.attrs.sh", rewriteStrings(jsonSh, inputRewrites));
|
||||||
chownToBuilder(tmpDir + "/.attrs.sh");
|
chownToBuilder(tmpDir + "/.attrs.sh");
|
||||||
|
env["ATTRS_SH_FILE"] = tmpDir + "/.attrs.sh";
|
||||||
writeFile(tmpDir + "/.attrs.json", rewriteStrings(json.dump(), inputRewrites));
|
writeFile(tmpDir + "/.attrs.json", rewriteStrings(json.dump(), inputRewrites));
|
||||||
chownToBuilder(tmpDir + "/.attrs.json");
|
chownToBuilder(tmpDir + "/.attrs.json");
|
||||||
|
env["ATTRS_JSON_FILE"] = tmpDir + "/.attrs.json";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -428,7 +428,6 @@ static void main_nix_build(int argc, char * * argv)
|
||||||
env[var.first] = var.second;
|
env[var.first] = var.second;
|
||||||
|
|
||||||
std::string structuredAttrsRC;
|
std::string structuredAttrsRC;
|
||||||
std::string exitCmd;
|
|
||||||
|
|
||||||
if (env.count("__json")) {
|
if (env.count("__json")) {
|
||||||
StorePathSet inputs;
|
StorePathSet inputs;
|
||||||
|
@ -448,11 +447,13 @@ static void main_nix_build(int argc, char * * argv)
|
||||||
if (auto structAttrs = parsedDrv.generateStructuredAttrs(std::nullopt, *store, inputs)) {
|
if (auto structAttrs = parsedDrv.generateStructuredAttrs(std::nullopt, *store, inputs)) {
|
||||||
auto val = structAttrs.value();
|
auto val = structAttrs.value();
|
||||||
structuredAttrsRC = val.first;
|
structuredAttrsRC = val.first;
|
||||||
auto attrsJSON = std::filesystem::current_path().string() + "/.attrs.json";
|
auto attrsJSON = (Path) tmpDir + "/.attrs.json";
|
||||||
writeFile(attrsJSON, val.second.dump());
|
writeFile(attrsJSON, val.second.dump());
|
||||||
exitCmd = "\n_rm_attrs_json() { rm -f " + attrsJSON + "; }"
|
auto attrsSH = (Path) tmpDir + "/.attrs.sh";
|
||||||
+ "\nexitHooks+=(_rm_attrs_json)"
|
writeFile(attrsSH, val.first);
|
||||||
+ "\nfailureHooks+=(_rm_attrs_json)\n";
|
env["ATTRS_SH_FILE"] = attrsSH;
|
||||||
|
env["ATTRS_JSON_FILE"] = attrsJSON;
|
||||||
|
keepTmp = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +472,7 @@ static void main_nix_build(int argc, char * * argv)
|
||||||
(pure ? "" : "[ -n \"$PS1\" ] && [ -e ~/.bashrc ] && source ~/.bashrc;") +
|
(pure ? "" : "[ -n \"$PS1\" ] && [ -e ~/.bashrc ] && source ~/.bashrc;") +
|
||||||
"%2%"
|
"%2%"
|
||||||
"dontAddDisableDepTrack=1;\n"
|
"dontAddDisableDepTrack=1;\n"
|
||||||
+ structuredAttrsRC + exitCmd +
|
+ structuredAttrsRC +
|
||||||
"\n[ -e $stdenv/setup ] && source $stdenv/setup; "
|
"\n[ -e $stdenv/setup ] && source $stdenv/setup; "
|
||||||
"%3%"
|
"%3%"
|
||||||
"PATH=%4%:\"$PATH\"; "
|
"PATH=%4%:\"$PATH\"; "
|
||||||
|
|
|
@ -36,7 +36,7 @@ mkDerivation {
|
||||||
echo bar > $dest
|
echo bar > $dest
|
||||||
echo foo > $dest2
|
echo foo > $dest2
|
||||||
|
|
||||||
json=$(cat .attrs.json)
|
json=$(cat $ATTRS_JSON_FILE)
|
||||||
[[ $json =~ '"narHash":"sha256:1r7yc43zqnzl5b0als5vnyp649gk17i37s7mj00xr8kc47rjcybk"' ]]
|
[[ $json =~ '"narHash":"sha256:1r7yc43zqnzl5b0als5vnyp649gk17i37s7mj00xr8kc47rjcybk"' ]]
|
||||||
[[ $json =~ '"narSize":288' ]]
|
[[ $json =~ '"narSize":288' ]]
|
||||||
[[ $json =~ '"closureSize":288' ]]
|
[[ $json =~ '"closureSize":288' ]]
|
||||||
|
|
|
@ -10,7 +10,5 @@ nix-build structured-attrs.nix -A all -o $TEST_ROOT/result
|
||||||
[[ $(cat $TEST_ROOT/result-dev/foo) = foo ]]
|
[[ $(cat $TEST_ROOT/result-dev/foo) = foo ]]
|
||||||
|
|
||||||
export NIX_BUILD_SHELL=$SHELL
|
export NIX_BUILD_SHELL=$SHELL
|
||||||
[[ ! -e '.attrs.json' ]]
|
|
||||||
env NIX_PATH=nixpkgs=shell.nix nix-shell structured-attrs-shell.nix \
|
env NIX_PATH=nixpkgs=shell.nix nix-shell structured-attrs-shell.nix \
|
||||||
--run 'test -e .attrs.json; test "3" = "$(jq ".my.list|length" < .attrs.json)"'
|
--run 'test -e .attrs.json; test "3" = "$(jq ".my.list|length" < $ATTRS_JSON_FILE)"'
|
||||||
[[ ! -e '.attrs.json' ]]
|
|
||||||
|
|
Loading…
Reference in a new issue