End result should allow to look like this:
$ head -n 3 rebar3
#!/usr/bin/env escript
%% Rebar3 3.14.0-rc1
%%! +sbtu +A1
This will allow tools like mix to read the top of the file to know the
version being used in the current path (when using features that aren't
forwards-compatible) without having to invoke the tool itself.
The version (full dynamic one) is also added to the local install:
$ head -n 2 /home/ferd/.cache/rebar3/bin/rebar3
#!/usr/bin/env sh
## Rebar3 3.14.0-rc1+build.4599.ref6b0f90d
The `##` comments are used to keep a fixed width over the other form.
To be backported to 3.13.2 as well.
This commit switches the relx dependency to branch 4.0.0. It is the
first iteration of integration with relx 4.0 which adds many changes
to how relx works and how the two integrate.
rebar_relx module now creates a relx state from the relx configuration
and pass it along with all the OTP applications rebar3 knows about
which may be used in the release. This allows relx to not have
to duplicate the effort of application discovery like before.
Since this is intended to be released only when OTP-23 is released
the testing of OTP-18 has been removed.
- topsort of an app does a full analysis of all apps to come up with
their app-level DAG
- each extra_src_dir has its own analysis run
- each extra_src_dir run is simulated as being an app
- we therefore end up doing a lot of useless analysis for single app
runs
This patch notes runs with 1 or 0 apps and skips doing the topsort
analysis on them, which speeds things up further.
Closes#2108. Changes the path to be printed to a relative path
to the current directory.
Also removes the `exports_not_used` warning from the default ones,
as Tristan suggested.
The propagation was confusing source files and artifacts; the artifact
ordering was flipped, and the tagging non-mandatory (aside from as
edges), which made things hard to identify when plugins for compilers
are used.
Now it should work in Erlang/OTP versions earlier than 20 and
update the symlink in case of one already existing (so that `last`
always points to the last run).
This patch enables two features:
* in rebar.config, {diazlyer, [{plt_apps, all_apps}]} makes rebar3 to
add all project files into PLT for subsequent analysis
* rebar3 ct --app=myapp allows single application success typing
This allows workflow suitable for large codebases:
* "rebar3 ct dialyzer --succ-typings=false" to build PLT with all apps
* "rebar3 ct dialyzer --app=myapp" to perform success typing of myapp
As suggested in #2223, `make_absolute_path/2` and `make_normalized_path/2`
should, instead of being exported in `rebar_dir`, be moved to
`rebar_file_utils` and renamed (decided to simply remove the `make`
from their names since in that module there is already a path related
function called `canonical_path`).
This allows to do quicker re-compile option validation by not requiring
to access the disk and check all candidate erlang files for option
changes. This also opens up the way to compilers that produce more than
one artifact per file.
rebar3 uses following git invocation when it needs to generate
vsn to put into app.src:
git -c color.ui=false log --oneline --no-walk --tags --decorate
It may return something like some_repo/some_project/12345678,
with some characters preceding actual hash. This leads to some
unusual version written into application resource file, e.g.
{vsn, "some_repo/some_project/123456678"}.
This does not work well with semantic versioning, and also
produces unexpected OTP application names and folder names,
e.g.
myapp-some_repo/some_project/12345678