2009-05-15 10 views
32

Non riesco a ottenere nulla da questo. Cerca sul Web uno script, ecc. Chiunque ha uno script che puoi semplicemente modificare pre-commit.tmpl out-of-box in un ambiente Windows che richiede x caratteri da inserire per un commento sul commit in Tortoise Subversion a livello globale in modo che tutti i membri del team siano obbligatori mentre questo requisito viene trasferito ai client dal server SVN?Blocco pre-commit di Windows per la lunghezza del commento Subversion

Non conosco il linguaggio di scripting e questo dovrebbe essere qualcosa di abbastanza semplice senza che mi prenda il tempo di capire gli script per le prossime 3 ore.

risposta

54

Questo è un file .bat per richiedere un commento. Verifica l'esistenza di almeno un carattere nel commento.

@echo off 
:: Stops commits that have empty log messages.   
@echo off 

setlocal 

rem Subversion sends through the path to the repository and transaction id 
set REPOS=%1 
set TXN=%2   

svnlook log %REPOS% -t %TXN% | findstr . > nul 
if %errorlevel% gtr 0 (goto err) else exit 0 

:err 
echo. 1>&2 
echo Your commit has been blocked because you didn't enter a comment. 1>&2 
echo Write a log message describing the changes made and try again. 1>&2 
echo Thanks 1>&2 
exit 1 

Questo file si trova nella cartella/hooks del repository, denominata pre-commit.bat. Se avete bisogno di un importo minimo di caratteri, la linea da modificare è

svnlook log %REPOS% -t %TXN% | findstr . > nul 

Quindi, se si voleva un minimo di 10 caratteri, è necessario disporre di 10. Piuttosto che uno solo

svnlook log %REPOS% -t %TXN% | findstr .......... > nul 

Altro comando advanced options for the findstr consente di eseguire controlli follower (determinati set di caratteri, ect)

+0

L'ho visto ma non è facile da modificare quando non si conosce la sintassi. – PositiveGuy

+0

anche provato a mettere quello nel gancio per pre-commit (lato server) e il mio cliente non è stato costretto a inserire un commento comunque – PositiveGuy

+1

la chiave è nella riga svnlook del codice. È necessario assicurarsi di avere un percorso corretto per il comando svnlook affinché questo script funzioni. –

2

Io uso SubversionNotify, probabilmente fa più di quello che ti serve, ma è piuttosto semplice da configurare.

+0

Guardato a questo, ma non vedo un modo per limitare i commenti o qualsiasi sintassi regex che mostra come in riferimento a questa applicazione. – PositiveGuy

2

Prova questo:

rem Make sure that the log message contains some text. 
set REPOS=%1 
set TXN=%2 

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9] 
IF %ERRORLEVEL% EQU 0 GOTO OK 
echo Your commit has been blocked because you didn't provide a log message 1>&2 
echo Please write a log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 

:OK 
rem ------------------------------------------------------------- 
rem Check if comment is in list of reserved words to not be used.. 
rem ------------------------------------------------------------- 

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment 
setlocal enabledelayedexpansion 
Set SEPARATOR= 
set COMMENT= 
for /f "delims=" %%a in (comment) do (  
    set currentline=%%a 
    set COMMENT=!COMMENT!%SEPARATOR%!currentline! 
) 

FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null 
If %ERRORLEVEL% EQU 1 goto OK2 

:Fail 
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2 
echo Line is -%COMMENT%- 1>&2 
echo Please write a proper log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 


:OK2 
rem ------------------------------------------------------------- 
rem Check number of words on the line if = 2 then reject comment 
rem ------------------------------------------------------------- 
Set VAR1=%COMMENT% 
Set count=0 
For %%j in (%VAR1%) Do Set /A count+=1 
IF %count% EQU 2 goto Fail2 
goto OK3 

:Fail2 
echo Your commit has been blocked because not enough detail supplied 1>&2 
echo Please write a longer log message describing the purpose of your changes and 1>&2 
echo then try committing again. -- Thank you 1>&2 
exit 1 

:OK3 
rem ------------------------------------------------------------- 
rem Check that the author of this commit has the rights to perform 
rem ------------------------------------------------------------- 
rem the commit on the files and directories being modified. 
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 

rem All checks passed, so allow the commit. 
exit 0 
1

Ho un pre-commit hook che può fare esattamente quello che vuoi. Inoltre molto di più.

  • È possibile specificare una lunghezza minima del commento di commit.
  • È possibile associare il commento di commit a uno regular expression. Non solo è possibile specificare una lunghezza, ma è anche possibile specificare determinati parametri. Ad esempio, il commento di commit contiene un numero di bug che utilizza il sistema di tracciamento dei difetti, quindi è possibile risalire alla modifica di un determinato difetto?

Esso permette anche di effettuare le seguenti operazioni:

  • Impostare vari commettere permessi contro particolari file o directory:
    • lettura-scrittura: l'utente può checkout e commettere questi elementi.
    • read-only: l'utente può eseguire il checkout di questo elemento, ma non può confermare le modifiche.
    • add-only: L'utente può aggiungere una directory tramite svn cp, ma non commettere alcuna modifica. Questo è perfetto per la directory /tags in cui è consentito creare un tag, ma non modificare il tag.
    • no-delete: gli utenti possono commettere modifiche e aggiungere nuovi file, ma non eliminare questi file.
    • no-add: gli utenti possono solo confermare le modifiche e non aggiungere o eliminare file in un commit.

E, permette anche di fare questo:

  • nomi di certi file di ban tramite espressioni regolari di globbing,
  • richiedono determinati file o directory hanno una particolare proprietà impostata su un valore particolare. Molto utile per cose come assicurarsi che gli script di shell Unix, i Makefile Unix ei file batch di Windows abbiano la fine della riga corretta, oppure che sia impostato svn:ignore, in modo che gli utenti non si impegnino accidentalmente in file che non dovrebbero impegnare.
  • È necessario impostare determinate proprietà di revisione con determinati valori. Ecco come si controllano i messaggi di commit, ma si dice che svn:log deve corrispondere a determinate espressioni regolari.

Questo script di pre-commit è scritto in Perl. Per impostazione predefinita, Perl viene fornito con server Unix, Mac e Linux. Sfortunatamente, non è incluso nei computer Windows. Fortunatamente ci sono diversi pacchetti Perl open source, gratuiti e facili da installare per il PC come ActivePerl e Strawberry Perl