This detects existence of Hex registry at
$HOME/.cache/rebar3/hex/default/registry and skips "rebar3 update" step.
It also detect presence of bootstrap dependencies in _build/default/lib/
and skips fetching them.
- proper segregation of comparison between tuple terms and non-tuple
terms. Guards weren't specific enough and that meant the wrong clauses
of guards would be triggered
- proper deduplication of entries in the list. An additional N passes
are required (we co-opt the reverse step to be more efficient) because
while the original lists:umerge easily removes dupes, this is
requiring more logic here since `[a,{a,b},{a,b,c},a,{a,b,c}]` is a
possible interleaving and we'd want `[a,{a,b},{a,b,c}]` -- comparison
of direct neighbours isn't enough.
When compiling a dependency with a MIB file the generated hrl file is left in
the root project directory in a file called "include". This has the perverse
effect of messing up the search path for include files causing any dependencies
with files in their "include" directory to fail to build after that.
Relx config need new values at the end of the list and
profile additions prepended. So now in apply_profile in
the case it is a relx config we prepend the config list.
This does, however, mean that a profile release can not
'extend' a release defined in the default profile since
the one being extended would have its definition after
the profile release and thus relx would not be able to
use its values for extending.
when `ct_opts`, `eunit_tests`, `eunit_first_files`, `ct_first_files`, `erl_first_files`,
`eunit_compile_opts`, `ct_compile_opts` and `erl_opts` have values that are single non-list
terms warn and try wrapping them in a list when processing them in the `eunit` and `ct`
providers
In some cases (nested includes?) paths end up in such a way that joining
them breaks up and hard-crashes rebar3. This patch specifically handles
this scenario to fix things by avoiding passing empty lists to
filename:join.