diff --git a/lib/mix/lib/mix/tasks/cmd.ex b/lib/mix/lib/mix/tasks/cmd.ex index cfe43466db2..1af11727c27 100644 --- a/lib/mix/lib/mix/tasks/cmd.ex +++ b/lib/mix/lib/mix/tasks/cmd.ex @@ -57,6 +57,10 @@ defmodule Mix.Tasks.Cmd do def run(args) do {opts, args} = OptionParser.parse_head!(args, strict: @switches) + if args == [] do + Mix.raise("Expected at least one argument in mix cmd") + end + apps = opts |> Keyword.get_values(:app) @@ -69,7 +73,7 @@ defmodule Mix.Tasks.Cmd do if apps == [] or Mix.Project.config()[:app] in apps do cmd_opts = Keyword.take(opts, [:cd]) - case Mix.shell().cmd(Enum.join(args, " "), cmd_opts) do + case Mix.shell().cmd({hd(args), tl(args)}, cmd_opts) do 0 -> :ok status -> exit(status) end diff --git a/lib/mix/test/mix/tasks/cmd_test.exs b/lib/mix/test/mix/tasks/cmd_test.exs index be437998539..6c738f2120a 100644 --- a/lib/mix/test/mix/tasks/cmd_test.exs +++ b/lib/mix/test/mix/tasks/cmd_test.exs @@ -4,22 +4,20 @@ defmodule Mix.Tasks.CmdTest do use MixTest.Case test "can be called multiple times" do - nl = os_newline() Mix.Task.run("cmd", ["echo", "hello"]) - assert_received {:mix_shell, :run, ["hello" <> ^nl]} - Mix.Task.run("cmd", ["echo", "hello"]) - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} + Mix.Task.run("cmd", ["echo", "hello world"]) + assert_received {:mix_shell, :run, ["hello world\n"]} end test "runs the command for each app" do in_fixture("umbrella_dep/deps/umbrella", fn -> Mix.Project.in_project(:umbrella, ".", fn _ -> Mix.Task.run("cmd", ["echo", "hello"]) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} assert_received {:mix_shell, :info, ["==> foo"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} end) end) end @@ -29,11 +27,10 @@ defmodule Mix.Tasks.CmdTest do in_fixture("umbrella_dep/deps/umbrella", fn -> Mix.Project.in_project(:umbrella, ".", fn _ -> Mix.Task.run("cmd", ["--app", "bar", "echo", "hello"]) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} refute_received {:mix_shell, :info, ["==> foo"]} - refute_received {:mix_shell, :run, ["hello" <> ^nl]} + refute_received {:mix_shell, :run, ["hello\n"]} end) end) end) @@ -44,11 +41,10 @@ defmodule Mix.Tasks.CmdTest do in_fixture("umbrella_dep/deps/umbrella", fn -> Mix.Project.in_project(:umbrella, ".", fn _ -> Mix.Task.run("cmd", ["--app", "bar", "--app", "foo", "echo", "hello"]) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} assert_received {:mix_shell, :info, ["==> foo"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} end) end) end) diff --git a/lib/mix/test/mix/tasks/do_test.exs b/lib/mix/test/mix/tasks/do_test.exs index 00b89af4e9d..8dd83f8205c 100644 --- a/lib/mix/test/mix/tasks/do_test.exs +++ b/lib/mix/test/mix/tasks/do_test.exs @@ -52,11 +52,10 @@ defmodule Mix.Tasks.DoTest do Mix.Project.in_project(:umbrella, ".", fn _ -> Mix.Tasks.Do.run(~w(--app bar compile --list + cmd echo hello)) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} refute_received {:mix_shell, :info, ["==> foo"]} - refute_received {:mix_shell, :run, ["hello" <> ^nl]} + refute_received {:mix_shell, :run, ["hello\n"]} end) end) end @@ -66,11 +65,10 @@ defmodule Mix.Tasks.DoTest do Mix.Project.in_project(:umbrella, ".", fn _ -> Mix.Tasks.Do.run(~w(--app bar --app foo compile --list + cmd echo hello)) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} assert_received {:mix_shell, :info, ["==> foo"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} end) end) end @@ -105,13 +103,12 @@ defmodule Mix.Tasks.DoTest do Mix.Tasks.Do.run(["compile"]) Mix.Tasks.Do.run(["--app", "bar", "--app", "foo", "e", "+", "p", "Foo"]) - nl = os_newline() assert_received {:mix_shell, :info, ["==> bar"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} assert_received {:mix_shell, :info, ["[\"Foo\"]"]} assert_received {:mix_shell, :info, ["==> foo"]} - assert_received {:mix_shell, :run, ["hello" <> ^nl]} + assert_received {:mix_shell, :run, ["hello\n"]} assert_received {:mix_shell, :info, ["[\"Foo\"]"]} end) end)