diff options
author | Stan Hu <stanhu@gmail.com> | 2015-08-20 11:02:12 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2015-08-20 11:27:29 +0300 |
commit | 0a5b005da170fe81afea012b56f4810125b13ead (patch) | |
tree | 82014eb7c0d9711588e1e3376b21a92b48bb6da6 /app/controllers/projects/blame_controller.rb | |
parent | 55fc58bda4a5592f2f8deaecec9526fbe4eecd6f (diff) |
Fix blame view line groupings
Closes #2305
Diffstat (limited to 'app/controllers/projects/blame_controller.rb')
-rw-r--r-- | app/controllers/projects/blame_controller.rb | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/app/controllers/projects/blame_controller.rb b/app/controllers/projects/blame_controller.rb index 45e157c90cb..9ea518e6c85 100644 --- a/app/controllers/projects/blame_controller.rb +++ b/app/controllers/projects/blame_controller.rb @@ -8,6 +8,28 @@ class Projects::BlameController < Projects::ApplicationController def show @blob = @repository.blob_at(@commit.id, @path) - @blame = Gitlab::Git::Blame.new(@repository, @commit.id, @path) + @blame = group_blame_lines + end + + def group_blame_lines + blame = Gitlab::Git::Blame.new(@repository, @commit.id, @path) + + prev_sha = nil + groups = [] + current_group = nil + + blame.each do |commit, line| + if prev_sha && prev_sha == commit.sha + current_group[:lines] << line + else + groups << current_group if current_group.present? + current_group = { commit: commit, lines: [line] } + end + + prev_sha = commit.sha + end + + groups << current_group if current_group.present? + groups end end |