Trac、Mercurial集成项目管理工具组建

January 13th, 2011 no comment

我们的项目已经进行了半年,马上进入了第3个季度,慢慢的需求管理、缺陷管理的建立也需要提上日程。

从走在前面的3D引擎的开发状况看,需要有一个良好的bug管理系统来管理bug、记录需求等,于是决定用一个项目管理工具来实施,直接上Trac,并且要做到和我们的开发的版本管理工具Mercurial完全集成,Mercurial的安装见链接

首先ubuntu的apt reposity里只有trac 0.11.7,所以需要下载trac-0.12.1,导致一些安装需要手工安装。

使用0.12.1在于支持i18n,支持多个source reposity等,并且基于0.12版本的plugin较多。

[准备工作]

系统是ubuntu 10.04 LTS。

首先安装trac所需要的支持环境,采取先安装trac,然后再移除的方式安装依赖包:
apt-get install trac && dpkg -P trac

安装Genshi 0.6版本(下载),trac 0.12依赖此:
tar -xvzf Genshi-0.6.tar.gz && cd Genshi-0.6 && python setup.py install

安装Trac 0.12.1:
tar -xvzf Trac-0.12.1.tar.gz && cd Trac-0.12.1 && python setup.py install

[配置apache2]

目前使用mod_python方式运行trac,wsgi方式配置Trac mainnav一直出不来,很郁闷:(
apt-get install libapache2-mod-python

因为是通过 http://ipaddr/trac 访问的,修改/etc/apache2/sites-available/default,加入以下内容:

<Location /trac>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonInterpreter main
PythonOption TracEnv /data/trac/core-trac
PythonOption TracUriRoot /trac
SetEnv PYTHON_EGG_CACHE /tmp
AuthType Basic
AuthName "core trac password"
SetEnv PYTHON_EGG_CACHE /tmp
AuthUserFile /etc/apache2/hg.passwd
Require valid-user
</Location>

初始化trac库:
cd /var/www && mkdir trac && trac-admin trac/ initenv && trac-admin trac/ permission add xiaqingran TRAC_ADMIN

指定TRAC_ADMIN用户:
trac-admin trac/ permission add xiaqingran TRAC_ADMIN

[配置trac]

首先配置用户的trac权限,觉的命令行麻烦就用webadmin来吧。

配置mercurial,在trac中能浏览mercurial中的代码,能在commit代码的时候自动close ticket,并且把diff加入提案:

安装mercurial-plugin:
svn co http://svn.edgewall.com/repos/trac/plugins/0.12/mercurial-plugin
制作egg文件:
cd mercurial-plugin && python setup.py bdist_egg

进入webadmin界面,然后再plugin选项里安装刚刚生成的egg mercurial-plugin/dist/TracMercurial-0.12.0.23dev_r9953-py2.6.egg

重启apache2,刷新页面,看plugin是否enabled。

同时在plugin里把Trac 0.12.1里把tacopt.ticket.commit_updater.*下的插件打开,同时把TracMercurial里的所有插件enable。

进入WebAdmin -> Version Control -> Repositories加入相关的版本库,名称为client,版本库类型是hg,目录就选在在服务器上的hg目录。

[配置mercurial]

设定mercurial的hooks,使其在hg push时能同步修改trac,编辑hg服务器端的.hg/hgrc,加入以下两段:
[hooks]
commit = trac-admin /var/www/trac/ changeset added client %HG_NODE%
incoming = trac-admin /var/www/trac/ changeset added client %HG_NODE%

mercurial提交的时候按照此格式编写commit log:
- *Fixes #123* - to reference this changeset and close #123 ticket with the default status *fixed*

完毕,enjoy it.