Commit cc831d9688e8397caac62b7a742f657da1888039

pulled release 0.2

Commit diff

Changelog

 
1== 0.2 / 2008-04-11
2* bugfix: store each issue in a separate file to avoid false conflicts
3* added per-command help
4* added 'log' command for recent activity
5* added better exception handling---turn into pretty error messages
6* added text-area commands like /edit, /reset, etc
7* all times now stored in UTC
18== 0.1.2 / 2008-04-04
29* bugfix: add_reference very broken
310== 0.1.1 / 2008-04-04
toggle raw diff

Manifest.txt

 
11Changelog
22README.txt
33Rakefile
4ReleaseNotes
45bin/ditz
6bin/ditz-convert-from-monolith
57lib/component.rhtml
68lib/ditz.rb
79lib/html.rb
toggle raw diff

README.txt

 
88
99Ditz is a simple, light-weight distributed issue tracker designed to work with
1010distributed version control systems like darcs and git. Ditz maintains an issue
11database file on disk, written in a line-based and human-editable format. This
12file is kept under version control, alongside project code. Changes in issue
13state is handled by version control like code change: included as part of a
14commit, merged with changes from other developers, conflict-resolved in the
15standard manner, etc.
11database directory on disk, with files written in a line-based and human-
12editable format. This directory is kept under version control alongside
13project code. Changes in issue state is handled by version control like code
14change: included as part of a commit, merged with changes from other
15developers, conflict-resolved in the standard manner, etc.
1616
1717Ditz provides a simple, console-based interface for creating and updating the
18issue database file, and some rudimentary HTML generation capabilities for
18issue database files, and some rudimentary HTML generation capabilities for
1919producing world-readable status pages. It offers no central public method of
2020bug submission.
2121
toggle raw diff

Rakefile

 
3333end
3434
3535task :upload_webpage => WWW_FILES do |t|
36 sh "scp -C #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
36 sh "rsync -essh -cavz #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
3737end
3838
3939task :upload_webpage_images => (SCREENSHOTS + SCREENSHOTS_SMALL) do |t|
40 sh "scp -C #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
40 sh "rsync -essh -cavs #{t.prerequisites * ' '} wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
4141end
4242
4343task :upload_report do |t|
4444 sh "ruby -Ilib bin/ditz html ditz"
45 sh "scp -Cr ditz wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
45 sh "rsync -essh -cavz ditz wmorgan@rubyforge.org:/var/www/gforge-projects/ditz/"
4646end
4747
4848# vim: syntax=ruby
toggle raw diff

ReleaseNotes

 
10.2
2---
3
4In ditz 0.2, we store issues per file. This avoids many unnecessary conflicts
5that occur in the single-file case.
6
7To upgrade your bugs.yaml to a bugs/ directory, you must run
8ditz-convert-from-monolith.
toggle raw diff

