集成SVN源码管理和Mantis缺陷跟踪
集成SVN源码管理和Mantis缺陷跟踪 (windows)
要集成Mantis和SVN,需要几个工具:
SVN客户端,TortoiseSVN,下载地址: http://tortoisesvn.net/
SVN服务端,这个应该都有吧。
Mantis缺陷跟踪系统 http://www.mantisbt.org/
首先在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 <%DETAILS_FILE%>%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 <%DETAILS_FILE%>%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 形式手工写入缺陷单号,即可提交
几点说明:
1、
SET DETAILS_FILE=E:\svnrepo\log\svnfile_%REV%
指的是svn代码库的地址,在这个地址下 建立一个log的目录,根据自动生成文件
2、
$g_source_control_account = 'SVN';
需要在mantis建立一个 svn的 用户,这个用户要有添加注释的权利
3、php.exe E:\www\mantis\core\checkin.php <%DETAILS_FILE% >%LOG_FILE%
在使用easyphp的时候,注意php.ini 默认使用的是windows目录下的,
rem set PHPRC=D:\EasyPHP\apache 默认会使用windows 目录下的 php.ini 修改后,读取 easyphp\apach 目录下的配置文件
不然总是mysql 连接错误
原文:http://www.cnblogs.com/birtc/archive/2007/05/16/748784.html
集成SVN源码管理和Mantis缺陷跟踪的更多相关文章
- jenkins svn源码管理小记
之前对Jenkins管理SVN源码的逻辑不太清楚,简单研究了一下.对于一般的开发通常会有以下三个环境: 1.svn服务器 2.Jenkins服务器 3.开发服务器(部署测试版web应用或者其他应用) ...
- SVN源码服务器搭建-详细教程
一.引言 笔者曾经试图在网上搜索一篇关于SVN源代码服务器搭建方面的中文技术文章,可惜,所找到的,要么是不完整,要么就是对笔者没什么帮助的文章,TortoiseSvn的帮助文档固然强大,但因为是英文, ...
- (转)SVN源码管理(上&下)
原文地址:http://www.cnblogs.com/IPrograming/archive/2012/12/15/SVN_1.html 使用SVN进行源码管理(上) 在原来的项目中使用的源码管理工 ...
- SVN源码泄露漏洞
SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范.“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息 ...
- 程序猿媛 九:Adroid zxing 二维码3.1集成(源码无删减)
Adroid zxing 二维码3.1集成 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段. 转载请保留原文出处“http://my.oschina.net/gluoyer/blog”, ...
- 集成xadmin源码到项目的正式姿势
xadmin是强大的,但是为了更好的后期定制开发,可能会修改到xadmin的源码. 因此还是推荐将xadmin源码集成到自己的项目中. 1.pip install xadmin 安装xadmin的模块 ...
- springboot集成mybatis源码分析(一)
本篇文章只是简单接受使用,具体源码解析请看后续文章 1.新建springboot项目,并导入mybatis的pom配置 配置数据库驱动和mybatis dependency <dependenc ...
- spring cloud集成 consul源码分析
1.简介 1.1 Consul is a tool for service discovery and configuration. Consul is distributed, highly ava ...
- springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三)
例: package com.example.demo.service; import com.example.demo.dao.UserDao; import com.example.demo.do ...
随机推荐
- 如何修改WP文章字体格式、字号大小、字体颜色
在使用wordpress编辑文章的时候,很多朋友会像小编一样,发现它并没有像word文档一样有修改字体样式.字体大小.字体颜色.分页符等功能按钮,对我们写文章极为不便,原因是wordpress默认使用 ...
- scrollview 滚动布局
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layou ...
- Hadoop(三)HDFS读写原理与shell命令
一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...
- centos7 时间同步
yum -y install ntp systemctl enable ntpd systemctl start ntpd ntpdate -u cn.pool.ntp.org
- Java 中的静态嵌套类和非静态嵌套类
Java 中的静态嵌套类和非静态嵌套类 术语:嵌套类分为两类:静态嵌套类和非静态嵌套类.声明 static 的嵌套类称为静态嵌套类,非静态嵌套类也称为内部类. class OuterClass { p ...
- 删除 list 集合中的元素
删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...
- thinkphp5.0 API友好
新版ThinkPHP针对API开发做了很多的优化,并且不依赖原来的API模式扩展. 数据输出 新版的控制器输出采用Response类统一处理,而不是直接在控制器中进行输出,通过设置default_re ...
- 洛谷P3444 [POI2006]ORK-Ploughing [枚举,贪心]
题目传送门 ork 格式难调,题面就不放了. 分析: 一道偏难的贪心和枚举题.考试的时候是弃疗了...yyb巨佬已经讲的很详细了,推荐他的博客.这里小蒟蒻就只放代码了. Code: #include& ...
- Python类总结-封装(私有属性,方法)
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...
- 实验 Unity Linear Color Space 发现结果不符合预期
美术前上个礼拜找我问光照图总是烘焙过暗的问题,一时兴起我在 Gamma 和 Linear 两个颜色空间切换了下,发现一个 Shader 明暗不同,另一个 毫无变化,于是激发了我去研究下在 Unity ...