Implemented "nix flake info"

This commit is contained in:
Nick Van den Broeck 2019-02-21 06:53:01 +01:00
parent d342de02b9
commit cfb6ab80ce
4 changed files with 47 additions and 14 deletions

View file

@ -141,19 +141,6 @@ static FlakeSourceInfo fetchFlake(EvalState & state, const FlakeRef & flakeRef)
else abort(); else abort();
} }
struct Flake
{
FlakeId id;
std::string description;
Path path;
std::vector<FlakeRef> requires;
std::unique_ptr<FlakeRegistry> lockFile;
Value * vProvides; // FIXME: gc
// commit hash
// date
// content hash
};
static Flake getFlake(EvalState & state, const FlakeRef & flakeRef) static Flake getFlake(EvalState & state, const FlakeRef & flakeRef)
{ {
auto sourceInfo = fetchFlake(state, flakeRef); auto sourceInfo = fetchFlake(state, flakeRef);

View file

@ -21,4 +21,18 @@ Value * makeFlakeRegistryValue(EvalState & state);
Value * makeFlakeValue(EvalState & state, std::string flakeUri, Value & v); Value * makeFlakeValue(EvalState & state, std::string flakeUri, Value & v);
struct Flake
{
FlakeId id;
std::string description;
Path path;
std::vector<FlakeRef> requires;
std::unique_ptr<FlakeRegistry> lockFile;
Value * vProvides; // FIXME: gc
// commit hash
// date
// content hash
};
static Flake getFlake(EvalState & state, const FlakeRef & flakeRef);
} }

View file

@ -34,6 +34,17 @@ struct Buildable
typedef std::vector<Buildable> Buildables; typedef std::vector<Buildable> Buildables;
struct FlakeCommand : virtual Args, StoreCommand, MixEvalArgs
{
std::string flakeUri;
public:
FlakeCommand()
{
expectArg("flake-uri", &flakeUri);
}
};
struct Installable struct Installable
{ {
virtual std::string what() = 0; virtual std::string what() = 0;

View file

@ -33,10 +33,31 @@ struct CmdFlakeList : StoreCommand, MixEvalArgs
} }
}; };
struct CmdFlakeInfo : FlakeCommand
{
std::string name() override
{
return "info";
}
std::string description() override
{
return "list info about a given flake";
}
void run(nix::ref<nix::Store> store) override
{
auto evalState = std::make_shared<EvalState>(searchPath, store);
nix::Flake flake = nix::getFlake(*evalState, FlakeRef(flakeUri));
std::cout << "Location: " << flake.path << "\n";
std::cout << "Description: " << flake.description << "\n";
}
};
struct CmdFlake : virtual MultiCommand, virtual Command struct CmdFlake : virtual MultiCommand, virtual Command
{ {
CmdFlake() CmdFlake()
: MultiCommand({make_ref<CmdFlakeList>()}) : MultiCommand({make_ref<CmdFlakeList>(), make_ref<CmdFlakeInfo>()})
{ {
} }