Obtendo novas tags no Git Push no pré-recebimento

1

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:

  1. Commit
  2. Tag (para qualquer revisão, mesmo oldies)
  3. 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.

    
por Hugo Meneses 07.11.2013 / 14:30

0 respostas