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 "builtins/buildenv.hh"
#include "flake/flakeref.hh"
#include "nix-env/user-env.hh"
#include <nlohmann/json.hpp>
#include <regex>
@ -35,7 +36,7 @@ struct ProfileManifest
ProfileManifest() { }
ProfileManifest(const Path & profile)
ProfileManifest(EvalState & state, const Path & profile)
{
auto manifestPath = profile + "/manifest.json";
@ -61,6 +62,22 @@ struct ProfileManifest
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
@ -147,7 +164,7 @@ struct CmdProfileInstall : InstallablesCommand, MixDefaultProfile
void run(ref<Store> store) override
{
ProfileManifest manifest(*profile);
ProfileManifest manifest(*getEvalState(), *profile);
PathSet pathsToBuild;
@ -224,7 +241,7 @@ public:
}
};
struct CmdProfileRemove : virtual StoreCommand, MixDefaultProfile, MixProfileElementMatchers
struct CmdProfileRemove : virtual EvalCommand, MixDefaultProfile, MixProfileElementMatchers
{
std::string description() override
{
@ -255,7 +272,7 @@ struct CmdProfileRemove : virtual StoreCommand, MixDefaultProfile, MixProfileEle
void run(ref<Store> store) override
{
ProfileManifest oldManifest(*profile);
ProfileManifest oldManifest(*getEvalState(), *profile);
auto matchers = getMatchers(store);
@ -300,7 +317,7 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
void run(ref<Store> store) override
{
ProfileManifest manifest(*profile);
ProfileManifest manifest(*getEvalState(), *profile);
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
{
@ -361,7 +378,7 @@ struct CmdProfileInfo : virtual StoreCommand, MixDefaultProfile
void run(ref<Store> store) override
{
ProfileManifest manifest(*profile);
ProfileManifest manifest(*getEvalState(), *profile);
for (size_t i = 0; i < manifest.elements.size(); ++i) {
auto & element(manifest.elements[i]);