Eu queria colocar o hash git atual no meu prompt; mas minha abordagem inicial foi um pouco lenta:
psvar[1]="$(git log -n1 --pretty='format: %h' 2>/dev/null)"
(com $PROMPT
inclusão %1v
para tornar isso visível)
Eu tentei o vcs_info
plugin, mas ele também estava lento. Então acabei escrevendo minha própria função:
function githead() {
local commondir ref hash _
local gitdir="${1:a}"
until [[ -e "$gitdir/.git" ]]; do
local updir="${gitdir%/*}"
[[ "$updir" == "$gitdir" ]] && return 1
gitdir="$updir"
done
gitdir="$gitdir/.git"
[[ -f "$gitdir" ]] && read _ gitdir < "$gitdir"
read _ ref < "$gitdir/HEAD"
local commondir="$gitdir/commondir"
[[ -e "$commondir" ]] && gitdir="$gitdir/$(<$commondir)"
ref="$gitdir/$ref"
read hash <"$ref"
print -r "${hash::12}"
return 0
}
Certamente é mais rápido, mas isso é obrigado a ser frágil. Em particular, alguns dos arquivos que tenho que ler parecem que podem conter mais de uma linha de conteúdo, e não necessariamente colocar a linha que eu quero no topo.
Existe uma maneira rápida de obter o hash atual do git, que seja mais robusta do que o que escrevi manualmente?