zoukankan      html  css  js  c++  java
  • 集成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:EasyPHPapache 默认会使用windows 目录下的 php.ini 修改后,读取 easyphpapach 目录下

    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 o1logsvnfile_%REV%
    SET LOG_FILE=D:svn o1logsvnfile_%REV%_Log
    set APR_ICONV_PATH=D:EasyPHPSubversioniconv
    set PHPRC=D:EasyPHPapache
    set path=%path%;D:EasyPHPphp5;D:EasyPHPSubversionin;


    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:EasyPHPwwwmantiscorecheckin_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 = "/issue [#]{0,1}(d+)/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 o1logsvnfile
    SET LOG_FILE=D:svn o1logsvnfile_Log
    set APR_ICONV_PATH=D:EasyPHPSubversioniconv
    set PHPRC=D:EasyPHPapache
    set path=%path%;D:EasyPHPphp5;D:EasyPHPSubversionin;

    rem 把注释信息写入到 DETAILS_FILE
    svnlook log "%REPOS%" -t "%TXN%"  >>%DETAILS_FILE%

    rem 执行checkin_svn_pre_commit.php 进行校验缺陷单号 是否在缺陷系统中存在,如果不存在,返回输出信息到 log_file中
    php.exe D:EasyPHPwwwmantiscorecheckin_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:svnrepologsvnfile_%REV% 
    指的是svn代码库的地址,在这个地址下 建立一个log的目录,根据自动生成文件 
    2、 
    $g_source_control_account = 'SVN'; 
    需要在mantis建立一个 svn的 用户,这个用户要有添加注释的权利 
    3、php.exe E:wwwmantiscorecheckin.php <%DETAILS_FILE% >%LOG_FILE% 
    在使用easyphp的时候,注意php.ini 默认使用的是windows目录下的, 
    rem set PHPRC=D:EasyPHPapache 默认会使用windows 目录下的 php.ini 修改后,读取 easyphpapach 目录下的配置文件 
    不然总是mysql 连接错误 

    原文:http://www.cnblogs.com/birtc/archive/2007/05/16/748784.html

  • 相关阅读:
    javac 命令行使用总结
    电脑右键菜单的编辑(注册表操作)
    C++ —— 类模板的分离式编译
    命令行学习备份
    浏览器老是自动跳出广告垃圾网页
    SQL 事务
    Python中MySQL插入数据
    Python给数字前固定位数加零
    selenium+python3 鼠标事件
    mysql与mongodb命令对比
  • 原文地址:https://www.cnblogs.com/azhqiang/p/4371306.html
Copyright © 2011-2022 走看看