赖勇浩(http://laiyonghao.com)
Trac 的工作流 ticket-workflow 其实是一个状态图。一个 ticket 从出生到消亡,经历许多状态,相关人员的工作(Action)推动着这些状态变化。在早期,Trac 的 ticket-workflow 是很简陋的和固定的(见上图),显然,这并不能普适广大用户的需求,所以自 0.11 版本开始,Trac 抛弃了之前固定的 ticket-workflow,开始使用可以由用户自定义的 ConfigurableTicketWorkflow,至此,针对 ticket 的工作流可以由插件控制。下面我们先回顾一下 v0.11 新的默认工作流,并从中了解一些基本概念,如状态(state),动作(action)等:
如上图,每一个节点称为状态(state),而连接结点的有向边称为动作(action),由状态和动作可以构建出状态转换表。上图共有 new、assigned、accepted、reopened 和 closed 等共 5 种状态,每一条 Ticket 必定处于这些状态之一。当一个动作(action),如 reassign、accept、resolve 或 reopen 作用在其上时,它的状态就改变为下一个状态。通常而言,不同的状态意味着这个 ticket 正在由不同的团队负责完成其中的一部分工作,并将在这个团队完全其所负责的这部分工作后,转换到下一状态。关于此点一一说明如下:
我们团队刚开始时使用默认的 basic-workflow,后来发现有几点不足:
针对上述问题,我们通过编辑 trac.ini 文件的 ticket-workflow 一节,定制了自己的工作流,我们工作流的状态转换图如下:
通过上图,可以看到工作流的主线 new->accepted->resolved->closed,比上面的版本都要明晰。我们去掉了 reopened 状态,代之以 assigned 状态,因为这两个状态本来就很相似,当 reopen 一个 closed ticket 时,需要指定一个 owner,并进入到 assigned 状态,其中关键配置是: