| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
by default, all apps except internal rebar3 ones can be blacklisted.
Some months ago, someone added support for configurable lists within
rebar3 itself using the .app env.
This PR re-exports that functionality from the rebar.config file, so
that one can set something like:
{shell, [
{app_reload_blacklist, [cowboy, ranch]}
]}.
Which will allow to prevent applications that often crash when being
reloaded from doing so. For example, cowboy and ranch processes can be
stuck in an accept call for multiple reloads in dev, which ends up
causing large failures.
|
|\
| |
| | |
Add --relvsn and --relname to rebar3 shell
|
| |
| |
| |
| |
| |
| |
| | |
Allows to select one of many releases conditionally.
Default behaviour should be unchanged from existing one.
Can filter on only the version or only the name, or both.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This change fixes cases where changes in .hrl files would not be picked
up in .erl files that are in extra source directories (such as those
defined with `extra_src_dirs` or modules in the test/ directory during a
CT or Eunit run).
The problem was due to the way the Directed Acyclic Graph (DAG) of
dependencies between files was being loaded and stored by the compiler
modules.
Prior to this fix, a single DAG would be used for all runs. On a regular
run, the prior DAG is loaded from disk, re-checked, and if changed, it
would get re-written to disk with the changes deciding what to
re-compile. However, whenever extra source directories were specified, a
second run would be done which swaps target directories around in the
compiler modules.
Bug 1: this second run was done without properly tracking the private .hrl
files (in src/), so the changes were invisible. This has been fixed by
re-adding the paths.
The problem is that the DAG handling is self-contained; just invoking it
was sufficient to get it loaded and rewritten to disk. But since runs
with extra src dirs were done on different sets, the compilation of
extra src dirs would be done with bad historical data (all the modules
in src/ are dropped, all those in test/ are re-added); this DAG was then
written to disk once again, polluting the next non-extra run.
This is bug 2, and it is fixed by adding an optional label to each run
so that a regular or extra compile round can be distinguished, each
tracking their own files in their own DAG.
A single test (and a lot of diffing) were sufficient for this.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Starting with OTP-21.2.3, some output appears to be sent to the shell
while we're taking down the TTY, which ends up stalling the whole log
flow for the default handler. I don't have proof but suspect this is due
to the system logging going directly from the ERTS runtime to the
logger, which may be trigger when we kill the TTY driver.
This patch makes it so whenever we detect that logger is active, we save
the default config, disable the default logger, and only then we can
kill the TTY driver. Once the driver is started and all the group
leaders have been rewritten, the default logger is re-added.
This all takes place _before_ the logger configuration is updated as
part of booting apps, and the change should be fully backwards
compatible.
|
|
|
|
|
|
|
|
| |
Partially reverts commit f52a115ea9d66c812f68200383d769ac300a2828
Fixes #2003
Needs tests to prevent a future regression.
|
|\
| |
| | |
Reorder rebar3 tree output on umbrella apps
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This change makes it so umbrella projects get ordered in a way more
in-line with what we do with non-umbrellas.
For example, a non-umbrella app (rebar3 itself) gives output like:
└─ rebar─3.8.0+build.4270.refaece1d7 (project app)
├─ bbmustache─1.6.0 (hex package)
├─ certifi─2.3.1 (hex package)
├─ cf─0.2.2 (hex package)
├─ cth_readable─1.4.2 (hex package)
├─ erlware_commons─1.3.1 (hex package)
├─ eunit_formatters─0.5.0 (hex package)
├─ getopt─1.0.1 (hex package)
├─ hex_core─0.4.0 (hex package)
├─ parse_trans─3.3.0 (hex package)
├─ providers─1.7.0 (hex package)
├─ relx─3.28.0 (hex package)
└─ ssl_verify_fun─1.1.3 (hex package)
The current (prior to this patch) output for an umbrella project looks
like this:
├─ bootstrap─0.0.2 (git repo)
├─ dirmon─0.1.0 (project app)
├─ fake─0.1.0 (project app)
├─ file_monitor─0.1 (git repo)
├─ peeranha─0.1.0 (git repo)
│ ├─ gproc─0.5 (git repo)
│ ├─ interclock─0.1.2 (git repo)
│ │ ├─ bitcask─1.7.0 (git repo)
│ │ │ └─ lager─2.1.1 (hex package)
│ │ │ └─ goldrush─0.1.6 (hex package)
│ │ └─ itc─1.0.0 (git repo)
│ └─ merklet─1.0.0 (git repo)
├─ recon─2.2.2 (git repo)
└─ uuid─1.5.0 (git repo)
└─ quickrand─1.5.0 (git repo)
Which kind of looks odd because the layout represents the dependencies
of deps as declared by the rebar3 config files, but mix up the project
apps as dependencies. This turns out to break expectations, and some
external tools (such as Blackduck's dep detection -- see
https://github.com/blackducksoftware/hub-detect/blob/d8a0f2281a056aec04e3f8aecd22bbbe9a2a6f3e/hub-detect/src/main/groovy/com/blackducksoftware/integration/hub/detect/detector/hex/Rebar3TreeParser.java)
which were developed with regular apps in mind, but not umbrellas.
This PR changes things by reordering all project apps at the root level
and putting them first, and then indenting all deps below them. The same
app now looks like:
├─ dirmon─0.1.0 (project app)
└─ fake─0.1.0 (project app)
├─ bootstrap─0.0.2 (git repo)
├─ file_monitor─0.1 (git repo)
├─ peeranha─0.1.0 (git repo)
│ ├─ gproc─0.5 (git repo)
│ ├─ interclock─0.1.2 (git repo)
│ │ ├─ bitcask─1.7.0 (git repo)
│ │ │ └─ lager─2.1.1 (hex package)
│ │ │ └─ goldrush─0.1.6 (hex package)
│ │ └─ itc─1.0.0 (git repo)
│ └─ merklet─1.0.0 (git repo)
├─ recon─2.2.2 (git repo)
└─ uuid─1.5.0 (git repo)
└─ quickrand─1.5.0 (git repo)
Now the project apps are back at the top, and all the dependencies
follow at one level of indentation below.
There is no recorded change for single-app projects.
|
|\ \
| | |
| | | |
Fix performance regression in compiler around behaviours
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When the commit at
https://github.com/erlang/rebar3/commit/8c4a74a3ed9ddd9841e6596ca86b81f3d43906c0
introduced a recursive search for build elements, it accidentally did so
using a function that accepts a regex for its match.
In doing so, if a behaviour or include had a name such as
`common_prefix` and that multiple other modules used the name
`common_prefix_<rest_of_name>`, all the other files would be seen as
dependencies to be checked in a directed graph.
This resulted in continuous re-checking of files that kept depending on
each others and blew the compile time up exponentially.
By using a delimitation on the regex (^<modulename>$), the build comes
back down to finding only the right files and becomes fast again.
|
| | | |
|
|\ \ \
| |/ /
|/| |
| | | |
https://github.com/starbelly/rebar3 into starbelly-working-systests-on-darwin
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- fixes systests on darwin where previously the recursive cp would fail
due to everything being copied after the last forward slash.
Specifically, everything in `systest/all_SUITE_data/` would be
copied but not `all_suite_data` dir itself which the tests expected.
|
| | | |
|
|\ \ \
| |_|/
|/| |
| | | |
https://github.com/starbelly/rebar3 into starbelly-1944-git-shell-eval-bug
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
|\ \
| | |
| | | |
Update hex_core and add mirror_of repo config
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
- removed deprecated maintainers field from config template in
rebar_prv_packages
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ / |
|
|\ \
| | |
| | | |
Add a --fail_fast switch to common test
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This switch aborts the rebar3 run after the first test failure is
reported.
Since Common Test does not support this feature and it can be useful for
interactive development (a demand from one of the teams I work with), I
decided to add the feature as an experimental CT hook.
The hook notices any test failure, and forcefully aborts the current
script execution, but only during the initialization phase of the next
test; this ensure that all other hooks for a post-test failure have the
time to do things right.
The CT logs _will_ be interupted, and hooks of all kinds may also
suffer.
Since this might be a bit tricky to support internally, I will be fine
with a review that results in "no, Fred. Please test this in a project
plugin first" or if I get told to use profiles to mature the feature
(i.e. `rebar3 as failfast ct ...`) with a custom hook declaration.
|
| | |
|
|/
|
|
|
|
| |
For issue https://github.com/erlang/rebar3/issues/1974
Revert "add rebar.lock to template gitignore"
This reverts commit 8fb8a91130e0e5c239bb837b9adc4ad71e5806b8.
|
|
|
|
| |
mostly copy/paste from rebar_compiler_erl
|
|\
| |
| | |
Support ignoring entire modules in xref results
|
| |
| |
| |
| |
| |
| |
| | |
- Added support to rebar_prv_xref for filtering out whole module. A
module may now be added to the list of xref_ignores in rebar.config or
via -ignore_xref() module attribute
- Added unit test for whole module filtering support to xref CT suite
|
| | |
|
|\ \
| |/
|/| |
Fix load order for custom project builders and parse transforms
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The app data, when set by `rebar3_app_discover` basically does not
include the modules if it was derived from the .app.src file, even if at
a later point the modules were compiled.
Since there is currently no clear way to add that information reliably
across all compiler versions in all types of compilers, we simply clear
the cache and re-derive the information when required.
This might have a small performance cost, but is required for
correctness whenever an application's first build is run. Specifically,
this bug was detected when a plugin included lager's parse transform,
and the application itself also required it, but two distinct versions
were needed.
This patch finalizes fixing this issue.
|
| |
| |
| |
| |
| | |
Compile time with parse transforms needs to have the deps first in scope
before the plugins
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Due to building dependencies with potential artifacts such as parse
transforms or macros, project builder plugins should be included in the
path, but _after_ deps are loaded.
Doing otherwise means that if any of the dependencies is required at
compile time, those of a plugin might get used first.
|
|/ |
|
| |
|
| |
|