nix: Make all options available as flags
Thus, instead of ‘--option <name> <value>’, you can write ‘--<name> <value>’. So --option http-connections 100 becomes --http-connections 100 Apart from brevity, the difference is that it's not an error to set a non-existent option via --option, but unrecognized arguments are fatal. Boolean options have special treatment: they're mapped to the argument-less flags ‘--<name>’ and ‘--no-<name>’. E.g. --option auto-optimise-store false becomes --no-auto-optimise-store
This commit is contained in:
parent
c8cc50d46e
commit
b8283773bd
|
@ -98,6 +98,13 @@ template<> void BaseSetting<SandboxMode>::toJSON(JSONPlaceholder & out)
|
||||||
AbstractSetting::toJSON(out);
|
AbstractSetting::toJSON(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> void BaseSetting<SandboxMode>::convertToArg(Args & args)
|
||||||
|
{
|
||||||
|
args.mkFlag(0, name, {}, "Enable sandboxing.", 0, [=](Strings ss) { value = smEnabled; });
|
||||||
|
args.mkFlag(0, "no-" + name, {}, "Disable sandboxing.", 0, [=](Strings ss) { value = smDisabled; });
|
||||||
|
args.mkFlag(0, "relaxed-" + name, {}, "Enable sandboxing, but allow builds to disable it.", 0, [=](Strings ss) { value = smRelaxed; });
|
||||||
|
}
|
||||||
|
|
||||||
void MaxBuildJobsSetting::set(const std::string & str)
|
void MaxBuildJobsSetting::set(const std::string & str)
|
||||||
{
|
{
|
||||||
if (str == "auto") value = std::max(1U, std::thread::hardware_concurrency());
|
if (str == "auto") value = std::max(1U, std::thread::hardware_concurrency());
|
||||||
|
|
|
@ -115,6 +115,13 @@ void Config::toJSON(JSONObject & out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Config::convertToArgs(Args & args)
|
||||||
|
{
|
||||||
|
for (auto & s : _settings)
|
||||||
|
if (!s.second.isAlias)
|
||||||
|
s.second.setting->convertToArg(args);
|
||||||
|
}
|
||||||
|
|
||||||
AbstractSetting::AbstractSetting(
|
AbstractSetting::AbstractSetting(
|
||||||
const std::string & name,
|
const std::string & name,
|
||||||
const std::string & description,
|
const std::string & description,
|
||||||
|
@ -128,12 +135,22 @@ void AbstractSetting::toJSON(JSONPlaceholder & out)
|
||||||
out.write(to_string());
|
out.write(to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AbstractSetting::convertToArg(Args & args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void BaseSetting<T>::toJSON(JSONPlaceholder & out)
|
void BaseSetting<T>::toJSON(JSONPlaceholder & out)
|
||||||
{
|
{
|
||||||
out.write(value);
|
out.write(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void BaseSetting<T>::convertToArg(Args & args)
|
||||||
|
{
|
||||||
|
args.mkFlag(0, name, {}, description, 1, [=](Strings ss) { set(*ss.begin()); });
|
||||||
|
}
|
||||||
|
|
||||||
template<> void BaseSetting<std::string>::set(const std::string & str)
|
template<> void BaseSetting<std::string>::set(const std::string & str)
|
||||||
{
|
{
|
||||||
value = str;
|
value = str;
|
||||||
|
@ -174,6 +191,12 @@ template<> std::string BaseSetting<bool>::to_string()
|
||||||
return value ? "true" : "false";
|
return value ? "true" : "false";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> void BaseSetting<bool>::convertToArg(Args & args)
|
||||||
|
{
|
||||||
|
args.mkFlag(0, name, {}, description, 0, [=](Strings ss) { value = true; });
|
||||||
|
args.mkFlag(0, "no-" + name, {}, description, 0, [=](Strings ss) { value = false; });
|
||||||
|
}
|
||||||
|
|
||||||
template<> void BaseSetting<Strings>::set(const std::string & str)
|
template<> void BaseSetting<Strings>::set(const std::string & str)
|
||||||
{
|
{
|
||||||
value = tokenizeString<Strings>(str);
|
value = tokenizeString<Strings>(str);
|
||||||
|
@ -216,6 +239,8 @@ template class BaseSetting<long long>;
|
||||||
template class BaseSetting<unsigned long long>;
|
template class BaseSetting<unsigned long long>;
|
||||||
template class BaseSetting<bool>;
|
template class BaseSetting<bool>;
|
||||||
template class BaseSetting<std::string>;
|
template class BaseSetting<std::string>;
|
||||||
|
template class BaseSetting<Strings>;
|
||||||
|
template class BaseSetting<StringSet>;
|
||||||
|
|
||||||
void PathSetting::set(const std::string & str)
|
void PathSetting::set(const std::string & str)
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,6 +63,8 @@ public:
|
||||||
void resetOverriden();
|
void resetOverriden();
|
||||||
|
|
||||||
void toJSON(JSONObject & out);
|
void toJSON(JSONObject & out);
|
||||||
|
|
||||||
|
void convertToArgs(Args & args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class AbstractSetting
|
class AbstractSetting
|
||||||
|
@ -99,6 +101,8 @@ protected:
|
||||||
|
|
||||||
virtual void toJSON(JSONPlaceholder & out);
|
virtual void toJSON(JSONPlaceholder & out);
|
||||||
|
|
||||||
|
virtual void convertToArg(Args & args);
|
||||||
|
|
||||||
bool isOverriden() { return overriden; }
|
bool isOverriden() { return overriden; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -132,6 +136,8 @@ public:
|
||||||
|
|
||||||
std::string to_string() override;
|
std::string to_string() override;
|
||||||
|
|
||||||
|
void convertToArg(Args & args) override;
|
||||||
|
|
||||||
void toJSON(JSONPlaceholder & out) override;
|
void toJSON(JSONPlaceholder & out) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,8 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
|
||||||
});
|
});
|
||||||
|
|
||||||
mkFlag(0, "version", "show version information", std::bind(printVersion, programName));
|
mkFlag(0, "version", "show version information", std::bind(printVersion, programName));
|
||||||
|
|
||||||
|
settings.convertToArgs(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue