diff options
author | rebecca “wiggles” turner <rbt@sent.as> | 2024-09-01 22:06:36 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@localhost> | 2024-09-01 22:06:36 +0000 |
commit | 02eb07cfd539c34c080cb1baf042e5e780c1fcc2 (patch) | |
tree | 0397ab434cce8b284a8d447594e2e1f3f35a1470 /src/libstore | |
parent | d75df91f74b6819f674f0733143fdf32580af183 (diff) | |
parent | 690f07272e58bfe86d12adb0bd6c81c031f930fd (diff) |
Merge changes I5566a985,I88cf53d3 into main
* changes:
Support relative and `~/` paths in config settings
Thread `ApplyConfigOptions` through config parsing
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/globals.cc | 27 | ||||
-rw-r--r-- | src/libstore/globals.hh | 5 |
2 files changed, 17 insertions, 15 deletions
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index b534882de..c114e22dc 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -126,29 +126,30 @@ Settings::Settings() void loadConfFile() { - auto applyConfigFile = [&](const Path & path) { + auto applyConfigFile = [&](const ApplyConfigOptions & options) { try { - std::string contents = readFile(path); - globalConfig.applyConfig(contents, path); - } catch (SysError &) { } + std::string contents = readFile(*options.path); + globalConfig.applyConfig(contents, options); + } catch (SysError &) { + } }; - applyConfigFile(settings.nixConfDir + "/nix.conf"); + applyConfigFile(ApplyConfigOptions{.path = settings.nixConfDir + "/nix.conf"}); /* We only want to send overrides to the daemon, i.e. stuff from ~/.nix/nix.conf or the command line. */ globalConfig.resetOverridden(); auto files = settings.nixUserConfFiles; + auto home = getHome(); for (auto file = files.rbegin(); file != files.rend(); file++) { - applyConfigFile(*file); + applyConfigFile(ApplyConfigOptions{.path = *file, .home = home}); } auto nixConfEnv = getEnv("NIX_CONFIG"); if (nixConfEnv.has_value()) { - globalConfig.applyConfig(nixConfEnv.value(), "NIX_CONFIG"); + globalConfig.applyConfig(nixConfEnv.value(), ApplyConfigOptions{.fromEnvVar = true}); } - } std::vector<Path> getUserConfigFiles() @@ -274,7 +275,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM(SandboxMode, { {SandboxMode::smDisabled, false}, }); -template<> SandboxMode BaseSetting<SandboxMode>::parse(const std::string & str) const +template<> SandboxMode BaseSetting<SandboxMode>::parse(const std::string & str, const ApplyConfigOptions & options) const { if (str == "true") return smEnabled; else if (str == "relaxed") return smRelaxed; @@ -317,7 +318,7 @@ template<> void BaseSetting<SandboxMode>::convertToArg(Args & args, const std::s }); } -unsigned int MaxBuildJobsSetting::parse(const std::string & str) const +unsigned int MaxBuildJobsSetting::parse(const std::string & str, const ApplyConfigOptions & options) const { if (str == "auto") return std::max(1U, std::thread::hardware_concurrency()); else { @@ -325,15 +326,15 @@ unsigned int MaxBuildJobsSetting::parse(const std::string & str) const return *n; else throw UsageError("configuration setting '%s' should be 'auto' or an integer", name); + } } -} -Paths PluginFilesSetting::parse(const std::string & str) const +Paths PluginFilesSetting::parse(const std::string & str, const ApplyConfigOptions & options) const { if (pluginsLoaded) throw UsageError("plugin-files set after plugins were loaded, you may need to move the flag before the subcommand"); - return BaseSetting<Paths>::parse(str); + return BaseSetting<Paths>::parse(str, options); } diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index aba99d969..51550b2c3 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -26,7 +26,7 @@ struct MaxBuildJobsSetting : public BaseSetting<unsigned int> options->addSetting(this); } - unsigned int parse(const std::string & str) const override; + unsigned int parse(const std::string & str, const ApplyConfigOptions & options) const override; }; struct PluginFilesSetting : public BaseSetting<Paths> @@ -43,7 +43,7 @@ struct PluginFilesSetting : public BaseSetting<Paths> options->addSetting(this); } - Paths parse(const std::string & str) const override; + Paths parse(const std::string & str, const ApplyConfigOptions & options) const override; }; const uint32_t maxIdsPerBuild = @@ -1088,6 +1088,7 @@ void loadConfFile(); // Used by the Settings constructor std::vector<Path> getUserConfigFiles(); +std::vector<Path> getHomeConfigFile(); extern const std::string nixVersion; |