summaryrefslogtreecommitdiff
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb194
1 files changed, 96 insertions, 98 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 1468ae1c34a..7bdd3c64d29 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -24,8 +24,8 @@ class MergeRequest < ActiveRecord::Base
SORTING_PREFERENCE_FIELD = :merge_requests_sort
ignore_column :locked_at,
- :ref_fetched,
- :deleted_at
+ :ref_fetched,
+ :deleted_at
belongs_to :target_project, class_name: "Project"
belongs_to :source_project, class_name: "Project"
@@ -36,9 +36,9 @@ class MergeRequest < ActiveRecord::Base
has_many :merge_request_diffs
has_one :merge_request_diff,
- -> { order('merge_request_diffs.id DESC') }, inverse_of: :merge_request
+ -> { order("merge_request_diffs.id DESC") }, inverse_of: :merge_request
- belongs_to :latest_merge_request_diff, class_name: 'MergeRequestDiff'
+ belongs_to :latest_merge_request_diff, class_name: "MergeRequestDiff"
manual_inverse_association :latest_merge_request_diff, :merge_request
# This is the same as latest_merge_request_diff unless:
@@ -61,11 +61,11 @@ class MergeRequest < ActiveRecord::Base
has_many :events, as: :target, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :merge_requests_closing_issues,
- class_name: 'MergeRequestsClosingIssues',
+ class_name: "MergeRequestsClosingIssues",
dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent
has_many :cached_closes_issues, through: :merge_requests_closing_issues, source: :issue
- has_many :merge_request_pipelines, foreign_key: 'merge_request_id', class_name: 'Ci::Pipeline'
+ has_many :merge_request_pipelines, foreign_key: "merge_request_id", class_name: "Ci::Pipeline"
belongs_to :assignee, class_name: "User"
@@ -177,7 +177,7 @@ class MergeRequest < ActiveRecord::Base
scope :closed_and_merged, -> { with_states(:closed, :merged) }
scope :from_source_branches, ->(branches) { where(source_branch: branches) }
scope :by_commit_sha, ->(sha) do
- where('EXISTS (?)', MergeRequestDiff.select(1).where('merge_requests.latest_merge_request_diff_id = merge_request_diffs.id').by_commit_sha(sha)).reorder(nil)
+ where("EXISTS (?)", MergeRequestDiff.select(1).where("merge_requests.latest_merge_request_diff_id = merge_request_diffs.id").by_commit_sha(sha)).reorder(nil)
end
scope :join_project, -> { joins(:target_project) }
scope :references_project, -> { references(:target_project) }
@@ -190,7 +190,7 @@ class MergeRequest < ActiveRecord::Base
after_save :keep_around_commit
def self.reference_prefix
- '!'
+ "!"
end
def rebase_in_progress?
@@ -234,7 +234,7 @@ class MergeRequest < ActiveRecord::Base
end
def self.project_foreign_key
- 'target_project_id'
+ "target_project_id"
end
# Returns all the merge requests from an ActiveRecord:Relation.
@@ -267,7 +267,7 @@ class MergeRequest < ActiveRecord::Base
WHERE merge_requests.id = merge_request_diffs.merge_request_id
)'.squish
- self.each_batch do |batch|
+ each_batch do |batch|
batch.update_all(update)
end
end
@@ -291,13 +291,13 @@ class MergeRequest < ActiveRecord::Base
end
def authors
- User.from_union([commit_authors, User.where(id: self.author_id)])
+ User.from_union([commit_authors, User.where(id: author_id)])
end
# Verifies if title has changed not taking into account WIP prefix
# for merge requests.
def wipless_title_changed(old_title)
- self.class.wipless_title(old_title) != self.wipless_title
+ self.class.wipless_title(old_title) != wipless_title
end
def hook_attrs
@@ -307,8 +307,8 @@ class MergeRequest < ActiveRecord::Base
# Returns a Hash of attributes to be used for Twitter card metadata
def card_attributes
{
- 'Author' => author.try(:name),
- 'Assignee' => assignee.try(:name)
+ "Author" => author.try(:name),
+ "Assignee" => assignee.try(:name),
}
end
@@ -340,10 +340,10 @@ class MergeRequest < ActiveRecord::Base
return merge_request_diff.commits if persisted?
commits_arr = if compare_commits
- compare_commits.reverse
- else
- []
- end
+ compare_commits.reverse
+ else
+ []
+ end
CommitCollection.new(source_project, commits_arr, source_branch)
end
@@ -452,12 +452,12 @@ class MergeRequest < ActiveRecord::Base
def modified_paths(past_merge_request_diff: nil)
diffs = if past_merge_request_diff
- past_merge_request_diff
- elsif compare
- compare
- else
- self.merge_request_diff
- end
+ past_merge_request_diff
+ elsif compare
+ compare
+ else
+ merge_request_diff
+ end
diffs.modified_paths
end
@@ -571,9 +571,9 @@ class MergeRequest < ActiveRecord::Base
# most recent data possible.
def repository_diff_refs
Gitlab::Diff::DiffRefs.new(
- base_sha: branch_merge_base_sha,
+ base_sha: branch_merge_base_sha,
start_sha: target_branch_sha,
- head_sha: source_branch_sha
+ head_sha: source_branch_sha
)
end
@@ -610,7 +610,7 @@ class MergeRequest < ActiveRecord::Base
def validate_target_project
return true if target_project.merge_requests_enabled?
- errors.add :base, 'Target project has disabled merge requests'
+ errors.add :base, "Target project has disabled merge requests"
end
def validate_fork
@@ -619,7 +619,7 @@ class MergeRequest < ActiveRecord::Base
return true unless source_project_missing?
errors.add :validate_fork,
- 'Source project is not a fork of the target project'
+ "Source project is not a fork of the target project"
end
def merge_ongoing?
@@ -667,12 +667,12 @@ class MergeRequest < ActiveRecord::Base
matcher =
if diff_refs_or_sha.is_a?(Gitlab::Diff::DiffRefs)
{
- 'start_commit_sha' => diff_refs_or_sha.start_sha,
- 'head_commit_sha' => diff_refs_or_sha.head_sha,
- 'base_commit_sha' => diff_refs_or_sha.base_sha
+ "start_commit_sha" => diff_refs_or_sha.start_sha,
+ "head_commit_sha" => diff_refs_or_sha.head_sha,
+ "base_commit_sha" => diff_refs_or_sha.base_sha,
}
else
- { 'head_commit_sha' => diff_refs_or_sha }
+ {"head_commit_sha" => diff_refs_or_sha}
end
viewable_diffs.find do |diff|
@@ -682,11 +682,11 @@ class MergeRequest < ActiveRecord::Base
def version_params_for(diff_refs)
if diff = merge_request_diff_for(diff_refs)
- { diff_id: diff.id }
+ {diff_id: diff.id}
elsif diff = merge_request_diff_for(diff_refs.head_sha)
{
diff_id: diff.id,
- start_sha: diff_refs.start_sha
+ start_sha: diff_refs.start_sha,
}
end
end
@@ -727,11 +727,11 @@ class MergeRequest < ActiveRecord::Base
end
def merge_event
- @merge_event ||= target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::MERGED).last
+ @merge_event ||= target_project.events.where(target_id: id, target_type: "MergeRequest", action: Event::MERGED).last
end
def closed_event
- @closed_event ||= target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::CLOSED).last
+ @closed_event ||= target_project.events.where(target_id: id, target_type: "MergeRequest", action: Event::CLOSED).last
end
def work_in_progress?
@@ -739,11 +739,11 @@ class MergeRequest < ActiveRecord::Base
end
def wipless_title
- self.class.wipless_title(self.title)
+ self.class.wipless_title(title)
end
def wip_title
- self.class.wip_title(self.title)
+ self.class.wip_title(title)
end
def mergeable?(skip_ci_check: false)
@@ -783,7 +783,7 @@ class MergeRequest < ActiveRecord::Base
end
def can_cancel_merge_when_pipeline_succeeds?(current_user)
- can_be_merged_by?(current_user) || self.author == current_user
+ can_be_merged_by?(current_user) || author == current_user
end
def can_remove_source_branch?(current_user)
@@ -794,11 +794,11 @@ class MergeRequest < ActiveRecord::Base
end
def should_remove_source_branch?
- Gitlab::Utils.to_boolean(merge_params['should_remove_source_branch'])
+ Gitlab::Utils.to_boolean(merge_params["should_remove_source_branch"])
end
def force_remove_source_branch?
- Gitlab::Utils.to_boolean(merge_params['force_remove_source_branch'])
+ Gitlab::Utils.to_boolean(merge_params["force_remove_source_branch"])
end
def remove_source_branch?
@@ -835,7 +835,7 @@ class MergeRequest < ActiveRecord::Base
.includes(:noteable)
end
- alias_method :discussion_notes, :related_notes
+ alias discussion_notes related_notes
def mergeable_discussions_state?
return true unless project.only_allow_merge_if_all_discussions_are_resolved?
@@ -856,24 +856,24 @@ class MergeRequest < ActiveRecord::Base
# Calculating this information for a number of merge requests requires
# running `ReferenceExtractor` on each of them separately.
# This optimization does not apply to issues from external sources.
- def cache_merge_request_closes_issues!(current_user = self.author)
+ def cache_merge_request_closes_issues!(current_user = author)
return unless project.issues_enabled?
return if closed? || merged?
transaction do
- self.merge_requests_closing_issues.delete_all
+ merge_requests_closing_issues.delete_all
closes_issues(current_user).each do |issue|
next if issue.is_a?(ExternalIssue)
- self.merge_requests_closing_issues.create!(issue: issue)
+ merge_requests_closing_issues.create!(issue: issue)
end
end
end
- def visible_closing_issues_for(current_user = self.author)
+ def visible_closing_issues_for(current_user = author)
strong_memoize(:visible_closing_issues_for) do
- if self.target_project.has_external_issue_tracker?
+ if target_project.has_external_issue_tracker?
closes_issues(current_user)
else
cached_closes_issues.select do |issue|
@@ -884,7 +884,7 @@ class MergeRequest < ActiveRecord::Base
end
# Return the set of issues that will be closed if this merge request is accepted.
- def closes_issues(current_user = self.author)
+ def closes_issues(current_user = author)
if target_branch == project.default_branch
messages = [title, description]
messages.concat(commits.map(&:safe_message)) if merge_request_diff
@@ -922,7 +922,7 @@ class MergeRequest < ActiveRecord::Base
end
def source_project_namespace
- if source_project && source_project.namespace
+ if source_project&.namespace
source_project.namespace.full_path
else
"(removed)"
@@ -930,7 +930,7 @@ class MergeRequest < ActiveRecord::Base
end
def target_project_namespace
- if target_project && target_project.namespace
+ if target_project&.namespace
target_project.namespace.full_path
else
"(removed)"
@@ -938,32 +938,32 @@ class MergeRequest < ActiveRecord::Base
end
def source_branch_exists?
- return false unless self.source_project
+ return false unless source_project
- self.source_project.repository.branch_exists?(self.source_branch)
+ source_project.repository.branch_exists?(source_branch)
end
def target_branch_exists?
- return false unless self.target_project
+ return false unless target_project
- self.target_project.repository.branch_exists?(self.target_branch)
+ target_project.repository.branch_exists?(target_branch)
end
def default_merge_commit_message(include_description: false)
- closes_issues_references = visible_closing_issues_for.map do |issue|
+ closes_issues_references = visible_closing_issues_for.map { |issue|
issue.to_reference(target_project)
- end
+ }
message = [
"Merge branch '#{source_branch}' into '#{target_branch}'",
- title
+ title,
]
if !include_description && closes_issues_references.present?
message << "Closes #{closes_issues_references.to_sentence}"
end
- message << "#{description}" if include_description && description.present?
+ message << description.to_s if include_description && description.present?
message << "See merge request #{to_reference(full: true)}"
message.join("\n\n")
@@ -982,12 +982,12 @@ class MergeRequest < ActiveRecord::Base
self.merge_when_pipeline_succeeds = false
self.merge_user = nil
if merge_params
- merge_params.delete('should_remove_source_branch')
- merge_params.delete('commit_message')
- merge_params.delete('squash_commit_message')
+ merge_params.delete("should_remove_source_branch")
+ merge_params.delete("commit_message")
+ merge_params.delete("squash_commit_message")
end
- self.save
+ save
end
# Return array of possible target branches
@@ -1044,7 +1044,7 @@ class MergeRequest < ActiveRecord::Base
def environments_for(current_user)
return [] unless diff_head_commit
- @environments ||= Hash.new do |h, current_user|
+ @environments ||= Hash.new { |h, current_user|
envs = EnvironmentsFinder.new(target_project, current_user,
ref: target_branch, commit: diff_head_commit, with_tags: true).execute
@@ -1054,7 +1054,7 @@ class MergeRequest < ActiveRecord::Base
end
h[current_user] = envs.uniq
- end
+ }
@environments[current_user]
end
@@ -1092,12 +1092,10 @@ class MergeRequest < ActiveRecord::Base
end
def in_locked_state
- begin
- lock_mr
- yield
- ensure
- unlock_mr
- end
+ lock_mr
+ yield
+ ensure
+ unlock_mr
end
def diverged_commits_count
@@ -1107,7 +1105,7 @@ class MergeRequest < ActiveRecord::Base
cache = {
source_sha: source_branch_sha,
target_sha: target_branch_sha,
- diverged_commits_count: compute_diverged_commits_count
+ diverged_commits_count: compute_diverged_commits_count,
}
Rails.cache.write(:"merge_request_#{id}_diverged_commits", cache)
end
@@ -1132,7 +1130,7 @@ class MergeRequest < ActiveRecord::Base
@all_pipelines ||=
source_project.ci_pipelines
- .for_merge_request(self, source_branch, all_commit_shas)
+ .for_merge_request(self, source_branch, all_commit_shas)
end
def update_head_pipeline
@@ -1152,35 +1150,35 @@ class MergeRequest < ActiveRecord::Base
def predefined_variables
Gitlab::Ci::Variables::Collection.new.tap do |variables|
- variables.append(key: 'CI_MERGE_REQUEST_ID', value: id.to_s)
- variables.append(key: 'CI_MERGE_REQUEST_IID', value: iid.to_s)
+ variables.append(key: "CI_MERGE_REQUEST_ID", value: id.to_s)
+ variables.append(key: "CI_MERGE_REQUEST_IID", value: iid.to_s)
- variables.append(key: 'CI_MERGE_REQUEST_REF_PATH',
+ variables.append(key: "CI_MERGE_REQUEST_REF_PATH",
value: ref_path.to_s)
- variables.append(key: 'CI_MERGE_REQUEST_PROJECT_ID',
+ variables.append(key: "CI_MERGE_REQUEST_PROJECT_ID",
value: project.id.to_s)
- variables.append(key: 'CI_MERGE_REQUEST_PROJECT_PATH',
+ variables.append(key: "CI_MERGE_REQUEST_PROJECT_PATH",
value: project.full_path)
- variables.append(key: 'CI_MERGE_REQUEST_PROJECT_URL',
+ variables.append(key: "CI_MERGE_REQUEST_PROJECT_URL",
value: project.web_url)
- variables.append(key: 'CI_MERGE_REQUEST_TARGET_BRANCH_NAME',
+ variables.append(key: "CI_MERGE_REQUEST_TARGET_BRANCH_NAME",
value: target_branch.to_s)
if source_project
- variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_ID',
+ variables.append(key: "CI_MERGE_REQUEST_SOURCE_PROJECT_ID",
value: source_project.id.to_s)
- variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_PATH',
+ variables.append(key: "CI_MERGE_REQUEST_SOURCE_PROJECT_PATH",
value: source_project.full_path)
- variables.append(key: 'CI_MERGE_REQUEST_SOURCE_PROJECT_URL',
+ variables.append(key: "CI_MERGE_REQUEST_SOURCE_PROJECT_URL",
value: source_project.web_url)
- variables.append(key: 'CI_MERGE_REQUEST_SOURCE_BRANCH_NAME',
+ variables.append(key: "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME",
value: source_branch.to_s)
end
end
@@ -1188,7 +1186,7 @@ class MergeRequest < ActiveRecord::Base
def compare_test_reports
unless has_test_reports?
- return { status: :error, status_reason: 'This merge request does not have test reports' }
+ return {status: :error, status_reason: "This merge request does not have test reports"}
end
compare_reports(Ci::CompareTestReportsService)
@@ -1197,12 +1195,12 @@ class MergeRequest < ActiveRecord::Base
def compare_reports(service_class)
with_reactive_cache(service_class.name) do |data|
unless service_class.new(project)
- .latest?(base_pipeline, actual_head_pipeline, data)
+ .latest?(base_pipeline, actual_head_pipeline, data)
raise InvalidateReactiveCache
end
data
- end || { status: :parsing }
+ end || {status: :parsing}
end
def calculate_reactive_cache(identifier, *args)
@@ -1216,10 +1214,10 @@ class MergeRequest < ActiveRecord::Base
def all_commits
# MySQL doesn't support LIMIT in a subquery.
diffs_relation = if Gitlab::Database.postgresql?
- merge_request_diffs.recent
- else
- merge_request_diffs
- end
+ merge_request_diffs.recent
+ else
+ merge_request_diffs
+ end
MergeRequestDiffCommit
.where(merge_request_diff: diffs_relation)
@@ -1254,7 +1252,7 @@ class MergeRequest < ActiveRecord::Base
# synchronized. Add a minute's leeway to compensate for both possibilities
cutoff = merged_at - 1.minute
- notes_association = notes_with_associations.where('created_at >= ?', cutoff)
+ notes_association = notes_with_associations.where("created_at >= ?", cutoff)
!merge_commit.has_been_reverted?(current_user, notes_association)
end
@@ -1265,7 +1263,7 @@ class MergeRequest < ActiveRecord::Base
metrics&.merged_at ||
merge_event&.created_at ||
- notes.system.reorder(nil).find_by(note: 'merged')&.created_at
+ notes.system.reorder(nil).find_by(note: "merged")&.created_at
end
end
@@ -1274,7 +1272,7 @@ class MergeRequest < ActiveRecord::Base
end
def has_complete_diff_refs?
- diff_refs && diff_refs.complete?
+ diff_refs&.complete?
end
# rubocop: disable CodeReuse/ServiceClass
@@ -1282,15 +1280,15 @@ class MergeRequest < ActiveRecord::Base
return unless has_complete_diff_refs?
return if new_diff_refs == old_diff_refs
- active_diff_discussions = self.notes.new_diff_notes.discussions.select do |discussion|
+ active_diff_discussions = notes.new_diff_notes.discussions.select { |discussion|
discussion.active?(old_diff_refs)
- end
+ }
return if active_diff_discussions.empty?
paths = active_diff_discussions.flat_map { |n| n.diff_file.paths }.uniq
service = Discussions::UpdateDiffPositionService.new(
- self.project,
+ project,
current_user,
old_diff_refs: old_diff_refs,
new_diff_refs: new_diff_refs,
@@ -1310,7 +1308,7 @@ class MergeRequest < ActiveRecord::Base
# rubocop: enable CodeReuse/ServiceClass
def keep_around_commit
- project.repository.keep_around(self.merge_commit_sha)
+ project.repository.keep_around(merge_commit_sha)
end
def has_commits?
@@ -1362,7 +1360,7 @@ class MergeRequest < ActiveRecord::Base
collaborative_push_possible? && allow_maintainer_to_push
end
- alias_method :allow_collaboration?, :allow_collaboration
+ alias allow_collaboration? allow_collaboration
def collaborative_push_possible?
source_project.present? && for_fork? &&