Move code around
This commit is contained in:
parent
6267d74889
commit
c769841bc4
8 changed files with 68 additions and 80 deletions
|
@ -1,12 +1,11 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdBuild : MixDryRun, MixInstallables
|
||||
struct CmdBuild : MixDryRun, InstallablesCommand
|
||||
{
|
||||
CmdBuild()
|
||||
{
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
struct Value;
|
||||
class EvalState;
|
||||
|
||||
/* A command is an argument parser that can be executed by calling its
|
||||
run() method. */
|
||||
struct Command : virtual Args
|
||||
|
@ -61,6 +64,57 @@ public:
|
|||
void run(ref<Store> store) override;
|
||||
};
|
||||
|
||||
struct Installable
|
||||
{
|
||||
virtual std::string what() = 0;
|
||||
|
||||
virtual PathSet toBuildable()
|
||||
{
|
||||
throw Error("argument ‘%s’ cannot be built", what());
|
||||
}
|
||||
|
||||
virtual Value * toValue(EvalState & state)
|
||||
{
|
||||
throw Error("argument ‘%s’ cannot be evaluated", what());
|
||||
}
|
||||
};
|
||||
|
||||
/* A command that operates on a list of "installables", which can be
|
||||
store paths, attribute paths, Nix expressions, etc. */
|
||||
struct InstallablesCommand : virtual Args, StoreCommand
|
||||
{
|
||||
std::vector<std::shared_ptr<Installable>> installables;
|
||||
Path file;
|
||||
|
||||
InstallablesCommand()
|
||||
{
|
||||
mkFlag('f', "file", "file", "evaluate FILE rather than the default", &file);
|
||||
expectArgs("installables", &_installables);
|
||||
}
|
||||
|
||||
/* Return a value representing the Nix expression from which we
|
||||
are installing. This is either the file specified by ‘--file’,
|
||||
or an attribute set constructed from $NIX_PATH, e.g. ‘{ nixpkgs
|
||||
= import ...; bla = import ...; }’. */
|
||||
Value * getSourceExpr(EvalState & state);
|
||||
|
||||
std::vector<std::shared_ptr<Installable>> parseInstallables(ref<Store> store, Strings installables);
|
||||
|
||||
PathSet buildInstallables(ref<Store> store, bool dryRun);
|
||||
|
||||
ref<EvalState> getEvalState();
|
||||
|
||||
void prepare() override;
|
||||
|
||||
private:
|
||||
|
||||
Strings _installables;
|
||||
|
||||
std::shared_ptr<EvalState> evalState;
|
||||
|
||||
Value * vSourceExpr = 0;
|
||||
};
|
||||
|
||||
typedef std::map<std::string, ref<Command>> Commands;
|
||||
|
||||
/* An argument parser that supports multiple subcommands,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
#include "eval.hh"
|
||||
|
@ -9,7 +8,7 @@
|
|||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdEval : MixJSON, MixInstallables
|
||||
struct CmdEval : MixJSON, InstallablesCommand
|
||||
{
|
||||
std::string name() override
|
||||
{
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#include "command.hh"
|
||||
#include "attr-path.hh"
|
||||
#include "common-opts.hh"
|
||||
#include "derivations.hh"
|
||||
#include "eval-inline.hh"
|
||||
#include "eval.hh"
|
||||
#include "get-drvs.hh"
|
||||
#include "installables.hh"
|
||||
#include "store-api.hh"
|
||||
#include "shared.hh"
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
Value * MixInstallables::getSourceExpr(EvalState & state)
|
||||
Value * InstallablesCommand::getSourceExpr(EvalState & state)
|
||||
{
|
||||
if (vSourceExpr) return vSourceExpr;
|
||||
|
||||
|
@ -89,10 +89,10 @@ struct InstallableStorePath : Installable
|
|||
|
||||
struct InstallableExpr : Installable
|
||||
{
|
||||
MixInstallables & installables;
|
||||
InstallablesCommand & installables;
|
||||
std::string text;
|
||||
|
||||
InstallableExpr(MixInstallables & installables, const std::string & text)
|
||||
InstallableExpr(InstallablesCommand & installables, const std::string & text)
|
||||
: installables(installables), text(text) { }
|
||||
|
||||
std::string what() override { return text; }
|
||||
|
@ -128,10 +128,10 @@ struct InstallableExpr : Installable
|
|||
|
||||
struct InstallableAttrPath : Installable
|
||||
{
|
||||
MixInstallables & installables;
|
||||
InstallablesCommand & installables;
|
||||
std::string attrPath;
|
||||
|
||||
InstallableAttrPath(MixInstallables & installables, const std::string & attrPath)
|
||||
InstallableAttrPath(InstallablesCommand & installables, const std::string & attrPath)
|
||||
: installables(installables), attrPath(attrPath)
|
||||
{ }
|
||||
|
||||
|
@ -177,7 +177,7 @@ struct InstallableAttrPath : Installable
|
|||
std::string attrRegex = R"([A-Za-z_][A-Za-z0-9-_+]*)";
|
||||
static std::regex attrPathRegex(fmt(R"(%1%(\.%1%)*)", attrRegex));
|
||||
|
||||
std::vector<std::shared_ptr<Installable>> MixInstallables::parseInstallables(ref<Store> store, Strings installables)
|
||||
std::vector<std::shared_ptr<Installable>> InstallablesCommand::parseInstallables(ref<Store> store, Strings installables)
|
||||
{
|
||||
std::vector<std::shared_ptr<Installable>> result;
|
||||
|
||||
|
@ -212,7 +212,7 @@ std::vector<std::shared_ptr<Installable>> MixInstallables::parseInstallables(ref
|
|||
return result;
|
||||
}
|
||||
|
||||
PathSet MixInstallables::buildInstallables(ref<Store> store, bool dryRun)
|
||||
PathSet InstallablesCommand::buildInstallables(ref<Store> store, bool dryRun)
|
||||
{
|
||||
PathSet buildables;
|
||||
|
||||
|
@ -229,14 +229,14 @@ PathSet MixInstallables::buildInstallables(ref<Store> store, bool dryRun)
|
|||
return buildables;
|
||||
}
|
||||
|
||||
ref<EvalState> MixInstallables::getEvalState()
|
||||
ref<EvalState> InstallablesCommand::getEvalState()
|
||||
{
|
||||
if (!evalState)
|
||||
evalState = std::make_shared<EvalState>(Strings{}, getStore());
|
||||
return ref<EvalState>(evalState);
|
||||
}
|
||||
|
||||
void MixInstallables::prepare()
|
||||
void InstallablesCommand::prepare()
|
||||
{
|
||||
installables = parseInstallables(getStore(), _installables);
|
||||
}
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "args.hh"
|
||||
#include "command.hh"
|
||||
|
||||
namespace nix {
|
||||
|
||||
struct Value;
|
||||
class EvalState;
|
||||
class Expr;
|
||||
|
||||
struct Installable
|
||||
{
|
||||
virtual std::string what() = 0;
|
||||
|
||||
virtual PathSet toBuildable()
|
||||
{
|
||||
throw Error("argument ‘%s’ cannot be built", what());
|
||||
}
|
||||
|
||||
virtual Value * toValue(EvalState & state)
|
||||
{
|
||||
throw Error("argument ‘%s’ cannot be evaluated", what());
|
||||
}
|
||||
};
|
||||
|
||||
struct MixInstallables : virtual Args, StoreCommand
|
||||
{
|
||||
std::vector<std::shared_ptr<Installable>> installables;
|
||||
Path file;
|
||||
|
||||
MixInstallables()
|
||||
{
|
||||
mkFlag('f', "file", "file", "evaluate FILE rather than the default", &file);
|
||||
expectArgs("installables", &_installables);
|
||||
}
|
||||
|
||||
/* Return a value representing the Nix expression from which we
|
||||
are installing. This is either the file specified by ‘--file’,
|
||||
or an attribute set constructed from $NIX_PATH, e.g. ‘{ nixpkgs
|
||||
= import ...; bla = import ...; }’. */
|
||||
Value * getSourceExpr(EvalState & state);
|
||||
|
||||
std::vector<std::shared_ptr<Installable>> parseInstallables(ref<Store> store, Strings installables);
|
||||
|
||||
PathSet buildInstallables(ref<Store> store, bool dryRun);
|
||||
|
||||
ref<EvalState> getEvalState();
|
||||
|
||||
void prepare() override;
|
||||
|
||||
private:
|
||||
|
||||
Strings _installables;
|
||||
|
||||
std::shared_ptr<EvalState> evalState;
|
||||
|
||||
Value * vSourceExpr = 0;
|
||||
};
|
||||
|
||||
}
|
|
@ -1,12 +1,11 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdLog : MixInstallables
|
||||
struct CmdLog : InstallablesCommand
|
||||
{
|
||||
CmdLog()
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
#include "derivations.hh"
|
||||
|
@ -13,7 +12,7 @@
|
|||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdRun : MixInstallables
|
||||
struct CmdRun : InstallablesCommand
|
||||
{
|
||||
CmdRun()
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
#include "json.hh"
|
||||
|
|
Loading…
Reference in a new issue