erlware / relx

Sane, simple release creation for Erlang
http://erlware.github.io/relx
Apache License 2.0
697 stars 232 forks source link

build failed with erts-8.1 inside Elixir mix release system #524

Closed cybernetlab closed 8 years ago

cybernetlab commented 8 years ago

Hi! In my case relx used inside Elixir mix. When I try to build project with MIX_ENV=prod mix release I've following error:

MIX_ENV=prod mix release
Building release with MIX_ENV=prod.
** (MatchError) no match of right hand side value: {:error, :enoent}
    /projects/sferosoft/barcode_reader/deps/relx/src/rlx_prv_assembler.erl:510: :rlx_prv_assembler.include_erts/4
    /projects/sferosoft/barcode_reader/deps/relx/src/rlx_prv_assembler.erl:59: :rlx_prv_assembler.do/1
    /projects/sferosoft/barcode_reader/deps/relx/src/relx.erl:308: :relx.run_provider/2
    (stdlib) lists.erl:1263: :lists.foldl/3
    /projects/sferosoft/barcode_reader/deps/relx/src/relx.erl:291: :relx.run_providers_for_actions/2
    lib/exrm/utils/utils.ex:105: ReleaseManager.Utils.relx/5
    lib/mix/tasks/release.ex:339: anonymous fn/4 in Mix.Tasks.Release.do_release/1
    lib/ex_unit/capture_io.ex:146: ExUnit.CaptureIO.do_capture_io/2

After some digging in rlx_prv_assembler.erl code I've found that error produced by ec_file:remove(SrcDir, [recursive]) function that used to remove erts sources, but in my case there are no src subfolder at all so where should be some check for folder existence before remove it.

As a workaround I've changed line 510 of rlx_prv_assembler.erl to:

case ec_file:exists(SrcDir) of
  true -> ok = ec_file:remove(SrcDir, [recursive]);
  _    -> ok
end

If it looks reasonable I can prepare PR.

Regards

lrascao commented 8 years ago

this was a regression introduced in 3a2003e5, your PR would be most welcome

cybernetlab commented 8 years ago

I'm not sure about test case for this issue. Changes are trivial so I decide not to make test case for it..

lrascao commented 8 years ago

it's fine, thanks!