bin/ditz

 
11#!/usr/bin/env ruby
22
33require 'rubygems'
4require 'fileutils'
45require 'trollop'; include Trollop
56require "ditz"
67
8PROJECT_FN = "project.yaml"
9CONFIG_FN = ".ditz-config"
10def ISSUE_TO_FN i; "issue-#{i.id}.yaml" end
11
712$opts = options do
813 version "ditz #{Ditz::VERSION}"
9 opt :issue_file, "Issue database file", :default => "bugs.yaml"
10 opt :config_file, "Configuration file", :default => File.join(ENV["HOME"], ".ditz-config")
14 opt :issue_dir, "Issue database dir", :default => "bugs"
15 opt :config_file, "Configuration file", :default => File.join(ENV["HOME"], CONFIG_FN)
1116 opt :verbose, "Verbose output", :default => false
17 opt :no_comment, "Skip asking for a comment", :default => false
1218end
1319
1420cmd = ARGV.shift or die "expecting a ditz command"
1521op = Ditz::Operator.new
22dir = $opts[:issue_dir]
1623
17case cmd # special cases: init and help
24case cmd # some special cases not handled by Ditz::Operator
1825when "init"
19 fn = $opts[:issue_file]
20 die "#{fn} already exists" if File.exists? fn
26 die "#{dir} directory already exists" if File.exists? dir
27 FileUtils.mkdir dir
28 fn = File.join dir, PROJECT_FN
2129 project = op.init
2230 project.save! fn
23 puts "Ok, #{fn} created successfully."
31 puts "Ok, #{dir} directory created successfully."
2432 exit
2533when "help"
26 op.help
34 op.do "help", nil, nil, ARGV
2735 exit
2836end
2937
30Ditz::debug "loading issues from #{$opts[:issue_file]}"
38project_root = Ditz::find_project_root dir, Dir.pwd
39
40die "No #{dir} directory---use 'ditz init' to initialize" unless project_root != nil and File.exists? project_root
41
42
3143project = begin
32 Ditz::Project.from $opts[:issue_file]
44 fn = File.join project_root, PROJECT_FN
45 Ditz::debug "loading project from #{fn}"
46 project = Ditz::Project.from fn
47
48 fn = File.join project_root, "issue-*.yaml"
49 Ditz::debug "loading issues from #{fn}"
50 project.issues = Dir[fn].map { |fn| Ditz::Issue.from fn }
51 Ditz::debug "found #{project.issues.size} issues"
52 project
3353rescue SystemCallError, Ditz::Project::Error => e
3454 die "#{e.message} (use 'init' to initialize)"
3555end
5959project.each_modelobject { |o| o.after_deserialize project }
6060
6161config = begin
62 fn = ".ditz-config"
63 if File.exists? fn
64 Ditz::debug "loading config from #{fn}"
65 Ditz::Config.from fn
62 if File.exists? CONFIG_FN
63 Ditz::debug "loading local config from #{CONFIG_FN}"
64 Ditz::Config.from CONFIG_FN
6665 else
67 Ditz::debug "loading config from #{$opts[:config_file]}"
66 Ditz::debug "loading global config from #{$opts[:config_file]}"
6867 Ditz::Config.from $opts[:config_file]
6968 end
7069rescue SystemCallError, Ditz::ModelObject::ModelError => e
8787 op.do cmd, project, config, args
8888rescue Ditz::Operator::Error => e
8989 die e.message
90rescue Interrupt
91 exit 1
9092end
9193
94## save project.yaml
9295dirty = project.each_modelobject { |o| break true if o.changed? } || false
9396if dirty
94 Ditz::debug "project is dirty, saving"
97 fn = File.join project_root, PROJECT_FN
98 Ditz::debug "project is dirty, saving #{fn}"
9599 project.each_modelobject { |o| o.before_serialize project }
96 project.save! $opts[:issue_file]
100 project.save! fn
101end
102
103## project issues are not model fields proper, so they must be
104## saved independently.
105project.issues.each do |i|
106 if i.changed?
107 i.before_serialize project
108 fn = File.join project_root, ISSUE_TO_FN(i)
109 Ditz::debug "issue #{i.name} is dirty, saving #{fn}"
110 i.save! fn
111 end
112end
113
114project.deleted_issues.each do |i|
115 fn = File.join project_root, ISSUE_TO_FN(i)
116 Ditz::debug "issue #{i.name} has been deleted, deleting #{fn}"
117 FileUtils.rm fn
118end
119
120unless project.added_issues.empty?
121 puts "You may have to inform your SCM that the following files have been added:"
122 project.added_issues.each { |i| puts " " + File.join(project_root, ISSUE_TO_FN(i)) }
123end
124
125unless project.deleted_issues.empty?
126 puts "You may have to inform your SCM that the following files have been deleted:"
127 project.deleted_issues.each { |i| puts " " + File.join(project_root, ISSUE_TO_FN(i)) }
97128end
129
98130config.save! $opts[:config_file] if config.changed?
99131
100132# vim: syntax=ruby
toggle raw diff

