From 31e9f82ebc24ff04cb4eeaf933f6f3b158a38a62 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Tue, 13 Aug 2013 16:26:48 +0300
Subject: [PATCH] Improve repository graph

---
 .../stat_graph_contributors.js.coffee          | 14 ++++++++------
 .../stat_graph_contributors_graph.js.coffee    |  4 ++--
 .../stat_graph_contributors_util.js.coffee     | 18 ++++++++++--------
 app/assets/stylesheets/sections/graph.scss     |  5 +++++
 app/views/projects/graphs/show.html.haml       |  5 ++++-
 5 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/app/assets/javascripts/stat_graph_contributors.js.coffee b/app/assets/javascripts/stat_graph_contributors.js.coffee
index 5b4b3dae41..168b733704 100644
--- a/app/assets/javascripts/stat_graph_contributors.js.coffee
+++ b/app/assets/javascripts/stat_graph_contributors.js.coffee
@@ -16,7 +16,7 @@ class window.ContributorsStatGraph
     _.each(limited_author_data, (d) =>
       author_header = @create_author_header(d)
       $(".contributors-list").append(author_header)
-      @authors[d.author] = author_graph = new ContributorsAuthorGraph(d.dates)
+      @authors[d.author_name] = author_graph = new ContributorsAuthorGraph(d.dates)
       author_graph.draw()
     )
   format_author_commit_info: (author) ->
@@ -46,13 +46,15 @@ class window.ContributorsStatGraph
       class: 'person'
       style: 'display: block;'
     })
-    author_name = $('<h4>' + author.author + '</h4>')
+    author_name = $('<h4>' + author.author_name + '</h4>')
+    author_email = $('<p class="graph-author-email">' + author.author_email + '</p>')
     author_commit_info_span = $('<span/>', {
       class: 'commits'
     })
     author_commit_info = @format_author_commit_info(author)
     author_commit_info_span.html(author_commit_info)
     list_item.append(author_name)
+    list_item.append(author_email)
     list_item.append(author_commit_info_span)
     list_item
   redraw_master: ->
@@ -65,9 +67,9 @@ class window.ContributorsStatGraph
     author_commits = ContributorsStatGraphUtil.get_author_data(@parsed_log, @field, x_domain)
     _.each(author_commits, (d) =>
       @redraw_author_commit_info(d)
-      $(@authors[d.author].list_item).appendTo("ol")
-      @authors[d.author].set_data(d.dates)
-      @authors[d.author].redraw()
+      $(@authors[d.author_name].list_item).appendTo("ol")
+      @authors[d.author_name].set_data(d.dates)
+      @authors[d.author_name].redraw()
     )
   set_current_field: (field) ->
     @field = field
@@ -77,6 +79,6 @@ class window.ContributorsStatGraph
     print = print_date_format(x_domain[0]) + " - " + print_date_format(x_domain[1])
     $("#date_header").text(print)
   redraw_author_commit_info: (author) ->
-    author_list_item = $(@authors[author.author].list_item)
+    author_list_item = $(@authors[author.author_name].list_item)
     author_commit_info = @format_author_commit_info(author)
     author_list_item.find("span").html(author_commit_info)
diff --git a/app/assets/javascripts/stat_graph_contributors_graph.js.coffee b/app/assets/javascripts/stat_graph_contributors_graph.js.coffee
index cc83486e8c..29583a1824 100644
--- a/app/assets/javascripts/stat_graph_contributors_graph.js.coffee
+++ b/app/assets/javascripts/stat_graph_contributors_graph.js.coffee
@@ -90,9 +90,9 @@ class window.ContributorsMasterGraph extends ContributorsGraph
       y(d.commits = d.commits ? d.additions ? d.deletions)
     ).interpolate("basis")
   create_brush: ->
-    @brush = d3.svg.brush().x(@x).on("brushend", @update_content);
+    @brush = d3.svg.brush().x(@x).on("brushend", @update_content)
   draw_path: (data) ->
-    @svg.append("path").datum(data).attr("class", "area").attr("d", @area);
+    @svg.append("path").datum(data).attr("class", "area").attr("d", @area)
   add_brush: ->
     @svg.append("g").attr("class", "selection").call(@brush).selectAll("rect").attr("height", @height);
   update_content: =>
