mantis config_inc.php g_source,集成SVN源码管理和Mantis缺陷跟踪

首先在TortoiseSVN里设置一下项目的属性,右键点击目录,属性,在subversion一栏里,加入这几个属性

bugtraq:label = issue

bugtraq:url = http://%3cmantisserver%3e/mantis/view.php?id=%BUGID%

bugtraq:message = issue %BUGID%

bugtraq:warnifnoissue = true

到对应的SVN版本库里,找到hooks目录,建立一个post-commit.bat文件,将以下内容拷入:

REM Post-commit hook for MantisBT integration

rem REPOS svn版本库的路径

rem REV 版本信息

rem DETAILS_FILE 是版本库的目录,在版本库目录下建立一个log的目录,用来存放日志

rem set PHPRC=D:\EasyPHP\apache 默认会使用windows 目录下的 php.ini 修改后,读取 easyphp\apach 目录下

rem 拷贝了 checkin.php 进行修改,重新命名 为 checkin_svn.php 如果有中文传输,需要修改 checkin_svn.php

rem 增加抓换函数 $t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");

rem 修改位置在 “ foreach ( $t_issues as $t_issue_id ) { ”前面

rem mb_convert_encoding 此函数需要扩展文件php_mbstring.dll的支持~~

rem $t_comment   = iconv("UTF-8","GB2312//TRANSLIT",$t_comment);  据说这个编码转换效率更高

SET REPOS=%1

SET REV=%2

SET DETAILS_FILE=D:\svn\no1\log\svnfile_%REV%

SET LOG_FILE=D:\svn\no1\log\svnfile_%REV%_Log

set APR_ICONV_PATH=D:\EasyPHP\Subversion\iconv

set PHPRC=D:\EasyPHP\apache

set path=%path%;D:\EasyPHP\php5;D:\EasyPHP\Subversion\bin;

echo ****** Source code change ******>>%DETAILS_FILE%

echo SVN 修改人: >>%DETAILS_FILE%

svnlook author -r %REV% %REPOS%>>%DETAILS_FILE%

echo SVN 修改日期: >>%DETAILS_FILE%

svnlook date -r %REV% %REPOS%>>%DETAILS_FILE%

echo SVN 版本:  >>%DETAILS_FILE%

echo %REV%>>%DETAILS_FILE%

echo SVN 提交注释: >>%DETAILS_FILE%

svnlook log -r %REV% %REPOS%>>%DETAILS_FILE%

echo SVN 修改明细: >>%DETAILS_FILE%

svnlook diff -r %REV% %REPOS%>>%DETAILS_FILE%

rem php.exe .\checkin_svn.php 信息文件日志文件

php.exe D:\EasyPHP\www\mantis\core\checkin_svn.php %LOG_FILE%

del %DETAILS_FILE%

del %LOG_FILE%

最后,修改mantis安装目录下的config_inc.php,加入以下内容(mantis系统里要有SVN用户):

$g_source_control_notes_view_status = VS_PUBLIC;

$g_source_control_account = 'SVN';

$g_source_control_set_status_to = OFF;

$g_source_control_regexp = "/\bissue [#]{0,1}(\d+)\b/i";

完成这些步骤后,就可以在SVN提交新版本时,同时发布内容到对应的缺陷跟踪系统了。

比如,修改了一个源文件,svn commit时,在右上的issue栏目里输入要提交到的具体的 issue/bug  编号,

然后在下面的message框内输入具体的描述,svn的hook就会自动往mantis里对应的条目里写入你提交时输入的这些内容。

完成以上工作后使用过程中还存在一些问题

1、缺陷号没有强制输入,如果没有输入缺陷号,仍然可以提交

2、输入了错误的缺陷号,系统仍然提交,但是缺陷系统中没有相关的内容

解决这个问题,需要在提交前,对缺陷信息进行校验

一、创建 pre-commit.bat 校验缺陷号

REM pre-commit.bat hook for MantisBT integration

set REPOS=%1

set TXN=%2

SET DETAILS_FILE=D:\svn\no1\log\svnfile

SET LOG_FILE=D:\svn\no1\log\svnfile_Log

set APR_ICONV_PATH=D:\EasyPHP\Subversion\iconv

set PHPRC=D:\EasyPHP\apache

set path=%path%;D:\EasyPHP\php5;D:\EasyPHP\Subversion\bin;

rem 把注释信息写入到 DETAILS_FILE

svnlook log "%REPOS%" -t "%TXN%"  >>%DETAILS_FILE%

rem 执行checkin_svn_pre_commit.php 进行校验缺陷单号 是否在缺陷系统中存在,如果不存在,返回输出信息到 log_file中

php.exe D:\EasyPHP\www\mantis\core\checkin_svn_pre_commit.php %LOG_FILE%

rem 校验log_file中是否有内容,如果有内容,转入到出错提示

FOR /F "tokens=1,2* delims= " %%i in (%LOG_FILE%) do goto err

del %DETAILS_FILE%

del %LOG_FILE%

exit 0

:err

echo 缺陷单不存在,请正确填写缺陷单号,提交终止! 1>&2

del %DETAILS_FILE%

del %LOG_FILE%

exit 1

二、创建checkin_svn_pre_commit.php 到数据库中校验缺陷单信息

拷贝 checkin.php 内容 新建checkin_svn_pre_commit.php 文件

删除 # add note to each bug only once 之后的到 exit( 0 ); 内容,修改为以下内容

# add note to each bug only once

$t_issues = array_unique( $t_issues );

$t_fixed_issues = array_unique( $t_fixed_issues );

$t_issues_svn = array_unique( $t_issues );

# 编码转换.

$t_comment = mb_convert_encoding($t_comment, "utf-8","GB2312");

# 判断数据库中的 缺陷单号是否存在

foreach ( $t_issues_svn as $t_issue_id ) {

$query = "SELECT *

FROM mantis_bug_table

WHERE bug_text_id='$t_issue_id'";

$result = db_query( $query );

$issues_raw_count = db_num_rows( $result );

if ($issues_raw_count  == 0){

echo "$t_issue_id";

}

}

exit( 0 );

至此大部分的工作都已经完成,但是还存在一些问题

1 新增等操作的时候,有时候提交没有出现收入 issue 提示框,但是此时仍然需要输入缺陷号

测试可以要求,在提交注释的时候,按照 issue 1 形式手工写入缺陷单号,即可提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值