Skip to content
bartman edited this page Sep 13, 2010 · 4 revisions

= Git Bug/Case/Issue/Ticket Tracker =

== Repo ==

  • via ssh: tachyon.jukie.net:/home/git/git-case.git
  • public: git://tachyon.jukie.net/git-case.git
  • http://dist-bugs.kitenet.net/people/bartman/git-case/index.html

Please read the README.

== Requirements ==

  • interface
    • git-svn like
    • git case
  • aidan and dave want email integration
  • internal
    • needs multiple bug databases (one per branch, public/private, etc)
    • do as much as possible using native git features (wheel reinvention is bad)
    • Comment storage should support “threading” of comments (maildir/mbox)
    • needs to specify where the case is being worked on (sha1 git work-tree HEAD)
    • needs to support custom “fields”
  • repository layout
    • One directory per case
  • description file
    • editable like any other metadata
    • initially populated from first comment

== Things to think about ==

  • export and import
    • need to be able to post cases from the db to a mailing list and get them back after
    • git case export
    • git case import < file
  • products and components
    • some trackers split their database into multiple databases based on where the bug lives
    • we could do it with custom fields, or we coudl handle it explicitly
  • default owners
    • some trackers have default owners (usually per product/component)
    • when a case is created, it goes to the default owner
    • some trackers go further and have a default asignee per state
      • new bugs go to team lead person
      • resolved bugs go to testing team
      • reviewed bugs go to documentation guy
      • closed bugs go to someone else
    • this could be handled with custom fields and hooks, or could be explicit
  • dependency
    • bug A depends on B, thus B blocks A
    • can be done with custom fields, or could be explicit
  • severity and priority
    • severity: does it break things?
    • priority: how soon should it be fixed?
    • this should probably be done with custom fields, different projects will have different names for priority and severity
      • example: git case mark severe P1 blocker
  • git-case hooks
    • it would be nice if we could take hooks with us
    • maybe we could store it in the cases tree…
  git show cases:hooks/
  hooks/
  |-- state-new       # called on new cases
  |-- state-resolved  # called on resolved cases
  |-- state           # called on any other state
  `-- ...
  • these script could be used to implement a policy, but be completely configurable via git-config and by editing the scripts.
  • the alternative is to put hooks in .git/hooks
    • this sucks because they will not travel with us when we clone
  • IMPORTANT: if we carry hooks around, we have to make sure that they cannot execute arbitrary code… otherwise someone could fetch bugs from another repo and be exploited
    • [bartman] thinks that we need a small language for the hooks; and if you know [bartman] you know what language he is going to suggest.
      • possible example: if changed(state, open|assigned|active, resolved) { assigned=qa@domain.com }

== Repository layout ==

  <id>/               # directory per case
  |-- description     # 1st line title, then free form description
  |-- type            # bug/feature/question/...
  |-- found           # git commit worktree was in when case created RO
  |-- state           # new/open/invalid/etc
  |-- assigned        # name <email>
  |-- marks/          # list of marks - tags in most tracker talk
  |   `-- <name>      # empty file
  |-- comments/       # comments, one per file
  |   `-- <sha1>      # contains arbitrary text
  |-- files/          # attachements to the case/comment
  |   `-- <filename>/ # the name of the dir is actually the name of the file
  |       `-- <sha1>  # hash of the file, contais the file
  |-- ids/            # commits for which the state of thsi bug is known
  |   `-- <sha1>      # file contains either 'good' or 'bad'
  `-- fields/         # additional fields
      `-- <name>      # contains one line of text
  • NOTES
    • ‘version’ was removed; no special handling; punting to field/
  • attachments
    • can be referenced by comments (in the text)
    • same filename can be used from multiple attachments, but could actually be a different sha1
    • file contents can be obtained with git plumbing, or by following files// because the is the same that is computed by git

== Interface ==

  • everything needs options
  • everything needs colours (configurable)
  • need options in git-config
  • consider having optional banners
    • git config case.banners [yes|no|auto]
    • auto would show them only for terminal output (not into a pipe)
  • nothing workes fully, but these are kinda working
    • git-case-new []
    • git-case-list [-m ] [-c =] […grep options…]
    • git case active
    • git case comment [… email options…] [-a ] [-M ] [[-m] ]
    • git case show [-v] []
    • git case attach []
    • git case mark [-d] [] …
    • git case field [-d] [] []
    • git case state []
    • git case ids l] [ [-g|-b|-d] [| [] ] # show/set/clear good/bad commits
  • here are some other ideas
    • git case grep [—[desc|comment|field|mark]= …] []
  • thing to do
    • input restrictions, marks and custom field names should be [a-zA-Z-9][a-zA-Z0-9._-]*

== Cool things to try ==

  • Integration with gitk
    • graph showing cases and arrows to commits they reference
  • Integration with git hooks
    • commit hooks could check for “closes: ” etc
  • Integration with git-web (cgit, etc)
    • display and possibly edit cases through the web ui
  • Integration with irc (bidirectional, bot)
    • list, add, comment, modify cases from an irc channel
  • Integration with git bisect
    • knowing where the bug was found and presumably fixed, we could do some neat bisecting
    • maybe find it on other branches, etc.
  • Integration with BTS and other bug trackers that send out email
    • automatically update local state
    • the plan is to sell this to existing users (take lessons from git-svn)
  • RSS feeds for cases, RSS feeds for new cases, RSS feeds for search criteria

== Similar tools ==

  • http://ditz.rubyforge.org/
  • http://gitorious.org/projects/dtt
  • http://github.com/schacon/ticgit/wikis
  • http://www.ditrack.org/
Clone this wiki locally