Class: Projects::MergeRequests::ConflictsController

Inherits:
ApplicationController
  • Object
show all
Includes:
IssuableActions
Defined in:
app/controllers/projects/merge_requests/conflicts_controller.rb

Constant Summary

Constants included from Gitlab::Cache::Helpers

Gitlab::Cache::Helpers::DEFAULT_EXPIRY

Instance Method Summary collapse

Methods included from IssuableActions

#bulk_update, #check_destroy_confirmation!, #destroy, #discussions, #realtime_changes, #update

Methods included from Spam::Concerns::HasSpamActionResponseFields

#spam_action_response_fields

Methods included from SpammableActions::AkismetMarkAsSpamAction

#mark_as_spam

Methods included from Gitlab::Cache::Helpers

#cache, #render_cached

Instance Method Details

#conflict_for_pathObject



42
43
44
45
46
47
48
49
50
# File 'app/controllers/projects/merge_requests/conflicts_controller.rb', line 42

def conflict_for_path
  return render_404 unless @conflicts_list.can_be_resolved_in_ui?

  file = @conflicts_list.file_for_path(params[:old_path], params[:new_path])

  return render_404 unless file

  render json: file, full_content: true
end

#resolve_conflictsObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/controllers/projects/merge_requests/conflicts_controller.rb', line 52

def resolve_conflicts
  return render_404 unless @conflicts_list.can_be_resolved_in_ui?

  Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter.track_resolve_conflict_action(user: current_user)

  if @merge_request.can_be_merged?
    render status: :bad_request,
      json: { message: _('The merge conflicts for this merge request have already been resolved.') }
    return
  end

  begin
    ::MergeRequests::Conflicts::ResolveService
      .new(merge_request)
      .execute(current_user, params)

    flash[:notice] = _('All merge conflicts were resolved. The merge request can now be merged.')

    render json: { redirect_to: project_merge_request_path(@project, @merge_request, resolved_conflicts: true) }
  rescue Gitlab::Git::Conflict::Resolver::ResolutionError => e
    render status: :bad_request, json: { message: e.message }
  end
end

#showObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/controllers/projects/merge_requests/conflicts_controller.rb', line 14

def show
  respond_to do |format|
    format.html do
      @issuable_sidebar = serializer.represent(@merge_request, serializer: 'sidebar')
      Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter
        .track_loading_conflict_ui_action(user: current_user)
    end

    format.json do
      if @conflicts_list.can_be_resolved_in_ui?
        render json: @conflicts_list
      elsif @merge_request.can_be_merged?
        render json: {
          message: _('The merge conflicts for this merge request have already been resolved. ' \
                     'Please return to the merge request.'),
          type: 'error'
        }
      else
        render json: {
          message: _('The merge conflicts for this merge request cannot be resolved through GitLab. ' \
                     'Please try to resolve them locally.'),
          type: 'error'
        }
      end
    end
  end
end