From abf983528f4f80ffb48fc517cf1cff523ab1ad34 Mon Sep 17 00:00:00 2001 From: Liam <byteslice@airmail.cc> Date: Sat, 1 Jun 2024 23:09:06 -0400 Subject: [PATCH] Fix post-Elixir 1.16 divergence in File.stream! --- lib/philomena/sha512.ex | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/philomena/sha512.ex b/lib/philomena/sha512.ex index 1b500440..03c9645e 100644 --- a/lib/philomena/sha512.ex +++ b/lib/philomena/sha512.ex @@ -1,11 +1,27 @@ defmodule Philomena.Sha512 do - @spec file(String.t()) :: String.t() - def file(file) do + @chunk_size 10_485_760 + + @spec file(Path.t()) :: String.t() + def file(path) do hash_ref = :crypto.hash_init(:sha512) - File.stream!(file, [], 10_485_760) + path + |> stream_file() |> Enum.reduce(hash_ref, &:crypto.hash_update(&2, &1)) |> :crypto.hash_final() |> Base.encode16(case: :lower) end + + if Version.match?(System.version(), ">= 1.16.0") do + # `stream!/2` was added in Elixir 1.16 to accept a shortened form, + # where we only need to specify the size of each stream chunk + defp stream_file(file) do + File.stream!(file, @chunk_size) + end + else + # Use legacy stream/3 for older Elixir versions + defp stream_file(file) do + File.stream!(file, [], @chunk_size) + end + end end