Проблема с git_sha
заключается в том, что она не заказана. Предполагается, что следующая версия будет иметь номер больше, чем предыдущий, по тривиальному алфавитно-цифровому виду. С sha
это не так.
Вы можете использовать дату для этой цели. Например,
git log -1 --date=raw --format=%cd
#⇒ 1535467693 +0200 # seconds since epoch
Теперь давайте посмотрим на это:
{epoch, _} = System.cmd("git", ~w|log -1 --date=raw --format=%cd|)
[sec, tz] =
epoch
|> String.split(~r/\s+/, trim: true)
|> Enum.map(&String.to_integer/1)
#⇒ [1527769224, 200]
sec + tz * 36 # * 60 * 60 / 100
#⇒ 1527776424
Число выше всегда растет.
Sidenote: использовать двоичное сопоставление на месте вместо String.slice/3
, когда это возможно:
{<<git_sha::binary-size(8), _rest::binary>>, _exit_code} =
System.cmd("git", ["rev-parse", "HEAD"])
#⇒ {"556c53987eb55c82ffb6925f9f56eae5de01c119\n", 0}
git_sha
#⇒ "556c5398"