bin/ditz-convert-from-monolith

 
1#!/usr/bin/env ruby
2
3require 'rubygems'
4require 'fileutils'
5require "ditz"
6
7PROJECT_FN = "project.yaml"
8CONFIG_FN = ".ditz-config"
9def ISSUE_TO_FN i; "issue-#{i.id}.yaml" end
10
11dir = "bugs"
12project = Ditz::Project.from "bugs.yaml"
13puts "making #{dir}"
14FileUtils.mkdir dir
15project.changed!
16project.issues.each { |i| i.changed! }
17
18project.validate!
19project.assign_issue_names!
20project.each_modelobject { |o| o.after_deserialize project }
21
22## save project.yaml
23dirty = project.each_modelobject { |o| break true if o.changed? } || false
24if dirty
25 fn = File.join dir, PROJECT_FN
26 puts "writing #{fn}"
27 project.each_modelobject { |o| o.before_serialize project }
28 project.save! fn
29end
30
31## project issues are not model fields proper, so they must be
32## saved independently.
33project.issues.each do |i|
34 if i.changed?
35 i.before_serialize project
36 fn = File.join dir, ISSUE_TO_FN(i)
37 puts "writing #{fn}"
38 i.save! fn
39 end
40end
41
42puts "You can delete bugs.yaml now."
toggle raw diff

