From 142f94b7e1d1ba284f496ef3f848b1e5dfc0119a Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 9 Apr 2025 15:23:12 -0400 Subject: [PATCH] Fix another machine config parsing bug We were ignorning the result of `trim`, and after my last change we were also trimmming too early. (cherry picked from commit b74b0f4e1c4efe5e278a1a9b9c59f08688af9115) --- src/libstore/machines.cc | 9 +++++---- tests/unit/libstore/machines.cc | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libstore/machines.cc b/src/libstore/machines.cc index 17b9c6860..e69802e49 100644 --- a/src/libstore/machines.cc +++ b/src/libstore/machines.cc @@ -106,13 +106,14 @@ static std::vector expandBuilderLines(const std::string & builders) { std::vector result; for (auto line : tokenizeString>(builders, "\n")) { - trim(line); line.erase(std::find(line.begin(), line.end(), '#'), line.end()); for (auto entry : tokenizeString>(line, ";")) { - if (entry.empty()) continue; + entry = trim(entry); - if (entry[0] == '@') { - const std::string path = trim(std::string(entry, 1)); + if (entry.empty()) { + // skip blank entries + } else if (entry[0] == '@') { + const std::string path = trim(std::string_view{entry}.substr(1)); std::string text; try { text = readFile(path); diff --git a/tests/unit/libstore/machines.cc b/tests/unit/libstore/machines.cc index dc878c877..d3bf40ea7 100644 --- a/tests/unit/libstore/machines.cc +++ b/tests/unit/libstore/machines.cc @@ -83,6 +83,20 @@ TEST(machines, getMachinesWithCommentsAndSemicolonSeparator) { EXPECT_THAT(actual, Contains(Field(&Machine::storeUri, AuthorityMatches("nix@scabby.labs.cs.uu.nl")))); } +TEST(machines, getMachinesWithFunnyWhitespace) { + auto actual = Machine::parseConfig({}, + " # commment ; comment\n" + " nix@scratchy.labs.cs.uu.nl ; nix@itchy.labs.cs.uu.nl \n" + "\n \n" + "\n ;;; \n" + "\n ; ; \n" + "nix@scabby.labs.cs.uu.nl\n\n"); + EXPECT_THAT(actual, SizeIs(3)); + EXPECT_THAT(actual, Contains(Field(&Machine::storeUri, AuthorityMatches("nix@scratchy.labs.cs.uu.nl")))); + EXPECT_THAT(actual, Contains(Field(&Machine::storeUri, AuthorityMatches("nix@itchy.labs.cs.uu.nl")))); + EXPECT_THAT(actual, Contains(Field(&Machine::storeUri, AuthorityMatches("nix@scabby.labs.cs.uu.nl")))); +} + TEST(machines, getMachinesWithCorrectCompleteSingleBuilder) { auto actual = Machine::parseConfig({}, "nix@scratchy.labs.cs.uu.nl i686-linux "