aboutsummaryrefslogtreecommitdiff
path: root/src/nix/installables.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix/installables.hh')
-rw-r--r--src/nix/installables.hh55
1 files changed, 34 insertions, 21 deletions
diff --git a/src/nix/installables.hh b/src/nix/installables.hh
index a58f7dc59..5f0b0a292 100644
--- a/src/nix/installables.hh
+++ b/src/nix/installables.hh
@@ -1,48 +1,61 @@
#pragma once
#include "args.hh"
+#include "command.hh"
namespace nix {
-struct UserEnvElem
-{
- Strings attrPath;
+struct Value;
+class EvalState;
+class Expr;
- // FIXME: should use boost::variant or so.
- bool isDrv;
+struct Installable
+{
+ virtual std::string what() = 0;
- // Derivation case:
- Path drvPath;
- StringSet outputNames;
+ virtual PathSet toBuildable()
+ {
+ throw Error("argument ‘%s’ cannot be built", what());
+ }
- // Non-derivation case:
- PathSet outPaths;
+ virtual Value * toValue(EvalState & state)
+ {
+ throw Error("argument ‘%s’ cannot be evaluated", what());
+ }
};
-typedef std::vector<UserEnvElem> UserEnvElems;
-
-struct Value;
-class EvalState;
-
-struct MixInstallables : virtual Args
+struct MixInstallables : virtual Args, StoreCommand
{
- Strings installables;
+ std::vector<std::shared_ptr<Installable>> installables;
Path file;
MixInstallables()
{
mkFlag('f', "file", "file", "evaluate FILE rather than the default", &file);
- expectArgs("installables", &installables);
+ expectArgs("installables", &_installables);
}
- UserEnvElems evalInstallables(ref<Store> store);
-
/* 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 * buildSourceExpr(EvalState & state);
+ 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;
};
}