mirror of
https://github.com/NixOS/nix.git
synced 2025-11-28 13:11:00 +01:00
Merge pull request #14665 from vinayakankugoyal/path
Use std::filesystem::path in libmain.
This commit is contained in:
commit
ad07be0a55
2 changed files with 30 additions and 6 deletions
|
|
@ -10,30 +10,30 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
struct PluginFilesSetting : public BaseSetting<Paths>
|
||||
struct PluginFilesSetting : public BaseSetting<std::list<std::filesystem::path>>
|
||||
{
|
||||
bool pluginsLoaded = false;
|
||||
|
||||
PluginFilesSetting(
|
||||
Config * options,
|
||||
const Paths & def,
|
||||
const std::list<std::filesystem::path> & def,
|
||||
const std::string & name,
|
||||
const std::string & description,
|
||||
const StringSet & aliases = {})
|
||||
: BaseSetting<Paths>(def, true, name, description, aliases)
|
||||
: BaseSetting<std::list<std::filesystem::path>>(def, true, name, description, aliases)
|
||||
{
|
||||
options->addSetting(this);
|
||||
}
|
||||
|
||||
Paths parse(const std::string & str) const override;
|
||||
std::list<std::filesystem::path> parse(const std::string & str) const override;
|
||||
};
|
||||
|
||||
Paths PluginFilesSetting::parse(const std::string & str) const
|
||||
std::list<std::filesystem::path> PluginFilesSetting::parse(const std::string & str) 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<std::list<std::filesystem::path>>::parse(str);
|
||||
}
|
||||
|
||||
struct PluginSettings : Config
|
||||
|
|
|
|||
|
|
@ -330,12 +330,27 @@ void BaseSetting<bool>::convertToArg(Args & args, const std::string & category)
|
|||
});
|
||||
}
|
||||
|
||||
template<>
|
||||
std::list<std::filesystem::path> BaseSetting<std::list<std::filesystem::path>>::parse(const std::string & str) const
|
||||
{
|
||||
auto tokens = tokenizeString<std::list<std::string>>(str);
|
||||
return {tokens.begin(), tokens.end()};
|
||||
}
|
||||
|
||||
template<>
|
||||
Strings BaseSetting<Strings>::parse(const std::string & str) const
|
||||
{
|
||||
return tokenizeString<Strings>(str);
|
||||
}
|
||||
|
||||
template<>
|
||||
void BaseSetting<std::list<std::filesystem::path>>::appendOrSet(std::list<std::filesystem::path> newValue, bool append)
|
||||
{
|
||||
if (!append)
|
||||
value.clear();
|
||||
value.insert(value.end(), std::make_move_iterator(newValue.begin()), std::make_move_iterator(newValue.end()));
|
||||
}
|
||||
|
||||
template<>
|
||||
void BaseSetting<Strings>::appendOrSet(Strings newValue, bool append)
|
||||
{
|
||||
|
|
@ -344,6 +359,14 @@ void BaseSetting<Strings>::appendOrSet(Strings newValue, bool append)
|
|||
value.insert(value.end(), std::make_move_iterator(newValue.begin()), std::make_move_iterator(newValue.end()));
|
||||
}
|
||||
|
||||
template<>
|
||||
std::string BaseSetting<std::list<std::filesystem::path>>::to_string() const
|
||||
{
|
||||
return concatStringsSep(" ", value | std::views::transform([](const auto & p) {
|
||||
return p.string();
|
||||
}) | std::ranges::to<std::list<std::string>>());
|
||||
}
|
||||
|
||||
template<>
|
||||
std::string BaseSetting<Strings>::to_string() const
|
||||
{
|
||||
|
|
@ -477,6 +500,7 @@ template class BaseSetting<long long>;
|
|||
template class BaseSetting<unsigned long long>;
|
||||
template class BaseSetting<bool>;
|
||||
template class BaseSetting<std::string>;
|
||||
template class BaseSetting<std::list<std::filesystem::path>>;
|
||||
template class BaseSetting<Strings>;
|
||||
template class BaseSetting<StringSet>;
|
||||
template class BaseSetting<StringMap>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue