# typed: strict# frozen_string_literal: truerequire"sorbet-runtime"require"dependabot/credential"require"dependabot/clients/azure"require"dependabot/pull_request_creator"moduleDependabotclassPullRequestCreatorclassAzureextendT::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(Dependabot::PullRequestCreator::Labeler)}attr_reader:labelersig{returns(T.nilable(T::Array[String]))}attr_reader:reviewerssig{returns(T.nilable(T::Array[String]))}attr_reader:assigneessig{returns(T.nilable(Integer))}attr_reader:work_item# Azure DevOps limits PR descriptions to a max of 4,000 characters in UTF-16 encoding:# https://developercommunity.visualstudio.com/content/problem/608770/remove-4000-character-limit-on-pull-request-descri.htmlPR_DESCRIPTION_MAX_LENGTH=3_999# 0 based countPR_DESCRIPTION_ENCODING=Encoding::UTF_16sigdoparams(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: Dependabot::PullRequestCreator::Labeler,reviewers: T.nilable(T::Array[String]),assignees: T.nilable(T::Array[String]),work_item: T.nilable(Integer)).voidenddefinitialize(source:,branch_name:,base_commit:,credentials:,files:,commit_message:,pr_description:,pr_name:,author_details:,labeler:,reviewers: nil,assignees: 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@reviewers=reviewers@assignees=assignees@work_item=work_itemendsig{returns(T.nilable(Excon::Response))}defcreatereturnifbranch_exists?&&pull_request_exists?# For Azure 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::Azure)}defazure_client_for_source@azure_client_for_source||=T.let(Dependabot::Clients::Azure.for_source(source: source,credentials: credentials),T.nilable(Dependabot::Clients::Azure))endsig{returns(T::Boolean)}defbranch_exists?!azure_client_for_source.branch(branch_name).nil?rescue::Dependabot::Clients::Azure::NotFoundfalseendsig{returns(T::Boolean)}defpull_request_exists?azure_client_for_source.pull_requests(branch_name,source.branch||default_branch).any?endsig{void}defcreate_commitauthor=author_details&.slice(:name,:email,:date)author=nilunlessauthor&.any?azure_client_for_source.create_commit(branch_name,base_commit,commit_message,files,author)endsig{returns(Excon::Response)}defcreate_pull_requestazure_client_for_source.create_pull_request(pr_name,branch_name,source.branch||default_branch,pr_description,labeler.labels_for_pr,reviewers,assignees,work_item)endsig{returns(String)}defdefault_branch@default_branch||=T.let(azure_client_for_source.fetch_default_branch(source.repo),T.nilable(String))endendendend