diff options
author | Stan Hu <stanhu@gmail.com> | 2015-08-20 01:02:12 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2015-08-20 01:27:29 -0700 |
commit | 0a5b005da170fe81afea012b56f4810125b13ead (patch) | |
tree | 82014eb7c0d9711588e1e3376b21a92b48bb6da6 /app | |
parent | 55fc58bda4a5592f2f8deaecec9526fbe4eecd6f (diff) | |
download | gitlab-ce-0a5b005da170fe81afea012b56f4810125b13ead.tar.gz |
Fix blame view line groupings
Closes #2305
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/blame_controller.rb | 24 | ||||
-rw-r--r-- | app/views/projects/blame/show.html.haml | 38 |
2 files changed, 43 insertions, 19 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 diff --git a/app/views/projects/blame/show.html.haml b/app/views/projects/blame/show.html.haml index 05d5db5d3fe..a3ff7ce2f1f 100644 --- a/app/views/projects/blame/show.html.haml +++ b/app/views/projects/blame/show.html.haml @@ -13,30 +13,32 @@ .file-content.blame.highlight %table - current_line = 1 - - @blame.each do |raw_commit, line| + - @blame.each do |blame_group| %tr %td.blame-commit .commit - - unless @prev_commit && @prev_commit.sha == raw_commit.sha - - commit = Commit.new(raw_commit, @project) - .commit-row-title - %strong - = link_to_gfm truncate(commit.title, length: 35), namespace_project_commit_path(@project.namespace, @project, commit.id), class: "cdark" - .pull-right - = link_to commit.short_id, namespace_project_commit_path(@project.namespace, @project, commit), class: "monospace" - - .light - = commit_author_link(commit, avatar: false) - authored - #{time_ago_with_tooltip(commit.committed_date)} - - @prev_commit = raw_commit + - commit = Commit.new(blame_group[:commit], @project) + .commit-row-title + %strong + = link_to_gfm truncate(commit.title, length: 35), namespace_project_commit_path(@project.namespace, @project, commit.id), class: "cdark" + .pull-right + = link_to commit.short_id, namespace_project_commit_path(@project.namespace, @project, commit), class: "monospace" + + .light + = commit_author_link(commit, avatar: false) + authored + #{time_ago_with_tooltip(commit.committed_date)} %td.lines.blame-numbers %pre - = current_line - - current_line += 1 + - line_count = blame_group[:lines].count + - (current_line...(current_line + line_count)).each do |i| + = i + \ + - current_line += line_count %td.lines %pre{class: 'code highlight white'} %code - :erb - <%= highlight(@blob.name, line, nowrap: true, continue: true).html_safe %> + - blame_group[:lines].each do |line| + :erb + <%= highlight(@blob.name, line, nowrap: true, continue: true).html_safe %> |