Skip to content

Commit 9793caa

Browse files
author
José Valim
committed
Ensure we automatically load deps on compile
1 parent 0792fe2 commit 9793caa

File tree

6 files changed

+36
-7
lines changed

6 files changed

+36
-7
lines changed

lib/mix/lib/mix/tasks/deps.check.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ defmodule Mix.Tasks.Deps.Check do
8383
to_prune = Enum.reduce(all, paths, &(&2 -- Mix.Dep.load_paths(&1)))
8484

8585
Enum.map(to_prune, fn path ->
86-
# path may not be in code path
86+
# Path may not be in code path
8787
_ = Code.delete_path(path)
8888
File.rm_rf!(path |> Path.dirname)
8989
end)

lib/mix/lib/mix/tasks/deps.compile.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ defmodule Mix.Tasks.Deps.Compile do
2929

3030
def run(args) do
3131
Mix.Project.get!
32+
Mix.Task.run "deps.loadpaths"
33+
3234
case OptionParser.parse(args) do
3335
{_, [], _} ->
3436
compile(Enum.filter(loaded(env: Mix.env), &compilable?/1))
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
defmodule Mix.Tasks.Deps.Loadpaths do
2+
use Mix.Task
3+
4+
@moduledoc """
5+
Loads the available dependencies paths.
6+
"""
7+
8+
def run(_) do
9+
config = Mix.Project.config
10+
Mix.Project.build_path(config)
11+
|> Path.join("lib/*/ebin")
12+
|> Path.wildcard
13+
|> List.delete(config[:app] && Mix.Project.compile_path(config))
14+
|> Enum.each(&Code.prepend_path/1)
15+
end
16+
end

lib/mix/lib/mix/tasks/loadpaths.ex

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,12 @@ defmodule Mix.Tasks.Loadpaths do
4747
end
4848
end
4949

50-
defp load_deps(config, args) do
50+
defp load_deps(_config, args) do
5151
unless "--no-deps-check" in args do
5252
Mix.Task.run "deps.check", args
5353
end
5454

55-
Mix.Project.build_path(config)
56-
|> Path.join("lib/*/ebin")
57-
|> Path.wildcard
58-
|> List.delete(config[:app] && Mix.Project.compile_path(config))
59-
|> Enum.each(&Code.prepend_path/1)
55+
Mix.Task.run "deps.loadpaths"
6056
end
6157

6258
defp load_project(config, _args) do

lib/mix/test/mix/tasks/deps.git_test.exs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ defmodule Mix.Tasks.DepsGitTest do
103103
Mix.Tasks.Deps.Update.run ["deps_on_git_repo"]
104104
assert File.exists?("deps/deps_on_git_repo/.fetch")
105105
assert File.exists?("deps/git_repo/.fetch")
106+
107+
# Compile git repo but unload it so...
108+
Mix.Tasks.Deps.Compile.run ["git_repo"]
109+
assert File.exists?("_build/dev/lib/git_repo/ebin")
110+
Code.delete_path("_build/dev/lib/git_repo/ebin")
111+
112+
# Deps on git repo loads it automatically on compile.
113+
Mix.Task.reenable "deps.loadpaths"
114+
Mix.Tasks.Deps.Compile.run ["deps_on_git_repo"]
115+
assert File.exists?("_build/dev/lib/deps_on_git_repo/ebin")
106116
end
107117
after
108118
purge [GitRepo, GitRepo.Mix]

lib/mix/test/test_helper.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ unless File.dir?(target) do
203203
end
204204
"""
205205

206+
File.write! Path.join(target, "lib/deps_on_git_repo.ex"), """
207+
## Auto-generated fixture
208+
GitRepo.hello
209+
"""
210+
206211
File.cd! target, fn ->
207212
System.cmd("git", ~w[init])
208213
System.cmd("git", ~w[config user.email "[email protected]"])

0 commit comments

Comments
 (0)