there's no way to detect which files actually rely on a parse transform
passed to the compiler via the options (as opposed to `-compile(..)`
so if any parse transforms are in modules that need recompiling just
recompile the world
fixes#1328
In some cases, mv will throw a warning, while still moving the files
correctly and returning a 0 return code:
"mv: can't preserve ownership of ... Permission denied".
Insert a newline before printing the stacktrace so that the term is
easier to read and copy. This is a more conventional way to print
traces, and is, for instance, the way it's done by make and python.
Specifically, when fetching an application where the expected hash is
unknown, the hash is validated from the hex index; when the index is
available, the hash is fetched fine and later inserted in the lock file.
However, if the index is not available, the call would simply crash.
This patch fixes thing so that instead, the index is refreshed before
giving up and failing.
- brings back former error handling and debug messages
- keeps the filtering of excluded mods and debug messages
- breaks up code into multiple functions and removes nesting
The trim_all option used in binary:split/3 is not supported in 17.x.
This patch makes an equivalent operation by eliminating empty split
fragments. From the docs:
trim
Removes trailing empty parts of the result (as does trim in
re:split/3.
trim_all
Removes all empty parts of the result.
The new expression is therefore equivalent to the old one, but with the
added benefit of compatibility.
Fixes#1275
Given the topological sort applied to top-level apps, we should be able
to carry the edoc values for paths configured when more than one app
exists.
This allows multiple disjoint app to have defined cross-linking in the
documentation.
Tests pending.
Previously the help task would crash when given more than two
arguments. After this change it instead print a message:
Too many arguments given. Usage: rebar3 help [<namespace>] <task>
https://github.com/erlang/rebar3/pull/1249 introduced a mechanism by
which escript dependencies of applications only would be included; this
required adding a filter to skip system libraries in the OTP root
because that tends to break escripts in very nasty ways.
However, the problem came that some libraries are just not in the
escript path but may still be included; for these libraries the path
prefix check failed as they return `{error, bad_name}` from
`code:lib_dir(Dep)` rather than just the path they're in --
specifically, this happens with top level apps.
The issue was reported in https://github.com/erlang/rebar3/issues/1294
and the current patch fixes it by accepting a `bad_name` dep as valid,
since it is obviously not in the root path.
rebar_base_compiler allows to be called with two types of options: a
dictionary, or a rebar_state record. In the later case, the options are
taken out with a call from rebar_opts, which fetches options that have
been inserted in the application via rebar_app_info as part of the
app_discovery phase, and are a list.
This yields a possibility that options used when formatting warnings can
either be a list of a dict, and we only used lists when making checks.
This ended up breaking 3rd party compiler users (i.e. LFE compile
plugin) since they were calling us with a dict rather than our own
internal records.
This patch supports both types of lookups to avoid issues.
Prior to this patch, the escriptize command flat out selected all
declared dependencies.
This patch instead looks at the app files and only includes the
dependencies of the top level app and the extra ones, avoiding to
package more apps than required.
This required a version bump on cth_readable as it mistakenly included
'syntax_lib' instead of 'syntax_tools' as a dependency.
changed include files were not properly picked up by `erlc_compiler`
in cases where they were in directories relative to the application
source and not the current working dir of rebar3
fixes#1199
This reworks the version and hash printing in the lockfile to minimize
diff changes:
- the version is on its own line so that the locks are mostly the same
aside from the last line
- the hashes are each printed on one line with the package name for
simpler diffing too.
This required moving the reporting functions to rebar_base_compiler but
since this was already done for error_tuple, this seems to make sense.
Paths are also reformatted for warnings in erlc files.