@@ -33,7 +33,7 @@ defmodule Mix.Tasks.Deps.Compile do
33
33
import Mix.Dep , only: [ loaded: 1 , available?: 1 , loaded_by_name: 2 ,
34
34
make?: 1 , mix?: 1 ]
35
35
36
- @ switches [ include_children: :boolean ]
36
+ @ switches [ include_children: :boolean , force: :boolean ]
37
37
38
38
@ spec run ( OptionParser . argv ) :: :ok
39
39
def run ( args ) do
@@ -44,18 +44,18 @@ defmodule Mix.Tasks.Deps.Compile do
44
44
Mix.Project . get!
45
45
46
46
case OptionParser . parse ( args , switches: @ switches ) do
47
- { _ , [ ] , _ } ->
47
+ { opts , [ ] , _ } ->
48
48
# Because this command may be invoked explicitly with
49
49
# deps.compile, we simply try to compile any available
50
50
# dependency.
51
- compile ( Enum . filter ( loaded ( env: Mix . env ) , & available? / 1 ) )
51
+ compile ( Enum . filter ( loaded ( env: Mix . env ) , & available? / 1 ) , opts )
52
52
{ opts , tail , _ } ->
53
- compile ( loaded_by_name ( tail , [ env: Mix . env ] ++ opts ) )
53
+ compile ( loaded_by_name ( tail , [ env: Mix . env ] ++ opts ) , opts )
54
54
end
55
55
end
56
56
57
57
@ doc false
58
- def compile ( deps ) do
58
+ def compile ( deps , options \\ [ ] ) do
59
59
shell = Mix . shell
60
60
config = Mix.Project . deps_config
61
61
@@ -65,6 +65,8 @@ defmodule Mix.Tasks.Deps.Compile do
65
65
Enum . map ( deps , fn % Mix.Dep { app: app , status: status , opts: opts , scm: scm } = dep ->
66
66
check_unavailable! ( app , status )
67
67
68
+ clean ( app , options )
69
+
68
70
compiled? = cond do
69
71
not is_nil ( opts [ :compile ] ) ->
70
72
do_compile dep , config
@@ -93,6 +95,12 @@ defmodule Mix.Tasks.Deps.Compile do
93
95
if true in compiled , do: Mix.Dep.Lock . touch_manifest , else: :ok
94
96
end
95
97
98
+ defp clean ( app , opts ) do
99
+ if Keyword . get ( opts , :force , false ) do
100
+ File . rm_rf! Path . join [ Mix.Project . build_path , "lib" , Atom . to_string ( app ) ]
101
+ end
102
+ end
103
+
96
104
defp touch_fetchable ( scm , path ) do
97
105
if scm . fetchable? do
98
106
File . mkdir_p! ( path )
0 commit comments