#!/usr/bin/env ruby # $Id$ # User: Vitalie Lazu # Date: Jan 17, 2007 # Time: 12:08:42 PM require File.expand_path(File.dirname(__FILE__) + "/../../config/boot") require 'yaml' include ActionView::Helpers::NumberHelper alias h number_to_human_size $config = YAML::load(File.open("control.yml")) DU ="du -b --max-depth=1" def subdirs_size(dir) rez = [] IO.popen("#{DU} #{dir}") do |f| s = f.read ar = s.split("\n") ar.pop rez = ar.map {|l| p2 = l.split("\t"); {:dir => File.basename(p2[1]), :size => p2[0].to_i}} end rez end def write_row(nr, dir, trac, svn, total) print "#{nr}.".rjust(5), dir.ljust(25), trac.rjust(15), svn.rjust(15), total.rjust(15), "\n" end IGNORE_SIZE = $config['ignore_size'] || 500.kilobytes trac = subdirs_size($config['trac']['base_dir']) svn = subdirs_size($config['subversion']['base_dir']) total = {} trac.each do |el| total[el[:dir]] ||= {} total[el[:dir]][:trac] = el[:size] end svn.each do |el| key = el[:dir] total[key] ||= {} total[key][:svn] = el[:size] total[key][:trac] = 0 unless total[key].has_key?(:trac) total[key][:total] = total[key][:trac] + total[key][:svn] end total = total.sort {|a,b| a[1][:total] <=> b[1][:total]}.reverse puts "-" * 80 print "Nr.".center(5) ,"Directory".ljust(30), "Trac".rjust(10),"Svn".rjust(15),"Total".rjust(15), "\n" puts "-" * 80 a = {:svn => 0, :trac => 0, :total => 0} l = a.clone i = 0 total.each do |el| i += 1 a[:svn] += el[1][:svn] a[:trac] += el[1][:trac] a[:total] += el[1][:total] if el[1][:total] < IGNORE_SIZE l[:svn] += el[1][:svn] l[:trac] += el[1][:trac] l[:total] += el[1][:total] else write_row(i.to_s, el[0], h(el[1][:trac]), h(el[1][:svn]), h(el[1][:total])) end end if l[:total] > 0 write_row("--", "Sum, tools size < #{h(IGNORE_SIZE)}", h(l[:trac]), h(l[:svn]), h(l[:total])) end puts "-" * 80 print "Grand total for #{i} tools".ljust(30), h(a[:trac]).rjust(15), h(a[:svn]).rjust(15), h(a[:total]).rjust(15), "\n"