forked from lix-project/lix
Maximilian Bosch
3b5429aec1
This is needed to push the adoption of structured attrs[1] forward. It's now checked if a `__json` exists in the environment-map of the derivation to be openend in a `nix-shell`. Derivations with structured attributes enabled also make use of a file named `.attrs.json` containing every environment variable represented as JSON which is useful for e.g. `exportReferencesGraph`[2]. To provide an environment similar to the build sandbox, `nix-shell` now adds a `.attrs.json` to `cwd` (which is mostly equal to the one in the build sandbox) and removes it using an exit hook when closing the shell. To avoid leaking internals of the build-process to the `nix-shell`, the entire logic to generate JSON and shell code for structured attrs was moved into the `ParsedDerivation` class. [1] https://nixos.mayflower.consulting/blog/2020/01/20/structured-attrs/ [2] https://nixos.org/manual/nix/unstable/expressions/advanced-attributes.html#advanced-attributes
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "store-api.hh"
|
|
|
|
#include <nlohmann/json_fwd.hpp>
|
|
|
|
namespace nix {
|
|
|
|
typedef std::pair<std::string, nlohmann::json> StructuredAttrsWithShellRC;
|
|
|
|
class ParsedDerivation
|
|
{
|
|
StorePath drvPath;
|
|
BasicDerivation & drv;
|
|
std::unique_ptr<nlohmann::json> structuredAttrs;
|
|
|
|
public:
|
|
|
|
ParsedDerivation(const StorePath & drvPath, BasicDerivation & drv);
|
|
|
|
~ParsedDerivation();
|
|
|
|
const nlohmann::json * getStructuredAttrs() const
|
|
{
|
|
return structuredAttrs.get();
|
|
}
|
|
|
|
std::optional<std::string> getStringAttr(const std::string & name) const;
|
|
|
|
bool getBoolAttr(const std::string & name, bool def = false) const;
|
|
|
|
std::optional<Strings> getStringsAttr(const std::string & name) const;
|
|
|
|
StringSet getRequiredSystemFeatures() const;
|
|
|
|
bool canBuildLocally(Store & localStore) const;
|
|
|
|
bool willBuildLocally(Store & localStore) const;
|
|
|
|
bool substitutesAllowed() const;
|
|
|
|
std::optional<StructuredAttrsWithShellRC> generateStructuredAttrs(std::optional<StringMap> inputRewrites, Store & store, const StorePathSet & inputPaths);
|
|
};
|
|
|
|
}
|