diff options
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r-- | app/models/merge_request.rb | 194 |
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? && |