Estou usando pre-receive
hooks no GIT (usando o bash no Linux) para filtrar o push que é permitido em meu repositório.
Eu preciso filtrar o empurrão que os desenvolvedores fazem em meu repositório GIT, permitindo apenas empurrado com esses requisitos ( #
é o número):
# Commits > 0 && # Tags != 0
: NÃO # Commits > 0 && # Tags == 0
: SIM # Commits == 0 && # Tags > 1
: NÃO # Commits == 0 && # Tags == 1
& & Key is correct
: SIM Considere as filiais e outras operações como commits. Você só pode enviar uma única tag usando a tecla direita (especificada no comentário da tag). Você não pode empurrar uma tag com outros elementos.
O problema é que $refname
tem apenas o ref de HEAD, portanto, se você fizer esta ordem:
Commit
Tag
(para qualquer revisão, mesmo oldies) Commit
O $refname
apontará para a última referência (ou seja, /refs/heads/master
), assim:
if [[ "$refname" == "refs/tags/"* ]]; then
...
fi
Não funciona na ordem mencionada. Eu tentei iterar através de referências usando rev-list
e for-each-ref
, sem sucesso.
Como eu poderia processar o envio recebido, sabendo o número de tags (e recebendo o comentário de cada um) para satisfazer as condições superiores?
PS: Considere também a situação de empurrar com a opção --all, recebendo mais de uma ramificação.