alongside their source (ie, if `some_tests` is a directory that
contains test suites beams resulting from compiling them will be
placed in `some_tests` in the appropriate `_build` directory
- Allow 'rebar3 help' to work and have it point to 'rebar3 help
<template>'
- show a 'template not found' message when a template is indeed not
found rather than crashing.
Much clearer semantics now. All lists are treated as proplists, meaning
we want to:
1) allow duplicates (providers have to avoid them if they must)
2) preserve order of elements that compare equal (`a == {a, val}`)
through a stable sort (so if `{a, b}` comes before `a`, we keep
`{a, b}` first in the list
3) In two lists of attributes requiring a merge, we always give the
'new' profile a priority to override the default one.
Add one test case to verify the dev_mode option for a release and
another to verify overriding the dev_mode option in a profile for a
release. Verification of proper dev_mode functioning is done in the
rebar_test_utils:check_results/2 function by checking if all the
directories in the release lib dir are symlinks or not and comparing
that result to the dev_mode expectation passed as input to
the check_results function.
With the new priority order, and knowing Relx processes things in
reverse already (possibly building a dict internally), we should flip
our options around to keep them correct.
Rather than using the stdlib lists:umerge, we expand it to allow fuzzy
matching on tuples vs. vals (`key` vs. `{key,val}`) with an overriden
sort order so that two tuples or values comparing equal get a priority
on the newest profile.
This is a partial fix for #287 -- this current patch should be followed
by a relx update to take options in order (as if they were a proplist)
to complete it.