aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcmd/command.hh2
-rw-r--r--src/libcmd/installables.cc12
-rw-r--r--src/libcmd/installables.hh1
-rw-r--r--src/nix/repl.cc23
-rw-r--r--src/nix/repl.md30
5 files changed, 48 insertions, 20 deletions
diff --git a/src/libcmd/command.hh b/src/libcmd/command.hh
index 65626e33f..65eb0c4a0 100644
--- a/src/libcmd/command.hh
+++ b/src/libcmd/command.hh
@@ -114,6 +114,7 @@ struct InstallablesCommand : virtual Args, SourceExprCommand
InstallablesCommand();
void prepare() override;
+ Installables load();
virtual bool useDefaultInstallables() { return true; }
@@ -132,7 +133,6 @@ struct InstallableCommand : virtual Args, SourceExprCommand
InstallableCommand(bool supportReadOnlyMode = false);
void prepare() override;
- std::shared_ptr<Installable> load();
std::optional<FlakeRef> getFlakeRefForCompletion() override
{
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc
index 7d2ff0f68..c29fbeec9 100644
--- a/src/libcmd/installables.cc
+++ b/src/libcmd/installables.cc
@@ -1025,11 +1025,16 @@ InstallablesCommand::InstallablesCommand()
void InstallablesCommand::prepare()
{
+ installables = load();
+}
+
+Installables InstallablesCommand::load() {
+ Installables installables;
if (_installables.empty() && useDefaultInstallables())
// FIXME: commands like "nix profile install" should not have a
// default, probably.
_installables.push_back(".");
- installables = parseInstallables(getStore(), _installables);
+ return parseInstallables(getStore(), _installables);
}
std::optional<FlakeRef> InstallablesCommand::getFlakeRefForCompletion()
@@ -1054,13 +1059,10 @@ InstallableCommand::InstallableCommand(bool supportReadOnlyMode)
}}
});
}
-std::shared_ptr<Installable> InstallableCommand::load() {
- return parseInstallable(getStore(), _installable);
-}
void InstallableCommand::prepare()
{
- installable = load();
+ installable = parseInstallable(getStore(), _installable);
}
}
diff --git a/src/libcmd/installables.hh b/src/libcmd/installables.hh
index 5d715210e..b97888db6 100644
--- a/src/libcmd/installables.hh
+++ b/src/libcmd/installables.hh
@@ -131,6 +131,7 @@ struct Installable
OperateOn operateOn,
const std::vector<std::shared_ptr<Installable>> & installables);
};
+typedef std::vector<std::shared_ptr<Installable>> Installables;
struct InstallableValue : Installable
{
diff --git a/src/nix/repl.cc b/src/nix/repl.cc
index df921ef06..b5ecc8ad0 100644
--- a/src/nix/repl.cc
+++ b/src/nix/repl.cc
@@ -43,8 +43,6 @@ extern "C" {
namespace nix {
-typedef std::vector<std::shared_ptr<Installable>> Installables;
-
struct NixRepl
#if HAVE_BOEHMGC
: gc
@@ -899,17 +897,16 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m
return str;
}
-struct CmdRepl : InstallableCommand
+struct CmdRepl : InstallablesCommand
{
std::vector<std::string> files;
- Strings getDefaultFlakeAttrPathPrefixes()
- override {
- return {};
- }
Strings getDefaultFlakeAttrPaths()
override {
return {""};
}
+ virtual bool useDefaultInstallables() {
+ return file.has_value() or expr.has_value();
+ }
CmdRepl()
{
@@ -934,10 +931,14 @@ struct CmdRepl : InstallableCommand
auto state = getEvalState();
auto repl = std::make_unique<NixRepl>(searchPath, openStore(),state
,[&]()->NixRepl::AnnotatedValues{
- auto installable = load();
- auto [val, pos] = installable->toValue(*state);
- auto what = installable->what();
- return { {val,what} };
+ auto installables = load();
+ NixRepl::AnnotatedValues values;
+ for (auto & installable: installables){
+ auto [val, pos] = installable->toValue(*state);
+ auto what = installable->what();
+ values.push_back( {val,what} );
+ }
+ return values;
}
);
repl->autoArgs = getAutoArgs(*repl->state);
diff --git a/src/nix/repl.md b/src/nix/repl.md
index 9b6f2bee3..be1498e5b 100644
--- a/src/nix/repl.md
+++ b/src/nix/repl.md
@@ -24,10 +24,34 @@ R""(
* Interact with Nixpkgs in the REPL:
```console
- # nix repl '<nixpkgs>'
+ # nix repl --file example.nix
+ Loading Installable ''...
+ Added 3 variables.
- Loading '<nixpkgs>'...
- Added 12428 variables.
+ # nix repl --expr '{a={b=3;c=4;};}'
+ Loading Installable ''...
+ Added 1 variables.
+
+ # nix repl --expr '{a={b=3;c=4;};}' a
+ Loading Installable ''...
+ Added 1 variables.
+
+ # nix repl nixpkgs
+ Loading Installable 'flake:nixpkgs#'...
+ Added 5 variables.
+
+ nix-repl> legacyPackages.x86_64-linux.emacs.name
+ "emacs-27.1"
+
+ nix-repl> legacyPackages.x86_64-linux.emacs.name
+ "emacs-27.1"
+
+ nix-repl> :q
+
+ # nix repl --expr 'import <nixpkgs>{}' --impure
+
+ Loading Installable ''...
+ Added 12439 variables.
nix-repl> emacs.name
"emacs-27.1"