summaryrefslogtreecommitdiff
path: root/app/controllers/projects
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/projects')
-rw-r--r--app/controllers/projects/blame_controller.rb24
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