forked from lix-project/lix
repl: use installables
This commit is contained in:
parent
81567a0962
commit
5640b52834
|
@ -114,6 +114,7 @@ struct InstallablesCommand : virtual Args, SourceExprCommand
|
||||||
InstallablesCommand();
|
InstallablesCommand();
|
||||||
|
|
||||||
void prepare() override;
|
void prepare() override;
|
||||||
|
Installables load();
|
||||||
|
|
||||||
virtual bool useDefaultInstallables() { return true; }
|
virtual bool useDefaultInstallables() { return true; }
|
||||||
|
|
||||||
|
@ -132,7 +133,6 @@ struct InstallableCommand : virtual Args, SourceExprCommand
|
||||||
InstallableCommand(bool supportReadOnlyMode = false);
|
InstallableCommand(bool supportReadOnlyMode = false);
|
||||||
|
|
||||||
void prepare() override;
|
void prepare() override;
|
||||||
std::shared_ptr<Installable> load();
|
|
||||||
|
|
||||||
std::optional<FlakeRef> getFlakeRefForCompletion() override
|
std::optional<FlakeRef> getFlakeRefForCompletion() override
|
||||||
{
|
{
|
||||||
|
|
|
@ -1025,11 +1025,16 @@ InstallablesCommand::InstallablesCommand()
|
||||||
|
|
||||||
void InstallablesCommand::prepare()
|
void InstallablesCommand::prepare()
|
||||||
{
|
{
|
||||||
|
installables = load();
|
||||||
|
}
|
||||||
|
|
||||||
|
Installables InstallablesCommand::load() {
|
||||||
|
Installables installables;
|
||||||
if (_installables.empty() && useDefaultInstallables())
|
if (_installables.empty() && useDefaultInstallables())
|
||||||
// FIXME: commands like "nix profile install" should not have a
|
// FIXME: commands like "nix profile install" should not have a
|
||||||
// default, probably.
|
// default, probably.
|
||||||
_installables.push_back(".");
|
_installables.push_back(".");
|
||||||
installables = parseInstallables(getStore(), _installables);
|
return parseInstallables(getStore(), _installables);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<FlakeRef> InstallablesCommand::getFlakeRefForCompletion()
|
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()
|
void InstallableCommand::prepare()
|
||||||
{
|
{
|
||||||
installable = load();
|
installable = parseInstallable(getStore(), _installable);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,7 @@ struct Installable
|
||||||
OperateOn operateOn,
|
OperateOn operateOn,
|
||||||
const std::vector<std::shared_ptr<Installable>> & installables);
|
const std::vector<std::shared_ptr<Installable>> & installables);
|
||||||
};
|
};
|
||||||
|
typedef std::vector<std::shared_ptr<Installable>> Installables;
|
||||||
|
|
||||||
struct InstallableValue : Installable
|
struct InstallableValue : Installable
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,8 +43,6 @@ extern "C" {
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
typedef std::vector<std::shared_ptr<Installable>> Installables;
|
|
||||||
|
|
||||||
struct NixRepl
|
struct NixRepl
|
||||||
#if HAVE_BOEHMGC
|
#if HAVE_BOEHMGC
|
||||||
: gc
|
: gc
|
||||||
|
@ -899,17 +897,16 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CmdRepl : InstallableCommand
|
struct CmdRepl : InstallablesCommand
|
||||||
{
|
{
|
||||||
std::vector<std::string> files;
|
std::vector<std::string> files;
|
||||||
Strings getDefaultFlakeAttrPathPrefixes()
|
|
||||||
override {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
Strings getDefaultFlakeAttrPaths()
|
Strings getDefaultFlakeAttrPaths()
|
||||||
override {
|
override {
|
||||||
return {""};
|
return {""};
|
||||||
}
|
}
|
||||||
|
virtual bool useDefaultInstallables() {
|
||||||
|
return file.has_value() or expr.has_value();
|
||||||
|
}
|
||||||
|
|
||||||
CmdRepl()
|
CmdRepl()
|
||||||
{
|
{
|
||||||
|
@ -934,10 +931,14 @@ struct CmdRepl : InstallableCommand
|
||||||
auto state = getEvalState();
|
auto state = getEvalState();
|
||||||
auto repl = std::make_unique<NixRepl>(searchPath, openStore(),state
|
auto repl = std::make_unique<NixRepl>(searchPath, openStore(),state
|
||||||
,[&]()->NixRepl::AnnotatedValues{
|
,[&]()->NixRepl::AnnotatedValues{
|
||||||
auto installable = load();
|
auto installables = load();
|
||||||
auto [val, pos] = installable->toValue(*state);
|
NixRepl::AnnotatedValues values;
|
||||||
auto what = installable->what();
|
for (auto & installable: installables){
|
||||||
return { {val,what} };
|
auto [val, pos] = installable->toValue(*state);
|
||||||
|
auto what = installable->what();
|
||||||
|
values.push_back( {val,what} );
|
||||||
|
}
|
||||||
|
return values;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
repl->autoArgs = getAutoArgs(*repl->state);
|
repl->autoArgs = getAutoArgs(*repl->state);
|
||||||
|
|
|
@ -24,10 +24,34 @@ R""(
|
||||||
* Interact with Nixpkgs in the REPL:
|
* Interact with Nixpkgs in the REPL:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
# nix repl '<nixpkgs>'
|
# nix repl --file example.nix
|
||||||
|
Loading Installable ''...
|
||||||
|
Added 3 variables.
|
||||||
|
|
||||||
Loading '<nixpkgs>'...
|
# nix repl --expr '{a={b=3;c=4;};}'
|
||||||
Added 12428 variables.
|
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
|
nix-repl> emacs.name
|
||||||
"emacs-27.1"
|
"emacs-27.1"
|
||||||
|
|
Loading…
Reference in a new issue