diff --git a/CHANGELOG.md b/CHANGELOG.md index f7d3808..6cd9c7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + + * Parallelize per-locale merging in `mix gettext.merge`. + ## v1.0.2 * Only skip manifest removal on Elixir v1.19.3+ diff --git a/lib/mix/tasks/gettext.merge.ex b/lib/mix/tasks/gettext.merge.ex index 49efebc..3371bba 100644 --- a/lib/mix/tasks/gettext.merge.ex +++ b/lib/mix/tasks/gettext.merge.ex @@ -191,9 +191,17 @@ defmodule Mix.Tasks.Gettext.Merge do end defp merge_all_locale_dirs(pot_dir, opts, gettext_config) do - for locale <- File.ls!(pot_dir), File.dir?(Path.join(pot_dir, locale)) do - merge_dirs(locale_dir(pot_dir, locale), pot_dir, locale, opts, gettext_config) - end + pot_dir + |> File.ls!() + |> Enum.filter(&File.dir?(Path.join(pot_dir, &1))) + |> Task.async_stream( + fn locale -> + merge_dirs(locale_dir(pot_dir, locale), pot_dir, locale, opts, gettext_config) + end, + ordered: false, + timeout: :infinity + ) + |> Stream.run() end def locale_dir(pot_dir, locale) do