mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 03:56:01 +01:00
* It is tough to contribute to a project that doesn't use a formatter, * It is extra hard to contribute to a project which has configured the formatter, but ignores it for some files * Code formatting makes it harder to hide obscure / weird bugs by accident or on purpose, Let's rip the bandaid off? Note that PRs currently in flight should be able to be merged relatively easily by applying `clang-format` to their tip prior to merge. Co-authored-by: Graham Christensen <graham@grahamc.com>
55 lines
1.7 KiB
C++
55 lines
1.7 KiB
C++
#include "nix/cmd/installable-derived-path.hh"
|
|
#include "nix/store/derivations.hh"
|
|
|
|
namespace nix {
|
|
|
|
std::string InstallableDerivedPath::what() const
|
|
{
|
|
return derivedPath.to_string(*store);
|
|
}
|
|
|
|
DerivedPathsWithInfo InstallableDerivedPath::toDerivedPaths()
|
|
{
|
|
return {{
|
|
.path = derivedPath,
|
|
.info = make_ref<ExtraPathInfo>(),
|
|
}};
|
|
}
|
|
|
|
std::optional<StorePath> InstallableDerivedPath::getStorePath()
|
|
{
|
|
return derivedPath.getBaseStorePath();
|
|
}
|
|
|
|
InstallableDerivedPath
|
|
InstallableDerivedPath::parse(ref<Store> store, std::string_view prefix, ExtendedOutputsSpec extendedOutputsSpec)
|
|
{
|
|
auto derivedPath = std::visit(
|
|
overloaded{
|
|
// If the user did not use ^, we treat the output more
|
|
// liberally: we accept a symlink chain or an actual
|
|
// store path.
|
|
[&](const ExtendedOutputsSpec::Default &) -> DerivedPath {
|
|
auto storePath = store->followLinksToStorePath(prefix);
|
|
return DerivedPath::Opaque{
|
|
.path = std::move(storePath),
|
|
};
|
|
},
|
|
// If the user did use ^, we just do exactly what is written.
|
|
[&](const ExtendedOutputsSpec::Explicit & outputSpec) -> DerivedPath {
|
|
auto drv = make_ref<SingleDerivedPath>(SingleDerivedPath::parse(*store, prefix));
|
|
drvRequireExperiment(*drv);
|
|
return DerivedPath::Built{
|
|
.drvPath = std::move(drv),
|
|
.outputs = outputSpec,
|
|
};
|
|
},
|
|
},
|
|
extendedOutputsSpec.raw);
|
|
return InstallableDerivedPath{
|
|
store,
|
|
std::move(derivedPath),
|
|
};
|
|
}
|
|
|
|
} // namespace nix
|