- 论坛徽章:
- 0
|
统计同一个项目在不同时期的代码新增情况
Ruby代码- 1.# encoding: utf-8
- 2.module ProjectCodeStatistics
- 3. module FetchFile
- 4. def recursion_fetch(dir=nil)
- 5. dir = @base_dir if dir == nil
- 6. Dir.foreach(dir).each do |file_dir|
- 7. dir_path = File.join(dir,file_dir)
- 8. if File.directory?(dir_path) then
- 9. recursion_fetch(dir_path) unless file_dir =~ /^\./
- 10. else
- 11. if [/\.java$/,/\.jsp$/,/\.js$/,/\.xml$/].any?{|reg| reg=~file_dir}
- 12. @all_file_with_row_number[dir_path.gsub(@base_dir,"")] = File.new(dir_path).readlines.size
- 13. end
- 14. end
- 15. end
- 16. end
- 17. end
- 18.
- 19. class Calculate
- 20. include FetchFile
- 21. attr_reader :all_file_with_row_number
- 22.
- 23. def initialize(dir)
- 24. @base_dir, @all_file_with_row_number = dir, {}
- 25. recursion_fetch
- 26. end
- 27. # 分类统计所有文件数量
- 28. def file_total_numbers()
- 29. row_numbers(:xml,:js,:jsp,:java,@all_file_with_row_number)
- 30. end
- 31.
- 32. # 分类统计新加入的文件代码行总量的
- 33. def add_file_row_numbers(other)
- 34. add_file_keys = @all_file_with_row_number.keys - other.all_file_with_row_number.keys
- 35. add_file_hash = @all_file_with_row_number.find_all{|key,value| add_file_keys.include? key}
- 36. row_numbers(:xml,:js,:jsp,:java,add_file_hash)
- 37. end
- 38.
- 39. # 分类统计新加入的各种类型文件总量
- 40. def compare_add_file_count(other)
- 41. add_file_keys = @all_file_with_row_number.keys - other.all_file_with_row_number.keys
- 42. file_numbers(:xml,:js,:jsp,:java,add_file_keys)
- 43. end
- 44.
- 45. # 分类统计修改过的文件
- 46. def compare_each_modify_file(other)
- 47. file_hash = @all_file_with_row_number
- 48. calculated_hash =other.all_file_with_row_number.find_all.inject({}) do |hash,item|
- 49. hash[item[0]] = (file_hash[item[0]] - item[1]) if file_hash.include?(item[0]) && file_hash[item[0]] != item[1]
- 50. hash
- 51. end
- 52. row_numbers(:xml,:js,:jsp,:java,calculated_hash)
- 53. end
- 54.
- 55. def file_numbers(*parameter)
- 56. last = parameter.reverse!.shift
- 57. parameter.reverse.inject([]) do |total,type|
- 58. regexp = eval('/' + type.to_s + '$/')
- 59. total.push(last.find_all{|key,value| regexp =~ key}.size)
- 60. end
- 61. end
- 62.
- 63. def row_numbers(*parameter)
- 64. last = parameter.reverse!.shift
- 65. parameter.reverse.inject([]) do |total,type|
- 66. regexp = eval('/' + type.to_s + '$/')
- 67. total.push last.find_all{|key,value| regexp =~ key}.inject(0){|sum,item| sum + item[1] }
- 68. end
- 69. end
- 70. end
- 71.
- 72. class Statistics
- 73. def initialize(new_project,old_project,new_desc="新工程",old_desc="老工程")
- 74. @new_project = Calculate.new(new_project)
- 75. @old_project = Calculate.new(old_project)
- 76. @new_desc,@old_desc = new_desc,old_desc
- 77. end
- 78.
- 79. def print
- 80. old_total = @old_project.file_total_numbers
- 81. new_total = @new_project.file_total_numbers
- 82. puts '系统代码统计'
- 83. puts "#{@old_desc}代码总量统计,总计:#{old_total.reduce(:+)}行, java:#{old_total[3]}行,jsp: #{old_total[2]}行,js: #{old_total[1]}行,sql: #{old_total[0]}行 "
- 84. puts "#{@new_desc}代码总量统计,总计:#{new_total.reduce(:+)}行,java:#{new_total[3]}行,jsp: #{new_total[2]}行,js: #{new_total[1]}行,sql: #{new_total[0]}行 "
- 85. puts "新增总量 #{new_total.reduce(:+) - old_total.reduce(:+)}行"
- 86.
- 87. add_files = @new_project.compare_add_file_count(@old_project)
- 88. new_rows = @new_project.add_file_row_numbers(@old_project)
- 89. modify_rows = @new_project.compare_each_modify_file(@old_project)
- 90. total_change = (new_rows.zip modify_rows).inject([]) {|n,a|n<<a.reduce(:+)}
- 91. puts
- 92. puts "新增加的文件数量,java:#{add_files[3]}个,jsp: #{add_files[2]}个,js: #{add_files[1]}个, sql: #{add_files[0]}个 "
- 93. puts
- 94. puts "新增加的文件代码行,java:#{new_rows[3]}行,jsp: #{new_rows[2]}行,js: #{new_rows[1]}行, sql: #{new_rows[0]}行 "
- 95. puts "新增加的代码行, java:#{modify_rows[3]}行,jsp: #{modify_rows[2]}行,js: #{modify_rows[1]}行, sql: #{modify_rows[0]}行 "
- 96. puts "新增加的代码行总计,java:#{total_change[3]}行,jsp: #{total_change[2]}行,js: #{total_change[1]}行, sql: #{total_change[0]}行 "
- 97. puts "新增总量 #{new_rows.reduce(:+) + modify_rows.reduce(:+)}行"
- 98. end
- 99. end
- 100.end
- 101.
- 102.s = ProjectCodeStatistics::Statistics.new('D:\boss\Code\udrm\src','D:\boss\Code\digital20110726\src')
- 103.s.print
复制代码 |
|