`
亚当爱上java
  • 浏览: 697855 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Windows下SVN hooks实例之强制写日志和修改日志

    博客分类:
  • SVN
阅读更多
在每次提交的时候写明提交的目的是一个很好的习惯,Subversion默认没有提供,但是可以通过钩子实现:

将下面的代码存为pre-commit.bat或pre-commit.cmd放到版本库的hooks目录下即可,当你不写日志提交的话就会报告错误。(如果你要使用,需要修改下面代码中的SVN_BINDIR为你的Subversion安装的程序目录,要注意SVN的安装路径中不能有空格!)

@echo off
set SVN_BINDIR=c:\svn_setup\bin
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
%SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo Empty log message not allowed!logmessage contains at least 10 characters! Commit aborted! 1>&2
exit 1


如果你配置了Subversion安装程序bin目录的环境变量名为SVN_BIN,则上面的“set SVN_BINDIR=c:\svn_setup\bin”可修改为“set SVN_BINDIR=%SVN_BIN%”。要注意的是,路径中的盘符必须为小写,大写会报错。
注:修改自Subversion官方网站。

2,可以修改历史日志

历史上的日志写的不好,我们希望修改,默认对Subversion是不允许的,并且会提示需要创建pre-revprop-change钩子。最简单的方式是创建一个空白的post-revprop-change.bat文件放到版本库的hooks目录下,但是这种方式不够严格,用户具备了修改所有属性的权利,例如修改作者的权利(可以提交垃圾然后栽赃嫁祸了)。所以要限制用户只能修改日志,所以有了下面的代码,将其存为pre-revprop- change.bat放到版本库的hooks目录下即可。

@ECHO OFF

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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 properties are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log revision properties 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 1 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics