fix(3p/nix): Fix parseDrvPathWithOutputs
At some point the behavior of this function got changed as part of our cleanup - this fixes it to behave the way the rest of the codebase expects (and how it is documented in the header) and covers it with a few tests. Change-Id: Id4c91232968e73489cd866fb4a2a84bcf20d875e Reviewed-on: https://cl.tvl.fyi/c/depot/+/1629 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
661353f200
commit
31b9578ad0
2 changed files with 33 additions and 3 deletions
6
third_party/nix/src/libstore/derivations.cc
vendored
6
third_party/nix/src/libstore/derivations.cc
vendored
|
@ -408,15 +408,15 @@ Hash hashDerivationModulo(Store& store, Derivation drv) {
|
|||
return hashString(htSHA256, drv.unparse());
|
||||
}
|
||||
|
||||
// TODO(tazjin): doc comment?
|
||||
DrvPathWithOutputs parseDrvPathWithOutputs(absl::string_view path) {
|
||||
auto pos = path.find('!');
|
||||
if (pos == absl::string_view::npos) {
|
||||
return DrvPathWithOutputs(path, std::set<std::string>());
|
||||
}
|
||||
|
||||
return DrvPathWithOutputs(path.substr(pos + 1),
|
||||
absl::StrSplit(path, absl::ByChar(',')));
|
||||
return DrvPathWithOutputs(
|
||||
path.substr(0, pos),
|
||||
absl::StrSplit(path.substr(pos + 1), absl::ByChar(',')));
|
||||
}
|
||||
|
||||
Path makeDrvPathWithOutputs(const Path& drvPath,
|
||||
|
|
30
third_party/nix/src/tests/derivations_test.cc
vendored
30
third_party/nix/src/tests/derivations_test.cc
vendored
|
@ -103,4 +103,34 @@ RC_GTEST_FIXTURE_PROP(DerivationsTest, UnparseParseRoundTrip,
|
|||
AssertDerivationsEqual(drv, parsed);
|
||||
}
|
||||
|
||||
class ParseDrvPathWithOutputsTest : public DerivationsTest {};
|
||||
|
||||
TEST(ParseDrvPathWithOutputsTest, ParseDrvPathWithOutputs) {
|
||||
auto input = "/nix/store/my51f75kp056md84gq2v08pd140pcz57-test.drv!out";
|
||||
auto result = nix::parseDrvPathWithOutputs(input);
|
||||
|
||||
ASSERT_EQ(result.first,
|
||||
"/nix/store/my51f75kp056md84gq2v08pd140pcz57-test.drv");
|
||||
ASSERT_EQ(result.second, nix::PathSet{"out"});
|
||||
}
|
||||
|
||||
TEST(ParseDrvPathWithOutputsTest, ParseDrvPathWithMultipleOutputs) {
|
||||
auto input = "/nix/store/my51f75kp056md84gq2v08pd140pcz57-test.drv!out,dev";
|
||||
auto result = nix::parseDrvPathWithOutputs(input);
|
||||
|
||||
nix::PathSet expected = {"out", "dev"};
|
||||
|
||||
ASSERT_EQ(result.first,
|
||||
"/nix/store/my51f75kp056md84gq2v08pd140pcz57-test.drv");
|
||||
ASSERT_EQ(result.second, expected);
|
||||
}
|
||||
|
||||
TEST(ParseDrvPathWithOutputsTest, ParseDrvPathWithNoOutputs) {
|
||||
auto input = "/nix/store/my51f75kp056md84gq2v08pd140pcz57-test";
|
||||
auto result = nix::parseDrvPathWithOutputs(input);
|
||||
|
||||
ASSERT_EQ(result.first, "/nix/store/my51f75kp056md84gq2v08pd140pcz57-test");
|
||||
ASSERT_EQ(result.second, nix::PathSet());
|
||||
}
|
||||
|
||||
} // namespace nix
|
||||
|
|
Loading…
Reference in a new issue