@@ -76,6 +76,7 @@ defmodule Mix.Shell do
76
76
end
77
77
78
78
@ doc false
79
+ # TODO: Deprecate on Mix v1.8
79
80
def cmd ( command , options , callback ) when is_function ( callback , 1 ) do
80
81
callback =
81
82
if Keyword . get ( options , :quiet , false ) do
@@ -84,19 +85,14 @@ defmodule Mix.Shell do
84
85
callback
85
86
end
86
87
87
- fun =
88
- fn
89
- :ok , { :cont , data } ->
90
- callback . ( data )
91
- :ok
92
- :ok , _ ->
93
- :ok
94
- end
88
+ fun = fn
89
+ _ , { :cont , data } -> callback . ( data )
90
+ _ , _ -> :ok
91
+ end
95
92
96
- cmd ( command , [ into: { :ok , fun } ] ++ options )
93
+ cmd ( command , options , :ok , fun )
97
94
end
98
95
99
- # TODO: Deprecate on Mix v1.8
100
96
def cmd ( command , callback ) when is_function ( callback , 1 ) do
101
97
cmd ( command , [ ] , callback )
102
98
end
@@ -111,6 +107,11 @@ defmodule Mix.Shell do
111
107
"""
112
108
def cmd ( command , options ) when is_binary ( command ) and is_list ( options ) do
113
109
collectable = Keyword . get ( options , :into , "" )
110
+ { acc , callback } = Collectable . into ( collectable )
111
+ cmd ( command , options , acc , callback )
112
+ end
113
+
114
+ defp cmd ( command , options , acc , callback ) do
114
115
env = validate_env ( Keyword . get ( options , :env , [ ] ) )
115
116
116
117
args =
@@ -123,14 +124,13 @@ defmodule Mix.Shell do
123
124
port = Port . open ( { :spawn , shell_command ( command ) } ,
124
125
[ :stream , :binary , :exit_status , :hide , :use_stdio , { :env , env } | args ] )
125
126
126
- { acc , callback } = Collectable . into ( collectable )
127
- do_cmd ( port , acc , callback )
127
+ port_read ( port , acc , callback )
128
128
end
129
129
130
- defp do_cmd ( port , acc , callback ) do
130
+ defp port_read ( port , acc , callback ) do
131
131
receive do
132
132
{ ^ port , { :data , data } } ->
133
- do_cmd ( port , callback . ( acc , { :cont , data } ) , callback )
133
+ port_read ( port , callback . ( acc , { :cont , data } ) , callback )
134
134
{ ^ port , { :exit_status , status } } ->
135
135
callback . ( acc , :done )
136
136
status
0 commit comments