#include "command.hh" #include "common-args.hh" #include using namespace nix; struct CmdRealisation : virtual NixMultiCommand { CmdRealisation() : MultiCommand(RegisterCommand::getCommandsFor({"realisation"})) { } std::string description() override { return "manipulate a Nix realisation"; } Category category() override { return catUtility; } void run() override { if (!command) throw UsageError("'nix realisation' requires a sub-command."); command->second->prepare(); command->second->run(); } }; static auto rCmdRealisation = registerCommand("realisation"); struct CmdRealisationInfo : BuiltPathsCommand, MixJSON { std::string description() override { return "query information about one or several realisations"; } std::string doc() override { return #include "realisation/info.md" ; } Category category() override { return catSecondary; } void run(ref store, BuiltPaths && paths) override { settings.requireExperimentalFeature(Xp::CaDerivations); RealisedPath::Set realisations; for (auto & builtPath : paths) { auto theseRealisations = builtPath.toRealisedPaths(*store); realisations.insert(theseRealisations.begin(), theseRealisations.end()); } if (json) { nlohmann::json res = nlohmann::json::array(); for (auto & path : realisations) { nlohmann::json currentPath; if (auto realisation = std::get_if(&path.raw)) currentPath = realisation->toJSON(); else currentPath["opaquePath"] = store->printStorePath(path.path()); res.push_back(currentPath); } logger->cout("%s", res); } else { for (auto & path : realisations) { if (auto realisation = std::get_if(&path.raw)) { logger->cout("%s %s", realisation->id.to_string(), store->printStorePath(realisation->outPath)); } else logger->cout("%s", store->printStorePath(path.path())); } } } }; static auto rCmdRealisationInfo = registerCommand2({"realisation", "info"});