OSDN Git Service

Improve Commits stats code
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 13 Nov 2012 19:26:36 +0000 (21:26 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 13 Nov 2012 19:26:57 +0000 (21:26 +0200)
app/views/repositories/stats.html.haml
lib/gitlab/git_stats.rb

index a0a9377..a93814a 100644 (file)
@@ -2,12 +2,12 @@
 .row
   .span5
     %h4
-      Stats for #{@project.root_ref}:
+      Stats:
     %p
       %b Total commits:
       %span= @stats.commits_count
     %p
-      %b Total files:
+      %b Total files in #{@project.root_ref}:
       %span= @stats.files_count
     %p
       %b Authors:
 :javascript
   $(function(){
     var labels = [#{@graph.labels.to_json}];
+    var commits = [#{@graph.commits.join(', ')}];
     var r = Raphael('activity-chart');
     r.text(160, 10, "Commit activity for last #{@graph.weeks} weeks").attr({ font: "13px sans-serif" });
     r.barchart(
       10, 10, 400, 160,
-      [[#{@graph.commits.join(', ')}]]
+      [commits],
+      {colors:["#456"]}
     ).label(labels, true);
   })
index 9437486..855bffb 100644 (file)
@@ -15,7 +15,8 @@ module Gitlab
     end
 
     def files_count
-      repo.git.sh("git ls-tree -r --name-only #{ref} | wc -l").first.to_i
+      args = [ref, '-r', '--name-only' ]
+      repo.git.run(nil, 'ls-tree', nil, {}, args).split("\n").count
     end
 
     def authors_count
@@ -52,15 +53,11 @@ module Gitlab
 
     def build_graph n = 4
       from, to = (Date.today - n.weeks), Date.today
+      args = ['--all', "--since=#{from.to_s(:date)}", '--format=%ad' ]
+      rev_list = repo.git.run(nil, 'rev-list', nil, {}, args).split("\n")
 
-      format = "--pretty=format:'%h|%at|%ai|%aE'"
-      commits_strings = repo.git.sh("git rev-list --since #{from.to_s(:date)} #{format} #{ref} | grep -v commit")[0].split("\n")
-
-      commits_dates = commits_strings.map do |string|
-        data = string.split("|")
-        date = data[2]
-        Time.parse(date).to_date.to_s(:date)
-      end
+      commits_dates = rev_list.values_at(* rev_list.each_index.select {|i| i.odd?})
+      commits_dates = commits_dates.map { |date_str| Time.parse(date_str).to_date.to_s(:date) }
 
       commits_per_day = from.upto(to).map do |day|
         commits_dates.count(day.to_date.to_s(:date))