diff options
author | Pierre de La Morinerie <pierre@capitainetrain.com> | 2016-02-04 19:23:58 +0100 |
---|---|---|
committer | Pierre de La Morinerie <pierre@capitainetrain.com> | 2016-03-03 15:11:44 +0100 |
commit | 543845f7efe0b70926ea699eaf1e413fa878b285 (patch) | |
tree | f37858135e9ce5ac7c5bd7e4aad685582c363686 /app/models/merge_request.rb | |
parent | 566ea8543d971c4b811b2939b0677c5db52feab3 (diff) | |
download | gitlab-ce-543845f7efe0b70926ea699eaf1e413fa878b285.tar.gz |
Indicate how much an MR branch diverges from the target branch
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 1543ef311d7..f89bb6e9e4b 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -524,6 +524,29 @@ class MergeRequest < ActiveRecord::Base end end + def diverged_commits_count + cache = Rails.cache.read(:"merge_request_#{id}_diverged_commits") + + if cache.blank? || cache[:source_sha] != source_sha || cache[:target_sha] != target_sha + cache = { + source_sha: source_sha, + target_sha: target_sha, + diverged_commits_count: compute_diverged_commits_count + } + Rails.cache.write(:"merge_request_#{id}_diverged_commits", cache) + end + + cache[:diverged_commits_count] + end + + def compute_diverged_commits_count + Gitlab::Git::Commit.between(target_project.repository.raw_repository, source_sha, target_sha).size + end + + def diverged_from_target_branch? + diverged_commits_count > 0 + end + def ci_commit @ci_commit ||= source_project.ci_commit(last_commit.id) if last_commit && source_project end |