Skip to content

Commit c969a51

Browse files
authored
Fix mix xref order across OTP versions (OTP 27) (#13430)
1 parent 030a5d0 commit c969a51

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

lib/mix/lib/mix/tasks/xref.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1003,10 +1003,12 @@ defmodule Mix.Tasks.Xref do
10031003
end
10041004

10051005
defp cycles(graph, opts) do
1006+
# Vertices order in cyclic_strong_components/1 return is arbitrary and changes between
1007+
# OTP versions, sorting is necessary to make the output stable across versions.
10061008
cycles =
10071009
graph
10081010
|> :digraph_utils.cyclic_strong_components()
1009-
|> Enum.reduce([], &inner_cycles(graph, &1, &2))
1011+
|> Enum.reduce([], &inner_cycles(graph, Enum.sort(&1), &2))
10101012
|> Enum.map(&{length(&1), &1})
10111013

10121014
if min = opts[:min_cycle_size], do: Enum.filter(cycles, &(elem(&1, 0) > min)), else: cycles

lib/mix/test/mix/tasks/xref_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,9 @@ defmodule Mix.Tasks.XrefTest do
445445
446446
Cycle of length 3:
447447
448-
lib/b.ex
449448
lib/a.ex
450449
lib/b.ex
450+
lib/a.ex
451451
452452
""")
453453
end
@@ -1085,7 +1085,7 @@ defmodule Mix.Tasks.XrefTest do
10851085
^first_line | ["Generated sample app" | result]
10861086
] = receive_until_no_messages([]) |> String.split("\n")
10871087

1088-
assert normalize_graph_output(result |> Enum.join("\n")) == expected
1088+
assert result |> Enum.join("\n") |> normalize_graph_output() == expected
10891089
end)
10901090
end
10911091

0 commit comments

Comments
 (0)