File 0002-Fix-mix-xref-order-across-OTP-versions-OTP-27-13430.patch of Package elixir
From c969a51ae766b4c65d2e52ee68b2ab748c2f1d49 Mon Sep 17 00:00:00 2001
From: Jean Klingler <sabiwara@gmail.com>
Date: Sat, 23 Mar 2024 10:51:41 +0900
Subject: [PATCH] Fix mix xref order across OTP versions (OTP 27) (#13430)
---
lib/mix/lib/mix/tasks/xref.ex | 4 +++-
lib/mix/test/mix/tasks/xref_test.exs | 4 ++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/mix/lib/mix/tasks/xref.ex b/lib/mix/lib/mix/tasks/xref.ex
index ae7b67260..d58cd5e23 100644
--- a/lib/mix/lib/mix/tasks/xref.ex
+++ b/lib/mix/lib/mix/tasks/xref.ex
@@ -1003,10 +1003,12 @@ defp with_digraph(references, callback) do
end
defp cycles(graph, opts) do
+ # Vertices order in cyclic_strong_components/1 return is arbitrary and changes between
+ # OTP versions, sorting is necessary to make the output stable across versions.
cycles =
graph
|> :digraph_utils.cyclic_strong_components()
- |> Enum.reduce([], &inner_cycles(graph, &1, &2))
+ |> Enum.reduce([], &inner_cycles(graph, Enum.sort(&1), &2))
|> Enum.map(&{length(&1), &1})
if min = opts[:min_cycle_size], do: Enum.filter(cycles, &(elem(&1, 0) > min)), else: cycles
diff --git a/lib/mix/test/mix/tasks/xref_test.exs b/lib/mix/test/mix/tasks/xref_test.exs
index aa1d2b1cc..3e3b4879c 100644
--- a/lib/mix/test/mix/tasks/xref_test.exs
+++ b/lib/mix/test/mix/tasks/xref_test.exs
@@ -445,9 +445,9 @@ test "cycles" do
Cycle of length 3:
- lib/b.ex
lib/a.ex
lib/b.ex
+ lib/a.ex
""")
end
@@ -1085,7 +1085,7 @@ defp assert_graph(opts \\ [], expected, params \\ []) do
^first_line | ["Generated sample app" | result]
] = receive_until_no_messages([]) |> String.split("\n")
- assert normalize_graph_output(result |> Enum.join("\n")) == expected
+ assert result |> Enum.join("\n") |> normalize_graph_output() == expected
end)
end
--
2.43.0