refactor(tvix/derivation): use BTreeSet for derivation outputs

When constructing derivations inside builtins.derivationStrict, we'd
have to very frequently check whether certain outputs have already
been inserted into the derivation inputs.

Using a set type is much easier, especially as this has to be ordered
and the source data that is being inserted also comes from a set,
which might let us pass this more efficiently in the future.

Note that the validate function no longer checks the order of the
entries, as that is now guaranteed by the type.

Change-Id: I2fbb984facba3e668075f6f8df8992092368c63d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7826
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Vincent Ambo 2023-01-13 20:19:48 +03:00 committed by tazjin
parent 9a500c3e9b
commit a35dadf9f0
4 changed files with 13 additions and 16 deletions

View file

@ -50,21 +50,13 @@ impl Derivation {
);
}
for (i, output_name) in output_names.iter().enumerate() {
for output_name in output_names.iter() {
if output_name.is_empty() {
bail!(
"output name entry for {} may not be empty",
input_derivation_path
)
}
// if i is at least 1, peek at the previous element to ensure output_names are sorted.
if i > 0 && (output_names[i - 1] >= *output_name) {
bail!(
"invalid input derivation output order: {} < {}",
output_name,
output_names[i - 1],
);
}
}
}