Skip to content

Commit

Permalink
Merge pull request NixOS#9838 from obsidiansystems/systemTypes-set
Browse files Browse the repository at this point in the history
Make `Machine::systemTypes` a set not vector

(cherry picked from commit f1b0304)
Change-Id: I6d4f5c0bfc226e9bd66c58c360cd99e3fac9a129
  • Loading branch information
eldritch horrors committed Mar 4, 2024
1 parent fad1a25 commit 20d7b93
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 8 deletions.
9 changes: 3 additions & 6 deletions src/build-remote/build-remote.cc
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,8 @@ static int main_build_remote(int argc, char * * argv)
for (auto & m : machines) {
debug("considering building on remote machine '%s'", m.storeUri);

if (m.enabled
&& (neededSystem == "builtin"
|| std::find(m.systemTypes.begin(),
m.systemTypes.end(),
neededSystem) != m.systemTypes.end()) &&
if (m.enabled &&
m.systemSupported(neededSystem) &&
m.allSupported(requiredFeatures) &&
m.mandatoryMet(requiredFeatures))
{
Expand Down Expand Up @@ -214,7 +211,7 @@ static int main_build_remote(int argc, char * * argv)

for (auto & m : machines)
error
% concatStringsSep<std::vector<std::string>>(", ", m.systemTypes)
% concatStringsSep<StringSet>(", ", m.systemTypes)
% m.maxJobs
% concatStringsSep<StringSet>(", ", m.supportedFeatures)
% concatStringsSep<StringSet>(", ", m.mandatoryFeatures);
Expand Down
7 changes: 6 additions & 1 deletion src/libstore/machines.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ Machine::Machine(decltype(storeUri) storeUri,
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
{
return std::all_of(features.begin(), features.end(),
Expand Down Expand Up @@ -146,7 +151,7 @@ static Machine parseBuilderLine(const std::string & line)

return {
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(3) ? parseUnsignedIntField(3) : 1U,
isSet(4) ? parseUnsignedIntField(4) : 1U,
Expand Down
15 changes: 14 additions & 1 deletion src/libstore/machines.hh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Store;
struct Machine {

const std::string storeUri;
const std::vector<std::string> systemTypes;
const std::set<std::string> systemTypes;
const std::string sshKey;
const unsigned int maxJobs;
const unsigned int speedFactor;
Expand All @@ -19,8 +19,21 @@ struct Machine {
const std::string sshPublicHostKey;
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;

/**
* @return @Whether `mandatoryFeatures` is a subset of `features`
*/
bool mandatoryMet(const std::set<std::string> & features) const;

Machine(decltype(storeUri) storeUri,
Expand Down

0 comments on commit 20d7b93

Please sign in to comment.