lix/src/nix
John Ericson 4607ac7aed Fix handling of experimental features mid-parse
If we conditionally "declare" the argument, as we did before, based upon
weather the feature is enabled, commands like

    nix --experimental-features=foo ... --thing-gated-on-foo

won't work, because the experimental feature isn't enabled until *after*
we start parsing.

Instead, allow arguments to also be associated with experimental
features (just as we did for builtins and settings), and then the
command line parser will filter out the experimental ones.

Since the effects of arguments (handler functions) are performed right
away, we get the required behavior: earlier arguments can enable later
arguments enabled!

There is just one catch: we want to keep non-positional
flags...non-positional. So if

    nix --experimental-features=foo ... --thing-gated-on-foo

works, then

    nix --thing-gated-on-foo --experimental-features=foo ...

should also work.

This is not my favorite long-term solution, but for now this is
implemented by delaying the requirement of needed experimental features
until *after* all the arguments have been parsed.
2023-03-20 11:35:34 -04:00
..
realisation fix spelling mistakes reported by Debian's lintian tool 2022-01-30 10:51:39 +02:00
add-file.md Split 'nix store add-to-store' into 'add-path' and 'add-file' 2020-12-04 00:59:24 +01:00
add-path.md Split 'nix store add-to-store' into 'add-path' and 'add-file' 2020-12-04 00:59:24 +01:00
add-to-store.cc Get rid of std::shared_ptr<std::string> and ref<std::string> 2022-01-18 11:12:30 +01:00
app.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
build.cc Merge pull request #7891 from mupdt/shared-fs-out-links 2023-03-17 10:57:07 -04:00
build.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
bundle.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
bundle.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
cat.cc nix store cat: Use writeFull() 2023-03-02 14:51:14 +01:00
copy.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
copy.md Add 'nix copy' manpage 2020-12-21 13:32:27 +01:00
daemon.cc Remove FormatOrString and remaining uses of format() 2023-03-02 15:57:54 +01:00
daemon.md manual: build action -> build task 2022-11-06 13:28:18 +01:00
describe-stores.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
develop.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
develop.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
diff-closures.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
diff-closures.md Add 'nix store diff-closures' manpage 2020-12-21 13:32:29 +01:00
doctor.cc Remove FormatOrString and remaining uses of format() 2023-03-02 15:57:54 +01:00
dump-path.cc Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
edit.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
edit.md nix edit: support kakoune 2022-03-22 23:18:02 +09:00
eval.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
eval.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
flake-archive.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-check.md nix flake check: Fix markdown 2021-11-24 13:53:09 +01:00
flake-clone.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-init.md Update docs 2022-02-22 14:32:56 +01:00
flake-lock.md nix flake update: Recreate the lock file 2021-02-26 14:55:54 +01:00
flake-metadata.md Merge 'nix flake {info,list-inputs}' into 'nix flake metadata' 2021-03-16 17:19:04 +01:00
flake-new.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-prefetch.md nix store prefetch-tarball -> nix flake prefetch 2021-01-11 12:36:39 +01:00
flake-show.md Update docs 2022-02-22 14:32:56 +01:00
flake-update.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
flake.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
flake.md docs: quote URL literals 2023-03-19 11:28:10 -04:00
fmt.cc Shut up clang warning 2022-04-28 14:24:17 +02:00
fmt.md nix-fmt: add command 2022-03-11 10:00:19 -05:00
get-env.sh nix develop: Ignore some more bash special variables 2022-08-23 14:57:08 +02:00
hash.cc Merge pull request #7750 from obsidiansystems/no-args-prepare 2023-03-15 17:23:40 -04:00
help.md Add 'nix help' manpage 2020-12-21 13:32:29 +01:00
key-convert-secret-to-public.md Add commands for generating secret/public keys 2021-01-06 17:49:31 +01:00
key-generate-secret.md Fix missing ` in key manual 2022-06-08 11:46:50 +02:00
local.mk build: use pkg-config for lowdown 2022-11-12 23:04:58 +01:00
log.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
log.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
ls.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
main.cc Fix handling of experimental features mid-parse 2023-03-20 11:35:34 -04:00
make-content-addressed.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
make-content-addressed.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
nar-cat.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nar-dump-path.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nar-ls.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nar.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
nar.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nix.md output paths of store derivations are now addressed explicitly 2023-03-06 03:32:14 +01:00
optimise-store.cc Add 'nix store optimise' manpage 2020-12-21 13:32:28 +01:00
optimise-store.md Add 'nix store optimise' manpage 2020-12-21 13:32:28 +01:00
path-from-hash-part.cc Add command 'nix store path-from-hash-part' 2022-10-18 16:51:12 +02:00
path-from-hash-part.md Add command 'nix store path-from-hash-part' 2022-10-18 16:51:12 +02:00
path-info.cc Replace src/libutil/json.cc with nlohmann json generation 2022-11-16 16:50:50 +01:00
path-info.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
ping-store.cc nix store ping: try to print json if connect() fails aswell 2023-01-31 15:10:39 +01:00
ping-store.md Tweak 2021-01-17 19:49:28 +01:00
prefetch.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
print-dev-env.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
profile-diff-closures.md Add 'nix profile' manpage 2020-12-21 13:32:29 +01:00
profile-history.md nix profile history: Show profile date 2021-09-14 20:47:33 +02:00
profile-install.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
profile-list.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
profile-remove.md man: fix formatting of nix3-profile-remove 2021-06-28 16:27:03 +02:00
profile-rollback.md Generations -> profile versions 2021-09-14 19:57:45 +02:00
profile-upgrade.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
profile-wipe-history.md Add 'nix profile wipe-history' command 2021-09-14 20:35:41 +02:00
profile.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
profile.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
realisation.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
registry-add.md nix registry: add --registry flag 2021-06-30 22:13:32 +03:00
registry-list.md Add 'nix registry' manpages 2020-12-21 13:32:27 +01:00
registry-pin.md Style tweaks 2021-07-07 10:02:55 +02:00
registry-remove.md nix registry: add --registry flag 2021-06-30 22:13:32 +03:00
registry.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
registry.md doc: Fix typo 2022-06-28 22:43:37 -04:00
repl.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
repl.md Fix typo -- dashes not underscores 2022-10-17 14:15:32 -06:00
run.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
run.hh nix develop: Set personality 2022-12-23 16:33:55 +01:00
run.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
search.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
search.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
shell.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
show-config.cc nix/show-config: allow getting the value of a specific setting 2023-01-12 13:56:35 -08:00
show-derivation.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
show-derivation.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
sigs.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-cat.md Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
store-copy-log.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-copy-log.md link "store derivation" to glossary definition 2022-12-21 11:42:50 +01:00
store-delete.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-delete.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store-dump-path.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store-gc.cc Deduplicate the Store downcasting with a template 2022-03-11 13:32:33 +00:00
store-gc.md Add 'nix store gc' command 2021-01-10 23:29:14 +01:00
store-ls.md Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
store-prefetch-file.md Fix some typos 2021-03-26 16:14:38 +01:00
store-repair.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-repair.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
upgrade-nix.cc Revert "Revert "Merge pull request #6204 from layus/coerce-string"" 2023-01-19 13:23:04 +01:00
upgrade-nix.md Explain exactly what nix-upgrade nix does 2022-06-02 15:05:27 +02:00
verify.cc Avoid some StorePath <-> Path round trips 2023-01-30 09:37:57 -05:00
verify.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
why-depends.cc Scope down --derivation to just the commands that use it 2023-02-04 18:30:02 -05:00
why-depends.md Add 'nix why-depends' manpage 2020-12-21 13:32:28 +01:00