diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-02-04 20:45:40 -0500 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-02-20 10:39:18 -0500 |
commit | 0258ac9c2a49eb0cc632bc02d72093392bd37bfc (patch) | |
tree | 32fd9fecc91bd51ab81046bb5cc1fa98be3f997b /src/libcmd/installables.cc | |
parent | 924ef6761bbbc75fda3cf85dc1c8d782130291b4 (diff) |
Make `--read-only` a separate mixin
It is independent of SourceExprCommand, which is about parsing
installables, except for the fact that parsing installables is one of
the many things influenced by read-only mode.
Diffstat (limited to 'src/libcmd/installables.cc')
-rw-r--r-- | src/libcmd/installables.cc | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc index cfc13a60f..00c6f9516 100644 --- a/src/libcmd/installables.cc +++ b/src/libcmd/installables.cc @@ -147,7 +147,7 @@ void MixFlakeOptions::completionHook() completeFlakeInput(*prefix); } -SourceExprCommand::SourceExprCommand(bool supportReadOnlyMode) +SourceExprCommand::SourceExprCommand() { addFlag({ .longName = "file", @@ -169,17 +169,18 @@ SourceExprCommand::SourceExprCommand(bool supportReadOnlyMode) .labels = {"expr"}, .handler = {&expr} }); +} - if (supportReadOnlyMode) { - addFlag({ - .longName = "read-only", - .description = - "Do not instantiate each evaluated derivation. " - "This improves performance, but can cause errors when accessing " - "store paths of derivations during evaluation.", - .handler = {&readOnlyMode, true}, - }); - } +MixReadOnlyOption::MixReadOnlyOption() +{ + addFlag({ + .longName = "read-only", + .description = + "Do not instantiate each evaluated derivation. " + "This improves performance, but can cause errors when accessing " + "store paths of derivations during evaluation.", + .handler = {&settings.readOnlyMode, true}, + }); } Strings SourceExprCommand::getDefaultFlakeAttrPaths() @@ -426,10 +427,6 @@ std::vector<std::shared_ptr<Installable>> SourceExprCommand::parseInstallables( { std::vector<std::shared_ptr<Installable>> result; - if (readOnlyMode) { - settings.readOnlyMode = true; - } - if (file || expr) { if (file && expr) throw UsageError("'--file' and '--expr' are exclusive"); @@ -724,8 +721,8 @@ std::vector<std::string> InstallablesCommand::getFlakesForCompletion() return _installables; } -InstallableCommand::InstallableCommand(bool supportReadOnlyMode) - : SourceExprCommand(supportReadOnlyMode) +InstallableCommand::InstallableCommand() + : SourceExprCommand() { expectArgs({ .label = "installable", |