forked from lix-project/lix
Merge pull request #9838 from obsidiansystems/systemTypes-set
Make `Machine::systemTypes` a set not vector
(cherry picked from commit f1b030415376e81c5804647c055d71eaba4aa725)
Change-Id: I6d4f5c0bfc226e9bd66c58c360cd99e3fac9a129
This commit is contained in:
parent
fad1a25e17
commit
20d7b93b0c
|
@ -137,11 +137,8 @@ static int main_build_remote(int argc, char * * argv)
|
||||||
for (auto & m : machines) {
|
for (auto & m : machines) {
|
||||||
debug("considering building on remote machine '%s'", m.storeUri);
|
debug("considering building on remote machine '%s'", m.storeUri);
|
||||||
|
|
||||||
if (m.enabled
|
if (m.enabled &&
|
||||||
&& (neededSystem == "builtin"
|
m.systemSupported(neededSystem) &&
|
||||||
|| std::find(m.systemTypes.begin(),
|
|
||||||
m.systemTypes.end(),
|
|
||||||
neededSystem) != m.systemTypes.end()) &&
|
|
||||||
m.allSupported(requiredFeatures) &&
|
m.allSupported(requiredFeatures) &&
|
||||||
m.mandatoryMet(requiredFeatures))
|
m.mandatoryMet(requiredFeatures))
|
||||||
{
|
{
|
||||||
|
@ -214,7 +211,7 @@ static int main_build_remote(int argc, char * * argv)
|
||||||
|
|
||||||
for (auto & m : machines)
|
for (auto & m : machines)
|
||||||
error
|
error
|
||||||
% concatStringsSep<std::vector<std::string>>(", ", m.systemTypes)
|
% concatStringsSep<StringSet>(", ", m.systemTypes)
|
||||||
% m.maxJobs
|
% m.maxJobs
|
||||||
% concatStringsSep<StringSet>(", ", m.supportedFeatures)
|
% concatStringsSep<StringSet>(", ", m.supportedFeatures)
|
||||||
% concatStringsSep<StringSet>(", ", m.mandatoryFeatures);
|
% concatStringsSep<StringSet>(", ", m.mandatoryFeatures);
|
||||||
|
|
|
@ -39,6 +39,11 @@ Machine::Machine(decltype(storeUri) storeUri,
|
||||||
sshPublicHostKey(sshPublicHostKey)
|
sshPublicHostKey(sshPublicHostKey)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
bool Machine::systemSupported(const std::string & system) const
|
||||||
|
{
|
||||||
|
return system == "builtin" || (systemTypes.count(system) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
bool Machine::allSupported(const std::set<std::string> & features) const
|
bool Machine::allSupported(const std::set<std::string> & features) const
|
||||||
{
|
{
|
||||||
return std::all_of(features.begin(), features.end(),
|
return std::all_of(features.begin(), features.end(),
|
||||||
|
@ -146,7 +151,7 @@ static Machine parseBuilderLine(const std::string & line)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tokens[0],
|
tokens[0],
|
||||||
isSet(1) ? tokenizeString<std::vector<std::string>>(tokens[1], ",") : std::vector<std::string>{settings.thisSystem},
|
isSet(1) ? tokenizeString<std::set<std::string>>(tokens[1], ",") : std::set<std::string>{settings.thisSystem},
|
||||||
isSet(2) ? tokens[2] : "",
|
isSet(2) ? tokens[2] : "",
|
||||||
isSet(3) ? parseUnsignedIntField(3) : 1U,
|
isSet(3) ? parseUnsignedIntField(3) : 1U,
|
||||||
isSet(4) ? parseUnsignedIntField(4) : 1U,
|
isSet(4) ? parseUnsignedIntField(4) : 1U,
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Store;
|
||||||
struct Machine {
|
struct Machine {
|
||||||
|
|
||||||
const std::string storeUri;
|
const std::string storeUri;
|
||||||
const std::vector<std::string> systemTypes;
|
const std::set<std::string> systemTypes;
|
||||||
const std::string sshKey;
|
const std::string sshKey;
|
||||||
const unsigned int maxJobs;
|
const unsigned int maxJobs;
|
||||||
const unsigned int speedFactor;
|
const unsigned int speedFactor;
|
||||||
|
@ -19,8 +19,21 @@ struct Machine {
|
||||||
const std::string sshPublicHostKey;
|
const std::string sshPublicHostKey;
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Whether `system` is either `"builtin"` or in
|
||||||
|
* `systemTypes`.
|
||||||
|
*/
|
||||||
|
bool systemSupported(const std::string & system) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Whether `features` is a subset of the union of `supportedFeatures` and
|
||||||
|
* `mandatoryFeatures`
|
||||||
|
*/
|
||||||
bool allSupported(const std::set<std::string> & features) const;
|
bool allSupported(const std::set<std::string> & features) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return @Whether `mandatoryFeatures` is a subset of `features`
|
||||||
|
*/
|
||||||
bool mandatoryMet(const std::set<std::string> & features) const;
|
bool mandatoryMet(const std::set<std::string> & features) const;
|
||||||
|
|
||||||
Machine(decltype(storeUri) storeUri,
|
Machine(decltype(storeUri) storeUri,
|
||||||
|
|
Loading…
Reference in a new issue