@@ -10,7 +10,7 @@ import {
1010 PullRequestDefaults ,
1111 titleAndBodyFrom ,
1212} from './folderRepositoryManager' ;
13- import { GitHubRepository } from './githubRepository' ;
13+ import { GitHubRepository , isRateLimitError , ViewerPermission } from './githubRepository' ;
1414import { IAccount , ILabel , IMilestone , IProject , isITeam , ITeam , MergeMethod , RepoAccessAndMergeMethods } from './interface' ;
1515import { BaseBranchMetadata , PullRequestGitHelper } from './pullRequestGitHelper' ;
1616import { PullRequestModel } from './pullRequestModel' ;
@@ -211,13 +211,47 @@ export abstract class BaseCreatePullRequestViewProvider<T extends BasePullReques
211211
212212 const defaultBaseBranch = detectedBaseMetadata ?. branch ?? this . _pullRequestDefaults . base ;
213213
214- const [ defaultTitleAndDescription , mergeConfiguration , viewerPermission , mergeQueueMethodForBranch , labels ] = await Promise . all ( [
215- this . getTitleAndDescription ( defaultCompareBranch , defaultBaseBranch ) ,
216- this . getMergeConfiguration ( defaultBaseRemote . owner , defaultBaseRemote . repositoryName ) ,
217- defaultOrigin . getViewerPermission ( ) ,
218- this . _folderRepositoryManager . mergeQueueMethodForBranch ( defaultBaseBranch , defaultBaseRemote . owner , defaultBaseRemote . repositoryName ) ,
219- this . getPullRequestDefaultLabels ( defaultBaseRemote )
220- ] ) ;
214+ let defaultTitleAndDescription : { title : string ; description : string } ;
215+ let mergeConfiguration : RepoAccessAndMergeMethods ;
216+ let viewerPermission : ViewerPermission ;
217+ let mergeQueueMethodForBranch : MergeMethod | undefined ;
218+ let labels : ILabel [ ] ;
219+ try {
220+ [ defaultTitleAndDescription , mergeConfiguration , viewerPermission , mergeQueueMethodForBranch , labels ] = await Promise . all ( [
221+ this . getTitleAndDescription ( defaultCompareBranch , defaultBaseBranch ) ,
222+ this . getMergeConfiguration ( defaultBaseRemote . owner , defaultBaseRemote . repositoryName ) ,
223+ defaultOrigin . getViewerPermission ( ) ,
224+ this . _folderRepositoryManager . mergeQueueMethodForBranch ( defaultBaseBranch , defaultBaseRemote . owner , defaultBaseRemote . repositoryName ) ,
225+ this . getPullRequestDefaultLabels ( defaultBaseRemote )
226+ ] ) ;
227+ } catch ( e ) {
228+ if ( isRateLimitError ( e ) ) {
229+ vscode . window . showErrorMessage ( vscode . l10n . t ( 'GitHub API rate limit exceeded. Please wait and try again.' ) ) ;
230+ }
231+ Logger . error ( `Error initializing create pull request view: ${ e } ` , BaseCreatePullRequestViewProvider . ID ) ;
232+ return {
233+ canModifyBranches : true ,
234+ defaultBaseRemote,
235+ defaultBaseBranch,
236+ defaultCompareRemote,
237+ defaultCompareBranch : this . _defaultCompareBranch ,
238+ defaultTitle : '' ,
239+ defaultDescription : '' ,
240+ baseHasMergeQueue : false ,
241+ remoteCount : remotes . length ,
242+ autoMergeDefault : false ,
243+ createError : '' ,
244+ isDraftDefault : false ,
245+ isDarkTheme : vscode . window . activeColorTheme . kind === vscode . ColorThemeKind . Dark ,
246+ generateTitleAndDescriptionTitle : undefined ,
247+ creating : false ,
248+ initializeWithGeneratedTitleAndDescription : false ,
249+ preReviewState : PreReviewState . None ,
250+ preReviewer : undefined ,
251+ reviewing : false ,
252+ usingTemplate : false ,
253+ } ;
254+ }
221255
222256 const defaultCreateOption = vscode . workspace . getConfiguration ( PR_SETTINGS_NAMESPACE ) . get < 'lastUsed' | 'create' | 'createDraft' | 'createAutoMerge' > ( DEFAULT_CREATE_OPTION , 'lastUsed' ) ;
223257 const lastCreateMethod : { autoMerge : boolean , mergeMethod : MergeMethod | undefined , isDraft : boolean } | undefined = this . _folderRepositoryManager . context . workspaceState . get < { autoMerge : boolean , mergeMethod : MergeMethod , isDraft } | undefined > ( PREVIOUS_CREATE_METHOD , undefined ) ;
@@ -724,7 +758,8 @@ export class CreatePullRequestViewProvider extends BaseCreatePullRequestViewProv
724758
725759 const name = compareBranch . name ;
726760 const branchNameTitle = ( name : string ) => {
727- return `${ name . charAt ( 0 ) . toUpperCase ( ) } ${ name . slice ( 1 ) } ` ;
761+ const nameWithSpaces = name . replace ( / [ - _ ] / g, ' ' ) ;
762+ return `${ nameWithSpaces . charAt ( 0 ) . toUpperCase ( ) } ${ nameWithSpaces . slice ( 1 ) } ` ;
728763 } ;
729764
730765 // If branchName is selected, use the branch name as the title
@@ -994,7 +1029,18 @@ Don't forget to commit your template file to the repository so that it can be us
9941029 }
9951030
9961031 private async processRemoteAndBranchResult ( githubRepository : GitHubRepository , result : { remote : RemoteInfo , branch : string } , isBase : boolean ) {
997- const [ defaultBranch , viewerPermission ] = await Promise . all ( [ githubRepository . getDefaultBranch ( ) , githubRepository . getViewerPermission ( ) ] ) ;
1032+ let viewerPermission : ViewerPermission ;
1033+ try {
1034+ viewerPermission = await githubRepository . getViewerPermission ( ) ;
1035+ } catch ( e ) {
1036+ if ( isRateLimitError ( e ) ) {
1037+ vscode . window . showErrorMessage ( vscode . l10n . t ( 'GitHub API rate limit exceeded. Please wait and try again.' ) ) ;
1038+ viewerPermission = ViewerPermission . Unknown ;
1039+ } else {
1040+ throw e ;
1041+ }
1042+ }
1043+ const defaultBranch = await githubRepository . getDefaultBranch ( ) ;
9981044
9991045 commands . setContext ( contexts . CREATE_PR_PERMISSIONS , viewerPermission ) ;
10001046 let chooseResult : ChooseBaseRemoteAndBranchResult | ChooseCompareRemoteAndBranchResult ;
0 commit comments