diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 040ab0f4b0f02bba9153fde44e75f13401d60d4c..53b3fc10ccb264c2b7f12dd936ed8ffaa7c11416 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -209,13 +209,7 @@ class MergeRequest < ActiveRecord::Base
       if for_fork?
         Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
       else
-        rugged = project.repository.rugged
-        our_commit = rugged.branches[target_branch].target
-        their_commit = rugged.branches[source_branch].target
-
-        if our_commit && their_commit
-          !rugged.merge_commits(our_commit, their_commit).conflicts?
-        end
+        project.repository.can_be_merged?(source_branch, target_branch)
       end
 
     if can_be_merged
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 97d2aa1c89e4a43e021121ee39623fbec8c4aa14..c767d1051d12cb0544cf97536937ccd41a4f013e 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -422,6 +422,15 @@ class Repository
     }
   end
 
+  def can_be_merged?(source_branch, target_branch)
+    our_commit = rugged.branches[target_branch].target
+    their_commit = rugged.branches[source_branch].target
+
+    if our_commit && their_commit
+      !rugged.merge_commits(our_commit, their_commit).conflicts?
+    end
+  end
+
   private
 
   def cache
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 77ceb6c8adc7eb71d04397443210c7e382dded04..a083dcb127425cc2a9140c73c1c75bbf1f1231bf 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -33,4 +33,18 @@ describe Repository do
       it { is_expected.to be_nil }
     end
   end
+
+  describe :can_be_merged? do
+    context 'mergeable branches' do
+      subject { repository.can_be_merged?('feature', 'master') }
+
+      it { is_expected.to be_truthy }
+    end
+
+    context 'non-mergeable branches' do
+      subject { repository.can_be_merged?('feature_conflict', 'feature') }
+
+      it { is_expected.to be_falsey }
+    end
+  end
 end