mirror of
https://github.com/NixOS/nix
synced 2025-07-07 14:21:48 +02:00
Move FlakeCommand into a header, allow separate registration of subcommands
This allows us to start splitting up src/nix/flake.cc.
This commit is contained in:
parent
df2d5f276a
commit
eaced1e0d2
3 changed files with 67 additions and 53 deletions
|
@ -5,6 +5,7 @@
|
|||
#include "nix/util/canon-path.hh"
|
||||
#include "nix/main/common-args.hh"
|
||||
#include "nix/expr/search-path.hh"
|
||||
#include "nix/expr/eval-settings.hh"
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
|
@ -15,10 +16,8 @@ class Store;
|
|||
namespace fetchers { struct Settings; }
|
||||
|
||||
class EvalState;
|
||||
struct EvalSettings;
|
||||
struct CompatibilitySettings;
|
||||
class Bindings;
|
||||
struct SourcePath;
|
||||
|
||||
namespace flake { struct Settings; }
|
||||
|
||||
|
|
27
src/nix/flake-command.hh
Normal file
27
src/nix/flake-command.hh
Normal file
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include "nix/cmd/command.hh"
|
||||
#include "nix/cmd/installable-flake.hh"
|
||||
#include "nix/flake/flake.hh"
|
||||
|
||||
namespace nix {
|
||||
|
||||
using namespace nix::flake;
|
||||
|
||||
class FlakeCommand : virtual Args, public MixFlakeOptions
|
||||
{
|
||||
protected:
|
||||
std::string flakeUrl = ".";
|
||||
|
||||
public:
|
||||
|
||||
FlakeCommand();
|
||||
|
||||
FlakeRef getFlakeRef();
|
||||
|
||||
LockedFlake lockFlake();
|
||||
|
||||
std::vector<FlakeRef> getFlakeRefsForCompletion() override;
|
||||
};
|
||||
|
||||
}
|
|
@ -1,11 +1,9 @@
|
|||
#include "nix/cmd/command.hh"
|
||||
#include "nix/cmd/installable-flake.hh"
|
||||
#include "flake-command.hh"
|
||||
#include "nix/main/common-args.hh"
|
||||
#include "nix/main/shared.hh"
|
||||
#include "nix/expr/eval.hh"
|
||||
#include "nix/expr/eval-inline.hh"
|
||||
#include "nix/expr/eval-settings.hh"
|
||||
#include "nix/flake/flake.hh"
|
||||
#include "nix/expr/get-drvs.hh"
|
||||
#include "nix/util/signals.hh"
|
||||
#include "nix/store/store-open.hh"
|
||||
|
@ -33,43 +31,36 @@ using namespace nix::flake;
|
|||
using json = nlohmann::json;
|
||||
|
||||
struct CmdFlakeUpdate;
|
||||
class FlakeCommand : virtual Args, public MixFlakeOptions
|
||||
|
||||
FlakeCommand::FlakeCommand()
|
||||
{
|
||||
protected:
|
||||
std::string flakeUrl = ".";
|
||||
expectArgs({
|
||||
.label = "flake-url",
|
||||
.optional = true,
|
||||
.handler = {&flakeUrl},
|
||||
.completer = {[&](AddCompletions & completions, size_t, std::string_view prefix) {
|
||||
completeFlakeRef(completions, getStore(), prefix);
|
||||
}}
|
||||
});
|
||||
}
|
||||
|
||||
public:
|
||||
FlakeRef FlakeCommand::getFlakeRef()
|
||||
{
|
||||
return parseFlakeRef(fetchSettings, flakeUrl, std::filesystem::current_path().string()); //FIXME
|
||||
}
|
||||
|
||||
FlakeCommand()
|
||||
{
|
||||
expectArgs({
|
||||
.label = "flake-url",
|
||||
.optional = true,
|
||||
.handler = {&flakeUrl},
|
||||
.completer = {[&](AddCompletions & completions, size_t, std::string_view prefix) {
|
||||
completeFlakeRef(completions, getStore(), prefix);
|
||||
}}
|
||||
});
|
||||
}
|
||||
LockedFlake FlakeCommand::lockFlake()
|
||||
{
|
||||
return flake::lockFlake(flakeSettings, *getEvalState(), getFlakeRef(), lockFlags);
|
||||
}
|
||||
|
||||
FlakeRef getFlakeRef()
|
||||
{
|
||||
return parseFlakeRef(fetchSettings, flakeUrl, std::filesystem::current_path().string()); //FIXME
|
||||
}
|
||||
|
||||
LockedFlake lockFlake()
|
||||
{
|
||||
return flake::lockFlake(flakeSettings, *getEvalState(), getFlakeRef(), lockFlags);
|
||||
}
|
||||
|
||||
std::vector<FlakeRef> getFlakeRefsForCompletion() override
|
||||
{
|
||||
return {
|
||||
// Like getFlakeRef but with expandTilde called first
|
||||
parseFlakeRef(fetchSettings, expandTilde(flakeUrl), std::filesystem::current_path().string())
|
||||
};
|
||||
}
|
||||
};
|
||||
std::vector<FlakeRef> FlakeCommand::getFlakeRefsForCompletion()
|
||||
{
|
||||
return {
|
||||
// Like getFlakeRef but with expandTilde called first
|
||||
parseFlakeRef(fetchSettings, expandTilde(flakeUrl), std::filesystem::current_path().string())
|
||||
};
|
||||
}
|
||||
|
||||
struct CmdFlakeUpdate : FlakeCommand
|
||||
{
|
||||
|
@ -1528,21 +1519,7 @@ struct CmdFlakePrefetch : FlakeCommand, MixJSON
|
|||
struct CmdFlake : NixMultiCommand
|
||||
{
|
||||
CmdFlake()
|
||||
: NixMultiCommand(
|
||||
"flake",
|
||||
{
|
||||
{"update", []() { return make_ref<CmdFlakeUpdate>(); }},
|
||||
{"lock", []() { return make_ref<CmdFlakeLock>(); }},
|
||||
{"metadata", []() { return make_ref<CmdFlakeMetadata>(); }},
|
||||
{"info", []() { return make_ref<CmdFlakeInfo>(); }},
|
||||
{"check", []() { return make_ref<CmdFlakeCheck>(); }},
|
||||
{"init", []() { return make_ref<CmdFlakeInit>(); }},
|
||||
{"new", []() { return make_ref<CmdFlakeNew>(); }},
|
||||
{"clone", []() { return make_ref<CmdFlakeClone>(); }},
|
||||
{"archive", []() { return make_ref<CmdFlakeArchive>(); }},
|
||||
{"show", []() { return make_ref<CmdFlakeShow>(); }},
|
||||
{"prefetch", []() { return make_ref<CmdFlakePrefetch>(); }},
|
||||
})
|
||||
: NixMultiCommand("flake", RegisterCommand::getCommandsFor({"flake"}))
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1566,3 +1543,14 @@ struct CmdFlake : NixMultiCommand
|
|||
};
|
||||
|
||||
static auto rCmdFlake = registerCommand<CmdFlake>("flake");
|
||||
static auto rCmdFlakeArchive = registerCommand2<CmdFlakeArchive>({"flake", "archive"});
|
||||
static auto rCmdFlakeCheck = registerCommand2<CmdFlakeCheck>({"flake", "check"});
|
||||
static auto rCmdFlakeClone = registerCommand2<CmdFlakeClone>({"flake", "clone"});
|
||||
static auto rCmdFlakeInfo = registerCommand2<CmdFlakeInfo>({"flake", "info"});
|
||||
static auto rCmdFlakeInit = registerCommand2<CmdFlakeInit>({"flake", "init"});
|
||||
static auto rCmdFlakeLock = registerCommand2<CmdFlakeLock>({"flake", "lock"});
|
||||
static auto rCmdFlakeMetadata = registerCommand2<CmdFlakeMetadata>({"flake", "metadata"});
|
||||
static auto rCmdFlakeNew = registerCommand2<CmdFlakeNew>({"flake", "new"});
|
||||
static auto rCmdFlakePrefetch = registerCommand2<CmdFlakePrefetch>({"flake", "prefetch"});
|
||||
static auto rCmdFlakeShow = registerCommand2<CmdFlakeShow>({"flake", "show"});
|
||||
static auto rCmdFlakeUpdate = registerCommand2<CmdFlakeUpdate>({"flake", "update"});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue