Domanda

Quali sono alcuni hook pre-commit comuni e/o utili per SVN?

È stato utile?

Soluzione

Abbiamo un post commettere gancio che i messaggi il messaggio a un account twitter. Utilizza twitsvn (disclaimer: io sono un committer su quel progetto).

sciocco? Forse ... ma si è rivelato essere un buon modo per noi comunicare i viavai della nostra repository ad alcuni dei nostri membri del team di controllo delle versioni-sfidato. Una volta SVN ha iniziato a parlare con loro tramite il loro client Twitter, non sembrava così tanto come una scatola nera.

Altri suggerimenti

che un utente ha effettivamente inserito un commento sul messaggio di commit, e che contiene un particolare numero di emissione per tenere traccia.

Controllo di percorsi assoluti in diversi file di testo (cioè VRML, XML ecc). La maggior parte del codice di check-in non avrebbe mai dovuto percorsi assoluti, ma alcune persone e strumenti di insistere sulla produzione di materiale hard-coded.

Faccio una parola contare su di inviare i messaggi. Hanno bisogno di essere 5 o più parole. Questo ha portato ad alcuni insulti comici contro di me ...

  • Controlla le schede e rifiutare la registrare.
  • Controlla la linea incoerente terminazioni e respingere il check-in.
  • Controlla occorrenza di "CR: [Nome utente]" e rifiutare il check-in se non v'è la revisione del codice.

Si potrebbe voler dare un'occhiata a: http://svn.apache.org /repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts (Questa pagina potrebbe essere superata, ovviamente, non è più mantenuto per Subversion 1.7)

o direttamente presso: https://svn.apache.org/repos/asf/subversion/trunk/ contrib /

Mi piace usare svn si aggancia a:

  • applicare i punti più rigorosi dello stile del codice
  • verificare la presenza di evidenti errori di sintassi
  • assicurarsi che le parole chiave speciali di Trac come "Correzioni" o "Indirizzi" siano effettivamente precedute dal numero di problema appropriato

posso controllare il tipo di file e fare in modo che certi tipi vietati non sono impegnati per caso (ad esempio obj, PDB). Beh, non dal momento che la prima volta che qualcuno ha registrato 2 giga di file temporanei generati dal compilatore: (

per le finestre:


@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

Io uso un gancio post-commit di riscrivere la proprietà dell'autore di un nome dal nostro albero LDAP. (Autenticazione è con dipendente id)

Una grande commit hook che abbiamo durante il nostro archivio è quello di controllare tutti .vcproj (o .csproj) progetti di Visual Studio per assicurarsi che le directory di output non sono state modificate a nulla locale (comunemente usato per il debug).

Questi problemi saranno compilare correttamente, ma ancora rompere la build a causa di eseguibili mancanti.

In compagnia Attualmente lavoro su, questa opzione è selezionata:

  • Se i file binari hanno la necessità di attributo di blocco impostato;
  • Se i file Java hanno l'avviso di standard di copyright e se include l'anno in corso;
  • Se il codice viene formattata correttamente (usiamo Jalopy per la formattazione del codice) - questo può sembrare stupido, ma rende in realtà il confronto tra le diverse versioni del testo più facile;
  • Se il codice ha un messaggio di commit;
  • Se la struttura di directory è conforme a quella che viene definita (tutti i progetti dovrebbero essere sotto una cartella SVN definito, e ogni progetto dovrebbe avere un tag, ramo e la cartella tronco);

Credo che sia esso.

Mi piace l'idea di verificare se l'impegno è associato a un biglietto; in realtà fa un sacco di senso per me.

Alcuni preferiscono esecuzione di uno strumento lint-like per una determinata lingua per trovare i problemi comuni nel codice e / o far rispettare la codifica stile. Tuttavia, in un piccolo e qualificato team preferisco permettere ad ogni commit di passare attraverso e affrontare eventuali problemi durante l'integrazione continua e / o revisione del codice. Grazie a questo commit sono più veloci che incoraggia i commit più frequenti, che porta alla integrazione più facile.

Io uso il check- mime-type.pl pre-commit hook per controllare che tipo MIME e la fine delle opzioni della riga sono impostate sui file impegnati. Io uso la sovversione per pubblicare i file per essere visibili su un sito web utilizzando DAV, e tutti i file senza il set tipo MIME serviti come file di testo (ad esempio sorgente HTML viene visualizzato in un browser, invece di markup reso).

Inserisci una nota in Mantis bugtracker con i dettagli dell'elenco modifiche in base al messaggio di commit avendo 'questione #' o simili tramite espressioni regolari.

che ha un messaggio di commit, ed è! = Di "bug fixing". Accidenti, ho odio quei messaggi inutili!

Usiamo un pre-commit e post-commit hook combinata per aggiornare automaticamente Bugzilla con l'entrata associato dal svn commit.

Usiamo un secondo (pre-commit) gancio per assicurare che lo svn appropriata: eol-style e svn:. Parole proprietà sono impostate su un file prima che venga aggiunto alla repostitory

Abbiamo un terzo (post-commit) gancio per dare il via una build e spedire i risultati, se la build è rotto, e di informare tutti quando la costruzione è stata fissata ancora una volta.

Abbiamo una quarta (post-commit) gancio per dare il via replica svn, per garantire che la replica fuori sede è il più aggiornato possibile.

Purtroppo, non posso postare la fonte a questi, ma, fatta eccezione per l'integrazione Bugzilla, sono abbastanza facili da implementare, e Hudson è probabilmente una scelta migliore per l'integrazione continua.

Per l'integrazione Bugzilla, vorrei suggerire guardando scmbug .

Io uso il seguente script gancio per assicurarsi fine riga di codice sorgente e le autorizzazioni di script di shell siano corrette (è frustrante quando qualcuno controlli in su finestre quando tutto sembra ok e rompe la build 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

Come su un gancio per compilare il progetto? per esempio. Eseguire fare tutti. In questo modo nessuno controlla nel codice che non compila! :)

Risoluzione mancanza di Esterni di file in SVN 1.5 utilizzando PostUpdate e precommit

Mi sarebbe piaciuto un gancio che verifica la presenza di [Revisore: xyz] nota nel messaggio di commit, e respinge l'impegno

.

Sto pensando di scrivere uno per controllare DOCTYPE dai file aspx / html, solo per assicurarsi che tutti utilizzano quella corretta.

Inoltre, è possibile avere un pre (o post) commit hook spingere una notifica fuori al server CI come descritto sul blog Hudson

I check in caso di collisione (finestre stupido) e anche require-mergeinfo.pl per assicurare che il cliente è di almeno 1,5 - in questo modo svn: mergeinfo sarà sempre impostato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top