SVN hooks for Windows

后端 未结 9 933
温柔的废话
温柔的废话 2021-01-30 00:18

I did a little googling and found that there isn\'t really a resource of SVN hooks for Windows. So I figured I\'d start a wiki here to centralize it.

If you contribute,

相关标签:
9条回答
  • 2021-01-30 00:45

    Prevent edits to revision props other than svn::log

    1. pre-revprop-change.bat
    2. Prevents edits to revision properties other than svn::log (alternate version)

    Source:

    rem Only allow log messages to be changed.
    if "%4" == "svn:log" exit 0
    echo Property '%4' cannot be changed >&2
    exit 1
    
    0 讨论(0)
  • 2021-01-30 00:48

    Checks for common "lazy" commit messages

    1. The name of the hook = pre-commit
    2. What the script does = Check for blank line or '.' line. Also check a file of words not allowed to be the sole comment.

    The actual script

    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 Check if comment is in list of reserved words to not be used..
    
    "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 Check that the author of this commit has the rights to perform
    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
    

    Sample Excluded words file: Updated updated updated. Updated. Fix fix Fix. fix. .. . ... . . . . sorted sorted. Sorted Sorted.

    etc etc etc etc

    0 讨论(0)
  • 2021-01-30 00:54

    Prevents edits to revision props other than svn::log

    1. pre-revprop-change.bat
    2. Prevents edits to revision properties other than svn::log

    @ECHO OFF
    :: Set all parameters. Even though most are not used, in case you want to add
    :: changes that allow, for example, editing of the author or addition of log messages.
    set repository=%1
    set revision=%2
    set userName=%3
    set propertyName=%4
    set action=%5
    
    :: Only allow the log message to be changed, but not author, etc.
    if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
    
    :: Only allow modification of a log message, not addition or deletion.
    if /I not "%action%" == "M" goto ERROR_ACTION
    
    :: Make sure that the new svn:log message is not empty.
    set bIsEmpty=true
    for /f "tokens=*" %%g in ('find /V ""') do (
    set bIsEmpty=false
    )
    if "%bIsEmpty%" == "true" goto ERROR_EMPTY
    
    goto :eof
    
    :ERROR_EMPTY
    echo Empty svn:log messages are not allowed. >&2
    goto ERROR_EXIT
    
    :ERROR_PROPNAME
    echo Only changes to svn:log messages are allowed. >&2
    goto ERROR_EXIT
    
    :ERROR_ACTION
    echo Only modifications to svn:log revision properties are allowed. >&2
    goto ERROR_EXIT
    
    :ERROR_EXIT
    exit /b 1
    
    0 讨论(0)
  • 2021-01-30 00:56

    This hook prevents commits to a specific branch

    (branch-16E in this case):

    setlocal
    
    rem Subversion sends through the path to the repository and transaction id  
    set REPOS=%1
    set TXN=%2
    
    rem Committing to a branch is not allowed
    svnlook changed -t %TXN% %REPOS% | findstr "\/branch-16E"
    if %errorlevel% EQU 0 goto errb else exit 0
    
    :errb
    echo. 1>&2
    echo This branch was closed. If you want to commit here contact your administrator. 1>&2
    exit 1
    
    0 讨论(0)
  • 2021-01-30 01:00

    I like to use subHooker, which is coded in java. It provides pre and post commit hook functionality.

    Pre commit:

    • Enforces commit message requirement, or minimal length or both (or not)
    • Can enforce a RegEX expression requirements in the commit message, good for requiring a back-log or defect number (or not)

    Post Commit:

    • Send HTML or Plain text e-mail messages
      • Both plain and html messages use a template system
      • Can turn diff on or off
      • Can turn change set on or off
    • supports localization
    • supports standardized logging.

    You can find it on google code @ http://code.google.com/p/subhooker/

    It's free, and yes, I am the author, I've been running subversion for a few years now, I love it a lot which is why I am contributing this back to the community.

    0 讨论(0)
  • 2021-01-30 01:02

    * UPDATE: This no longer works, as Twitter has deprecated username/password authentication in favor of OAuth. *

    Publishes commit info to Twitter

    1. The name of the hook = post-commit
    2. What the script does = publishes the revision, author, and commit message to Twitter

    Usage notes:

    • Replace twitterUsername and twitterPassword with your actual Twitter
    • This is tested against VisualSVN, and the only way I could get it to work was by dumping everything into a hard-coded path, c:\hook\post-commit. You can change that to any path that VisualSVN has read/write access to.
    • Requires Wget to be installed. Installer can be downloaded here
    • Comments and improvements welcome. This is my first SVN hook on Windows and my GAWD was it a pain.

    The actual script

    echo status= > c:\hook\post-commit\msg.txt
    echo Rev#%2 by >> c:\hook\post-commit\msg.txt
    "%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %2 %1 >> c:\hook\post-commit\msg.txt
    "%VISUALSVN_SERVER%\bin\svnlook.exe" log -r %2 %1 >> c:\hook\post-commit\msg.txt
    "c:\Program Files (x86)\GnuWin32\bin\wget.exe" --user=twitterUsername --password=twitterPassword --post-file=c:\hook\post-commit\msg.txt --append-output=c:\hook\post-commit\log.txt --output-document=c:\hook\post-commit\download.txt --delete-after http://twitter.com/statuses/update.xml
    
    0 讨论(0)
提交回复
热议问题