summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Sloughter <tristan.sloughter@gmail.com>2014-07-25 14:10:04 -0500
committerTristan Sloughter <tristan.sloughter@gmail.com>2014-07-25 14:10:04 -0500
commit19c215ee9fe0726a1983b36f4f8bcc21d42a5ef8 (patch)
tree8a47941bbc34397269c9b42a84e33db6d0294476
parente8a6cfe04ab0612dcd089c7aed035520e3dd9aee (diff)
parent3fb4a7c540da227382ea0831c0c6424765900123 (diff)
Merge pull request #299 from tuncer/rok-resource-forks
Fix OS X resource fork handling (Reported-by: Richard O'Keefe)
-rwxr-xr-xbootstrap4
-rw-r--r--inttest/erlc/src/._do_not_compile.erl4
-rw-r--r--src/rebar_appups.erl2
-rw-r--r--src/rebar_base_compiler.erl9
-rw-r--r--src/rebar_core.erl3
-rw-r--r--src/rebar_erlc_compiler.erl16
-rw-r--r--src/rebar_protobuffs_compiler.erl2
-rw-r--r--src/rebar_qc.erl2
-rw-r--r--src/rebar_templater.erl2
9 files changed, 28 insertions, 16 deletions
diff --git a/bootstrap b/bootstrap
index df09f7e..7d9a1c1 100755
--- a/bootstrap
+++ b/bootstrap
@@ -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,
diff --git a/inttest/erlc/src/._do_not_compile.erl b/inttest/erlc/src/._do_not_compile.erl
new file mode 100644
index 0000000..c9d743b
--- /dev/null
+++ b/inttest/erlc/src/._do_not_compile.erl
@@ -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
diff --git a/src/rebar_appups.erl b/src/rebar_appups.erl
index a51c30d..38e7b72 100644
--- a/src/rebar_appups.erl
+++ b/src/rebar_appups.erl
@@ -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],
diff --git a/src/rebar_base_compiler.erl b/src/rebar_base_compiler.erl
index 1957070..b400512 100644
--- a/src/rebar_base_compiler.erl
+++ b/src/rebar_base_compiler.erl
@@ -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
diff --git a/src/rebar_core.erl b/src/rebar_core.erl
index 212365b..4557bb8 100644
--- a/src/rebar_core.erl
+++ b/src/rebar_core.erl
@@ -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],
diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl
index f628433..6ae927d 100644
--- a/src/rebar_erlc_compiler.erl
+++ b/src/rebar_erlc_compiler.erl
@@ -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) ->
diff --git a/src/rebar_protobuffs_compiler.erl b/src/rebar_protobuffs_compiler.erl
index 579ecfb..e89c700 100644
--- a/src/rebar_protobuffs_compiler.erl
+++ b/src/rebar_protobuffs_compiler.erl
@@ -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 ->
diff --git a/src/rebar_qc.erl b/src/rebar_qc.erl
index e08833b..2c565f1 100644
--- a/src/rebar_qc.erl
+++ b/src/rebar_qc.erl
@@ -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) ->
diff --git a/src/rebar_templater.erl b/src/rebar_templater.erl
index 4abf404..dd89f3a 100644
--- a/src/rebar_templater.erl
+++ b/src/rebar_templater.erl
@@ -41,7 +41,7 @@
-include("rebar.hrl").
--define(TEMPLATE_RE, ".*\\.template\$").
+-define(TEMPLATE_RE, "^[^._].*\\.template\$").
%% ===================================================================
%% Public API