class Dependabot::PullRequestCreator::Codecommit

Attributes

author_details[R]
base_commit[R]
branch_name[R]
commit_message[R]
credentials[R]
files[R]
labeler[R]
pr_description[R]
pr_name[R]
source[R]

Public Class Methods

new(source:, branch_name:, base_commit:, credentials:, files:, commit_message:, pr_description:, pr_name:, author_details:, labeler:, require_up_to_date_base:) click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 13
def initialize(source:, branch_name:, base_commit:, credentials:,
               files:, commit_message:, pr_description:, pr_name:,
               author_details:, labeler:, require_up_to_date_base:)
  @source                  = source
  @branch_name             = branch_name
  @base_commit             = base_commit
  @credentials             = credentials
  @files                   = files
  @commit_message          = commit_message
  @pr_description          = pr_description
  @pr_name                 = pr_name
  @author_details          = author_details
  @labeler                 = labeler
  @require_up_to_date_base = require_up_to_date_base
end

Public Instance Methods

create() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 29
def create
  return if branch_exists?(branch_name) && unmerged_pull_request_exists?
  return if require_up_to_date_base? && !base_commit_is_up_to_date?

  create_pull_request
end

Private Instance Methods

base_commit_is_up_to_date?() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 42
def base_commit_is_up_to_date?
  codecommit_client_for_source.fetch_commit(
    source.repo,
    branch_name
  ) == base_commit
end
branch_exists?(branch_name) click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 92
def branch_exists?(branch_name)
  @branch_ref ||= codecommit_client_for_source.branch(branch_name)
  rescue Aws::CodeCommit::Errors::BranchDoesNotExistException
    false
end
codecommit_client_for_source() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 84
def codecommit_client_for_source
  @codecommit_client_for_source ||=
    Dependabot::Clients::CodeCommit.for_source(
      source: source,
      credentials: credentials
    )
end
create_branch(commit) click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 76
def create_branch(commit)
  # codecommit returns an empty response on create branch success
  codecommit_client_for_source.create_branch(source.repo, branch_name,
                                             commit)
  @branch_name = branch_name
  branch_name
end
create_commit() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 127
def create_commit
  author = author_details&.slice(:name, :email, :date)
  author = nil unless author&.any?

  codecommit_client_for_source.create_commit(
    branch_name,
    author,
    base_commit,
    commit_message,
    files
  )
end
create_or_get_branch(commit) click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 67
def create_or_get_branch(commit)
  # returns the branch name
  if branch_exists?(branch_name)
    branch_name
  else
    create_branch(commit)
  end
end
create_pull_request() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 49
def create_pull_request
  branch = create_or_get_branch(base_commit)
  return unless branch

  create_commit

  pull_request = codecommit_client_for_source.create_pull_request(
    pr_name,
    branch_name,
    source.branch || default_branch,
    pr_description
    # codecommit doesn't support PR labels
  )
  return unless pull_request

  pull_request
end
default_branch() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 140
def default_branch
  @default_branch ||=
    codecommit_client_for_source.fetch_default_branch(source.repo)
end
pull_requests_for_branch() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 109
def pull_requests_for_branch
  @pull_requests_for_branch ||=
    begin
      open_prs = codecommit_client_for_source.pull_requests(
        source.repo,
        "open",
        source.branch || default_branch
      )
      closed_prs = codecommit_client_for_source.pull_requests(
        source.repo,
        "closed",
        source.branch || default_branch
      )

      [*open_prs, *closed_prs]
    end
end
require_up_to_date_base?() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 38
def require_up_to_date_base?
  @require_up_to_date_base
end
unmerged_pull_request_exists?() click to toggle source
# File lib/dependabot/pull_request_creator/codecommit.rb, line 98
def unmerged_pull_request_exists?
  unmerged_prs = []
  pull_requests_for_branch.each do |pr|
    unless pr.pull_request.
           pull_request_targets[0].merge_metadata.is_merged
      unmerged_prs << pr
    end
  end
  unmerged_prs.any?
end