# typed: strong# frozen_string_literal: truerequire"sorbet-runtime"require"dependabot/clients/bitbucket"require"dependabot/credential"require"dependabot/dependency_file"require"dependabot/pull_request_creator"moduleDependabotclassPullRequestCreatorclassBitbucketextendT::Sigsig{returns(Dependabot::Source)}attr_reader:sourcesig{returns(String)}attr_reader:branch_namesig{returns(String)}attr_reader:base_commitsig{returns(T::Array[Dependabot::Credential])}attr_reader:credentialssig{returns(T::Array[Dependabot::DependencyFile])}attr_reader:filessig{returns(String)}attr_reader:commit_messagesig{returns(String)}attr_reader:pr_descriptionsig{returns(String)}attr_reader:pr_namesig{returns(T.nilable(T::Hash[Symbol,String]))}attr_reader:author_detailssig{returns(T.nilable(Dependabot::PullRequestCreator::Labeler))}attr_reader:labelersig{returns(T.nilable(Integer))}attr_reader:work_item# BitBucket Cloud accepts > 1MB characters, but they display poorly in the UI, so limiting to 4x 65,536PR_DESCRIPTION_MAX_LENGTH=262_143# 0 based countsigdoparams(source: Dependabot::Source,branch_name: String,base_commit: String,credentials: T::Array[Dependabot::Credential],files: T::Array[Dependabot::DependencyFile],commit_message: String,pr_description: String,pr_name: String,author_details: T.nilable(T::Hash[Symbol,String]),labeler: T.nilable(Dependabot::PullRequestCreator::Labeler),work_item: T.nilable(Integer)).voidenddefinitialize(source:,branch_name:,base_commit:,credentials:,files:,commit_message:,pr_description:,pr_name:,author_details:,labeler: nil,work_item: nil)@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@work_item=work_itemendsig{void}defcreatereturnifbranch_exists?&&pull_request_exists?# FIXME: Copied from Azure, but not verified whether this is true# For Bitbucket we create or update a branch in the same request as creating# a commit (so we don't need create or update branch logic here)create_commitcreate_pull_requestendprivatesig{returns(Dependabot::Clients::Bitbucket)}defbitbucket_client_for_source@bitbucket_client_for_source||=T.let(Dependabot::Clients::Bitbucket.for_source(source: source,credentials: credentials),T.nilable(Dependabot::Clients::Bitbucket))endsig{returns(T::Boolean)}defbranch_exists?!bitbucket_client_for_source.branch(source.repo,branch_name).nil?rescueClients::Bitbucket::NotFoundfalseendsig{returns(T::Boolean)}defpull_request_exists?bitbucket_client_for_source.pull_requests(source.repo,branch_name,source.branch||default_branch).any?endsig{void}defcreate_commitauthor=author_details&.slice(:name,:email)author=nilunlessauthor&.any?bitbucket_client_for_source.create_commit(source.repo,branch_name,base_commit,commit_message,files,T.must(author))endsig{void}defcreate_pull_requestbitbucket_client_for_source.create_pull_request(source.repo,pr_name,branch_name,source.branch||default_branch,pr_description,nil,work_item)endsig{returns(String)}defdefault_branch@default_branch||=T.let(bitbucket_client_for_source.fetch_default_branch(source.repo),T.nilable(String))endendendend