@@ -29,7 +29,7 @@ defmodule Mix.CLI do
2929 load_mix_exs ( )
3030 { task , args } = get_task ( args )
3131 ensure_hex ( task )
32- change_env ( task )
32+ maybe_change_env_and_target ( task )
3333 run_task ( task , args )
3434 end
3535
@@ -104,26 +104,39 @@ defmodule Mix.CLI do
104104 end
105105 end
106106
107- defp change_env ( task ) do
108- if env = preferred_cli_env ( task ) do
109- Mix . env ( env )
107+ defp maybe_change_env_and_target ( task ) do
108+ task = String . to_atom ( task )
109+ config = Mix.Project . config ( )
110110
111- if project = Mix.Project . pop ( ) do
112- % { name: name , file: file } = project
113- Mix.Project . push ( name , file )
114- end
111+ env = preferred_cli_env ( task , config )
112+ target = preferred_cli_target ( task , config )
113+ env && Mix . env ( env )
114+ target && Mix . target ( target )
115+
116+ if env || target do
117+ reload_project ( )
118+ end
119+ end
120+
121+ defp reload_project ( ) do
122+ if project = Mix.Project . pop ( ) do
123+ % { name: name , file: file } = project
124+ Mix.Project . push ( name , file )
115125 end
116126 end
117127
118- defp preferred_cli_env ( task ) do
128+ defp preferred_cli_env ( task , config ) do
119129 if System . get_env ( "MIX_ENV" ) do
120130 nil
121131 else
122- task = String . to_atom ( task )
123- Mix.Project . config ( ) [ :preferred_cli_env ] [ task ] || Mix.Task . preferred_cli_env ( task )
132+ config [ :preferred_cli_env ] [ task ] || Mix.Task . preferred_cli_env ( task )
124133 end
125134 end
126135
136+ defp preferred_cli_target ( task , config ) do
137+ config [ :preferred_cli_target ] [ task ]
138+ end
139+
127140 defp load_dot_config do
128141 path = Path . join ( Mix.Utils . mix_config ( ) , "config.exs" )
129142
0 commit comments