Skip to content
Snippets Groups Projects
Select Git revision
  • de4eee08947fde4b6b1b21e54329dc8f1d958362
  • master default
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
41 results

config_spec.rb

Blame
  • Forked from GitLab.org / GitLab FOSS
    Source project has a limited visibility.
    merge_request.rb 14.85 KiB
    class MergeRequest < ActiveRecord::Base
      include InternalId
      include Issuable
      include Referable
      include Sortable
      include Taskable
    
      belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project"
      belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project"
      belongs_to :merge_user, class_name: "User"
    
      has_one :merge_request_diff, dependent: :destroy
    
      serialize :merge_params, Hash
    
      after_create :create_merge_request_diff
      after_update :update_merge_request_diff
    
      delegate :commits, :diffs, :real_size, to: :merge_request_diff, prefix: nil
    
      # When this attribute is true some MR validation is ignored
      # It allows us to close or modify broken merge requests
      attr_accessor :allow_broken
    
      # Temporary fields to store compare vars
      # when creating new merge request
      attr_accessor :can_be_created, :compare_commits, :compare
    
      # Temporary fields to store target_sha, and base_sha to
      # compare when importing pull requests from GitHub
      attr_accessor :base_target_sha, :head_source_sha
    
      state_machine :state, initial: :opened do
        event :close do
          transition [:reopened, :opened] => :closed
        end
    
        event :mark_as_merged do
          transition [:reopened, :opened, :locked] => :merged
        end
    
        event :reopen do
          transition closed: :reopened
        end
    
        event :lock_mr do
          transition [:reopened, :opened] => :locked
        end
    
        event :unlock_mr do
          transition locked: :reopened
        end
    
        after_transition any => :locked do |merge_request, transition|
          merge_request.locked_at = Time.now
          merge_request.save
        end
    
        after_transition locked: (any - :locked) do |merge_request, transition|
          merge_request.locked_at = nil
          merge_request.save
        end
    
        state :opened
        state :reopened
        state :closed
        state :merged
        state :locked
      end