summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2021-08-19 00:12:07 +0200
committerJosé Valim <jose.valim@dashbit.co>2021-08-19 00:12:07 +0200
commit3c1dbae1f0d60b1b95b4a31e2b88e512cb389050 (patch)
treeca3022e98ac0220dc5d929771584d9598b23a0a2
parent5735381f8237fc3dd5fed41415712a16c70eef71 (diff)
downloadelixir-jv-mix-exs-tracking.tar.gz
Split project_file out of config_mtime/config_filesjv-mix-exs-tracking
-rw-r--r--lib/mix/lib/mix/compilers/test.ex4
-rw-r--r--lib/mix/lib/mix/project.ex23
-rw-r--r--lib/mix/lib/mix/project_stack.ex25
-rw-r--r--lib/mix/lib/mix/tasks/compile.app.ex4
-rw-r--r--lib/mix/lib/mix/tasks/compile.elixir.ex7
-rw-r--r--lib/mix/lib/mix/tasks/compile.erlang.ex18
-rw-r--r--lib/mix/lib/mix/tasks/compile.protocols.ex2
-rw-r--r--lib/mix/test/mix/project_test.exs6
-rw-r--r--lib/mix/test/mix/tasks/compile.elixir_test.exs64
-rw-r--r--lib/mix/test/mix/tasks/format_test.exs12
-rw-r--r--lib/mix/test/mix/umbrella_test.exs17
11 files changed, 119 insertions, 63 deletions
diff --git a/lib/mix/lib/mix/compilers/test.ex b/lib/mix/lib/mix/compilers/test.ex
index c47d865c6..0bf09a90f 100644
--- a/lib/mix/lib/mix/compilers/test.ex
+++ b/lib/mix/lib/mix/compilers/test.ex
@@ -82,9 +82,9 @@ defmodule Mix.Compilers.Test do
removed =
for source(source: source) <- all_sources, source not in matched_test_files, do: source
- config_mtime = Mix.Project.config_mtime()
test_helpers = Enum.map(test_paths, &Path.join(&1, "test_helper.exs"))
- force = opts[:force] || Mix.Utils.stale?([config_mtime | test_helpers], [modified])
+ sources = [Mix.Project.config_mtime(), Mix.Project.project_file() | test_helpers]
+ force = opts[:force] || Mix.Utils.stale?(sources, [modified])
changed =
if force do
diff --git a/lib/mix/lib/mix/project.ex b/lib/mix/lib/mix/project.ex
index 0ab2d897b..e7c50ef0f 100644
--- a/lib/mix/lib/mix/project.ex
+++ b/lib/mix/lib/mix/project.ex
@@ -178,6 +178,15 @@ defmodule Mix.Project do
end
@doc """
+ Returns the path to the file that defines the current project.
+
+ The majority of the time, it will point to a `mix.exs` file.
+ Returns nil if not inside a project.
+ """
+ @spec project_file() :: binary | nil
+ defdelegate project_file(), to: Mix.ProjectStack
+
+ @doc """
Returns the project configuration.
If there is no project defined, it still returns a keyword
@@ -206,9 +215,13 @@ defmodule Mix.Project do
This function is usually used in compilation tasks to trigger
a full recompilation whenever such configuration files change.
- It returns the `mix.exs` file, the lock manifest, and all config
- files in the `config` directory that do not start with a leading
- period (for example, `.my_config.exs`).
+ It returns the lock manifest, and all config files in the `config`
+ directory that do not start with a leading period (for example,
+ `.my_config.exs`).
+
+ Note: before Elixir v1.13.0, the `mix.exs` file was also included
+ as a config file, but since then it has been moved to its own
+ function called `project_file/0`.
"""
@spec config_files() :: [Path.t()]
def config_files do
@@ -221,6 +234,10 @@ defmodule Mix.Project do
This function is usually used in compilation tasks to trigger
a full recompilation whenever such configuration files change.
For this reason, the mtime is cached to avoid file system lookups.
+
+ Note: before Elixir v1.13.0, the `mix.exs` file was also included
+ in the mtimes, but not anymore. You can compute its modification
+ date by calling `project_file/0`.
"""
@doc since: "1.7.0"
@spec config_mtime() :: posix_mtime when posix_mtime: integer()
diff --git a/lib/mix/lib/mix/project_stack.ex b/lib/mix/lib/mix/project_stack.ex
index 6b2b79414..d13b23e3b 100644
--- a/lib/mix/lib/mix/project_stack.ex
+++ b/lib/mix/lib/mix/project_stack.ex
@@ -76,17 +76,27 @@ defmodule Mix.ProjectStack do
end)
end
+ # We include the year 2000 as a minimum value in case we don't
+ # have any config files, which would return 0 and then trigger
+ # any stale sources.
+ @minimum_mtime 946_684_800
+
@spec config_mtime() :: integer
def config_mtime() do
mtime_or_files =
get_stack(fn
[%{config_mtime: nil, config_files: files} | _] -> files
[%{config_mtime: mtime} | _] -> mtime
- [] -> 0
+ [] -> @minimum_mtime
end)
if is_list(mtime_or_files) do
- mtime = mtime_or_files |> Enum.map(&Mix.Utils.last_modified/1) |> Enum.max()
+ mtime =
+ mtime_or_files
+ |> Enum.map(&Mix.Utils.last_modified/1)
+ |> Enum.max()
+ |> max(@minimum_mtime)
+
update_stack(fn [h | t] -> {mtime, [%{h | config_mtime: mtime} | t]} end)
else
mtime_or_files
@@ -119,6 +129,14 @@ defmodule Mix.ProjectStack do
end)
end
+ @spec project_file() :: binary | nil
+ def project_file() do
+ get_stack(fn
+ [h | _] -> h.file
+ [] -> nil
+ end)
+ end
+
@spec compile_env([term] | :unset) :: [term] | :unset
def compile_env(compile_env) do
update_stack(fn
@@ -214,7 +232,6 @@ defmodule Mix.ProjectStack do
# because we don't need to print anything unless another
# project takes ahold of the shell.
io_done? = stack == []
-
config = Keyword.merge(config, post_config)
manifest_file = Path.join(Mix.Project.manifest_path(config), @manifest)
parent_config = peek_config_files(config[:inherit_parent_config_files], stack)
@@ -227,7 +244,7 @@ defmodule Mix.ProjectStack do
recursing?: false,
io_done: io_done?,
config_apps: [],
- config_files: [manifest_file, file | parent_config],
+ config_files: [manifest_file | parent_config],
config_mtime: nil,
after_compiler: %{},
compile_env: :unset
diff --git a/lib/mix/lib/mix/tasks/compile.app.ex b/lib/mix/lib/mix/tasks/compile.app.ex
index 9fba92f13..8677cc325 100644
--- a/lib/mix/lib/mix/tasks/compile.app.ex
+++ b/lib/mix/lib/mix/tasks/compile.app.ex
@@ -139,12 +139,12 @@ defmodule Mix.Tasks.Compile.App do
modules = modules_from(Path.wildcard("#{path}/*.beam")) |> Enum.sort()
target = Path.join(path, "#{app}.app")
- source = Mix.Project.config_mtime()
+ sources = [Mix.Project.config_mtime(), Mix.Project.project_file()]
current_properties = current_app_properties(target)
compile_env = load_compile_env(current_properties)
- if opts[:force] || Mix.Utils.stale?([source], [target]) ||
+ if opts[:force] || Mix.Utils.stale?(sources, [target]) ||
app_changed?(current_properties, modules, compile_env) do
properties =
[
diff --git a/lib/mix/lib/mix/tasks/compile.elixir.ex b/lib/mix/lib/mix/tasks/compile.elixir.ex
index 8a053cb66..9d9a598b7 100644
--- a/lib/mix/lib/mix/tasks/compile.elixir.ex
+++ b/lib/mix/lib/mix/tasks/compile.elixir.ex
@@ -100,8 +100,13 @@ defmodule Mix.Tasks.Compile.Elixir do
Mix.raise(":elixirc_paths should be a list of paths, got: #{inspect(srcs)}")
end
+ configs = [
+ Mix.Project.config_mtime(),
+ Mix.Project.project_file()
+ | Mix.Tasks.Compile.Erlang.manifests()
+ ]
+
manifest = manifest()
- configs = [Mix.Project.config_mtime() | Mix.Tasks.Compile.Erlang.manifests()]
force = opts[:force] || Mix.Utils.stale?(configs, [manifest])
{tracers, opts} = pop_tracers(opts)
diff --git a/lib/mix/lib/mix/tasks/compile.erlang.ex b/lib/mix/lib/mix/tasks/compile.erlang.ex
index 237ff7afd..d6c2cb60d 100644
--- a/lib/mix/lib/mix/tasks/compile.erlang.ex
+++ b/lib/mix/lib/mix/tasks/compile.erlang.ex
@@ -10,16 +10,9 @@ defmodule Mix.Tasks.Compile.Erlang do
Compiles Erlang source files.
When this task runs, it will first check the modification times of
- all files to be compiled and if they haven't been
- changed since the last compilation, it will not compile
- them. If any of them have changed, it compiles
- everything.
-
- For this reason, the task touches your `:compile_path`
- directory and sets the modification time to the current
- time and date at the end of each compilation. You can
- force compilation regardless of modification times by passing
- the `--force` option.
+ all files to be compiled and if they haven't been changed since the
+ last compilation, it will not compile them. If any of them have changed,
+ it compiles everything.
## Command line options
@@ -44,9 +37,8 @@ defmodule Mix.Tasks.Compile.Erlang do
compiler. Defaults to `[]`.
For a complete list of options, see `:compile.file/2`.
-
- The option `:debug_info` is always added to the end of it. You can
- disable that using:
+ The option `:debug_info` is always added to the end of it.
+ You can disable that using:
erlc_options: [debug_info: false]
diff --git a/lib/mix/lib/mix/tasks/compile.protocols.ex b/lib/mix/lib/mix/tasks/compile.protocols.ex
index ffb52dedf..a552fe269 100644
--- a/lib/mix/lib/mix/tasks/compile.protocols.ex
+++ b/lib/mix/lib/mix/tasks/compile.protocols.ex
@@ -52,7 +52,7 @@ defmodule Mix.Tasks.Compile.Protocols do
protocols_and_impls = protocols_and_impls(config)
cond do
- opts[:force] || Mix.Utils.stale?([Mix.Project.config_mtime()], [manifest]) ->
+ opts[:force] || Mix.Utils.stale?([Mix.Project.project_file(), Mix.Project.config_mtime()], [manifest]) ->
clean()
paths = consolidation_paths()
diff --git a/lib/mix/test/mix/project_test.exs b/lib/mix/test/mix/project_test.exs
index cc65cbb31..ea23e9d6f 100644
--- a/lib/mix/test/mix/project_test.exs
+++ b/lib/mix/test/mix/project_test.exs
@@ -62,6 +62,12 @@ defmodule Mix.ProjectTest do
end
end
+ test "returns mix.exs path" do
+ assert Mix.Project.project_file() == nil
+ Mix.Project.push(SampleProject, "sample")
+ assert Mix.Project.project_file() == "sample"
+ end
+
test "push and pop projects" do
refute Mix.Project.get()
Mix.Project.push(SampleProject, "sample")
diff --git a/lib/mix/test/mix/tasks/compile.elixir_test.exs b/lib/mix/test/mix/tasks/compile.elixir_test.exs
index fa2a7a52e..9019b727e 100644
--- a/lib/mix/test/mix/tasks/compile.elixir_test.exs
+++ b/lib/mix/test/mix/tasks/compile.elixir_test.exs
@@ -5,11 +5,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
alias Mix.Task.Compiler.Diagnostic
use MixTest.Case
- setup do
- Mix.Project.push(MixTest.Case.Sample)
- :ok
- end
-
def trace(event, env) do
send(__MODULE__, {event, env})
:ok
@@ -18,7 +13,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
@elixir_otp_version {System.version(), :erlang.system_info(:otp_release)}
test "compiles a project without per environment build" do
- Mix.Project.pop()
Mix.ProjectStack.post_config(build_per_environment: false)
in_fixture("no_mixfile", fn ->
@@ -35,6 +29,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles a project with per environment build" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--verbose"])
assert File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
@@ -49,6 +44,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
Process.register(self(), __MODULE__)
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--tracer", "Mix.Tasks.Compile.ElixirTest"])
assert_received {{:on_module, _, :none}, %{module: A}}
assert_received {{:on_module, _, :none}, %{module: B}}
@@ -62,6 +58,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
Code.put_compiler_option(:tracers, [__MODULE__])
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run([])
assert_received {{:on_module, _, :none}, %{module: A}}
assert_received {{:on_module, _, :none}, %{module: B}}
@@ -72,6 +69,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "warns when Logger is used but not depended on" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
require Logger
@@ -96,6 +95,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not warn when __info__ is used but not depended on" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
require Logger
@@ -109,21 +110,21 @@ defmodule Mix.Tasks.Compile.ElixirTest do
end)
end
- test "recompiles module-application manifest if manifest is outdated" do
+ test "recompiles module-application manifest if manifest changes" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.Elixir.run(["--force"])
purge([A, B])
- mtime = {{1970, 1, 1}, {0, 0, 0}}
- File.touch!("_build/dev/lib/sample/.mix/compile.app_tracer", mtime)
-
+ File.rm!("_build/dev/lib/sample/.mix/compile.app_tracer")
Mix.Tasks.Compile.Elixir.run(["--force"])
- assert File.stat!("_build/dev/lib/sample/.mix/compile.app_tracer").mtime > mtime
+ assert File.exists?("_build/dev/lib/sample/.mix/compile.app_tracer")
end)
end
test "recompiles project if Elixir version changed" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.run([])
purge([A, B])
@@ -149,6 +150,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles project if scm changed" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
Mix.Tasks.Compile.run(["--verbose"])
purge([A, B])
@@ -170,6 +172,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not write BEAM files down on failures" do
in_tmp("blank", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.mkdir_p!("lib")
File.write!("lib/a.ex", "raise ~s(oops)")
@@ -183,6 +186,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "removes, purges and deletes old artifacts" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run([]) == {:ok, []}
assert File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
assert Code.ensure_loaded?(A)
@@ -197,6 +201,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles mtime changed files if content changed but not length" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -229,6 +234,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not recompile mtime changed but identical files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -259,6 +265,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does recompile a file restored after a compile error (and .beam file were deleted)" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
assert_received {:mix_shell, :info, ["Compiled lib/a.ex"]}
assert_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
@@ -294,6 +301,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles size changed files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
past = {{2010, 1, 1}, {0, 0, 0}}
File.touch!("lib/a.ex", past)
@@ -315,6 +323,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -334,6 +343,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules without beam files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/b.ex", """
defmodule B do
def a, do: A.__info__(:module)
@@ -360,6 +371,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed modules even on removal" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -380,6 +392,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles dependent changed files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
tmp = tmp_path("c.eex")
File.touch!("lib/a.eex")
@@ -404,7 +417,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
refute_received {:mix_shell, :info, ["Compiled lib/b.ex"]}
# Does not update on old existing resource
- File.touch!("lib/a.eex", {{2000, 1, 1}, {0, 0, 0}})
+ File.touch!("lib/a.eex", {{2010, 1, 1}, {0, 0, 0}})
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:noop, []}
Mix.shell().flush
purge([A, B])
@@ -421,6 +434,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with exports tracking" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
defstruct [:foo]
@@ -519,6 +534,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with async tracking" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
Kernel.ParallelCompiler.async(fn ->
defmodule A do
@@ -549,6 +566,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with multiple sources" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def one, do: 1
@@ -584,6 +603,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles with --force" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
purge([A, B])
@@ -598,6 +618,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "compiles files with autoload disabled" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
@compile {:autoload, false}
@@ -611,6 +633,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not recompile files that are empty or has no code" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.write!("lib/a.ex", "")
File.write!("lib/b.ex", "# Just a comment")
File.write!("lib/c.ex", "\n\n")
@@ -629,6 +652,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "recompiles modules with __mix_recompile__ check" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def __mix_recompile__?(), do: true
@@ -667,6 +692,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "does not treat remote typespecs as compile time dependencies" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/b.ex", """
defmodule B do
@type t :: A.t
@@ -690,6 +717,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "prints warnings from non-stale files with --all-warnings" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def my_fn(unused), do: :ok
@@ -720,6 +749,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
def my_fn(unused), do: :ok
@@ -747,6 +778,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics for external files" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
IO.warn "warning", [{nil, nil, 0, file: 'lib/foo.txt', line: 3}]
""")
@@ -767,6 +800,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns warning diagnostics for unused imports" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
import B
@@ -795,6 +830,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns error diagnostics", context do
in_tmp(context.test, fn ->
+ Mix.Project.push(MixTest.Case.Sample)
File.mkdir_p!("lib")
File.write!("lib/a.ex", """
@@ -821,6 +857,8 @@ defmodule Mix.Tasks.Compile.ElixirTest do
test "returns error diagnostics when deadlocked" do
in_fixture("no_mixfile", fn ->
+ Mix.Project.push(MixTest.Case.Sample)
+
File.write!("lib/a.ex", """
defmodule A do
B.__info__(:module)
@@ -849,8 +887,6 @@ defmodule Mix.Tasks.Compile.ElixirTest do
end
test "verify runtime dependent modules that haven't been compiled" do
- Mix.Project.pop()
-
in_fixture("no_mixfile", fn ->
Mix.Project.push(MixTest.Case.Sample)
diff --git a/lib/mix/test/mix/tasks/format_test.exs b/lib/mix/test/mix/tasks/format_test.exs
index d0afd4b56..bd9dc442c 100644
--- a/lib/mix/test/mix/tasks/format_test.exs
+++ b/lib/mix/test/mix/tasks/format_test.exs
@@ -49,9 +49,9 @@ defmodule Mix.Tasks.FormatTest do
foo(bar)
""")
- File.touch!("a.ex", {{2000, 1, 1}, {0, 0, 0}})
+ File.touch!("a.ex", {{2010, 1, 1}, {0, 0, 0}})
Mix.Tasks.Format.run(["a.ex"])
- assert File.stat!("a.ex").mtime == {{2000, 1, 1}, {0, 0, 0}}
+ assert File.stat!("a.ex").mtime == {{2010, 1, 1}, {0, 0, 0}}
end)
end
@@ -274,10 +274,10 @@ defmodule Mix.Tasks.FormatTest do
assert File.regular?(manifest_path)
# Let's check that the manifest gets updated if it's stale.
- File.touch!(manifest_path, {{1970, 1, 1}, {0, 0, 0}})
+ File.touch!(manifest_path, {{2010, 1, 1}, {0, 0, 0}})
Mix.Tasks.Format.run(["lib/a.ex"])
- assert File.stat!(manifest_path).mtime > {{1970, 1, 1}, {0, 0, 0}}
+ assert File.stat!(manifest_path).mtime > {{2010, 1, 1}, {0, 0, 0}}
end)
end
@@ -309,13 +309,13 @@ defmodule Mix.Tasks.FormatTest do
assert File.regular?(manifest_path)
# Let's check that the manifest gets updated if it's stale.
- File.touch!(manifest_path, {{1970, 1, 1}, {0, 0, 0}})
+ File.touch!(manifest_path, {{2010, 1, 1}, {0, 0, 0}})
formatter_opts = Mix.Tasks.Format.formatter_opts_for_file("a.ex")
assert [my_fun: 2] = Keyword.get(formatter_opts, :locals_without_parens)
Mix.Tasks.Format.run(["a.ex"])
- assert File.stat!(manifest_path).mtime > {{1970, 1, 1}, {0, 0, 0}}
+ assert File.stat!(manifest_path).mtime > {{2010, 1, 1}, {0, 0, 0}}
end)
end
diff --git a/lib/mix/test/mix/umbrella_test.exs b/lib/mix/test/mix/umbrella_test.exs
index 8d9d55610..c8d9a198c 100644
--- a/lib/mix/test/mix/umbrella_test.exs
+++ b/lib/mix/test/mix/umbrella_test.exs
@@ -94,23 +94,6 @@ defmodule Mix.UmbrellaTest do
end)
end
- test "recompiles umbrella on config change" do
- in_fixture("umbrella_dep/deps/umbrella", fn ->
- Mix.Project.in_project(:umbrella, ".", fn _ ->
- Mix.Task.run("compile", [])
- bar = File.stat!("_build/dev/lib/bar/.mix/compile.elixir").mtime
- foo = File.stat!("_build/dev/lib/foo/.mix/compile.elixir").mtime
-
- ensure_touched("mix.exs", max(foo, bar))
-
- Mix.Task.clear()
- Mix.Task.run("compile", [])
- assert File.stat!("_build/dev/lib/bar/.mix/compile.elixir").mtime > bar
- assert File.stat!("_build/dev/lib/foo/.mix/compile.elixir").mtime > foo
- end)
- end)
- end
-
test "recursively compiles umbrella with protocol consolidation" do
in_fixture("umbrella_dep/deps/umbrella", fn ->
Mix.Project.in_project(:umbrella, ".", fn _ ->