From ec007d720acc85ca0de9c8142103d11ddc545893 Mon Sep 17 00:00:00 2001 From: Andrea Leopardi Date: Sun, 20 Nov 2016 18:57:46 +0100 Subject: [PATCH 1/3] Improve options validation in Mix.Tasks.Compile.Elixir --- lib/mix/lib/mix/tasks/compile.elixir.ex | 8 ++++++++ lib/mix/test/mix/tasks/compile.elixir_test.exs | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/mix/lib/mix/tasks/compile.elixir.ex b/lib/mix/lib/mix/tasks/compile.elixir.ex index 492bf80a502..ffea0bbb1a0 100644 --- a/lib/mix/lib/mix/tasks/compile.elixir.ex +++ b/lib/mix/lib/mix/tasks/compile.elixir.ex @@ -54,6 +54,8 @@ defmodule Mix.Tasks.Compile.Elixir do dest = Mix.Project.compile_path(project) srcs = project[:elixirc_paths] + assert_valid_elixirc_paths(srcs) + manifest = manifest() configs = Mix.Project.config_files ++ Mix.Tasks.Compile.Erlang.manifests force = opts[:force] || Mix.Utils.stale?(configs, [manifest]) @@ -74,4 +76,10 @@ defmodule Mix.Tasks.Compile.Elixir do dest = Mix.Project.compile_path Mix.Compilers.Elixir.clean(manifest(), dest) end + + defp assert_valid_elixirc_paths(paths) do + unless is_list(paths) do + Mix.raise ":elixirc_paths should be a list of paths, got: #{inspect(paths)}" + end + end end diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs index dfb00c1a02d..6eaa31c4dc5 100644 --- a/lib/mix/test/mix/tasks/compile.elixir_test.exs +++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs @@ -273,4 +273,17 @@ defmodule Mix.Tasks.Compile.ElixirTest do refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]} end end + + test "options returned from project/0 are validated" do + Mix.Project.pop + Mix.ProjectStack.post_config [elixirc_paths: :not_a_path] + Mix.Project.push MixTest.Case.Sample + + in_fixture "no_mixfile", fn -> + message = ":elixirc_paths should be a list of paths, got: :not_a_path" + assert_raise Mix.Error, message, fn -> + Mix.Tasks.Compile.Elixir.run([]) + end + end + end end From eef35a7cadc037c2fb53d19738e4d111ea76e9f8 Mon Sep 17 00:00:00 2001 From: Andrea Leopardi Date: Mon, 21 Nov 2016 02:24:31 +0100 Subject: [PATCH 2/3] Remove ausiliary function, it's not needed --- lib/mix/lib/mix/tasks/compile.elixir.ex | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/mix/lib/mix/tasks/compile.elixir.ex b/lib/mix/lib/mix/tasks/compile.elixir.ex index ffea0bbb1a0..48cee22767b 100644 --- a/lib/mix/lib/mix/tasks/compile.elixir.ex +++ b/lib/mix/lib/mix/tasks/compile.elixir.ex @@ -54,7 +54,9 @@ defmodule Mix.Tasks.Compile.Elixir do dest = Mix.Project.compile_path(project) srcs = project[:elixirc_paths] - assert_valid_elixirc_paths(srcs) + unless is_list(srcs) do + Mix.raise ":elixirc_paths should be a list of paths, got: #{inspect(srcs)}" + end manifest = manifest() configs = Mix.Project.config_files ++ Mix.Tasks.Compile.Erlang.manifests @@ -76,10 +78,4 @@ defmodule Mix.Tasks.Compile.Elixir do dest = Mix.Project.compile_path Mix.Compilers.Elixir.clean(manifest(), dest) end - - defp assert_valid_elixirc_paths(paths) do - unless is_list(paths) do - Mix.raise ":elixirc_paths should be a list of paths, got: #{inspect(paths)}" - end - end end From 20223ecf28338dbbc2d74cc65ad339ec4d03cacc Mon Sep 17 00:00:00 2001 From: Andrea Leopardi Date: Mon, 21 Nov 2016 02:25:29 +0100 Subject: [PATCH 3/3] Remove test to avoid bloating --- lib/mix/test/mix/tasks/compile.elixir_test.exs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs index 6eaa31c4dc5..dfb00c1a02d 100644 --- a/lib/mix/test/mix/tasks/compile.elixir_test.exs +++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs @@ -273,17 +273,4 @@ defmodule Mix.Tasks.Compile.ElixirTest do refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]} end end - - test "options returned from project/0 are validated" do - Mix.Project.pop - Mix.ProjectStack.post_config [elixirc_paths: :not_a_path] - Mix.Project.push MixTest.Case.Sample - - in_fixture "no_mixfile", fn -> - message = ":elixirc_paths should be a list of paths, got: :not_a_path" - assert_raise Mix.Error, message, fn -> - Mix.Tasks.Compile.Elixir.run([]) - end - end - end end