Pārlūkot izejas kodu

Fix OS X resource fork handling (Reported-by: Richard O'Keefe)

If you happen to fetch a zip archive of the git repo and try to build
from that, you may, for example, ask erlc to build src/._rebar.erl.
._* are OS X resource forks and not real .erl files. This may also
happen with network filesystems on OS X. To fix that, limit the
files compiled by rebar to include only those which start with
a letter or a digit.
pull/3/head
Tuncer Ayaz pirms 11 gadiem
vecāks
revīzija
3fb4a7c540
9 mainītis faili ar 28 papildinājumiem un 16 dzēšanām
  1. +3
    -1
      bootstrap
  2. +4
    -0
      inttest/erlc/src/._do_not_compile.erl
  3. +1
    -1
      src/rebar_appups.erl
  4. +6
    -3
      src/rebar_base_compiler.erl
  5. +1
    -2
      src/rebar_core.erl
  6. +10
    -6
      src/rebar_erlc_compiler.erl
  7. +1
    -1
      src/rebar_protobuffs_compiler.erl
  8. +1
    -1
      src/rebar_qc.erl
  9. +1
    -1
      src/rebar_templater.erl

+ 3
- 1
bootstrap Parādīt failu

@ -47,7 +47,9 @@ main(Args) ->
end,
%% Compile all src/*.erl to ebin
case make:files(filelib:wildcard("src/*.erl"),
%% To not accidentally try to compile files like Mac OS X resource forks,
%% we only look for rebar source files that start with a letter.
case make:files(filelib:wildcard("src/[a-zA-Z]*.erl"),
[{outdir, "ebin"}, {i, "include"},
DebugFlag,
NamespacedTypes,

+ 4
- 0
inttest/erlc/src/._do_not_compile.erl Parādīt failu

@ -0,0 +1,4 @@
syntax error
this is file is here to verify that rebar does not try to
compile files like OS X resource forks and should not be
processed at all

+ 1
- 1
src/rebar_appups.erl Parādīt failu

@ -70,7 +70,7 @@
%% Get a list of any appup files that exist in the new release
NewAppUpFiles = rebar_utils:find_files(
filename:join([NewVerPath, "lib"]), "^.*.appup$"),
filename:join([NewVerPath, "lib"]), "^[^._].*.appup$"),
%% Convert the list of appup files into app names
AppUpApps = [file_to_name(File) || File <- NewAppUpFiles],

+ 6
- 3
src/rebar_base_compiler.erl Parādīt failu

@ -28,8 +28,11 @@
-include("rebar.hrl").
-export([run/4, run/7, run/8,
ok_tuple/3, error_tuple/5]).
-export([run/4,
run/7,
run/8,
ok_tuple/3,
error_tuple/5]).
%% ===================================================================
%% Public API
@ -60,7 +63,7 @@ run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt,
run(Config, FirstFiles, SourceDir, SourceExt, TargetDir, TargetExt,
Compile3Fn, Opts) ->
%% Convert simple extension to proper regex
SourceExtRe = ".*\\" ++ SourceExt ++ [$$],
SourceExtRe = "^[^._].*\\" ++ SourceExt ++ [$$],
Recursive = proplists:get_value(recursive, Opts, true),
%% Find all possible source files

+ 1
- 2
src/rebar_core.erl Parādīt failu

@ -593,8 +593,7 @@ load_plugin_modules(Config, PredirsAssoc, Modules) ->
?DEBUG("Plugin dirs for ~s:~n~p~n", [Cwd, PluginDirs]),
%% Find relevant sources in base_dir and plugin_dir
Erls = string:join([atom_to_list(M)++"\\.erl" || M <- Modules], "|"),
RE = "^" ++ Erls ++ "\$",
RE = string:join([atom_to_list(M)++"\\.erl" || M <- Modules], "|"),
%% If a plugin is found both in base_dir and plugin_dir, the clash
%% will provoke an error and we'll abort.
Sources = [rebar_utils:find_files(PD, RE, false) || PD <- PluginDirs],

+ 10
- 6
src/rebar_erlc_compiler.erl Parādīt failu

@ -47,6 +47,8 @@
info = {[], []} :: erlc_info()
}).
-define(RE_PREFIX, "^[^._]").
-ifdef(namespaced_types).
%% digraph:graph() exists starting from Erlang 17.
-type rebar_digraph() :: digraph:graph().
@ -110,14 +112,14 @@ compile(Config, _AppFile) ->
-spec clean(rebar_config:config(), file:filename()) -> 'ok'.
clean(Config, _AppFile) ->
MibFiles = rebar_utils:find_files("mibs", "^.*\\.mib\$"),
MibFiles = rebar_utils:find_files("mibs", ?RE_PREFIX".*\\.mib\$"),
MIBs = [filename:rootname(filename:basename(MIB)) || MIB <- MibFiles],
rebar_file_utils:delete_each(
[filename:join(["include",MIB++".hrl"]) || MIB <- MIBs]),
lists:foreach(fun(F) -> ok = rebar_file_utils:rm_rf(F) end,
["ebin/*.beam", "priv/mibs/*.bin"]),
YrlFiles = rebar_utils:find_files("src", "^.*\\.[x|y]rl\$"),
YrlFiles = rebar_utils:find_files("src", ?RE_PREFIX".*\\.[x|y]rl\$"),
rebar_file_utils:delete_each(
[ binary_to_list(iolist_to_binary(re:replace(F, "\\.[x|y]rl$", ".erl")))
|| F <- YrlFiles ]),
@ -129,7 +131,7 @@ clean(Config, _AppFile) ->
%% directory structure in ebin with .beam files within. As such, we want
%% to scan whatever is left in the ebin/ directory for sub-dirs which
%% satisfy our criteria.
BeamFiles = rebar_utils:find_files("ebin", "^.*\\.beam\$"),
BeamFiles = rebar_utils:find_files("ebin", ?RE_PREFIX".*\\.beam\$"),
rebar_file_utils:delete_each(BeamFiles),
lists:foreach(fun(Dir) -> delete_dir(Dir, dirs(Dir)) end, dirs("ebin")),
ok.
@ -140,7 +142,7 @@ clean(Config, _AppFile) ->
test_compile(Config, Cmd, OutDir) ->
%% Obtain all the test modules for inclusion in the compile stage.
TestErls = rebar_utils:find_files("test", ".*\\.erl\$"),
TestErls = rebar_utils:find_files("test", ?RE_PREFIX".*\\.erl\$"),
ErlOpts = rebar_utils:erl_opts(Config),
{Config1, ErlOpts1} = test_compile_config_and_opts(Config, ErlOpts, Cmd),
@ -151,7 +153,8 @@ test_compile(Config, Cmd, OutDir) ->
SrcDirs = rebar_utils:src_dirs(proplists:append_values(src_dirs, ErlOpts1)),
SrcErls = lists:foldl(
fun(Dir, Acc) ->
Files = rebar_utils:find_files(Dir, ".*\\.erl\$"),
Files = rebar_utils:find_files(
Dir, ?RE_PREFIX".*\\.erl\$"),
lists:append(Acc, Files)
end, [], SrcDirs),
@ -645,7 +648,8 @@ compile_xrl_yrl(Config, Source, Target, Opts, Mod) ->
gather_src([], Srcs) ->
Srcs;
gather_src([Dir|Rest], Srcs) ->
gather_src(Rest, Srcs ++ rebar_utils:find_files(Dir, ".*\\.erl\$")).
gather_src(
Rest, Srcs ++ rebar_utils:find_files(Dir, ?RE_PREFIX".*\\.erl\$")).
-spec dirs(file:filename()) -> [file:filename()].
dirs(Dir) ->

+ 1
- 1
src/rebar_protobuffs_compiler.erl Parādīt failu

@ -39,7 +39,7 @@
%% ===================================================================
compile(Config, _AppFile) ->
case rebar_utils:find_files("src", ".*\\.proto$") of
case rebar_utils:find_files("src", "^[^._].*\\.proto$") of
[] ->
ok;
FoundFiles ->

+ 1
- 1
src/rebar_qc.erl Parādīt failu

@ -208,7 +208,7 @@ qc_module(QC=eqc, [], M) -> QC:module(M);
qc_module(QC=eqc, QCOpts, M) -> QC:module(QCOpts, M).
find_prop_mods() ->
Beams = rebar_utils:find_files(?QC_DIR, ".*\\.beam\$"),
Beams = rebar_utils:find_files(?QC_DIR, "^[^._].*\\.beam\$"),
[M || M <- [rebar_utils:erl_to_mod(Beam) || Beam <- Beams], has_prop(M)].
has_prop(Mod) ->

+ 1
- 1
src/rebar_templater.erl Parādīt failu

@ -41,7 +41,7 @@
-include("rebar.hrl").
-define(TEMPLATE_RE, ".*\\.template\$").
-define(TEMPLATE_RE, "^[^._].*\\.template\$").
%% ===================================================================
%% Public API

Notiek ielāde…
Atcelt
Saglabāt