Files
nix/tests/functional
John Ericson 76bd600302 Parse deriving paths in DerivationOptions
This is an example of "Parse, don't validate" principle [1].

Before, we had a number of `StringSet`s in `DerivationOptions` that
were not *actually* allowed to be arbitrary sets of strings. Instead,
each set member had to be one of:

- a store path

- a CA "downstream placeholder"

- an output name

Only later, in the code that checks outputs, would these strings be
further parsed to match these cases. (Actually, only 2 by that point,
because the placeholders must be rewritten away by then.)

Now, we fully parse everything up front, and have an "honest" data type
that reflects these invariants:

- store paths are parsed, stored as (opaque) deriving paths

- CA "downstream placeholders" are rewritten to the output deriving
  paths they denote

- output names are the only arbitrary strings left

Since the first two cases both become deriving paths, that leaves us
with a `std::variant<SingleDerivedPath, String>` data type, which we use
in our sets instead.

Getting rid of placeholders is especially nice because we are replacing
them with something much more internally-structured / transparent.

[1]: https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/

Co-authored-by: Sergei Zimmerman <sergei@zimmerman.foo>
Co-authored-by: Eelco Dolstra <edolstra@gmail.com>
2025-11-19 15:48:10 -05:00
..
2025-10-13 18:37:14 -04:00
2025-07-22 02:52:53 +03:00
2025-01-24 17:04:02 +01:00
2024-08-14 15:35:40 -04:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-11-02 14:03:27 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-02-19 12:47:28 +01:00
2024-08-14 15:35:40 -04:00
2025-09-24 18:59:41 -07:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-06-19 15:23:10 -07:00
2024-10-16 17:18:07 +02:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-02-07 11:20:18 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-11-07 15:24:26 -05:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-10-29 02:15:41 -04:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00
2025-08-04 23:50:02 +03:00
2025-01-24 17:04:02 +01:00
2025-02-11 20:58:48 +01:00
2024-08-14 15:16:06 +02:00
2025-05-24 00:40:06 +02:00
2024-08-14 15:16:06 +02:00
2025-05-09 16:55:13 +02:00
2024-08-14 15:16:06 +02:00
2024-08-14 15:16:06 +02:00
2024-06-11 16:05:57 +02:00
2025-01-24 17:04:02 +01:00
2025-01-24 17:04:02 +01:00