Hello community,

here is the log from the commit of package elixir for openSUSE:Factory checked 
in at 2020-11-09 13:58:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/elixir (Old)
 and      /work/SRC/openSUSE:Factory/.elixir.new.11331 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "elixir"

Mon Nov  9 13:58:31 2020 rev:13 rq:847072 version:1.11.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/elixir/elixir.changes    2020-10-28 
09:58:58.119169371 +0100
+++ /work/SRC/openSUSE:Factory/.elixir.new.11331/elixir.changes 2020-11-09 
13:59:18.447715995 +0100
@@ -1,0 +2,14 @@
+Wed Nov 04 11:09:00 UTC 2020 - Sven Marquardt <dev@mail.smarquardt.space>
+
+- Elixir 1.11.2
+ * Bug fixes
+   Elixir
+   [Code] Do not crash when getting docs for missing `erts` appdir
+   [Kernel] Raise meaningful error if `:erlang.is_record` is used in guards
+   [Kernel] Prune tracers when fetching `__ENV__` inside functions
+
+   Mix
+   [mix] Fix regression where aliases could not call themselves recursively
+   [mix compile] Do not discard tracers that are set programatically
+
+-------------------------------------------------------------------
@@ -605,0 +620 @@
+-------------------------------------------------------------------

Old:
----
  elixir-1.11.1.tar.gz

New:
----
  elixir-1.11.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ elixir-doc.spec ++++++
--- /var/tmp/diff_new_pack.SxTtgO/_old  2020-11-09 13:59:19.179714398 +0100
+++ /var/tmp/diff_new_pack.SxTtgO/_new  2020-11-09 13:59:19.183714390 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           elixir-doc
-Version:        1.11.1
+Version:        1.11.2
 Release:        0
 Summary:        Documentation for elixir
 License:        Apache-2.0

elixir.spec: same change
++++++ elixir-1.11.1.tar.gz -> elixir-1.11.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/CHANGELOG.md 
new/elixir-1.11.2/CHANGELOG.md
--- old/elixir-1.11.1/CHANGELOG.md      2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/CHANGELOG.md      2020-11-03 15:23:56.000000000 +0100
@@ -14,7 +14,7 @@
 
 These two conditions may seem contradictory. After all, if a module is 
available, it must have come from a dependency. This is not true in two 
scenarios:
 
-  * Modules from Elixir and Erlang/OTP are always available - even if their 
applications are not explicitly listed as a dependency
+  * Modules from Elixir and Erlang/OTP are always available - even if their 
applications are not listed as a dependency
 
   * In an umbrella project, because all child applications are compiled within 
the same VM, you may have a module from a sibling project available, even if 
you don't depend on said sibling
 
