Pergunta

O que são alguns comum e / ou útil pre-commit ganchos para SVN?

Foi útil?

Solução

Temos um post cometer gancho que mensagens a mensagem para uma conta no Twitter. Usos twitsvn (disclaimer: Eu sou um committer nesse projeto).

Silly? Talvez ... mas acabou por ser uma boa maneira para nós para comunicar os acontecimentos do nosso repositório para alguns dos nossos membros da equipe version-control-desafiados. Uma vez SVN começou a falar com eles através do seu cliente de Twitter, ele não se sentia tão bem como uma caixa preta.

Outras dicas

que um usuário realmente entrou um comentário sobre a mensagem de commit, e que contém um número determinado assunto para rastrear.

Verificação de caminhos absolutos em vários arquivos de texto (ou seja, VRML, XML etc). A maior parte do check-in de código nunca deve ter caminhos absolutos, mas algumas pessoas e ferramentas insistem em produzir material codificado.

Eu faço uma contagem de palavras em enviar mensagens. Eles precisam ser 5 palavras ou mais. Isto levou a alguns insultos cômicos contra mim ...

  • Verifique se há guias e rejeitar a check-in.
  • Verifique se a linha inconsistentes terminações e rejeitar o check-in.
  • Verifique se há ocorrência de "CR: [Nome de usuário]" e rejeitar o check-in se não houver uma revisão de código.

Você pode querer dar uma olhada em: http://svn.apache.org /repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts (Esta página pode estar desatualizada, obviamente, não é mais mantido para Subversion 1.7)

Ou diretamente em: https://svn.apache.org/repos/asf/subversion/trunk/ contrib /

Eu gosto de usar ganchos svn a:

  • reforçar os pontos mais rigorosas de estilo de código
  • Verifique se há erros de sintaxe óbvias
  • Certifique-se palavras-chave Trac especial como "Fixes" ou "Endereços" são, na verdade, anterior ao número de emissão apropriado

I verificar o tipo de arquivo e certifique-se que certos tipos proibidos não são cometidos por acidente (por exemplo, obj, PDB). Bem, não desde a primeira vez que alguém check-in 2 giga de arquivos temporários gerados pelo compilador: (

para Windows:


@echo off

svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED

echo Please enter a check-in comment 1>&2
exit 1


:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0

echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1

Eu uso um gancho post-commit para reescrever a propriedade autor para um nome amigável de nossa árvore LDAP. (Autenticação é com identificação do empregado)

Um grande cometer gancho que temos em em nosso arquivo é verificar todos os .vcproj (ou .csproj) projetos do Visual Studio para garantir que os diretórios de saída não foram alteradas a qualquer coisa local (comumente usado para depuração).

Estes problemas irá compilar corretamente, mas ainda quebrar a construir, porque de executáveis ??desaparecidas.

Na companhia atualmente eu trabalho, esta é verificada:

  • Se os arquivos binários têm as necessidades bloquear conjunto de atributos;
  • Se os arquivos Java tem o aviso de copyright padrão e se inclui o ano em curso;
  • Se o código é formatado corretamente (usamos Jalopy para formatação de código) - isso pode parecer bobagem, mas ele realmente faz comparações de texto entre diferentes versões mais fácil;
  • Se o código tem uma mensagem de commit;
  • Se os conforma estrutura de diretório para o que está definido (todos os projectos devem estar em uma pasta SVN definido, e cada projeto deve ter uma tag, ramo e pasta tronco);

Eu acho que é isso.

Eu gosto da idéia de verificar se o cometer está associado a um bilhete; ele realmente faz muito sentido para mim.

Alguns preferem a execução de um lint-like ferramenta para um determinado idioma para encontrar problemas comuns no código e / ou aplicar estilo de codificação. No entanto, em uma equipe pequena e hábil eu prefiro para permitir que cada commit para passar e lidar com possíveis problemas durante a integração contínua e / ou revisão de código. Graças a esta commits são mais rápidos que incentiva commits mais freqüentes, levando a uma integração mais fácil.

Eu uso o check- mime-type.pl pré-commit gancho para verificar que tipo de MIME e Fim de opções de linha são definidas em arquivos comprometidos. Eu uso o Subversion para publicar arquivos para ser visível em um site usando DAV, e todos os arquivos sem o conjunto Tipo MIME obter servido como arquivos de texto (por exemplo, HTML é exibido em um navegador em vez da marcação processada).

Inserir uma nota em Mantis bugtracker com os detalhes de changelists com base na mensagem cometer ter 'edição #' ou similar via RegEx.

que tem uma mensagem de confirmação, e é! = De "correção de bugs". Droga, eu odeio essas mensagens inúteis!

Nós usamos um pré-compromisso e post-commit gancho de combinação para automaticamente bugzilla atualização com a entrada associada do svn.

Nós usamos um (pré-commit) gancho de segundo para garantir que o svn apropriado: em estilo EOL e svn:. Propriedades palavras-chave são definidas em um arquivo antes de ser adicionado ao repostitory

Temos um terceiro gancho (post-commit) para lançar uma compilação e enviar os resultados se a compilação é quebrado, e para informar a todos quando a compilação foi corrigido novamente.

Temos uma quarta gancho (post-commit) para pontapé de saída replicação svn, para garantir que a replicação externa é como até à data possível.

Infelizmente, eu não posso postar a fonte para estes, mas, exceto para a integração Bugzilla, eles são bastante fáceis de implementar, e Hudson é provavelmente a melhor escolha para integração contínua.

Para a integração bugzilla, gostaria de sugerir a olhar para scmbug .

Eu uso o seguinte script de gancho para se certificar de final de linha do código-fonte e permissões de scripts shell estão corretas (é frustrante quando alguém cheques em em janelas quando tudo parece ok e quebra a compilação unix).

#!/bin/bash

REPOS="$1"
TXN="$2"

# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
  if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
  then
    if [ ${#BASH_REMATCH[*]} -ge 2 ]
        then
    FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};

    # Make sure shell scripts are executable
    if [[ sh == ${BASH_REMATCH[2]} ]]
    then
        EX_VALUE="true"
            if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
            then
            ERROR=1;
                echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
        fi
        EOL_STYLE="LF"
    else
        EOL_STYLE="native"
    fi

    # Make sure every file has the right svn:eol-style property set
        if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
        then
        ERROR=1;
            echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
    fi
    fi
  fi
  test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done

Que tal um gancho para compilar o projeto? por exemplo. Executar fazer toda. Este garante que ninguém cheques em código que não compila! :)

Resolver falta de Externals arquivo no SVN 1,5 usando PostUpdate e precommit

Eu desfrutar de um gancho que verifica [Avaliador: xyz]. Notas na mensagem de confirmação, e rejeita a cometer

Estou pensando em escrever um para verificar doctype de em aspx / html arquivos, só para ter certeza todo mundo está usando o correto.

Além disso, você pode ter uma pré (ou pós) commit gancho empurrar uma notificação para o seu servidor de CI como descrito no Blog Hudson

Eu verifico para o caso de colisão (janelas estúpidas) e também require-mergeinfo.pl para garantir que o cliente é de pelo menos 1,5 - de que maneira svn: mergeinfo será sempre set

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top