From 750275d6e8740ec7e170e7ac98c68ab3e36f37e6 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 7 Oct 2024 11:43:58 -0400 Subject: [PATCH] Avoid trailing slash that broke lookup --- src/hydra-queue-runner/nar-extractor.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/hydra-queue-runner/nar-extractor.cc b/src/hydra-queue-runner/nar-extractor.cc index 9f94af9c..8729dd39 100644 --- a/src/hydra-queue-runner/nar-extractor.cc +++ b/src/hydra-queue-runner/nar-extractor.cc @@ -54,7 +54,15 @@ struct Extractor : FileSystemObjectSink }; NarMemberDatas & members; - Path prefix; + std::filesystem::path prefix; + + Path toKey(const CanonPath & path) + { + std::filesystem::path p = prefix; + // Conditional to avoid trailing slash + if (!path.isRoot()) p /= path.rel(); + return p; + } Extractor(NarMemberDatas & members, const Path & prefix) : members(members), prefix(prefix) @@ -62,13 +70,13 @@ struct Extractor : FileSystemObjectSink void createDirectory(const CanonPath & path) override { - members.insert_or_assign(prefix + path.abs(), NarMemberData { .type = SourceAccessor::Type::tDirectory }); + members.insert_or_assign(toKey(path), NarMemberData { .type = SourceAccessor::Type::tDirectory }); } void createRegularFile(const CanonPath & path, std::function func) override { NarMemberConstructor nmc { - members.insert_or_assign(prefix + path.abs(), NarMemberData { + members.insert_or_assign(toKey(path), NarMemberData { .type = SourceAccessor::Type::tRegular, .fileSize = 0, .contents = filesToKeep.count(path.abs()) ? std::optional("") : std::nullopt, @@ -79,7 +87,7 @@ struct Extractor : FileSystemObjectSink void createSymlink(const CanonPath & path, const std::string & target) override { - members.insert_or_assign(prefix + path.abs(), NarMemberData { .type = SourceAccessor::Type::tSymlink }); + members.insert_or_assign(toKey(path), NarMemberData { .type = SourceAccessor::Type::tSymlink }); } };