@@ -36,7 +36,7 @@
      to your "def project" in mix.exs
 ```
 
-This comes with extra benefits in umbrella projects, as it requires child 
applications to explicitly list their dependencies, completely rejecting cyclic 
dependencies between siblings.
+This comes with extra benefits in umbrella projects, as it requires 
applications to depend on the siblings they depend on, which will fail if there 
are any cyclic dependencies.
 
 ## Compiler checks: data constructors
 
@@ -243,6 +243,21 @@
 
 Mix also includes two new tasks: `mix app.config`, for application runtime 
configuration, and `mix test.coverage`, which generates aggregated coverage 
reports for umbrella projects and for test suites partitioned across processes.
 
+## v1.11.2 (2020-11-03)
+
+### 1. Bug fixes
+
+#### Elixir
+
+  * [Code] Do not crash when getting docs for missing `erts` appdir
+  * [Kernel] Raise meaningful error if `:erlang.is_record` is used in guards
+  * [Kernel] Prune tracers when fetching `__ENV__` inside functions
+
+#### Mix
+
+  * [mix] Fix regression where aliases could not call themselves recursively
+  * [mix compile] Do not discard tracers that are set programatically
+
 ## v1.11.1 (2020-10-16)
 
 ### 1. Bug fixes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/VERSION new/elixir-1.11.2/VERSION
--- old/elixir-1.11.1/VERSION   2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/VERSION   2020-11-03 15:23:56.000000000 +0100
@@ -1 +1 @@
-1.11.1
\ No newline at end of file
+1.11.2
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/elixir/lib/code.ex 
new/elixir-1.11.2/lib/elixir/lib/code.ex
--- old/elixir-1.11.1/lib/elixir/lib/code.ex    2020-10-16 09:31:35.000000000 
+0200
+++ new/elixir-1.11.2/lib/elixir/lib/code.ex    2020-11-03 15:23:56.000000000 
+0100
@@ -1373,8 +1373,16 @@
       :error ->
         case :code.which(module) do
           :preloaded ->
-            path = Path.join([:code.lib_dir(:erts), "doc", "chunks", 
"#{module}.chunk"])
-            fetch_docs_from_chunk(path)
+            # The erts directory is not necessarily included in releases
+            # unless it is listed as an extra application.
+            case :code.lib_dir(:erts) do
+              path when is_list(path) ->
+                path = Path.join([path, "doc", "chunks", "#{module}.chunk"])
+                fetch_docs_from_chunk(path)
+
+              {:error, _} ->
+                {:error, :chunk_not_found}
+            end
 
           _ ->
             {:error, :module_not_found}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/elixir/src/elixir_expand.erl 
new/elixir-1.11.2/lib/elixir/src/elixir_expand.erl
--- old/elixir-1.11.1/lib/elixir/src/elixir_expand.erl  2020-10-16 
09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/src/elixir_expand.erl  2020-11-03 
15:23:56.000000000 +0100
@@ -469,7 +469,7 @@
 escape_env_entries(Meta, #{current_vars := {Read, Write}, unused_vars := 
{Unused, Version}} = Env0) ->
   Env1 = case Env0 of
     #{function := nil} -> Env0;
-    _ -> Env0#{lexical_tracker := nil}
+    _ -> Env0#{lexical_tracker := nil, tracers := []}
   end,
   Current = {maybe_escape_map(Read), maybe_escape_map(Write)},
   Env2 = Env1#{current_vars := Current, unused_vars := 
{maybe_escape_map(Unused), Version}},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/elixir/src/elixir_rewrite.erl 
new/elixir-1.11.2/lib/elixir/src/elixir_rewrite.erl
--- old/elixir-1.11.1/lib/elixir/src/elixir_rewrite.erl 2020-10-16 
09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/src/elixir_rewrite.erl 2020-11-03 
15:23:56.000000000 +0100
@@ -327,6 +327,10 @@
     _ -> {error, {invalid_guard, Receiver, Right, length(Args)}}
   end.
 
+%% erlang:is_record/2-3 are compiler guards in Erlang which we
+%% need to explicitly forbid as they are allowed in erl_internal.
+allowed_guard(is_record, 2) -> false;
+allowed_guard(is_record, 3) -> false;
 allowed_guard(Right, Arity) ->
   erl_internal:guard_bif(Right, Arity) orelse elixir_utils:guard_op(Right, 
Arity).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/kernel/expansion_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/kernel/expansion_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/kernel/expansion_test.exs  
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/kernel/expansion_test.exs  
2020-11-03 15:23:56.000000000 +0100
@@ -294,6 +294,7 @@
     test "__ENV__" do
       env = %{__ENV__ | line: 0}
       assert expand_env(quote(do: __ENV__), env) == {Macro.escape(env), env}
+      assert %{lexical_tracker: nil, tracers: []} = __ENV__
     end
 
     test "__ENV__.accessor" do
@@ -302,6 +303,9 @@
 
       assert expand_env(quote(do: __ENV__.unknown), env) ==
                {quote(do: unquote(Macro.escape(env)).unknown), env}
+
+      assert __ENV__.lexical_tracker == nil
+      assert __ENV__.tracers == []
     end
   end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/kernel/guard_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/kernel/guard_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/kernel/guard_test.exs      
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/kernel/guard_test.exs      
2020-11-03 15:23:56.000000000 +0100
@@ -311,6 +311,22 @@
       end
 
       assert_raise CompileError,
+                   ~r"cannot invoke remote function :erlang\.is_record/2 
inside guards",
+                   fn ->
+                     defmodule IsRecord2Usage do
+                       defguard foo(rec) when :erlang.is_record(rec, :tag)
+                     end
+                   end
+
+      assert_raise CompileError,
+                   ~r"cannot invoke remote function :erlang\.is_record/3 
inside guards",
+                   fn ->
+                     defmodule IsRecord3Usage do
+                       defguard foo(rec) when :erlang.is_record(rec, :tag, 7)
+                     end
+                   end
+
+      assert_raise CompileError,
                    ~r"cannot invoke remote function :erlang\.\+\+/2 inside 
guards",
                    fn ->
                      defmodule ListSubtractionUsage do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/module/types/integration_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/module/types/integration_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/module/types/integration_test.exs  
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/module/types/integration_test.exs  
2020-11-03 15:23:56.000000000 +0100
@@ -1,4 +1,4 @@
-Code.require_file("../../test_helper.exs", __DIR__)
+Code.require_file("type_helper.exs", __DIR__)
 
 defmodule Module.Types.IntegrationTest do
   use ExUnit.Case
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/module/types/pattern_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/module/types/pattern_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/module/types/pattern_test.exs      
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/module/types/pattern_test.exs      
2020-11-03 15:23:56.000000000 +0100
@@ -1,4 +1,4 @@
-Code.require_file("../../test_helper.exs", __DIR__)
+Code.require_file("type_helper.exs", __DIR__)
 
 defmodule Module.Types.PatternTest do
   use ExUnit.Case, async: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/module/types/types_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/module/types/types_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/module/types/types_test.exs        
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/module/types/types_test.exs        
2020-11-03 15:23:56.000000000 +0100
@@ -1,4 +1,4 @@
-Code.require_file("../../test_helper.exs", __DIR__)
+Code.require_file("type_helper.exs", __DIR__)
 
 defmodule Module.Types.TypesTest do
   use ExUnit.Case, async: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/elixir/test/elixir/module/types/unify_test.exs 
new/elixir-1.11.2/lib/elixir/test/elixir/module/types/unify_test.exs
--- old/elixir-1.11.1/lib/elixir/test/elixir/module/types/unify_test.exs        
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/elixir/test/elixir/module/types/unify_test.exs        
2020-11-03 15:23:56.000000000 +0100
@@ -1,4 +1,4 @@
-Code.require_file("../../test_helper.exs", __DIR__)
+Code.require_file("type_helper.exs", __DIR__)
 
 defmodule Module.Types.UnifyTest do
   use ExUnit.Case, async: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/mix/lib/mix/compilers/application_tracer.ex 
new/elixir-1.11.2/lib/mix/lib/mix/compilers/application_tracer.ex
--- old/elixir-1.11.1/lib/mix/lib/mix/compilers/application_tracer.ex   
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/mix/lib/mix/compilers/application_tracer.ex   
2020-11-03 15:23:56.000000000 +0100
@@ -25,6 +25,12 @@
     :ok
   end
 
+  # Also skip __impl__ calls inside protocols as they are meant
+  # to invert dependencies.
+  def trace({_, _, _, :__impl__, _}, _env) do
+    :ok
+  end
+
   def trace({type, meta, module, function, arity}, env)
       when type in [:remote_function, :remote_macro, :imported_function, 
:imported_macro] do
     # Unknown modules need to be looked up and filtered later
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/mix/lib/mix/task.ex 
new/elixir-1.11.2/lib/mix/lib/mix/task.ex
--- old/elixir-1.11.1/lib/mix/lib/mix/task.ex   2020-10-16 09:31:35.000000000 
+0200
+++ new/elixir-1.11.2/lib/mix/lib/mix/task.ex   2020-11-03 15:23:56.000000000 
+0100
@@ -355,12 +355,12 @@
     alias = Mix.Project.config()[:aliases][String.to_atom(task)]
 
     cond do
-      is_nil(alias) ->
-        run_task(proj, task, args)
-
-      Mix.TasksServer.run({:alias, task, proj}) ->
+      alias && Mix.TasksServer.run({:alias, task, proj}) ->
         run_alias(List.wrap(alias), args, proj, task, :ok)
 
+      !Mix.TasksServer.get({:task, task, proj}) ->
+        run_task(proj, task, args)
+
       true ->
         :noop
     end
@@ -371,8 +371,8 @@
     # 2. Otherwise we compile and load dependencies
     # 3. Finally, we compile the current project in hope it is available.
     module =
-      get_task_or_run(proj, task, fn -> Mix.Task.run("deps.loadpaths") end) ||
-        get_task_or_run(proj, task, fn -> Mix.Task.run("compile", []) end) ||
+      get_task_or_run(proj, task, fn -> run("deps.loadpaths") end) ||
+        get_task_or_run(proj, task, fn -> run("compile", []) end) ||
         get!(task)
 
     recursive = recursive(module)
@@ -450,7 +450,8 @@
     run_alias(t, alias_args, proj, original_task, res)
   end
 
-  defp run_alias([], _alias_task, _proj, _original_task, res) do
+  defp run_alias([], _alias_args, proj, original_task, res) do
+    Mix.TasksServer.put({:task, original_task, proj})
     res
   end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/mix/lib/mix/tasks/compile.elixir.ex 
new/elixir-1.11.2/lib/mix/lib/mix/tasks/compile.elixir.ex
--- old/elixir-1.11.1/lib/mix/lib/mix/tasks/compile.elixir.ex   2020-10-16 
09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/mix/lib/mix/tasks/compile.elixir.ex   2020-11-03 
15:23:56.000000000 +0100
@@ -103,12 +103,13 @@
     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)
 
     opts =
       (project[:elixirc_options] || [])
       |> Keyword.merge(opts)
       |> xref_exclude_opts(project)
-      |> tracers_opts()
+      |> tracers_opts(tracers)
       |> profile_opts()
 
     Mix.Compilers.Elixir.compile(manifest, srcs, dest, [:ex], force, opts)
@@ -134,17 +135,21 @@
     end
   end
 
-  defp tracers_opts(opts) do
+  defp pop_tracers(opts) do
     case Keyword.pop_values(opts, :tracer) do
       {[], opts} ->
-        opts
+        {[], opts}
 
       {tracers, opts} ->
-        tracers = Enum.map(tracers, &Module.concat([&1]))
-        Keyword.update(opts, :tracers, tracers, &(tracers ++ &1))
+        {Enum.map(tracers, &Module.concat([&1])), opts}
     end
   end
 
+  defp tracers_opts(opts, tracers) do
+    tracers = tracers ++ Code.get_compiler_option(:tracers)
+    Keyword.update(opts, :tracers, tracers, &(tracers ++ &1))
+  end
+
   defp profile_opts(opts) do
     case Keyword.fetch(opts, :profile) do
       {:ok, "time"} -> Keyword.put(opts, :profile, :time)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/mix/lib/mix/tasks_server.ex 
new/elixir-1.11.2/lib/mix/lib/mix/tasks_server.ex
--- old/elixir-1.11.1/lib/mix/lib/mix/tasks_server.ex   2020-10-16 
09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/mix/lib/mix/tasks_server.ex   2020-11-03 
15:23:56.000000000 +0100
@@ -21,6 +21,10 @@
     Agent.update(@name, &Map.put(&1, tuple, true), @timeout)
   end
 
+  def get(tuple) do
+    Agent.get(@name, &Map.get(&1, tuple), @timeout)
+  end
+
   def delete_many(many) do
     Agent.update(@name, &Map.drop(&1, many), @timeout)
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elixir-1.11.1/lib/mix/test/mix/aliases_test.exs 
new/elixir-1.11.2/lib/mix/test/mix/aliases_test.exs
--- old/elixir-1.11.1/lib/mix/test/mix/aliases_test.exs 2020-10-16 
09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/mix/test/mix/aliases_test.exs 2020-11-03 
15:23:56.000000000 +0100
@@ -10,11 +10,14 @@
           h: "hello",
           p: &inspect/1,
           compile: "hello",
+          cmd: &call_cmd/1,
           help: ["help", "hello"],
           "nested.h": [&Mix.shell().info(inspect(&1)), "h foo bar"]
         ]
       ]
     end
+
+    defp call_cmd(args), do: Mix.Task.run("cmd", args)
   end
 
   setup do
@@ -50,13 +53,18 @@
     assert Mix.Task.run("compile", []) == :noop
   end
 
-  test "run alias override with recursion" do
+  test "run alias override with name-recursion" do
     assert Mix.Task.rerun("help", []) == "Hello, World!"
     assert_received {:mix_shell, :info, ["mix test" <> _]}
 
     # Arguments are passed to the recursive task and not the last one.
     assert ExUnit.CaptureIO.capture_io(fn ->
-             Mix.Task.rerun("help", ["test"]) == "Hello, World!"
+             Mix.Task.rerun("help", ["test"])
            end) =~ "mix test"
   end
+
+  test "run alias override with code-recursion" do
+    assert Mix.Task.rerun("cmd", ["echo", "hello"]) == :ok
+    assert_received {:mix_shell, :run, ["hello" <> _]}
+  end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elixir-1.11.1/lib/mix/test/mix/tasks/compile.elixir_test.exs 
new/elixir-1.11.2/lib/mix/test/mix/tasks/compile.elixir_test.exs
--- old/elixir-1.11.1/lib/mix/test/mix/tasks/compile.elixir_test.exs    
2020-10-16 09:31:35.000000000 +0200
+++ new/elixir-1.11.2/lib/mix/test/mix/tasks/compile.elixir_test.exs    
2020-11-03 15:23:56.000000000 +0100
@@ -57,6 +57,19 @@
     Code.put_compiler_option(:tracers, [])
   end
 
+  test "compiles a project with a previously set custom tracer" do
+    Process.register(self(), __MODULE__)
+    Code.put_compiler_option(:tracers, [__MODULE__])
+
+    in_fixture("no_mixfile", fn ->
+      Mix.Tasks.Compile.Elixir.run([])
+      assert_received {:alias_reference, _meta, A}
+      assert_received {:alias_reference, _meta, B}
+    end)
+  after
+    Code.put_compiler_option(:tracers, [])
+  end
+
   test "warns when Logger is used but not depended on" do
     in_fixture("no_mixfile", fn ->
       File.write!("lib/a.ex", """


Reply via email to