File elixir-1.18.4-git.patch of Package elixir
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4f38f049e..79704f442 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -225,7 +225,18 @@ You may also prefer to write using guards:
## v1.18.4 (2025-05-21)
-This release includes initial support for Erlang/OTP 28, for those who want to try it out. In such cases, you may use Elixir v1.18.4 precompiled for Erlang/OTP 27, as it is binary compatible with Erlang/OTP 28.
+This release includes initial support for Erlang/OTP 28, for those who want to try it out. In such cases, you may use Elixir v1.18.4 precompiled for Erlang/OTP 27, as it is binary compatible with Erlang/OTP 28. Note, however, that Erlang/OTP 28 no longer allows regexes to be defined in the module body and interpolated into an attribute. If you do this:
+
+```elixir
+@some_attribute ~r/foo/
+def some_fun, do: @some_attribute
+```
+
+You must rewrite it to:
+
+```elixir
+def some_fun, do: ~r/foo/
+```
### 1. Enhancements
diff --git a/lib/elixir/pages/references/compatibility-and-deprecations.md b/lib/elixir/pages/references/compatibility-and-deprecations.md
index e147e3620..81a9a57b5 100644
--- a/lib/elixir/pages/references/compatibility-and-deprecations.md
+++ b/lib/elixir/pages/references/compatibility-and-deprecations.md
@@ -42,7 +42,7 @@ Erlang/OTP versioning is independent from the versioning of Elixir. Erlang relea
Elixir version | Supported Erlang/OTP versions
:------------- | :-------------------------------
-1.18 | 25 - 27 (and Erlang/OTP 28 from v1.18.4)
+1.18 | 25 - 27
1.17 | 25 - 27
1.16 | 24 - 26
1.15 | 24 - 26
diff --git a/lib/mix/lib/mix.ex b/lib/mix/lib/mix.ex
index dc4181a33..b712fcc17 100644
--- a/lib/mix/lib/mix.ex
+++ b/lib/mix/lib/mix.ex
@@ -894,7 +894,7 @@ def install(deps, opts) when is_list(deps) and is_list(opts) do
{deps, config, system_env, consolidate_protocols?}
|> :erlang.term_to_binary()
|> :erlang.md5()
- |> Base.encode16(case: :lower)
+ |> Base.url_encode64(case: :lower, padding: false)
force? = System.get_env("MIX_INSTALL_FORCE") in ["1", "true"] or Keyword.fetch!(opts, :force)
@@ -1068,7 +1068,7 @@ defp install_project_dir(cache_id) do
System.get_env("MIX_INSTALL_DIR") ||
Path.join(Mix.Utils.mix_cache(), "installs")
- version = "elixir-#{System.version()}-erts-#{:erlang.system_info(:version)}"
+ version = "ex-#{System.version()}-erl-#{:erlang.system_info(:version)}"
Path.join([install_root, version, cache_id])
end