สิ่งที่ติดตามมา ก็คือ Distributed Issue Tracker
Issue Tracker 2 ตัว ที่ลองเล่นก็คือ
ทั้งสองตัวนี้มีความเหมือนกัน 2 ประการคือ
- implement ด้วย ruby
- ใช้ควบคู่กับ git ได้ (ผ่านทาง ruby/git)
เริ่มที่เจ้า ticgit ก่อน
วิธีการใช้งาน ก็ตรงไปตรงมา
เริ่มจาก command line ของมัน ใช้ชื่อว่า 'ti'
การสั่ง ti ครั้งแรก มันจะแอบไปสร้าง branch ใน git repository ที่ชื่อ ticgit
$ git branch
* master
$ ti
I, [2008-04-22T12:21:53.049764 #7521] INFO -- : creating ticgit repo branch
Please specify at least one action to execute.
list state show new checkout comment tag
$ git branch
* master
ticgit
การสร้าง ticket ทำได้โดยการสั่ง
$ ti new -t 'my ticket'
I, [2008-04-22T12:24:38.588505 #7551] INFO -- : saving 1208841878_my-ticket_57
Title : my ticket
TicId : d00a299473633b5bd617375d1441617e56fea90d
Assigned : anon
Opened : Tue Apr 22 12:24:38 +0700 2008 (0 days)
State : OPEN
สังเกตุเลข Ticket Id ที่ใช้ SHA 40 ตัวอักษร สอดคล้องกับ Id ที่ git ใช้
ถ้าต้องการแสดง ticket ทั้งหมดที่มี ก็ใช้คำสั่ง
list
$ ti list
# TicId Title State Date Assgn Tags
--------------------------------------------------------------------------------
1 d00a29 my ticket open 04/22 anon
การทำงานกับ ticket ก็ให้ใช้คำสั่ง
checkout
$ ti checkout 1
$ ti list
# TicId Title State Date Assgn Tags
--------------------------------------------------------------------------------
* 1 d00a29 my ticket open 04/22 anon
สังเกตุว่าหลังจาก checkout แล้ว จะมี marker '*' ที่หน้าบรรทัด
แน่นอน เมื่อเป็น Issue Tracker, ดังนั้นในแต่ละ ticket เราสามารถใส่ comment ได้
$ ti comment -m 'my comment'
$ ti show
Title : my ticket
TicId : d00a299473633b5bd617375d1441617e56fea90d
Assigned : anon
Opened : Tue Apr 22 12:24:38 +0700 2008 (0 days)
State : OPEN
Comments (1):
* Added 04/22 12:32 by anon
my comment
feature ที่ขาดไม่ได้ ก็คือการ tag
ซึ่งช่วยให้เราสามารถค้น issue ได้ง่ายขึ้น
$ ti tag 1 ui
$ ti list -t ui
# TicId Title State Date Assgn Tags
--------------------------------------------------------------------------------
* 1 d00a29 my ticket open 04/22 anon ui
ลองดูวิธีการเก็บข้อมูลของมันบ้าง
เนื่องจากเรารู้ว่ามันแอบเก็บข้อมูลไว้ใน branch "ticget" เราก็เลยสามารถใช้คำสั่ง checkout เพื่อดู file ที่มันเก็บได้เลย
$ ls
hello
$ git checkout ticgit
Switched to branch "ticgit"
$ ls
1208841878_my-ticket_57
$ ls 1208841878_my-ticket_57/
ASSIGNED_anon COMMENT_1208842341_anon STATE_open TAG_main TAG_ui TICKET_ID
$ cat 1208841878_my-ticket_57/COMMENT_1208842341_anon
my comment
ดูจากชื่อ file แล้ว จะเห็นว่ามันเก็บ meaning ไว้ในชื่อ file เลย
ที่นี้ลองไปดูเจ้า ditz บ้าง
การใช้งาน ditz เริ่มต้นด้วย การ init database ก่อน
$ ditz init
Name (enter for "pok"): projectName
Issues can be tracked across the project as a whole, or the project can be
split into components, and issues tracked separately for each component.
Track issues separately for different components? (y/n): y
Current components:
None!
(A)dd component, (r)emove component, or (d)one: a
Component name: ui
Current components:
1) ui
(A)dd component, (r)emove component, or (d)one: a
Component name: domain
Current components:
1) ui
2) domain
(A)dd component, (r)emove component, or (d)one: d
Ok, bugs directory created successfully.
จะเห็นว่า ditz มี data model มากกว่า ticgit
Issue แต่ละอันที่สร้้างขึ้นมา จะต้องระบุว่ามันเป็นของ component ไหนด้วย
นอกจากมุมมองในส่วน component, ditz ยังเพิ่มมุมมองในส่วนของ release ด้วย
$ ditz add-release
Name: 0.1
Comments (ctrl-d, ., or /stop to stop, /edit to edit, /reset to reset):
> remark for release 0.1
> Added release 0.1.
ลองเพิ่ม issue ลงใน ditz
$ ditz add
Title: feature x
Description (ctrl-d, ., or /stop to stop, /edit to edit, /reset to reset):
> long remark for feature x
> Is this a (b)ugfix or a (f)eature? f
Choose a component:
1) projectName
2) ui
3) domain
Component (1--3): 3
Assign to a release now? (y/n): y
Assigning to release 0.1.
Issue creator (enter for "Polawat Phetra"):
Comments (ctrl-d, ., or /stop to stop, /edit to edit, /reset to reset):
> Added issue domain-1.
You may have to inform your SCM that the following files have been added:
bugs/issue-911f48717bbca30266d6ed1cdea7819b57158afc.yaml
Issue แต่ละ Issue สามารถเลือก assign ให้กับ release ได้
$ ditz todo
Version 0.1 (unreleased):
_ domain-1: feature x
Unassigned:
_ ui-1: hi
$ ditz assign ui-1
Issue ui-1 currently not assigned to any release.
Choose a release:
1) 0.1 (unreleased)
Release (1--1): 1
Comments (ctrl-d, ., or /stop to stop, /edit to edit, /reset to reset):
> Assigned ui-1 to 0.1.
การที่มี release ทำให้เราสามารถ track ความคืบหน้าได้ (ทำนองเดียวกับ trac)
$ ditz status
0.1 0/ 0 (100%) bugs, 0/ 2 ( 0%) features __
ส่วนรูปแบบการเก็บ เจ้า ditz เลือกเก็บโดยใช้ format yaml
ซึ่งสะดวกมากสำหรับการแก้ไขด้วยมือ
$ ls
bugs hello
$ ls bugs
issue-911f48717bbca30266d6ed1cdea7819b57158afc.yaml project.yaml
issue-fd2e35242ef0bd1db18fc8c0415ffedcf2dbf0cd.yaml
$ cat bugs/issue-911f48717bbca30266d6ed1cdea7819b57158afc.yaml
--- !ditz.rubyforge.org,2008-03-06/issue
title: feature x
desc: long remark for feature x
type: :feature
component: domain
release: "0.1"
reporter: Polawat Phetra
status: :unstarted
disposition:
creation_time: 2008-04-22 06:42:19.702124 Z
references: []
id: 911f48717bbca30266d6ed1cdea7819b57158afc
log_events:
- - 2008-04-22 06:42:21.838025 Z
- Polawat Phetra
- created
- ""
$ cat bugs/project.yaml
--- !ditz.rubyforge.org,2008-03-06/project
name: projectName
version: "0.2"
components:
- !ditz.rubyforge.org,2008-03-06/component
name: projectName
- !ditz.rubyforge.org,2008-03-06/component
name: ui
- !ditz.rubyforge.org,2008-03-06/component
name: domain
releases:
- !ditz.rubyforge.org,2008-03-06/release
name: "0.1"
status: :unreleased
release_time:
log_events:
- - 2008-04-22 06:40:33.376540 Z
- Polawat Phetra
- created
- remark for release 0.1