Merge branch 'register-settings' of https://github.com/shlevy/nix

This commit is contained in:
Eelco Dolstra 2018-02-19 13:58:34 +01:00
commit 75a1d96cfd
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
8 changed files with 65 additions and 32 deletions

View file

@ -162,6 +162,22 @@ void initPlugins()
throw Error("could not dynamically open plugin file '%s%': %s%", file, dlerror());
}
}
/* We handle settings registrations here, since plugins can add settings */
if (RegisterSetting::settingRegistrations) {
for (auto & registration : *RegisterSetting::settingRegistrations)
settings.addSetting(registration);
delete RegisterSetting::settingRegistrations;
}
settings.handleUnknownSettings();
}
RegisterSetting::SettingRegistrations * RegisterSetting::settingRegistrations;
RegisterSetting::RegisterSetting(AbstractSetting * s)
{
if (!settingRegistrations)
settingRegistrations = new SettingRegistrations;
settingRegistrations->emplace_back(s);
}

View file

@ -386,5 +386,12 @@ void initPlugins();
extern const string nixVersion;
struct RegisterSetting
{
typedef std::vector<AbstractSetting *> SettingRegistrations;
static SettingRegistrations * settingRegistrations;
RegisterSetting(AbstractSetting * s);
};
}

View file

@ -839,7 +839,7 @@ ref<Store> openStore(const std::string & uri_,
for (auto fun : *RegisterStoreImplementation::implementations) {
auto store = fun(uri, params);
if (store) {
store->warnUnknownSettings();
store->handleUnknownSettings();
return ref<Store>(store);
}
}