summaryrefslogtreecommitdiff
path: root/app/helpers/diff_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/diff_helper.rb')
-rw-r--r--app/helpers/diff_helper.rb27
1 files changed, 17 insertions, 10 deletions
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index 522593dd487..71c8296ad2e 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -225,6 +225,23 @@ module DiffHelper
end
end
+ def conflicts(allow_tree_conflicts: false)
+ return unless options[:merge_ref_head_diff]
+
+ conflicts_service = MergeRequests::Conflicts::ListService.new(merge_request, allow_tree_conflicts: allow_tree_conflicts) # rubocop:disable CodeReuse/ServiceClass
+
+ return unless allow_tree_conflicts || conflicts_service.can_be_resolved_in_ui?
+
+ conflicts_service.conflicts.files.index_by(&:path)
+ rescue Gitlab::Git::Conflict::Resolver::ConflictSideMissing
+ # This exception is raised when changes on a fork isn't present on canonical repo yet.
+ # We can't list conflicts until the canonical repo gets the references from the fork
+ # which happens asynchronously when updating MR.
+ #
+ # Return empty hash to indicate that there are no conflicts.
+ {}
+ end
+
private
def diff_btn(title, name, selected)
@@ -271,16 +288,6 @@ module DiffHelper
Gitlab::CodeNavigationPath.new(merge_request.project, merge_request.diff_head_sha)
end
- def conflicts(allow_tree_conflicts: false)
- return unless options[:merge_ref_head_diff]
-
- conflicts_service = MergeRequests::Conflicts::ListService.new(merge_request, allow_tree_conflicts: allow_tree_conflicts) # rubocop:disable CodeReuse/ServiceClass
-
- return unless allow_tree_conflicts || conflicts_service.can_be_resolved_in_ui?
-
- conflicts_service.conflicts.files.index_by(&:path)
- end
-
def log_overflow_limits(diff_files:, collection_overflow:)
if diff_files.any?(&:too_large?)
Gitlab::Metrics.add_event(:diffs_overflow_single_file_limits)