- state $EXE_ST = ''; # pack('dd', st_ctime, st_size);
- my $exe = which('git') // die "git not found in $ENV{PATH}";
- my @st = stat($exe) or die "stat: $!";
- my $st = pack('dd', $st[10], $st[7]);
- state $VER;
- if ($st ne $EXE_ST) {
- my $rd = popen_rd([ $exe, '--version' ]);
- my $v = readline($rd);
- $v =~ /\b([0-9]+(?:\.[0-9]+){2})/ or die
- "$exe --version output: $v # unparseable";
- my @v = split(/\./, $1, 3);
- $VER = ($v[0] << 24) | ($v[1] << 16) | $v[2];
- $EXE_ST = $st;
- }
-
- # git 2.31.0+ supports -c core.abbrev=no, don't bother with
- # core.abbrev=64 since not many releases had SHA-256 prior to 2.31
- my $abbr = $VER < (2 << 24 | 31 << 16) ? 40 : 'no';
-