In the spirit of Original Rebar's "require_min_otp_vsn", this adds
rebar_utils:check_min_otp_version/1 (taking a string containing the
minimum version) and rebar_utils:check_blacklisted_otp_versions/1
(taking a list of regular expression strings), as well as tests in
rebar_utils_SUITE. They're currently only called by the tests-
how/where to best place calls to them from non-test code needs to be
determined (at which point two corresponding rebar.config keys can be
supported). For example, the version probably shouldn't be enforced when
just running "rebar3 help".
Linking message will only be printed the first time the link or copy
actually happens.
Note:
rebar_file_utils:symlink_or_copy will now return 'exists'
instead of ok, if it did nothing because the link exists.
Nothing was checking the return value yet, so seemed reasonable.
The wide-cast catching of undef errors would make it so any provider
calling an undefined function would be reported as a missing 'do' for
the provider.
This patch inspects the stacktrace to know if `Provider:do/1` is indeed
the missing callback, and reports the rest properly.
This tries to reduce memory usage when running `rebar3 shell` by running
the agent in the current process (and avoiding to copy state
cross-boundaries), and using frequent hibernation after each run to
force a full GC and compaction of the current process.
The old run didn't necessarily apply all profiles well, and would only
reload modules in the app file. However, since adding extra_src_dirs,
modules can be compiled without ending up in the app file; this lets
the rebar3 shell agent handle that case.