01ff084a4d
Previously, only number of changed files mattered. Now, number of lines to render in the diff are also taken into account. A hard limit is set, above which diffs are not rendered and users are not allowed to override that. This prevents high server resource usage with huge commits. Related to #1745, #2259 In addition, handle large commits for MergeRequests and Compare controllers. Also fixes a bug where diffs are loaded twice, if user goes directly to merge_requests/:id/diffs URL.
102 lines
2.6 KiB
CoffeeScript
102 lines
2.6 KiB
CoffeeScript
#
|
|
# * Filter merge requests
|
|
#
|
|
@merge_requestsPage = ->
|
|
$('#assignee_id').chosen()
|
|
$('#milestone_id').chosen()
|
|
$('#milestone_id, #assignee_id').on 'change', ->
|
|
$(this).closest('form').submit()
|
|
|
|
class MergeRequest
|
|
|
|
constructor: (@opts) ->
|
|
this.$el = $('.merge-request')
|
|
@diffs_loaded = if @opts.action == 'diffs' then true else false
|
|
@commits_loaded = false
|
|
|
|
this.activateTab(@opts.action)
|
|
|
|
this.bindEvents()
|
|
|
|
this.initMergeWidget()
|
|
this.$('.show-all-commits').on 'click', =>
|
|
this.showAllCommits()
|
|
|
|
modal = $('#modal_merge_info').modal(show: false)
|
|
|
|
# Local jQuery finder
|
|
$: (selector) ->
|
|
this.$el.find(selector)
|
|
|
|
initMergeWidget: ->
|
|
this.showState( @opts.current_status )
|
|
|
|
if this.$('.automerge_widget').length and @opts.check_enable
|
|
$.get @opts.url_to_automerge_check, (data) =>
|
|
this.showState( data.merge_status )
|
|
, 'json'
|
|
|
|
if @opts.ci_enable
|
|
$.get @opts.url_to_ci_check, (data) =>
|
|
this.showCiState data.status
|
|
, 'json'
|
|
|
|
bindEvents: ->
|
|
this.$('.nav-tabs').on 'click', 'a', (event) =>
|
|
a = $(event.currentTarget)
|
|
|
|
href = a.attr('href')
|
|
History.replaceState {path: href}, document.title, href
|
|
|
|
event.preventDefault()
|
|
|
|
this.$('.nav-tabs').on 'click', 'li', (event) =>
|
|
this.activateTab($(event.currentTarget).data('action'))
|
|
|
|
this.$('.accept_merge_request').on 'click', ->
|
|
$('.automerge_widget.can_be_merged').hide()
|
|
$('.merge-in-progress').show()
|
|
|
|
activateTab: (action) ->
|
|
this.$('.nav-tabs li').removeClass 'active'
|
|
this.$('.tab-content').hide()
|
|
switch action
|
|
when 'diffs'
|
|
this.$('.nav-tabs .diffs-tab').addClass 'active'
|
|
this.loadDiff() unless @diffs_loaded
|
|
this.$('.diffs').show()
|
|
else
|
|
this.$('.nav-tabs .notes-tab').addClass 'active'
|
|
this.$('.notes').show()
|
|
|
|
showState: (state) ->
|
|
$('.automerge_widget').hide()
|
|
$('.automerge_widget.' + state).show()
|
|
|
|
showCiState: (state) ->
|
|
$('.ci_widget').hide()
|
|
$('.ci_widget.ci-' + state).show()
|
|
|
|
loadDiff: (event) ->
|
|
$.ajax
|
|
type: 'GET'
|
|
url: this.$('.nav-tabs .diffs-tab a').attr('href')
|
|
beforeSend: =>
|
|
this.$('.status').addClass 'loading'
|
|
|
|
complete: =>
|
|
@diffs_loaded = true
|
|
this.$('.status').removeClass 'loading'
|
|
|
|
dataType: 'script'
|
|
|
|
showAllCommits: ->
|
|
this.$('.first-commits').remove()
|
|
this.$('.all-commits').removeClass 'hide'
|
|
|
|
alreadyOrCannotBeMerged: ->
|
|
this.$('.automerge_widget').hide()
|
|
this.$('.merge-in-progress').hide()
|
|
this.$('.automerge_widget.already_cannot_be_merged').show()
|
|
|
|
this.MergeRequest = MergeRequest
|