Skip to content

Commit 582c4f3

Browse files
committed
Simplify use_stdio and remove output in test
1 parent 4e478b3 commit 582c4f3

File tree

2 files changed

+26
-43
lines changed

2 files changed

+26
-43
lines changed

lib/elixir/lib/system.ex

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,8 +1118,10 @@ defmodule System do
11181118
end
11191119

11201120
defp do_cmd(port_init, base_opts, opts) do
1121+
{use_stdio?, opts} = Keyword.pop(opts, :use_stdio, true)
1122+
11211123
{into, line, opts} =
1122-
cmd_opts(opts, [:use_stdio, :exit_status, :binary, :hide] ++ base_opts, "", false)
1124+
cmd_opts(opts, [:exit_status, :binary, :hide] ++ base_opts, "", false, use_stdio?)
11231125

11241126
{initial, fun} = Collectable.into(into)
11251127

@@ -1168,46 +1170,40 @@ defmodule System do
11681170
end
11691171
end
11701172

1171-
defp cmd_opts([{:into, any} | t], opts, _into, line),
1172-
do: cmd_opts(t, opts, any, line)
1173-
1174-
defp cmd_opts([{:cd, bin} | t], opts, into, line) when is_binary(bin),
1175-
do: cmd_opts(t, [{:cd, bin} | opts], into, line)
1173+
defp cmd_opts([{:into, any} | t], opts, _into, line, stdio?),
1174+
do: cmd_opts(t, opts, any, line, stdio?)
11761175

1177-
defp cmd_opts([{:arg0, bin} | t], opts, into, line) when is_binary(bin),
1178-
do: cmd_opts(t, [{:arg0, bin} | opts], into, line)
1176+
defp cmd_opts([{:cd, bin} | t], opts, into, line, stdio?) when is_binary(bin),
1177+
do: cmd_opts(t, [{:cd, bin} | opts], into, line, stdio?)
11791178

1180-
defp cmd_opts([{:stderr_to_stdout, true} | t], opts, into, line),
1181-
do: cmd_opts(t, [:stderr_to_stdout | opts], into, line)
1179+
defp cmd_opts([{:arg0, bin} | t], opts, into, line, stdio?) when is_binary(bin),
1180+
do: cmd_opts(t, [{:arg0, bin} | opts], into, line, stdio?)
11821181

1183-
defp cmd_opts([{:stderr_to_stdout, false} | t], opts, into, line),
1184-
do: cmd_opts(t, opts, into, line)
1182+
defp cmd_opts([{:stderr_to_stdout, true} | t], opts, into, line, true),
1183+
do: cmd_opts(t, [:stderr_to_stdout | opts], into, line, true)
11851184

1186-
defp cmd_opts([{:use_stdio, false} | t], opts, into, line),
1187-
do: cmd_opts(t, [:nouse_stdio | List.delete(opts, :use_stdio)], into, line)
1185+
defp cmd_opts([{:stderr_to_stdout, true} | _], _opts, _into, _line, false),
1186+
do: raise(ArgumentError, "cannot use \"stderr_to_stdout: true\" and \"use_stdio: false\"")
11881187

1189-
# use_stdio is true by default, do nothing but match it
1190-
defp cmd_opts([{:use_stdio, true} | t], opts, into, line),
1191-
do: cmd_opts(t, opts, into, line)
1188+
defp cmd_opts([{:stderr_to_stdout, false} | t], opts, into, line, stdio?),
1189+
do: cmd_opts(t, opts, into, line, stdio?)
11921190

1193-
defp cmd_opts([{:parallelism, bool} | t], opts, into, line) when is_boolean(bool),
1194-
do: cmd_opts(t, [{:parallelism, bool} | opts], into, line)
1191+
defp cmd_opts([{:parallelism, bool} | t], opts, into, line, stdio?) when is_boolean(bool),
1192+
do: cmd_opts(t, [{:parallelism, bool} | opts], into, line, stdio?)
11951193

1196-
defp cmd_opts([{:env, enum} | t], opts, into, line),
1197-
do: cmd_opts(t, [{:env, validate_env(enum)} | opts], into, line)
1194+
defp cmd_opts([{:env, enum} | t], opts, into, line, stdio?),
1195+
do: cmd_opts(t, [{:env, validate_env(enum)} | opts], into, line, stdio?)
11981196

1199-
defp cmd_opts([{:lines, max_line_length} | t], opts, into, _line)
1197+
defp cmd_opts([{:lines, max_line_length} | t], opts, into, _line, stdio?)
12001198
when is_integer(max_line_length) and max_line_length > 0,
1201-
do: cmd_opts(t, [{:line, max_line_length} | opts], into, true)
1199+
do: cmd_opts(t, [{:line, max_line_length} | opts], into, true, stdio?)
12021200

1203-
defp cmd_opts([{key, val} | _], _opts, _into, _line),
1201+
defp cmd_opts([{key, val} | _], _opts, _into, _line, _stdio?),
12041202
do: raise(ArgumentError, "invalid option #{inspect(key)} with value #{inspect(val)}")
12051203

1206-
defp cmd_opts([], opts, into, line) do
1207-
if :stderr_to_stdout in opts and :nouse_stdio in opts,
1208-
do: raise(ArgumentError, "cannot use `stderr_to_stdout: true` and `use_stdio: false`")
1209-
1210-
{into, line, opts}
1204+
defp cmd_opts([], opts, into, line, stdio?) do
1205+
opt = if stdio?, do: :use_stdio, else: :nouse_stdio
1206+
{into, line, [opt | opts]}
12111207
end
12121208

12131209
defp validate_env(enum) do

lib/elixir/test/elixir/system_test.exs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -186,22 +186,13 @@ defmodule SystemTest do
186186
use_stdio: false
187187
]
188188

189-
message = ~r"cannot use `stderr_to_stdout: true` and `use_stdio: false`"
189+
message = ~r"cannot use \"stderr_to_stdout: true\" and \"use_stdio: false\""
190190

191191
assert_raise ArgumentError, message, fn ->
192192
System.cmd("echo", ["hello"], opts)
193193
end
194194
end
195195

196-
test "cmd/3 (`use_stdio: false`)" do
197-
opts = [
198-
into: [],
199-
use_stdio: false
200-
]
201-
202-
assert {[], 0} = System.cmd("echo", ["hello"], opts)
203-
end
204-
205196
test "cmd/3 by line" do
206197
assert {["hello", "world"], 0} =
207198
System.cmd("echo", ["hello\nworld"], into: [], lines: 1024)
@@ -263,10 +254,6 @@ defmodule SystemTest do
263254

264255
assert {["bar\n"], 0} = System.shell("echo $foo", opts)
265256
end
266-
267-
test "shell/2 (non-interactive)" do
268-
assert {[], 0} = System.shell("echo hello", into: [], use_stdio: false)
269-
end
270257
end
271258

272259
@tag :unix

0 commit comments

Comments
 (0)