Commit 633afd0610ccd96a3349fc052d1a672dbc9a35ce

make 'ditz status' align its output

Column alignment was broken with the introduction of tasks. I also removed
the percentages because typical output is getting a little too wide for an
80-char screen.

Commit diff

lib/operator.rb

 
172172
173173 operation :status, "Show project status", :maybe_release
174174 def status project, config, releases
175 releases.each do |r, groups|
176 issues = groups.map { |_,g| g }.flatten
177 title = r ? r.name : "unassigned"
175 if releases.empty?
176 puts "No releases."
177 return
178 end
179
180 ## TODO: remove weird and deprecated :maybe_release semantics
181 releases = releases.map { |r, groups| r }
182
183 entries = releases.map do |r|
184 title, issues = if r
185 [r.name, project.issues_for_release(r)]
186 else
187 ["unassigned", project.unassigned_issues]
188 end
178189
179 groups = groups.map do |t,g|
180 nc = g.count_of { |i| i.closed? }
181 pc = 100.0 * (g.empty? ? 1.0 : nc.to_f / g.size)
182 [t, g, nc, pc]
190 middle = Issue::TYPES.map do |type|
191 type_issues = issues.select { |i| i.type == type }
192 num = type_issues.size
193 nc = type_issues.count_of { |i| i.closed? }
194 pc = 100.0 * (type_issues.empty? ? 1.0 : nc.to_f / num)
195 "%2d/%2d %s" % [nc, num, type.to_s.pluralize(num, false)]
183196 end
184197
185 special = if r && r.released?
198 bar = if r && r.released?
186199 "(released)"
187 elsif groups.empty?
200 elsif issues.empty?
188201 "(no issues)"
189202 elsif issues.all? { |i| i.closed? }
190203 "(ready for release)"
205205 status_bar_for(issues)
206206 end
207207
208 middle = groups.map do |(t,g,nc,pc)|
209 "%2d/%2d (%3.0f%%) %s" % [nc, g.size, pc, t.to_s.pluralize(g.size, false)]
210 end.join(', ')
211 printf "%-10s %s %s\n", title, middle, special
208 [title, middle, bar]
212209 end
213210
214 if project.releases.empty?
215 puts "No releases."
216 return
211 title_size = 0
212 middle_sizes = []
213
214 entries.each do |title, middle, bar|
215 title_size = [title_size, title.length].max
216 middle_sizes = middle.zip(middle_sizes).map do |e, s|
217 [s || 0, e.length].max
218 end
219 end
220
221 entries.each do |title, middle, bar|
222 printf "%#{title_size}-s ", title
223 middle.zip(middle_sizes).each_with_index do |(e, s), i|
224 sep = i < middle.size - 1 ? "," : ""
225 printf "%#{s + sep.length}-s ", e + sep
226 end
227 puts bar
217228 end
218229 end
219230
toggle raw diff