Convert old-style profile manifest

This commit is contained in:
Eelco Dolstra 2019-10-22 15:16:57 +02:00
parent af786432c5
commit ac9b427541

View file

@ -6,6 +6,7 @@
#include "archive.hh" #include "archive.hh"
#include "builtins/buildenv.hh" #include "builtins/buildenv.hh"
#include "flake/flakeref.hh" #include "flake/flakeref.hh"
#include "nix-env/user-env.hh"
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <regex> #include <regex>
@ -35,7 +36,7 @@ struct ProfileManifest
ProfileManifest() { } ProfileManifest() { }
ProfileManifest(const Path & profile) ProfileManifest(EvalState & state, const Path & profile)
{ {
auto manifestPath = profile + "/manifest.json"; auto manifestPath = profile + "/manifest.json";
@ -61,6 +62,22 @@ struct ProfileManifest
elements.emplace_back(std::move(element)); elements.emplace_back(std::move(element));
} }
} }
else if (pathExists(profile + "/manifest.nix")) {
// FIXME: needed because of pure mode; ugly.
if (state.allowedPaths) {
state.allowedPaths->insert(state.store->followLinksToStore(profile));
state.allowedPaths->insert(state.store->followLinksToStore(profile + "/manifest.nix"));
}
auto drvInfos = queryInstalled(state, state.store->followLinksToStore(profile));
for (auto & drvInfo : drvInfos) {
ProfileElement element;
element.storePaths = {drvInfo.queryOutPath()};
elements.emplace_back(std::move(element));
}
}
} }
std::string toJSON() const std::string toJSON() const
@ -147,7 +164,7 @@ struct CmdProfileInstall : InstallablesCommand, MixDefaultProfile
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
ProfileManifest manifest(*profile); ProfileManifest manifest(*getEvalState(), *profile);
PathSet pathsToBuild; PathSet pathsToBuild;
@ -224,7 +241,7 @@ public:
} }
}; };
struct CmdProfileRemove : virtual StoreCommand, MixDefaultProfile, MixProfileElementMatchers struct CmdProfileRemove : virtual EvalCommand, MixDefaultProfile, MixProfileElementMatchers
{ {
std::string description() override std::string description() override
{ {
@ -255,7 +272,7 @@ struct CmdProfileRemove : virtual StoreCommand, MixDefaultProfile, MixProfileEle
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
ProfileManifest oldManifest(*profile); ProfileManifest oldManifest(*getEvalState(), *profile);
auto matchers = getMatchers(store); auto matchers = getMatchers(store);
@ -300,7 +317,7 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
ProfileManifest manifest(*profile); ProfileManifest manifest(*getEvalState(), *profile);
auto matchers = getMatchers(store); auto matchers = getMatchers(store);
@ -342,7 +359,7 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
} }
}; };
struct CmdProfileInfo : virtual StoreCommand, MixDefaultProfile struct CmdProfileInfo : virtual EvalCommand, virtual StoreCommand, MixDefaultProfile
{ {
std::string description() override std::string description() override
{ {
@ -361,7 +378,7 @@ struct CmdProfileInfo : virtual StoreCommand, MixDefaultProfile
void run(ref<Store> store) override void run(ref<Store> store) override
{ {
ProfileManifest manifest(*profile); ProfileManifest manifest(*getEvalState(), *profile);
for (size_t i = 0; i < manifest.elements.size(); ++i) { for (size_t i = 0; i < manifest.elements.size(); ++i) {
auto & element(manifest.elements[i]); auto & element(manifest.elements[i]);