Di Windows pre-commit hook per il commento lunghezza Subversion
-
22-08-2019 - |
Domanda
Mi sembra di essere arrivare da nessuna parte con questo. Sia la ricerca sul Web per uno script, ecc Chiunque ha uno script che si può semplicemente modificare l'out-of-box pre-commit.tmpl in ambiente Windows che richiede x caratteri da inserire in un commento su impegnarsi in Tortoise Subversion a livello globale in modo che tutti i membri del team sono richieste che tale esigenza viene spinto verso il basso per i clienti provenienti da server SVN?
Non conosco il linguaggio di scripting e questo dovrebbe essere qualcosa di dannatamente semplice senza di me di prendere il tempo per capire di scripting per le prossime 3 ore.
Soluzione
Questo è un file .bat per richiedere c'è un commento. Si 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 / ganci del repository, denominato 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. 'S piuttosto che uno solo
svnlook log %REPOS% -t %TXN% | findstr .......... > nul
opzioni avanzate per il comando findstr ti consente di fare più elaborato controlli (set certo carattere, ect)
Altri suggerimenti
SubversionNotify , probabilmente fa più di quello che ti serve, ma è abbastanza semplice da configurare .
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
Ho un pre-commit hook che può fare esattamente ciò che tu vuoi. Oltre a un sacco di più.
- È possibile specificare una lunghezza minima di commettere un commento.
- È possibile abbinare il commento impegnarsi contro un espressione regolare . Non solo è possibile specificare una lunghezza, ma è anche possibile specificare alcuni parametri. Ad esempio, si fa il commit commento contiene una serie di bug che utilizza il sistema di tracciamento dei difetti, in modo da poter risalire il cambio ad un particolare difetto?
Permette inoltre di effettuare le seguenti operazioni:
- Imposta varie commettere permessi contro particolari file o directory:
- lettura-scrittura :. L'utente può checkout e commettere questi elementi
- di sola lettura :. L'utente può checkout questa voce, ma non può commettere modifiche
- aggiungere solo : L'utente può aggiungere una directory tramite
svn cp
, ma non commette alcuna modifica. Questo è perfetto per la directory/tags
in cui si è permesso di fare un tag, ma non modifica il tag. - no-delete :. Gli utenti possono commettere modifiche e aggiungere nuovi file, ma non eliminare questi file
- no-aggiungono :. Gli utenti possono commettere solo le modifiche, e non aggiungere o eliminare i file in un commit
E, permette anche di fare questo:
- Ban nomi certo file tramite espressioni regolari di globbing ,
- richiedono determinati file o directory hanno una particolare proprietà impostata su un determinato valore. Molto utile per cose come rendere sicuri gli script di shell Unix, Unix Makefile, e Windows file batch hanno la giusta linea finale o un
svn:ignore
è impostato, quindi gli utenti non commettono accidentalmente nei file non dovrebbero commettere. - Richiede alcune proprietà revisioni che saranno definite con certi valori. Questo è il modo di controllare messaggi di commit, ma dicendo che
svn:log
deve corrispondere certe espressioni regolari.
Questa pre-commit script è scritto in Perl. Per impostazione predefinita, Perl viene fornito con i server Unix, Mac e Linux. Purtroppo, non è disponibile nei computer Windows. Fortunatamente, ci sono diversi open source, gratuito e facile da installare i pacchetti Perl per il PC come ActivePerl e Strawberry Perl
In Windows, è possibile utilizzare il VisualSVNServerHooks.exe check-logmessage
pre-commit hook che viene fornito con VisualSVN Server e si trova nella directory %VISUALSVN_SERVER%bin
. Questo semplice strumento vi aiuterà a definire il numero minimo consentito di caratteri nel messaggio di log.
Si veda l'articolo KB140: Convalida commettere messaggi di log in VisualSVN Server per le istruzioni .