lix/src/nix
John Ericson 44c8d83831 Create outputOf primop.
In the Nix language, given a drv path, we should be able to construct
another string referencing to one of its output. We can do this today
with `(import drvPath).output`, but this only works for derivations we
already have.

With dynamic derivations, however, that doesn't work well because the
`drvPath` isn't yet built: importing it like would need to trigger IFD,
when the whole point of this feature is to do "dynamic build graph"
without IFD!

Instead, what we want to do is create a placeholder value with the right
string context to refer to the output of the as-yet unbuilt derivation.
A new primop in the language, analogous to `builtins.placeholder` can be
used to create one. This will achieve all the right properties. The
placeholder machinery also will match out the `outPath` attribute for CA
derivations works.

In 60b7121d2c we added that type of
placeholder, and the derived path and string holder changes necessary to
support it. Then in the previous commit we cleaned up the code
(inspiration finally hit me!) to deduplicate the code and expose exactly
what we need. Now, we can wire up the primop trivally!

Part of RFC 92: dynamic derivations (tracking issue #6316)

Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
2023-08-14 09:37:37 -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 Simplify ContentAddress 2023-07-07 07:30:01 -04:00
app.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
build.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
build.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
bundle.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -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 Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
daemon.cc Merge pull request #8519 from fricklerhandwerk/reword-trusted-users 2023-06-23 13:08:46 +02:00
daemon.md manual: build action -> build task 2022-11-06 13:28:18 +01:00
derivation-add.cc Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation-add.md Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation-show.cc Rename files to reflect new nix derivation show name 2023-04-07 08:34:58 -04:00
derivation-show.md Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation.cc nix show-derivation -> nix derivation show 2023-04-07 08:34:58 -04:00
develop.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
develop.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +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 Add Store::isTrustedClient() 2023-04-06 19:59:57 -04:00
dump-path.cc Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
edit.cc Move value-only methods to InstallableValue 2023-03-16 20:06:46 -04:00
edit.md nix edit: support kakoune 2022-03-22 23:18:02 +09:00
eval.cc Merge remote-tracking branch 'origin/master' into source-path 2023-04-24 13:20:36 +02:00
eval.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
flake-archive.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-check.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +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 Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
flake.md Document the path flakeref format (#8640) 2023-07-04 08:39:08 +00:00
fmt.cc Move value-only methods to InstallableValue 2023-03-16 20:06:46 -04: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-stores.md Tweaks 2023-03-23 15:32:59 +01: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 Dedup some markdown -> C++ big literal stuff in build system 2023-05-15 10:38:11 -04:00
log.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -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 Create outputOf primop. 2023-08-14 09:37:37 -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 Also use long options in src/nix/*.md 2023-05-17 08:10:30 +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 Fix some grammar in installables doc (#8682) 2023-07-10 09:33:04 +00: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 Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
ping-store.cc Add Store::isTrustedClient() 2023-04-06 19:59:57 -04:00
ping-store.md Tweak 2021-01-17 19:49:28 +01:00
prefetch.cc Simplify ContentAddress 2023-07-07 07:30:01 -04: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 nix profile list: Improve readability of the output 2023-07-02 16:17:09 +02: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 Simplify ContentAddress 2023-07-07 07:30:01 -04:00
profile.md Dedup some markdown -> C++ big literal stuff in build system 2023-05-15 10:38:11 -04: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 evaluator settings (type and global) to separate file/header 2023-07-31 10:14:15 -04:00
repl.md Fix typo -- dashes not underscores 2022-10-17 14:15:32 -06:00
run.cc Move value-only methods to InstallableValue 2023-03-16 20:06:46 -04:00
run.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
run.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
search.cc Move evaluator settings (type and global) to separate file/header 2023-07-31 10:14:15 -04:00
search.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
shell.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
show-config.cc nix/show-config: allow getting the value of a specific setting 2023-01-12 13:56:35 -08: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 Fix misrendering of 'nix store --help' 2023-03-21 12:02:19 +01: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 Also use long options in src/nix/*.md 2023-05-17 08:10:30 +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 Move store docs to 'nix help-stores' 2023-03-21 14:37:09 +01:00
upgrade-nix.cc Move evaluator settings (type and global) to separate file/header 2023-07-31 10:14:15 -04:00
upgrade-nix.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
verify.cc Avoid some StorePath <-> Path round trips 2023-01-30 09:37:57 -05:00
verify.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
why-depends.cc nix/why-depends: fix output of --precise 2023-08-04 23:11:08 +02:00
why-depends.md Add 'nix why-depends' manpage 2020-12-21 13:32:28 +01:00