免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2273 | 回复: 2
打印 上一主题 下一主题

统计同一个项目在不同时期的代码新增情况 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-03 17:39 |只看该作者 |倒序浏览
统计同一个项目在不同时期的代码新增情况



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

论坛徽章:
0
2 [报告]
发表于 2011-11-04 15:04 |只看该作者
这个任务通常都是git/svn/cvs去做的吧

论坛徽章:
0
3 [报告]
发表于 2011-11-04 15:22 |只看该作者
恩 楼上的说的有理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP