summaryrefslogtreecommitdiff
path: root/src/rebar_utils.erl
Commit message (Collapse)AuthorAgeFilesLines
* OTP-21 readiness, Full Unicode supportFred Hebert2017-11-161-7/+6
| | | | | | | | | | | | This replaces all deprecated function usage by alternative ones based on a version switch enacted at compile time, preventing all warnings. This will likely introduce some possible runtime errors in using a Rebar3 compiled on OTP-20 or OTP-21 back in versions 19 and earlier, but we can't really work around that. A bunch of dependencies have been updated to support OTP-21 without warnings as well.
* Prevent hard crash on duplicate plugin pathsFred Hebert2017-10-201-1/+1
| | | | | | | | | | | | | | | When a global plugin is used both locally and within the project, there are cases when the rebar3 program will hard crash (killed in do_boot). This has been traced to plugin-handling in compilation, where the same code path may be purged twice in a row without further reloading for the compile operation. This of course yields the result where the code handling on the VM kills all processes holding references to the module in memory, in this case the rebar3 process itself. By deduplicating the paths first, we ensure at most one purge before reloading plugins and paths, and this prevents a hard crash.
* Unicode support in all the placesFred Hebert2017-08-061-29/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is done through 3 main change groups: - replacing `~s` by `~ts` in format strings, so that strings that contain unicode are properly printed rather than crashing - adding the `unicode` argument to all function of the `re` module to ensure transformations on strings containing unicode data are valid instead of crashing (see issue #1302) - replacing `ec_cnv:to_binary/1` and `ec_cnv:to_list/1` with matching functions in `rebar_utils`. The last point has been done, rather than modifying and updating erlware commons, because binary and list conversions can be a contentious subject. For example, if what is being handled is actually bytes from a given binary stream, then forcing a byte-oriented interpretation of the data can corrupt it. As such, it does not appear safe to modify erlware commons' conversion functions since it may not be safe for all its users. Instead, rebar3 reimplements a subset of them (only converting atoms and chardata, ignoring numbers) with the explicit purpose of handling unicode string data. Tests were left as unchanged as possible. This may impact the ability to run rebar3's own suites in a unicode path, but respects a principle of least change for such a large patch.
* rebar_utils:escape_chars handles quotesVlad Dumitrescu2017-03-041-1/+1
| | | | | rebar_file_utils:cp_r uses rebar_utils:escape_chars to ensure that the file names are safe to use, but it doesn't escape double and single quotes. If the file name includes those characters, they disappear when the shell processes them and we get "file not found" errors. The main culprit here is eunit, that creates reports whose names are `TEST-file_"myfile.app".xml`, and I wish it didn't but I think escape_chars should still do its job all the way.
* Merge pull request #1391 from ferd/doc-and-typesFred Hebert2016-12-231-5/+18
|\ | | | | Type specifications and edocs improvements
| * Type specifications and edocs improvementsFred Hebert2016-11-271-5/+18
| | | | | | | | | | | | Includes improvments and function documentation for all modules (in alphabetical order) up to rebar_core, and may have included more in other modules as I saw fit to dig and understand more of the internals.
* | 1394: refined export list and testsArtem Pervin2016-12-011-2/+2
| |
* | 1394: added fix for rebar_utils, moved setting of http_options into ↵Artem Pervin2016-11-301-3/+21
|/ | | | init_config, added unit tests
* Some post-review changes:Alexander Sedov2016-10-111-0/+2
| | | | | - restore path after loading applications, - helpful comments.
* Rereading system configuration sets up persistent options if possible.Alexander Sedov2016-10-111-1/+7
|
* add support for passing a sys_config to common testTristan Sloughter2016-06-111-1/+13
|
* Support ENV config for proxy valuesFred Hebert2016-06-111-1/+5
| | | | | - The configured stuff in rebar3 takes precedence over the ENV - The env is then chosen
* add user-agent to http request headersTristan Sloughter2016-02-011-1/+6
|
* check at runtime instead of compile time for presence of `file:list_dir_all/1`alisdair sullivan2016-01-131-5/+8
| | | | | | this is slower than the compile time check but i guess packaging rebars with repos is still a thing and i think only the eunit and ct providers call it anyways
* support temporary cdn change with HEX_CDN os varTristan Sloughter2015-12-191-0/+10
|
* Actually fix tuple merging.Fred Hebert2015-12-061-30/+53
| | | | Full rewrite, code should be understandable now.
* Fix tuple umergingFred Hebert2015-12-061-7/+18
| | | | | | | | | | | | - 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.
* add an option to soft purge rather than purge old codealisdair sullivan2015-11-011-8/+10
| | | | | at the cost of some SASL warnings this prevents rebar3 from terminating processes when reloading their code before running tests
* prevent rebar3 from reloading it's own path and terminating itselfalisdair sullivan2015-10-311-1/+7
| | | | | prevents code reloading by temporary marking of rebar3's ebin dir as sticky during code refresh
* refactor `rebar_erlc_compiler`alisdair sullivan2015-10-261-1/+8
| | | | | | | | | | | | | | | | | | | * modify compiler interface to work on either application objects or directories containing source files * compile all sources in `src_dirs` to the application `ebin` dir and all sources in `extra_src_dirs` to a directory mirroring it's position in the app's `_build` directory. for example, `apps/foo/more` would compile to `_build/default/lib/foo/more` for `extra_src_dirs` in the root of a project with multiple applications (so orphan directories that don't "belong" to an application) compile to `_build/default/extras/more` * copy directories specified in `extra_src_dirs` into the `_build` directory so tools like `ct` and `xref` that expect source to be in a particular location still work * clean compiled artifacts from all `extra_src_dirs` * alter `eunit`, `ct` and `cover` to work with the new directory structure * billions of new tests
* update erlware_commonsTristan Sloughter2015-09-191-0/+2
|
* Merge pull request #772 from tsloughter/eunit_fixFred Hebert2015-09-051-1/+6
|\ | | | | delete and prepend code path instead of replacing, fixes #770
| * delete and prepend code path instead of replacing, fixes #770Tristan Sloughter2015-09-021-1/+6
| |
* | move opts functions to new module rebar_optsTristan Sloughter2015-09-011-150/+2
| |
* | more cleanupTristan Sloughter2015-08-311-14/+20
| |
* | update use of hooks and plugins with state in app_infoTristan Sloughter2015-08-311-1/+92
| |
* | build on already created AppInfo instead of having to do copyTristan Sloughter2015-08-311-8/+8
| |
* | wip: move state into app_infoTristan Sloughter2015-08-311-5/+23
|/
* fix no_return warningsTristan Sloughter2015-08-081-0/+1
|
* fix dialyzer warnings, except 'no local return' warningsTristan Sloughter2015-08-081-1/+1
|
* add tree option to deps command that prints pkg deps treeTristan Sloughter2015-08-031-0/+26
|
* upgrade depends on the lock provider and lock prv sets stateTristan Sloughter2015-08-021-1/+8
|
* Merge pull request #652 from tsloughter/escape_andFred Hebert2015-07-291-3/+3
|\ | | | | escape & in paths
| * add ; to escaped chars in pathTristan Sloughter2015-07-281-3/+3
| |
| * escape & in pathsTristan Sloughter2015-07-261-3/+3
| |
* | Merge pull request #650 from tsloughter/upgrades_git_pkg_fixFred Hebert2015-07-261-0/+15
|\ \ | |/ |/| fix upgrade of newly added pkg dep from scm locked dep
| * fix upgrade of newly added pkg dep from scm locked depTristan Sloughter2015-07-251-0/+15
| |
* | Merge pull request #642 from tsloughter/validate-otp-versionFred Hebert2015-07-261-1/+51
|\ \ | |/ |/| Validate otp version
| * add support for old format otp versionsTristan Sloughter2015-07-251-15/+16
| |
| * parse old format of OTP versionsTristan Sloughter2015-07-241-7/+12
| |
| * Add functions to validate OTP release in useDerek Brown2015-07-241-1/+45
| | | | | | | | | | | | | | | | | | | | | | | | 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".
* | support atom for branch names like rebar2Tristan Sloughter2015-07-211-0/+2
|/
* Escape paths and args in shell commandsFred Hebert2015-07-181-1/+16
| | | | | | | Basic escaping is done only. Fancy hex sequences are not covered, but this should otherwise take care of the most common issues. Fixes #497
* always close port when done with it. fixes #589Tristan Sloughter2015-07-061-10/+16
|
* Use rebar own method to read global config file.CarlosEDP2015-07-031-12/+4
|
* Renamed functions.CarlosEDP2015-07-031-2/+2
|
* Added rebar profile to httpc initialization and calls.CarlosEDP2015-07-031-1/+1
|
* Fix for cases with no proxy configured.CarlosEDP2015-07-031-1/+1
|
* Get proxy vars from ~/.config/rebar3/rebar.config. Variable format is ↵CarlosEDP2015-07-031-48/+21
| | | | {http_proxy, http://host:port} or {http_proxy, http://host:port}
* Added support for proxy on rebar3 based on environment variables.CarlosEDP2015-07-031-1/+53
|