Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb58
1 files changed, 34 insertions, 24 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index d9726e76c4b..524a9b8074b 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -384,7 +384,6 @@ class MergeRequest < ApplicationRecord
}
scope :with_csv_entity_associations, -> { preload(:assignees, :approved_by_users, :author, :milestone, metrics: [:merged_by]) }
- scope :with_jira_integration_associations, -> { preload_routables.preload(:metrics, :assignees, :author) }
scope :recently_unprepared, -> { where(prepared_at: nil).where(created_at: 2.hours.ago..).order(:created_at, :id) } # id is the tie-breaker
scope :by_target_branch_wildcard, ->(wildcard_branch_name) do
@@ -530,6 +529,14 @@ class MergeRequest < ApplicationRecord
.pluck(:target_branch)
end
+ def self.recent_source_branches(limit: 100)
+ group(:source_branch)
+ .select(:source_branch)
+ .reorder(arel_table[:updated_at].maximum.desc)
+ .limit(limit)
+ .pluck(:source_branch)
+ end
+
def self.sort_by_attribute(method, excluded_labels: [])
case method.to_s
when 'merged_at', 'merged_at_asc' then order_merged_at_asc
@@ -1235,17 +1242,14 @@ class MergeRequest < ApplicationRecord
}
end
- def mergeable?(
- skip_ci_check: false, skip_discussions_check: false, skip_approved_check: false, check_mergeability_retry_lease: false,
- skip_draft_check: false, skip_rebase_check: false, skip_blocked_check: false)
-
- return false unless mergeable_state?(
- skip_ci_check: skip_ci_check,
- skip_discussions_check: skip_discussions_check,
- skip_draft_check: skip_draft_check,
- skip_approved_check: skip_approved_check,
- skip_blocked_check: skip_blocked_check
- )
+ # mergeable_state_check_params allows a hash of merge checks to skip or not
+ # skip_ci_check
+ # skip_discussions_check
+ # skip_draft_check
+ # skip_approved_check
+ # skip_blocked_check
+ def mergeable?(check_mergeability_retry_lease: false, skip_rebase_check: false, **mergeable_state_check_params)
+ return false unless mergeable_state?(**mergeable_state_check_params)
check_mergeability(sync_retry_lease: check_mergeability_retry_lease)
mergeable_git_state?(skip_rebase_check: skip_rebase_check)
@@ -1275,18 +1279,16 @@ class MergeRequest < ApplicationRecord
mergeable_state_checks + mergeable_git_state_checks
end
- def mergeable_state?(
- skip_ci_check: false, skip_discussions_check: false, skip_approved_check: false,
- skip_draft_check: false, skip_blocked_check: false)
+ # mergeable_state_check_params allows a hash of merge checks to skip or not
+ # skip_ci_check
+ # skip_discussions_check
+ # skip_draft_check
+ # skip_approved_check
+ # skip_blocked_check
+ def mergeable_state?(**mergeable_state_check_params)
additional_checks = execute_merge_checks(
self.class.mergeable_state_checks,
- params: {
- skip_ci_check: skip_ci_check,
- skip_discussions_check: skip_discussions_check,
- skip_approved_check: skip_approved_check,
- skip_draft_check: skip_draft_check,
- skip_blocked_check: skip_blocked_check
- }
+ params: mergeable_state_check_params
)
additional_checks.success?
end
@@ -1386,7 +1388,7 @@ class MergeRequest < ApplicationRecord
end
def mergeable_discussions_state?
- return true unless project.only_allow_merge_if_all_discussions_are_resolved?(inherit_group_setting: true)
+ return true unless only_allow_merge_if_all_discussions_are_resolved?
unresolved_notes.none?(&:to_be_resolved?)
end
@@ -1566,8 +1568,16 @@ class MergeRequest < ApplicationRecord
access.can_push_to_branch?(target_branch)
end
+ def only_allow_merge_if_pipeline_succeeds?
+ project.only_allow_merge_if_pipeline_succeeds?(inherit_group_setting: true)
+ end
+
+ def only_allow_merge_if_all_discussions_are_resolved?
+ project.only_allow_merge_if_all_discussions_are_resolved?(inherit_group_setting: true)
+ end
+
def mergeable_ci_state?
- return true unless project.only_allow_merge_if_pipeline_succeeds?(inherit_group_setting: true)
+ return true unless only_allow_merge_if_pipeline_succeeds?
return false unless actual_head_pipeline
return true if project.allow_merge_on_skipped_pipeline?(inherit_group_setting: true) && actual_head_pipeline.skipped?