1 schwabrak -- simple flat file based issue tracker
 
   3 Note: this is the second version/iteration/suggestion.
 
   4 Look for previous one in older commits.
 
   6 I want a relatively simple issue/ticket tracker. Something like Trac,
 
   7 Redmine or Fossil. But they require heavy dependencies (Python, Ruby),
 
   8 database and they are centralised. You can not work with them offline
 
   9 and it is relatively complicated to replicate data to a locally running
 
  10 copy of any of those trackers (well, except for Fossil I believe). And
 
  11 is a web-interface necessary at all?
 
  13 What is a ticket/issue? Just some plain text descriptions, with attached
 
  14 enumerations (statuses, assignments, priorities, projects, subsystems,
 
  15 severities, resolutions, etc) and a pile of append-only comments,
 
  16 possibly with another file attachments. Can all of that live in a
 
  17 directory with several plain text files? Do Git commits provide
 
  18 supplementary metainformation about when and by whom any of the change
 
  19 is made in that directory? Definitely yes! And because of DVCS you get
 
  20 ability to keep the whole distributed copy of the tracker on each
 
  21 developer's machine. You can send changes to it asynchronously as a
 
  24 Basically schwabrak is mainly about a convention how to keep issues in
 
  25 files, loosely similar to
 
  26 https://github.com/driusan/PoormanIssueTracker
 
  27 https://github.com/driusan/IssueTrackerTools
 
  28 https://github.com/aaiyer/bugseverywhere
 
  30 Each issue is kept in separate directory. Directory's name is the
 
  31 issue's brief name. Dashes should be interpreted as spaces and n > 1
 
  32 dashes should be interpreted as n-1 dashes when converting the directory
 
  33 name to a human readable issue title, as PoormanIssueTracker suggests.
 
  35 The "about" file contains the description of the issue. The "result"
 
  36 (initially empty) contains the resolved issue information. The "meta"
 
  37 file contains metainformation in recfile format, having at least
 
  38 "created" fields. https://www.gnu.org/software/recutils/
 
  40 Root directory should contain *.rec files with the schema of the
 
  47     %mandatory: name email
 
  54     email: stargrave@stargrave.org
 
  59     %mandatory: name created
 
  60     %unique: name created about result
 
  61     %allowed: about result ass proj status
 
  73     + done (task is finished)
 
  75     + wip (work in progress)
 
  77 Schema of the issues/tasks must be trailing *.rec file after the sort.
 
  79 Want to search among the issues? Just use git grep, or ordinary grep!
 
  80 Want to search through attached PDFs or other kind of documents? You are
 
  81 free to index issues directory with something like recoll. Want to see
 
  82 the whole history of changes related to specific issues? Just run
 
  85 You can edit meta files either manually (it is trivial text-based
 
  86 human-friendly format) or with recset utility. Add "dep: foo-bar" field
 
  87 and press "gf" in your Vi editor to go to "foo-bar" directory of the
 
  90           ------------------------ >8 ------------------------
 
  92 "metas" script exports the whole issues database without about/result
 
  93 fields. "show" includes them. "full" also prepends *.rec files to the
 
  94 output. They are expected to be filtered with recsel/recdel utilities.
 
  95 "cd" lists all issues piped to "fzf" utility, that previews each one
 
  98 Personally I "hash -d" schwabrak's directory to be able to quickly call
 
 101     $ hash -d s=~/work/schwabrak
 
 103     $ ~s/add issue name to create
 
 105 To ease the creation of the new issue's directory structure, you can use
 
 106 "add" command as seen above. And yes, it is intended that "issue" and
 
 107 "name", "to", "create" can be passed as separate arguments, but
 
 108 issue-name-to-create will be created as expected.
 
 110           ------------------------ >8 ------------------------
 
 112 Person:         ~s/schemas | recsel -t person -e 'email ~ "stargrave"'
 
 113 Unfinished tasks: ~s/metas | recsel -e 'status != "done"'
 
 114 Full tasks info for person and project: ~s/full |
 
 115     recsel -t task -e 'ass = "stargrave" && proj = "tcl"'
 
 117           ------------------------ >8 ------------------------
 
 119 The "comment" issue's file is intended to keep the last comment related to
 
 120 the issue. By committing it you automatically accompany it with your
 
 121 (commit's author) name and the time it was added.
 
 123     $ cat >issue-name/comment <<EOF
 
 124     Here are my thoughts:
 
 127     $ git commit issues-name/comment
 
 129 And you can view all comments/authors history later just with:
 
 131     $ git log -p issues-name/comment