Make InstallableStorePath behave consistently with InstallableValue

That is, the commands 'nix path-info nixpkgs#hello' and 'nix path-info
/nix/store/00ls0qi49qkqpqblmvz5s1ajl3gc63lr-hello-2.10.drv' now do the
same thing (i.e. build the derivation and operate on the output store
path, rather than the .drv path).
This commit is contained in:
Eelco Dolstra 2020-07-15 19:50:32 +02:00
parent 298ff6af8f
commit e3c2b00237

View file

@ -296,15 +296,24 @@ struct InstallableStorePath : Installable
Buildables toBuildables() override
{
if (storePath.isDerivation()) {
std::map<std::string, StorePath> outputs;
outputs.insert_or_assign("out", storePath);
Buildable b{
.drvPath = storePath.isDerivation() ? storePath : std::optional<StorePath>(),
for (auto & [name, output] : store->readDerivation(storePath).outputs)
outputs.emplace(name, output.path);
return {
Buildable {
.drvPath = storePath,
.outputs = std::move(outputs)
}
};
Buildables bs;
bs.push_back(std::move(b));
return bs;
} else {
return {
Buildable {
.drvPath = {},
.outputs = {{"out", storePath}}
}
};
}
}
std::optional<StorePath> getStorePath() override