nix: Add --help-config flag

This commit is contained in:
Eelco Dolstra 2017-06-07 16:49:54 +02:00
parent b8283773bd
commit aa952d5f0b
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 30 additions and 2 deletions

View file

@ -41,7 +41,7 @@ protected:
virtual bool processFlag(Strings::iterator & pos, Strings::iterator end);
void printFlags(std::ostream & out);
virtual void printFlags(std::ostream & out);
/* Positional arguments. */
struct ExpectedArg

View file

@ -31,6 +31,8 @@ class Config
{
friend class AbstractSetting;
public:
struct SettingData
{
bool isAlias;
@ -40,7 +42,11 @@ class Config
{ }
};
std::map<std::string, SettingData> _settings;
typedef std::map<std::string, SettingData> Settings;
private:
Settings _settings;
StringMap initials;
@ -58,6 +64,8 @@ public:
StringMap getSettings(bool overridenOnly = false);
const Settings & _getSettings() { return _settings; }
void applyConfigFile(const Path & path, bool fatal = false);
void resetOverriden();

View file

@ -21,10 +21,30 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
throw Exit();
});
mkFlag(0, "help-config", "show configuration options", [=]() {
std::cout << "The following configuration options are available:\n\n";
Table2 tbl;
for (const auto & s : settings._getSettings())
if (!s.second.isAlias)
tbl.emplace_back(s.first, s.second.setting->description);
printTable(std::cout, tbl);
throw Exit();
});
mkFlag(0, "version", "show version information", std::bind(printVersion, programName));
settings.convertToArgs(*this);
}
void printFlags(std::ostream & out) override
{
Args::printFlags(out);
std::cout <<
"\n"
"In addition, most configuration settings can be overriden using --<name> <value>.\n"
"Boolean settings can be overriden using --<name> or --no-<name>. See nix\n"
"--help-config for a list of configuration settings.\n";
}
};
void mainWrapped(int argc, char * * argv)