class Dependabot::PullRequestUpdater::Gitlab

def branch_exists?(name)

def branch_exists?(name)
  !T.unsafe(gitlab_client_for_source).branch(source.repo, name).nil?
rescue ::Gitlab::Error::NotFound
  false
end

def commit_being_updated

def commit_being_updated
  T.unsafe(gitlab_client_for_source).commit(source.repo, old_commit)
end

def create_commit

def create_commit
  gitlab_client_for_source.create_commit(
    source.repo,
    merge_request.source_branch,
    commit_being_updated.title,
    files,
    force: true,
    start_branch: merge_request.target_branch
  )
end

def gitlab_client_for_source

def gitlab_client_for_source
  @gitlab_client_for_source ||=
    T.let(
      Dependabot::Clients::GitlabWithRetries.for_source(
        source: source,
        credentials: credentials
      ),
      T.nilable(Dependabot::Clients::GitlabWithRetries)
    )
end

def initialize(source:, base_commit:, old_commit:, files:,

def initialize(source:, base_commit:, old_commit:, files:,
               credentials:, pull_request_number:, target_project_id:)
  @source              = source
  @base_commit         = base_commit
  @old_commit          = old_commit
  @files               = files
  @credentials         = credentials
  @pull_request_number = pull_request_number
  @target_project_id   = target_project_id
end

def merge_request

def merge_request
  @merge_request ||= T.let(
    T.unsafe(gitlab_client_for_source).merge_request(
      target_project_id || source.repo,
      pull_request_number
    ),
    T.untyped
  )
end

def merge_request_exists?

def merge_request_exists?
  merge_request
  true
rescue ::Gitlab::Error::NotFound
  false
end

def update

def update
  return unless merge_request_exists?
  return unless branch_exists?(merge_request.source_branch)
  create_commit
  merge_request.source_branch
end