@@ -523,15 +523,21 @@ defmodule Mix.Tasks.Compile.ElixirTest do
523523
524524 test "recompiles files when lock changes" do
525525 in_fixture ( "no_mixfile" , fn ->
526+ Mix.ProjectStack . post_config (
527+ deps: [ { :git_repo , git: MixTest.Case . fixture_path ( "git_repo" ) } ]
528+ )
529+
526530 Mix.Project . push ( MixTest.Case.Sample )
527- Process . put ( { MixTest.Case.Sample , :application } , extra_applications: [ :logger ] )
528531
529532 File . write! ( "lib/a.ex" , """
530533 defmodule A do
531- _ = Logger.metadata( )
534+ _ = GitRepo.__info__(:module )
532535 end
533536 """ )
534537
538+ Mix.Task . run ( "deps.get" )
539+ Mix.Task . run ( "loadpaths" )
540+
535541 assert Mix.Tasks.Compile.Elixir . run ( [ "--verbose" ] ) == { :ok , [ ] }
536542 assert_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
537543 assert_received { :mix_shell , :info , [ "Compiled lib/b.ex" ] }
@@ -548,7 +554,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
548554
549555 # Adding to lock recompiles
550556 File . write! ( "mix.lock" , """
551- %{"logger ": :unused}
557+ %{"git_repo ": :unused}
552558 """ )
553559
554560 assert recompile . ( ) == { :ok , [ ] }
@@ -558,32 +564,32 @@ defmodule Mix.Tasks.Compile.ElixirTest do
558564
559565 # Changing lock recompiles
560566 File . write! ( "mix.lock" , """
561- %{"logger ": :another}
567+ %{"git_repo ": :another}
562568 """ )
563569
564570 assert recompile . ( ) == { :ok , [ ] }
565571 assert_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
566572 refute_received { :mix_shell , :info , [ "Compiled lib/b.ex" ] }
567573 assert mtime ( "_build/dev/lib/sample/.mix/compile.elixir" ) > @ old_time
568574
569- # Removing a lock recompiles
575+ # Adding to the lock does not recompile
570576 File . write! ( "mix.lock" , """
571- %{}
577+ %{"git_repo": :another, "unknown": :unknown }
572578 """ )
573579
574580 assert recompile . ( ) == { :ok , [ ] }
575- assert_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
581+ refute_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
576582 refute_received { :mix_shell , :info , [ "Compiled lib/b.ex" ] }
577- assert mtime ( "_build/dev/lib/sample/.mix/compile.elixir" ) > @ old_time
578583
579- # Adding an unknown dependency returns :ok but does not recompile
584+ # Removing recompiles
580585 File . write! ( "mix.lock" , """
581586 %{"unknown": :unknown}
582587 """ )
583588
584589 assert recompile . ( ) == { :ok , [ ] }
585- refute_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
590+ assert_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
586591 refute_received { :mix_shell , :info , [ "Compiled lib/b.ex" ] }
592+ assert mtime ( "_build/dev/lib/sample/.mix/compile.elixir" ) > @ old_time
587593 end )
588594 end
589595
@@ -751,6 +757,67 @@ defmodule Mix.Tasks.Compile.ElixirTest do
751757 purge ( [ GitRepo , GitRepo.MixProject ] )
752758 end
753759
760+ test "does not recompile files from path dependencies when non-child dependency change" do
761+ # Get Git repo first revision
762+ [ last , first | _ ] = get_git_repo_revs ( "git_repo" )
763+
764+ in_fixture ( "no_mixfile" , fn ->
765+ File . mkdir_p! ( "path_dep/lib" )
766+
767+ File . write! ( "path_dep/mix.exs" , """
768+ defmodule PathDep.MixProject do
769+ use Mix.Project
770+
771+ def project do
772+ [
773+ app: :path_dep,
774+ version: "0.1.0",
775+ deps: []
776+ ]
777+ end
778+ end
779+ """ )
780+
781+ File . write! ( "path_dep/lib/path_dep_hello.ex" , """
782+ defmodule PathDep.Hello do
783+ end
784+ """ )
785+
786+ File . write! ( "lib/a.ex" , """
787+ defmodule A do
788+ PathDep.Hello.__info__(:module)
789+ end
790+ """ )
791+
792+ File . write! ( "mix.lock" , inspect ( % { git_repo: { :git , fixture_path ( "git_repo" ) , first , [ ] } } ) )
793+
794+ Mix.ProjectStack . post_config (
795+ deps: [
796+ { :git_repo , "0.1.0" , git: fixture_path ( "git_repo" ) } ,
797+ { :path_dep , path: "path_dep" }
798+ ]
799+ )
800+
801+ Mix.Project . push ( MixTest.Case.Sample )
802+ Mix.Task . run ( "deps.get" )
803+ Mix.Task . run ( "compile" , [ "--verbose" ] )
804+ assert_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
805+
806+ Mix.Task . clear ( )
807+ Mix.State . clear_cache ( )
808+ purge ( [ GitRepo.MixProject , PathDep.MixProject ] )
809+
810+ ensure_touched ( "mix.lock" , "_build/dev/lib/sample/.mix/compile.lock" )
811+ Mix.Task . run ( "deps.update" , [ "--all" ] )
812+ assert File . read! ( "mix.lock" ) =~ last
813+
814+ Mix.Task . run ( "compile" , [ "--verbose" ] )
815+ refute_received { :mix_shell , :info , [ "Compiled lib/a.ex" ] }
816+ end )
817+ after
818+ purge ( [ GitRepo , GitRepo.MixProject , PathDep.MixProject ] )
819+ end
820+
754821 test "does not write BEAM files down on failures" do
755822 in_tmp ( "blank" , fn ->
756823 Mix.Project . push ( MixTest.Case.Sample )
0 commit comments