diff options
author | José Valim <jose.valim@dashbit.co> | 2021-08-19 00:12:07 +0200 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2021-08-19 00:12:07 +0200 |
commit | 3c1dbae1f0d60b1b95b4a31e2b88e512cb389050 (patch) | |
tree | ca3022e98ac0220dc5d929771584d9598b23a0a2 | |
parent | 5735381f8237fc3dd5fed41415712a16c70eef71 (diff) | |
download | elixir-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.ex | 4 | ||||
-rw-r--r-- | lib/mix/lib/mix/project.ex | 23 | ||||
-rw-r--r-- | lib/mix/lib/mix/project_stack.ex | 25 | ||||
-rw-r--r-- | lib/mix/lib/mix/tasks/compile.app.ex | 4 | ||||
-rw-r--r-- | lib/mix/lib/mix/tasks/compile.elixir.ex | 7 | ||||
-rw-r--r-- | lib/mix/lib/mix/tasks/compile.erlang.ex | 18 | ||||
-rw-r--r-- | lib/mix/lib/mix/tasks/compile.protocols.ex | 2 | ||||
-rw-r--r-- | lib/mix/test/mix/project_test.exs | 6 | ||||
-rw-r--r-- | lib/mix/test/mix/tasks/compile.elixir_test.exs | 64 | ||||
-rw-r--r-- | lib/mix/test/mix/tasks/format_test.exs | 12 | ||||
-rw-r--r-- | lib/mix/test/mix/umbrella_test.exs | 17 |
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 _ -> |