Skip to content

Commit 3d08d24

Browse files
author
José Valim
committed
Fetch new dependencies on mix deps.update, closes #7194
1 parent 301e0f6 commit 3d08d24

File tree

4 files changed

+58
-14
lines changed

4 files changed

+58
-14
lines changed

lib/mix/lib/mix/dep/fetcher.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ defmodule Mix.Dep.Fetcher do
3636

3737
fn %Mix.Dep{app: app} = dep, acc, new_lock ->
3838
# Only fetch if dependency is in given names or if lock has
39-
# been changed for dependency by remote converger
40-
if app in names or lock[app] != new_lock[app] do
39+
# been changed for dependency by remote converger or it is new
40+
if app in names or lock[app] != new_lock[app] or is_nil(lock[app]) do
4141
do_fetch(dep, acc, new_lock)
4242
else
4343
{dep, acc, new_lock}

lib/mix/lib/mix/dep/loader.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ defmodule Mix.Dep.Loader do
6464
"""
6565
def load(%Mix.Dep{manager: manager, scm: scm, opts: opts} = dep, children) do
6666
manager = scm_manager(scm, opts) || manager || infer_manager(opts[:dest])
67-
6867
dep = %{dep | manager: manager, status: scm_status(scm, opts)}
6968

7069
{dep, children} =

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

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ defmodule Mix.Tasks.DepsGitTest do
231231
Mix.Project.push(GitApp)
232232

233233
# Get Git repo first revision
234-
[last, first | _] = get_git_repo_revs()
234+
[last, first | _] = get_git_repo_revs("git_repo")
235235

236236
in_fixture "no_mixfile", fn ->
237237
Mix.Dep.Lock.write(%{git_repo: {:git, fixture_path("git_repo"), first, []}})
@@ -257,7 +257,7 @@ defmodule Mix.Tasks.DepsGitTest do
257257

258258
test "updates the repo when the lock updates" do
259259
Mix.Project.push(GitApp)
260-
[last, first | _] = get_git_repo_revs()
260+
[last, first | _] = get_git_repo_revs("git_repo")
261261

262262
in_fixture "no_mixfile", fn ->
263263
Mix.Dep.Lock.write(%{git_repo: {:git, fixture_path("git_repo"), first, []}})
@@ -349,7 +349,7 @@ defmodule Mix.Tasks.DepsGitTest do
349349

350350
test "updates the repo and the lock when the mixfile updates" do
351351
Mix.Project.push(GitApp)
352-
[last, first | _] = get_git_repo_revs()
352+
[last, first | _] = get_git_repo_revs("git_repo")
353353

354354
in_fixture "no_mixfile", fn ->
355355
# Move to the first version
@@ -382,6 +382,32 @@ defmodule Mix.Tasks.DepsGitTest do
382382
purge([GitRepo, GitRepo.MixProject])
383383
end
384384

385+
test "fetches children on updates" do
386+
Mix.Project.push(DepsOnGitApp)
387+
388+
# Get Git repo first revision
389+
[last, first | _] = get_git_repo_revs("deps_on_git_repo")
390+
391+
in_fixture "no_mixfile", fn ->
392+
Mix.Dep.Lock.write(%{deps_on_git_repo: {:git, fixture_path("deps_on_git_repo"), first, []}})
393+
394+
Mix.Tasks.Deps.Get.run([])
395+
assert File.exists?("deps/deps_on_git_repo/mix.exs")
396+
refute File.exists?("deps/git_repo/lib/git_repo.ex")
397+
assert File.read!("mix.lock") =~ first
398+
399+
Mix.Task.clear()
400+
Mix.ProjectStack.clear_cache()
401+
purge([DepsOnGitRepo.MixProject])
402+
403+
Mix.Tasks.Deps.Update.run(["deps_on_git_repo"])
404+
assert File.exists?("deps/git_repo/lib/git_repo.ex")
405+
assert File.read!("mix.lock") =~ last
406+
end
407+
after
408+
purge([GitRepo, GitRepo.MixProject])
409+
end
410+
385411
test "does not attempt to compile projects that could not be retrieved" do
386412
Mix.Project.push(GitErrorApp)
387413

@@ -394,7 +420,7 @@ defmodule Mix.Tasks.DepsGitTest do
394420

395421
test "does not load bad mixfiles on get" do
396422
Mix.Project.push(GitApp)
397-
[last, _, bad | _] = get_git_repo_revs()
423+
[last, _, bad | _] = get_git_repo_revs("git_repo")
398424

399425
in_fixture "no_mixfile", fn ->
400426
Mix.Dep.Lock.write(%{git_repo: {:git, fixture_path("git_repo"), bad, []}})
@@ -428,7 +454,7 @@ defmodule Mix.Tasks.DepsGitTest do
428454

429455
test "does not load bad mixfiles on update" do
430456
Mix.Project.push(GitApp)
431-
[last, _, bad | _] = get_git_repo_revs()
457+
[last, _, bad | _] = get_git_repo_revs("git_repo")
432458

433459
in_fixture "no_mixfile", fn ->
434460
Mix.Dep.Lock.write(%{git_repo: {:git, fixture_path("git_repo"), bad, []}})
@@ -448,8 +474,8 @@ defmodule Mix.Tasks.DepsGitTest do
448474
Mix.Project.push(name, file)
449475
end
450476

451-
defp get_git_repo_revs() do
452-
File.cd!(fixture_path("git_repo"), fn ->
477+
defp get_git_repo_revs(repo) do
478+
File.cd!(fixture_path(repo), fn ->
453479
Regex.split(~r(\r?\n), System.cmd("git", ["log", "--format=%H"]) |> elem(0))
454480
end)
455481
end

lib/mix/test/test_helper.exs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,28 @@ target = Path.expand("fixtures/deps_on_git_repo", __DIR__)
280280
unless File.dir?(target) do
281281
File.mkdir_p!(Path.join(target, "lib"))
282282

283+
File.write!(Path.join(target, "mix.exs"), """
284+
## Auto-generated fixture
285+
defmodule DepsOnGitRepo.MixProject do
286+
use Mix.Project
287+
288+
def project do
289+
[
290+
app: :deps_on_git_repo,
291+
version: "0.1.0",
292+
]
293+
end
294+
end
295+
""")
296+
297+
File.cd!(target, fn ->
298+
System.cmd("git", ~w[init])
299+
System.cmd("git", ~w[config user.email "[email protected]"])
300+
System.cmd("git", ~w[config user.name "mix-repo"])
301+
System.cmd("git", ~w[add .])
302+
System.cmd("git", ~w[commit -m without-dep])
303+
end)
304+
283305
File.write!(Path.join(target, "mix.exs"), """
284306
## Auto-generated fixture
285307
defmodule DepsOnGitRepo.MixProject do
@@ -303,11 +325,8 @@ unless File.dir?(target) do
303325
""")
304326

305327
File.cd!(target, fn ->
306-
System.cmd("git", ~w[init])
307-
System.cmd("git", ~w[config user.email "[email protected]"])
308-
System.cmd("git", ~w[config user.name "mix-repo"])
309328
System.cmd("git", ~w[add .])
310-
System.cmd("git", ~w[commit -m "ok"])
329+
System.cmd("git", ~w[commit -m with-dep])
311330
end)
312331
end
313332

0 commit comments

Comments
 (0)