diff --git a/app/assets/javascripts/stat_graph_contributors_util.js.coffee b/app/assets/javascripts/stat_graph_contributors_util.js.coffee
index 8f816313db..364cab1837 100644
--- a/app/assets/javascripts/stat_graph_contributors_util.js.coffee
+++ b/app/assets/javascripts/stat_graph_contributors_util.js.coffee
@@ -4,9 +4,9 @@ window.ContributorsStatGraphUtil =
     by_author = {}
     for entry in log
       @add_date(entry.date, total) unless total[entry.date]?
-      @add_author(entry.author, by_author) unless by_author[entry.author]?
-      @add_date(entry.date, by_author[entry.author]) unless by_author[entry.author][entry.date]
-      @store_data(entry, total[entry.date], by_author[entry.author][entry.date])
+      @add_author(entry, by_author) unless by_author[entry.author_name]?
+      @add_date(entry.date, by_author[entry.author_name]) unless by_author[entry.author_name][entry.date]
+      @store_data(entry, total[entry.date], by_author[entry.author_name][entry.date])
     total = _.toArray(total)
     by_author = _.toArray(by_author)
     total: total, by_author: by_author
@@ -16,8 +16,9 @@ window.ContributorsStatGraphUtil =
     collection[date].date = date
 
   add_author: (author, by_author) ->
-    by_author[author] = {}
-    by_author[author].author = author
+    by_author[author.author_name] = {}
+    by_author[author.author_name].author_name = author.author_name
+    by_author[author.author_name].author_email = author.author_email
 
   store_data: (entry, total, by_author) ->
     @store_commits(total, by_author)
@@ -71,10 +72,11 @@ window.ContributorsStatGraphUtil =
 
   parse_log_entry: (log_entry, field, date_range) ->
     parsed_entry = {}
-    parsed_entry.author = log_entry.author
+    parsed_entry.author_name = log_entry.author_name
+    parsed_entry.author_email = log_entry.author_email
     parsed_entry.dates = {}
     parsed_entry.commits = parsed_entry.additions = parsed_entry.deletions = 0
-    _.each(_.omit(log_entry, 'author'), (value, key) =>
+    _.each(_.omit(log_entry, 'author_name', 'author_email'), (value, key) =>
       if @in_range(value.date, date_range)
         parsed_entry.dates[value.date] = value[field]
         parsed_entry.commits += value.commits
@@ -88,4 +90,4 @@ window.ContributorsStatGraphUtil =
       true
     else
       false
-  
\ No newline at end of file
+  
diff --git a/app/assets/stylesheets/sections/graph.scss b/app/assets/stylesheets/sections/graph.scss
index 156ecdeeff..1e22d161bf 100644
--- a/app/assets/stylesheets/sections/graph.scss
+++ b/app/assets/stylesheets/sections/graph.scss
@@ -22,6 +22,11 @@
   .graph-author-commits-count {
   }
 
+  .graph-author-email {
+    float: right;
+    color: #777;
+  }
+
   .graph-additions {
     color: #4a2;
   }
diff --git a/app/views/projects/graphs/show.html.haml b/app/views/projects/graphs/show.html.haml
index 6f9a161a13..cfa10ae407 100644
--- a/app/views/projects/graphs/show.html.haml
+++ b/app/views/projects/graphs/show.html.haml
@@ -1,7 +1,8 @@
 .loading-graph
   %center
     .loading
-    %h3.page-title Building repository graph. Please wait a moment.
+    %h3.page-title Building repository graph.
+    %p Please wait a moment, this page will automatically refresh when ready.
 
 .stat-graph
   .header.clearfix
@@ -11,6 +12,8 @@
         %option{:value => "additions"} Additions
         %option{:value => "deletions"} Deletions
     %h3#date_header.page-title
+    %p.light
+      Commits to #{@project.default_branch}, excluding merge commits. Limited by 8,000 commits
     %input#brush_change{:type => "hidden"}
   .graphs
     #contributors-master
-- 
2.30.9