bugs.yaml

 
0--- !ditz.rubyforge.org,2008-03-06/project
1name: ditz
2version: 0.0.1
3issues:
4- !ditz.rubyforge.org,2008-03-06/issue
5 title: commands needs full argument parsing
6 desc: todo -v, show -v, for example
7 type: :feature
8 component: ditz
9 release:
10 reporter: William Morgan <wmorgan-ditz@masanjin.net>
11 status: :unstarted
12 disposition:
13 creation_time: 2008-03-07 05:02:17.710050 Z
14 references: []
15
16 id: 3d18eaab4e6099cd38f1cdee06698564e638e87d
17 log_events:
18 - - 2008-03-07 05:02:17.710083 Z
19 - William Morgan <wmorgan-ditz@masanjin.net>
20 - created
21 - ""
22 - - 2008-03-07 05:02:33.058861 Z
23 - William Morgan <wmorgan-ditz@masanjin.net>
24 - assigned to release 0.1 from unassigned
25 - ""
26 - - 2008-03-31 02:18:58.112845 Z
27 - William Morgan <wmorgan-ditz@masanjin.net>
28 - unassigned from release 0.1
29 - |-
30 not critical for 0.1, and i want to get that out, and this will probably
31 require another trollop release, so... this is deprioritized for now.
32- !ditz.rubyforge.org,2008-03-06/issue
33 title: changelog shouldn't abort if there are unclosed issues, just skip them
34 desc: ""
35 type: :bugfix
36 component: ditz
37 release: "0.1"
38 reporter: William Morgan <wmorgan-ditz@masanjin.net>
39 status: :closed
40 disposition: fixed
41 creation_time: 2008-03-07 05:03:22.972968 Z
42 references: []
43
44 id: 0811bb984a2f25a49a96763efe2f86f0c59ce1f4
45 log_events:
46 - - 2008-03-07 05:03:22.973004 Z
47 - William Morgan <wmorgan-ditz@masanjin.net>
48 - created
49 - ""
50 - - 2008-03-07 07:52:57.176787 Z
51 - William Morgan <wmorgan-ditz@masanjin.net>
52 - changed status from unstarted to closed
53 - ""
54- !ditz.rubyforge.org,2008-03-06/issue
55 title: status-like html generator
56 desc: ""
57 type: :feature
58 component: ditz
59 release: "0.1"
60 reporter: William Morgan <wmorgan-ditz@masanjin.net>
61 status: :closed
62 disposition: :fixed
63 creation_time: 2008-03-07 05:03:55.739201 Z
64 references: []
65
66 id: 85da8df84df1c2c2484c9b63b69c4918d5fb0079
67 log_events:
68 - - 2008-03-07 05:03:55.739238 Z
69 - William Morgan <wmorgan-ditz@masanjin.net>
70 - created
71 - ""
72 - - 2008-03-08 22:04:02.973872 Z
73 - William Morgan <wmorgan-ditz@masanjin.net>
74 - changed status from unstarted to in_progress
75 - ""
76 - - 2008-03-30 22:18:31.484325 Z
77 - William Morgan <wmorgan-ditz@masanjin.net>
78 - closed issue with disposition fixed
79 - ""
80- !ditz.rubyforge.org,2008-03-06/issue
81 title: "'archive' command"
82 desc: ""
83 type: :feature
84 component: ditz
85 release: "0.2"
86 reporter: William Morgan <wmorgan-ditz@masanjin.net>
87 status: :unstarted
88 disposition:
89 creation_time: 2008-03-07 05:04:08.771047 Z
90 references: []
91
92 id: 308e3794685e4bdb6c7acaf8461ff37e195da14d
93 log_events:
94 - - 2008-03-07 05:04:08.771082 Z
95 - William Morgan <wmorgan-ditz@masanjin.net>
96 - created
97 - ""
98 - - 2008-03-31 03:27:49.843846 Z
99 - William Morgan <wmorgan-ditz@masanjin.net>
100 - assigned to release 0.2 from 0.1
101 - ""
102- !ditz.rubyforge.org,2008-03-06/issue
103 title: plugin architecture for tighter SCM integration, etc
104 desc: |-
105 you should be able to extend ditz for things like tighter SCM integration.
106
107 basic extension points: adding fields and model objects, changing the
108 html and screen output accordingly, adding operations.
109
110 use cases: integrate with git. integrate with a mailing list like sup-talk.
111
112 currently {issue be0b8ee4588407615e2ba3acd0edeca08ed24df5} gives the ability to add field and model objects, and
113 adding operations can be done by reopening Ditz::Operator. that's a starting
114 point, at least.
115 type: :feature
116 component: ditz
117 release:
118 reporter: William Morgan <wmorgan-ditz@masanjin.net>
119 status: :unstarted
120 disposition:
121 creation_time: 2008-03-07 05:05:04.339450 Z
122 references: []
123
124 id: 0704dafe4aef96279364013aba177a0971d425cb
125 log_events:
126 - - 2008-03-07 05:05:04.339483 Z
127 - William Morgan <wmorgan-ditz@masanjin.net>
128 - created
129 - ""
130 - - 2008-03-31 22:51:57.239776 Z
131 - William Morgan <wmorgan-ditz@masanjin.net>
132 - changed title, changed description
133 - ""
134 - - 2008-04-07 04:27:28.490589 Z
135 - William Morgan <wmorgan-ditz@masanjin.net>
136 - changed title
137 - ""
138- !ditz.rubyforge.org,2008-03-06/issue
139 title: ask :limit option not enforcing single characters
140 desc: "try with (b)ugfix or (f)eature question: multi-char answers work"
141 type: :bugfix
142 component: ditz
143 release: "0.1"
144 reporter: William Morgan <wmorgan-ditz@masanjin.net>
145 status: :closed
146 disposition: :fixed
147 creation_time: 2008-03-07 05:05:51.062451 Z
148 references: []
149
150 id: 78db61d32e8c88ed79b67336de94996b0b564303
151 log_events:
152 - - 2008-03-07 05:05:51.062489 Z
153 - William Morgan <wmorgan-ditz@masanjin.net>
154 - created
155 - ""
156 - - 2008-03-08 22:24:49.761605 Z
157 - William Morgan <wmorgan-ditz@masanjin.net>
158 - changed status from unstarted to closed
159 - ""
160- !ditz.rubyforge.org,2008-03-06/issue
161 title: better exception handling---turn into pretty error messages
162 desc: |
163 many exceptions simple uncaught atm. ideally they would be turned into
164 nice messages for the user.
165
166 type: :feature
167 component: ditz
168 release: "0.2"
169 reporter: William Morgan <wmorgan-ditz@masanjin.net>
170 status: :closed
171 disposition: :fixed
172 creation_time: 2008-03-07 07:51:30.841406 Z
173 references: []
174
175 id: 8e1077da43aa2524316e99642c634a42c4abcd52
176 log_events:
177 - - 2008-03-07 07:51:30.841444 Z
178 - William Morgan <wmorgan-ditz@masanjin.net>
179 - created
180 - ""
181 - - 2008-03-30 23:45:58.090512 Z
182 - William Morgan <wmorgan-ditz@masanjin.net>
183 - changed description
184 - ""
185 - - 2008-03-31 02:54:11.740042 Z
186 - William Morgan <wmorgan-ditz@masanjin.net>
187 - unassigned from release 0.1
188 - backtrace is fine for an initial version
189 - - 2008-04-07 04:19:04.266518 Z
190 - William Morgan <wmorgan-ditz@masanjin.net>
191 - assigned to release 0.2 from unassigned
192 - ""
193 - - 2008-04-07 04:19:31.959738 Z
194 - William Morgan <wmorgan-ditz@masanjin.net>
195 - closed issue with disposition fixed
196 - fixed by new argument parsing code
197 - - 2008-04-07 04:24:34.491958 Z
198 - William Morgan <wmorgan-ditz@masanjin.net>
199 - changed title
200 - ""
201- !ditz.rubyforge.org,2008-03-06/issue
202 title: "'grep' command"
203 desc: ""
204 type: :feature
205 component: ditz
206 release: "0.1"
207 reporter: William Morgan <wmorgan-ditz@masanjin.net>
208 status: :closed
209 disposition: :fixed
210 creation_time: 2008-03-08 22:04:19.738131 Z
211 references: []
212
213 id: f038048d313cdccccc99b031c6819769a1f56abf
214 log_events:
215 - - 2008-03-08 22:04:19.738171 Z
216 - William Morgan <wmorgan-ditz@masanjin.net>
217 - created
218 - ""
219 - - 2008-03-08 22:24:32.072902 Z
220 - William Morgan <wmorgan-ditz@masanjin.net>
221 - changed title
222 - ""
223 - - 2008-03-09 01:57:50.264412 Z
224 - William Morgan <wmorgan-ditz@masanjin.net>
225 - changed status from unstarted to closed
226 - ""
227- !ditz.rubyforge.org,2008-03-06/issue
228 title: issue ids need to be non-colliding
229 desc: ""
230 type: :bugfix
231 component: ditz
232 release: "0.1"
233 reporter: William Morgan <wmorgan-ditz@masanjin.net>
234 status: :closed
235 disposition: :fixed
236 creation_time: 2008-03-08 22:04:45.872440 Z
237 references: []
238
239 id: 7ebb9b1d042fa496fe2d4ab7ff4ba9d6a6e82f46
240 log_events:
241 - - 2008-03-08 22:04:45.872475 Z
242 - William Morgan <wmorgan-ditz@masanjin.net>
243 - created
244 - ""
245 - - 2008-03-09 00:02:51.425770 Z
246 - William Morgan <wmorgan-ditz@masanjin.net>
247 - changed status from unstarted to closed
248 - |-
249 decided best approach is going to be sequential naming combined with
250 strong validation. the merger/conflict resolver is going to have to
251 deal with collisions. it's either this or git-style full hashes, and
252 i think this is a better fit for the usage cases i imagine.
253 - - 2008-03-09 19:53:29.261275 Z
254 - William Morgan <wmorgan-ditz@masanjin.net>
255 - changed status from fixed to in_progress
256 - nope, going to do git-style hashes and generate quick names at runtime
257 - - 2008-03-11 02:47:12.092309 Z
258 - William Morgan <wmorgan-ditz@masanjin.net>
259 - changed status from in_progress to closed
260 - ""
261- !ditz.rubyforge.org,2008-03-06/issue
262 title: issues have url references
263 desc: ""
264 type: :feature
265 component: ditz
266 release: "0.1"
267 reporter: William Morgan <wmorgan-ditz@masanjin.net>
268 status: :closed
269 disposition: :fixed
270 creation_time: 2008-03-08 22:05:29.570596 Z
271 references: []
272
273 id: 898bf967e5e21dbbbb30720c8e9484badef8a92c
274 log_events:
275 - - 2008-03-08 22:05:29.570634 Z
276 - William Morgan <wmorgan-ditz@masanjin.net>
277 - created
278 - ""
279 - - 2008-03-08 22:25:01.413714 Z
280 - William Morgan <wmorgan-ditz@masanjin.net>
281 - changed status from unstarted to closed
282 - ""
283- !ditz.rubyforge.org,2008-03-06/issue
284 title: email addresses in html should be obscured
285 desc: ""
286 type: :feature
287 component: ditz
288 release: "0.1"
289 reporter: William Morgan <wmorgan-ditz@masanjin.net>
290 status: :closed
291 disposition: :fixed
292 creation_time: 2008-03-11 02:11:15.534100 Z
293 references: []
294
295 id: bf4fd6094173867938f2f78be4d7e0598ad22ba0
296 log_events:
297 - - 2008-03-11 02:11:15.534206 Z
298 - William Morgan <wmorgan-ditz@masanjin.net>
299 - created
300 - ""
301 - - 2008-03-12 16:09:55.886420 Z
302 - William Morgan <wmorgan-ditz@masanjin.net>
303 - changed status from unstarted to closed
304 - ""
305- !ditz.rubyforge.org,2008-03-06/issue
306 title: issue name not being set in 'add' command
307 desc: final line of output is clearly trying to print a nil value.
308 type: :bugfix
309 component: ditz
310 release: "0.1"
311 reporter: William Morgan <wmorgan-ditz@masanjin.net>
312 status: :closed
313 disposition: :fixed
314 creation_time: 2008-03-11 02:11:59.902302 Z
315 references: []
316
317 id: b9b91c9735b618c76405f0f7068c1e8fa7ea8923
318 log_events:
319 - - 2008-03-11 02:11:59.902410 Z
320 - William Morgan <wmorgan-ditz@masanjin.net>
321 - created
322 - ""
323 - - 2008-03-12 17:54:05.228838 Z
324 - William Morgan <wmorgan-ditz@masanjin.net>
325 - changed status from unstarted to closed
326 - ""
327- !ditz.rubyforge.org,2008-03-06/issue
328 title: ids are being changed of all new issues
329 desc: ""
330 type: :bugfix
331 component: ditz
332 release: "0.1"
333 reporter: William Morgan <wmorgan-ditz@masanjin.net>
334 status: :closed
335 disposition: :fixed
336 creation_time: 2008-03-11 02:12:29.886509 Z
337 references: []
338
339 id: 1ec281f46878943306e1871e7d87bae1d61cdb4c
340 log_events:
341 - - 2008-03-11 02:12:29.886617 Z
342 - William Morgan <wmorgan-ditz@masanjin.net>
343 - created
344 - ""
345 - - 2008-03-12 16:09:22.670289 Z
346 - William Morgan <wmorgan-ditz@masanjin.net>
347 - changed status from unstarted to closed
348 - ""
349- !ditz.rubyforge.org,2008-03-06/issue
350 title: "closed issue dispositions: fixed, wontfix, duplicate"
351 desc: ""
352 type: :feature
353 component: ditz
354 release: "0.1"
355 reporter: William Morgan <wmorgan-ditz@masanjin.net>
356 status: :closed
357 disposition: :fixed
358 creation_time: 2008-03-11 06:25:57.383208 Z
359 references: []
360
361 id: 543b757a6c20d0af9014625ac4023ea396daa824
362 log_events:
363 - - 2008-03-11 06:25:57.383386 Z
364 - William Morgan <wmorgan-ditz@masanjin.net>
365 - created
366 - ""
367 - - 2008-03-11 06:36:58.495078 Z
368 - William Morgan <wmorgan-ditz@masanjin.net>
369 - changed status from unstarted to closed
370 - ""
371- !ditz.rubyforge.org,2008-03-06/issue
372 title: render :partial equivalent for sharing erb blocks
373 desc: ""
374 type: :feature
375 component: ditz
376 release: "0.1"
377 reporter: William Morgan <wmorgan-ditz@masanjin.net>
378 status: :closed
379 disposition: :fixed
380 creation_time: 2008-03-12 17:43:49.994436 Z
381 references: []
382
383 id: 6878ab120ff56e764ea3de5ca8d6abeda8c7e425
384 log_events:
385 - - 2008-03-12 17:43:49.994622 Z
386 - William Morgan <wmorgan-ditz@masanjin.net>
387 - created
388 - ""
389 - - 2008-03-12 18:58:09.195965 Z
390 - William Morgan <wmorgan-ditz@masanjin.net>
391 - changed status from unstarted to closed
392 - ""
393- !ditz.rubyforge.org,2008-03-06/issue
394 title: "'drop' command"
395 desc: ""
396 type: :feature
397 component: ditz
398 release: "0.1"
399 reporter: William Morgan <wmorgan-ditz@masanjin.net>
400 status: :closed
401 disposition: :fixed
402 creation_time: 2008-03-12 17:45:41.578806 Z
403 references: []
404
405 id: eca1f3dbb04225c200bfd6d85969795fff8dfced
406 log_events:
407 - - 2008-03-12 17:45:41.578969 Z
408 - William Morgan <wmorgan-ditz@masanjin.net>
409 - created
410 - ""
411 - - 2008-03-12 17:48:37.835975 Z
412 - William Morgan <wmorgan-ditz@masanjin.net>
413 - changed title
414 - drop-issue => drop
415 - - 2008-03-12 17:48:44.947579 Z
416 - William Morgan <wmorgan-ditz@masanjin.net>
417 - changed status from unstarted to closed
418 - ""
419 - - 2008-03-12 17:53:34.292676 Z
420 - William Morgan <wmorgan-ditz@masanjin.net>
421 - assigned to release 0.1 from 0.1
422 - ""
423- !ditz.rubyforge.org,2008-03-06/issue
424 title: local .ditz-config should override global on a per-field basis
425 desc: |-
426 rather than replacing the entire configuration, setting a field in a
427 project's .ditz-config should override that field, and everything
428 else should inherit from the global .ditz-config.
429 type: :feature
430 component: ditz
431 release: "0.1"
432 reporter: William Morgan <wmorgan-ditz@masanjin.net>
433 status: :closed
434 disposition: :fixed
435 creation_time: 2008-03-13 04:16:10.974843 Z
436 references: []
437
438 id: 09cae428c83aa19cbd2a192f28cd7baa3084de6a
439 log_events:
440 - - 2008-03-13 04:16:10.975114 Z
441 - William Morgan <wmorgan-ditz@masanjin.net>
442 - created
443 - ""
444 - - 2008-03-30 18:24:37.974257 Z
445 - William Morgan <wmorgan-ditz@masanjin.net>
446 - assigned to release 0.1 from unassigned
447 - ""
448 - - 2008-03-30 18:32:00.089383 Z
449 - William Morgan <wmorgan-ditz@masanjin.net>
450 - closed issue with disposition fixed
451 - ""
452- !ditz.rubyforge.org,2008-03-06/issue
453 title: config variables should be overridable on a per-project basis
454 desc: ""
455 type: :feature
456 component: ditz
457 release: "0.1"
458 reporter: William Morgan <wmorgan-ditz@masanjin.net>
459 status: :closed
460 disposition: :fixed
461 creation_time: 2008-03-13 04:21:54.289272 Z
462 references: []
463
464 id: 57ac8f247aabbec42bce254e0514787f6977dffa
465 log_events:
466 - - 2008-03-13 04:21:54.289537 Z
467 - William Morgan <wmorgan-ditz@masanjin.net>
468 - created
469