summaryrefslogtreecommitdiff
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorPierre de La Morinerie <pierre@capitainetrain.com>2016-02-04 19:23:58 +0100
committerPierre de La Morinerie <pierre@capitainetrain.com>2016-03-03 15:11:44 +0100
commit543845f7efe0b70926ea699eaf1e413fa878b285 (patch)
treef37858135e9ce5ac7c5bd7e4aad685582c363686 /app/models/merge_request.rb
parent566ea8543d971c4b811b2939b0677c5db52feab3 (diff)
downloadgitlab-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.rb23
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