Support unit prefixes in configuration settings

E.g. you can now say `--min-free 1G`.
This commit is contained in:
Eelco Dolstra 2023-02-16 15:16:30 +01:00
parent d8d20307a8
commit 79c7d6205c
4 changed files with 19 additions and 6 deletions

View file

@ -66,5 +66,12 @@ Configuration options can be set on the command line, overriding the values set
The `extra-` prefix is supported for settings that take a list of items (e.g. `--extra-trusted users alice` or `--option extra-trusted-users alice`).
## Integer settings
Settings that have an integer type support the suffixes `K`, `M`, `G`
and `T`. These cause the specified value to be multiplied by 2^10,
2^20, 2^30 and 2^40, respectively. For instance, `--min-free 1M` is
equivalent to `--min-free 1048576`.
# Available settings

View file

@ -116,10 +116,11 @@ T BaseSetting<T>::parse(const std::string & str) const
{
static_assert(std::is_integral<T>::value, "Integer required.");
if (auto n = string2Int<T>(str))
return *n;
else
try {
return string2IntWithUnitPrefix<T>(str);
} catch (...) {
throw UsageError("setting '%s' has invalid value '%s'", name, str);
}
}
template<typename T>

View file

@ -67,3 +67,8 @@ exp_features=$(nix config show | grep '^experimental-features' | cut -d '=' -f 2
val=$(nix config show | grep '^warn-dirty' | cut -d '=' -f 2 | xargs)
val2=$(nix config show warn-dirty)
[[ $val == $val2 ]]
# Test unit prefixes.
[[ $(nix config show --min-free 64K min-free) = 65536 ]]
[[ $(nix config show --min-free 1M min-free) = 1048576 ]]
[[ $(nix config show --min-free 2G min-free) = 2147483648 ]]

View file

@ -62,11 +62,11 @@ EOF
)
nix build --impure -v -o $TEST_ROOT/result-A -L --expr "$expr" \
--min-free 1000 --max-free 2000 --min-free-check-interval 1 &
--min-free 1K --max-free 2K --min-free-check-interval 1 &
pid1=$!
nix build --impure -v -o $TEST_ROOT/result-B -L --expr "$expr2" \
--min-free 1000 --max-free 2000 --min-free-check-interval 1 &
--min-free 1K --max-free 2K --min-free-check-interval 1 &
pid2=$!
# Once the first build is done, unblock the second one.