class RoboPigeon::GitLab::MergeRequest

Attributes

merge_request[RW]

Public Class Methods

create!(source, target, title) click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 8
def self.create!(source, target, title)
  RoboPigeon::GitLab::MergeRequest.new(RoboPigeon::GitLab::Client.client.create_merge_request(
                                         RoboPigeon::GitLab::Client.project,
                                         title,
                                         source_branch: source,
                                         target_branch: target
                                       ))
end
find(source, target) click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 17
def self.find(source, target)
  RoboPigeon::GitLab::MergeRequest.new(
    RoboPigeon::GitLab::Client.client.merge_requests(
      RoboPigeon::GitLab::Client.project,
      state: 'opened',
      source_branch: source,
      target_branch: target
    ).first
  )
end
new(merge_request) click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 4
def initialize(merge_request)
  self.merge_request = merge_request
end

Public Instance Methods

client() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 32
def client
  gitlab.client
end
comment!(text) click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 36
def comment!(text)
  client.create_merge_request_note(RoboPigeon::GitLab::Client.project, merge_request.iid, body: text)
end
gitlab() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 28
def gitlab
  RoboPigeon::GitLab::Client
end
merge!() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 40
def merge!
  return if already_up_to_date

  return if merge_merge_request!

  close_merge_request!
  raise 'Merge request could not be merged'
end

Private Instance Methods

already_up_to_date() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 51
def already_up_to_date
  if merge_request.changes_count.nil? || merge_request.changes_count == '0'
    close_merge_request!
    puts 'Merge request had no changes, aborting.'
    return true
  end
  false
end
close_merge_request!() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 70
def close_merge_request!
  client.update_merge_request(RoboPigeon::GitLab::Client.project, merge_request.iid, state_event: 'close')
  true
rescue Gitlab::Error::Error => e
  puts "Failed to close merge request - #{e}\n#{e.message}"
  false
end
merge_merge_request!() click to toggle source
# File lib/robopigeon/gitlab/merge_request.rb, line 60
def merge_merge_request!
  begin
    merge = client.accept_merge_request(RoboPigeon::GitLab::Client.project, merge_request.iid, merge_when_pipeline_succeeds: true)
    return merge.merge_status == 'can_be_merged' && (merge.merge_when_pipeline_succeeds || merge.state == 'merged')
  rescue Gitlab::Error::Error => e
    puts "Failed to merge branch - #{e}\n#{e.message}"
  end
  false
end