@@ -5,114 +5,82 @@ defmodule Mix.Deps.Retriever do
5
5
@ moduledoc false
6
6
7
7
@ doc """
8
- Returns all dependencies for the current Mix.Project
8
+ Gets all direct children for the current Mix.Project
9
9
as a `Mix.Dep` record.
10
-
11
- ## Exceptions
12
-
13
- This function raises an exception in case the developer
14
- provides a dependency in the wrong format.
15
10
"""
16
- def all ( post_config // [ ] ) do
17
- { deps , _ } = all ( nil , children ( post_config ) , post_config , fn ( dep , acc ) -> { dep , acc } end )
18
- deps
11
+ def children ( post_config // [ ] ) do
12
+ mix_children ( post_config )
19
13
end
20
14
21
15
@ doc """
22
- Like `all/0` but takes a callback that is invoked for
23
- each dependency and must return an updated depedency
24
- in case some processing is done.
16
+ Gets all children for a given dependency.
25
17
"""
26
- def all ( rest , post_config // [ ] , callback ) do
27
- all ( rest , children ( post_config ) , post_config , callback )
28
- end
29
-
30
- defp all ( rest , childs , post_config , callback ) do
31
- Enum . map_reduce childs , rest , fn ( dep , rest ) ->
32
- { dep , rest } = callback . ( dep , rest )
33
-
34
- cond do
35
- Mix.Deps . available? ( dep ) and mixfile? ( dep ) ->
36
- Mix.Deps . in_dependency ( dep , post_config , fn project ->
37
- { deps , rest } = all ( rest , children ( post_config ) , post_config , callback )
38
-
39
- # We need to call with_mix_project once again
40
- # here in case the dependency was not available
41
- # the first time and the callback hook just
42
- # happened to fetch it.
43
- { with_mix_project ( dep , project ) . deps ( deps ) , rest }
44
- end )
45
-
46
- Mix.Deps . available? ( dep ) and rebarconfig? ( dep ) ->
47
- dep = rebar_dep ( dep )
48
-
49
- Mix.Deps . in_dependency ( dep , post_config , fn _ ->
50
- { deps , rest } = all ( rest , rebar_children ( "." ) , post_config , callback )
51
- { dep . deps ( deps ) , rest }
52
- end )
53
-
54
- true ->
55
- { dep , rest }
56
- end
18
+ def children ( dep , config ) do
19
+ cond do
20
+ Mix.Deps . available? ( dep ) and mixfile? ( dep ) ->
21
+ Mix.Deps . in_dependency ( dep , config , fn _ ->
22
+ mix_children ( config )
23
+ end )
24
+
25
+ Mix.Deps . available? ( dep ) and rebarconfig? ( dep ) ->
26
+ Mix.Deps . in_dependency ( dep , config , fn _ ->
27
+ rebar_children ( "." )
28
+ end )
29
+
30
+ true ->
31
+ [ ]
57
32
end
58
33
end
59
34
60
- @ doc """
61
- Gets all direct children for the current Mix.Project
62
- as a `Mix.Dep` record. Unlike with `all` the `deps`
63
- field is not populated.
64
- """
65
- def children ( post_config // [ ] ) do
66
- Mix.Project . recur ( post_config , fn _ ->
67
- ( Mix . project [ :deps ] || [ ] ) |> setup_deps
68
- end ) |> List . concat
69
- end
70
-
71
35
@ doc """
72
36
Receives a dependency and update its status.
73
37
"""
74
38
def update ( Mix.Dep [ scm : scm , app: app , requirement: req , opts: opts ] ) do
75
- with_scm_and_status ( { app , req , opts } , [ scm ] )
39
+ update ( { app , req , opts } , [ scm ] )
76
40
end
77
41
78
42
## Helpers
79
43
80
- defp rebar_children ( dir ) do
81
- Mix.Rebar . recur ( dir , fn config ->
82
- Mix.Rebar . deps ( config ) |> setup_deps
44
+ defp mix_children ( config ) do
45
+ scms = Mix.SCM . available
46
+ Mix.Project . recur ( config , fn _ ->
47
+ ( Mix . project [ :deps ] || [ ] ) |> Enum . map ( update ( & 1 , scms ) )
83
48
end ) |> List . concat
84
49
end
85
50
86
- defp setup_deps ( deps ) do
51
+ defp rebar_children ( dir ) do
87
52
scms = Mix.SCM . available
53
+ Mix.Rebar . recur ( dir , fn config ->
54
+ Mix.Rebar . deps ( config ) |> Enum . map ( update ( & 1 , scms ) )
55
+ end ) |> List . concat
56
+ end
88
57
89
- Enum . map deps , fn dep ->
90
- dep = with_scm_and_status ( dep , scms )
58
+ defp update ( tuple , scms ) do
59
+ dep = with_scm_and_status ( tuple , scms )
91
60
92
- cond do
93
- Mix.Deps . available? ( dep ) and mixfile? ( dep ) ->
94
- Mix.Deps . in_dependency ( dep , fn project ->
95
- with_mix_project ( dep , project )
96
- end )
61
+ cond do
62
+ Mix.Deps . available? ( dep ) and mixfile? ( dep ) ->
63
+ Mix.Deps . in_dependency ( dep , fn project ->
64
+ mix_dep ( dep , project )
65
+ end )
97
66
98
- Mix.Deps . available? ( dep ) and rebarconfig? ( dep ) ->
99
- rebar_dep ( dep )
67
+ Mix.Deps . available? ( dep ) and rebarconfig? ( dep ) ->
68
+ rebar_dep ( dep )
100
69
101
- true ->
102
- dep
103
- end
70
+ true ->
71
+ dep
104
72
end
105
73
end
106
74
107
- defp with_mix_project ( Mix.Dep [ manager : nil ] = dep , project ) do
75
+ defp mix_dep ( Mix.Dep [ manager : nil ] = dep , project ) do
108
76
if match? ( { :noappfile , _ } , dep . status ) and Mix.Project . umbrella? do
109
77
dep = dep . update_opts ( Keyword . put ( & 1 , :app , false ) )
110
78
. status ( { :ok , nil } )
111
79
end
112
80
dep . manager ( :mix ) . source ( project )
113
81
end
114
82
115
- defp with_mix_project ( dep , _project ) , do: dep
83
+ defp mix_dep ( dep , _project ) , do: dep
116
84
117
85
defp rebar_dep ( Mix.Dep [ manager : nil , opts: opts ] = dep ) do
118
86
config = Mix.Rebar . load_config ( opts [ :dest ] )
0 commit comments