@@ -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
0 commit comments