mirror of
https://github.com/NixOS/nix
synced 2025-06-25 10:41:16 +02:00
refactor: Extract EvalState::realiseString
This commit is contained in:
parent
85a3071fc9
commit
7465fbe926
3 changed files with 19 additions and 5 deletions
|
@ -613,12 +613,8 @@ nix_realised_string * nix_string_realise(nix_c_context * context, EvalState * st
|
||||||
context->last_err_code = NIX_OK;
|
context->last_err_code = NIX_OK;
|
||||||
try {
|
try {
|
||||||
auto & v = check_value_in(value);
|
auto & v = check_value_in(value);
|
||||||
nix::NixStringContext stringContext;
|
|
||||||
auto rawStr = state->state.coerceToString(nix::noPos, v, stringContext, "while realising a string").toOwned();
|
|
||||||
nix::StorePathSet storePaths;
|
nix::StorePathSet storePaths;
|
||||||
auto rewrites = state->state.realiseContext(stringContext, &storePaths);
|
auto s = state->state.realiseString(v, &storePaths, isIFD);
|
||||||
|
|
||||||
auto s = nix::rewriteStrings(rawStr, rewrites);
|
|
||||||
|
|
||||||
// Convert to the C API StorePath type and convert to vector for index-based access
|
// Convert to the C API StorePath type and convert to vector for index-based access
|
||||||
std::vector<StorePath> vec;
|
std::vector<StorePath> vec;
|
||||||
|
|
|
@ -820,6 +820,15 @@ public:
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] StringMap realiseContext(const NixStringContext & context, StorePathSet * maybePaths = nullptr, bool isIFD = true);
|
[[nodiscard]] StringMap realiseContext(const NixStringContext & context, StorePathSet * maybePaths = nullptr, bool isIFD = true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Realise the given string with context, and return the string with outputs instead of downstream output placeholders.
|
||||||
|
* @param[in] str the string to realise
|
||||||
|
* @param[out] paths all referenced store paths will be added to this set
|
||||||
|
* @return the realised string
|
||||||
|
* @throw EvalError if the value is not a string, path or derivation (see `coerceToString`)
|
||||||
|
*/
|
||||||
|
std::string realiseString(Value & str, StorePathSet * storePathsOutMaybe, bool isIFD = true, const PosIdx pos = noPos);
|
||||||
|
|
||||||
/* Call the binary path filter predicate used builtins.path etc. */
|
/* Call the binary path filter predicate used builtins.path etc. */
|
||||||
bool callPathFilter(
|
bool callPathFilter(
|
||||||
Value * filterFun,
|
Value * filterFun,
|
||||||
|
|
|
@ -47,6 +47,15 @@ static inline Value * mkString(EvalState & state, const std::csub_match & match)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string EvalState::realiseString(Value & s, StorePathSet * storePathsOutMaybe, bool isIFD, const PosIdx pos)
|
||||||
|
{
|
||||||
|
nix::NixStringContext stringContext;
|
||||||
|
auto rawStr = coerceToString(pos, s, stringContext, "while realising a string").toOwned();
|
||||||
|
auto rewrites = realiseContext(stringContext, storePathsOutMaybe, isIFD);
|
||||||
|
|
||||||
|
return nix::rewriteStrings(rawStr, rewrites);
|
||||||
|
}
|
||||||
|
|
||||||
StringMap EvalState::realiseContext(const NixStringContext & context, StorePathSet * maybePathsOut, bool isIFD)
|
StringMap EvalState::realiseContext(const NixStringContext & context, StorePathSet * maybePathsOut, bool isIFD)
|
||||||
{
|
{
|
||||||
std::vector<DerivedPath::Built> drvs;
|
std::vector<DerivedPath::Built> drvs;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue