Commit 88b1e0ff authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Faster branch contains detection for commit

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 2ebd2d41
...@@ -12,13 +12,7 @@ class Projects::CommitController < Projects::ApplicationController ...@@ -12,13 +12,7 @@ class Projects::CommitController < Projects::ApplicationController
return git_not_found! unless @commit return git_not_found! unless @commit
@line_notes = project.notes.for_commit_id(commit.id).inline @line_notes = project.notes.for_commit_id(commit.id).inline
@branches = project.repository.branch_names_contains(commit.id)
@branches = begin
project.repository.branch_names_contains(commit.id)
rescue Grit::Git::GitTimeout
[]
end
@diffs = @commit.diffs @diffs = @commit.diffs
@note = project.build_commit_note(commit) @note = project.build_commit_note(commit)
@notes_count = project.notes.for_commit_id(commit.id).count @notes_count = project.notes.for_commit_id(commit.id).count
......
...@@ -284,4 +284,21 @@ class Repository ...@@ -284,4 +284,21 @@ class Repository
blob_at(commit.parent_id, diff.old_path) blob_at(commit.parent_id, diff.old_path)
end end
end end
def branch_names_contains(sha)
args = %W(git branch --contains #{sha})
names = Gitlab::Popen.popen(args, path_to_repo).first
if names.respond_to?(:split)
names = names.split("\n").map(&:strip)
names.each do |name|
name.slice! '* '
end
names
else
[]
end
end
end end
require 'spec_helper'
describe Repository do
include RepoHelpers
let(:repository) { create(:project).repository }
describe :branch_names_contains do
subject { repository.branch_names_contains(sample_commit.id) }
it { should include('master') }
it { should_not include('feature') }
it { should_not include('fix') }
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment