@@ -82,8 +82,8 @@ export class RepositoriesManager extends Disposable {
8282
8383 private registerFolderListeners ( folderManager : FolderRepositoryManager ) {
8484 const disposables = [
85- folderManager . onDidLoadRepositories ( state => {
86- this . state = state ;
85+ folderManager . onDidLoadRepositories ( ( ) => {
86+ this . updateState ( ) ;
8787 this . _onDidLoadAnyRepositories . fire ( ) ;
8888 } ) ,
8989 folderManager . onDidChangeActivePullRequest ( ( ) => this . updateActiveReviewCount ( ) ) ,
@@ -192,11 +192,29 @@ export class RepositoriesManager extends Disposable {
192192 return this . _state ;
193193 }
194194
195- set state ( state : ReposManagerState ) {
196- const stateChange = state !== this . _state ;
197- this . _state = state ;
195+ private updateState ( state ?: ReposManagerState ) {
196+ let maxState = ReposManagerState . Initializing ;
197+ if ( state ) {
198+ maxState = state ;
199+ } else {
200+ // Get the most advanced state from all folder managers
201+ const stateValue = ( testState : ReposManagerState ) => {
202+ switch ( testState ) {
203+ case ReposManagerState . Initializing : return 0 ;
204+ case ReposManagerState . NeedsAuthentication : return 1 ;
205+ case ReposManagerState . RepositoriesLoaded : return 2 ;
206+ }
207+ } ;
208+ for ( const folderManager of this . _folderManagers ) {
209+ if ( stateValue ( folderManager . state ) > stateValue ( maxState ) ) {
210+ maxState = folderManager . state ;
211+ }
212+ }
213+ }
214+ const stateChange = maxState !== this . _state ;
215+ this . _state = maxState ;
198216 if ( stateChange ) {
199- vscode . commands . executeCommand ( 'setContext' , ReposManagerStateContext , state ) ;
217+ vscode . commands . executeCommand ( 'setContext' , ReposManagerStateContext , maxState ) ;
200218 this . _onDidChangeState . fire ( ) ;
201219 }
202220 }
@@ -207,7 +225,7 @@ export class RepositoriesManager extends Disposable {
207225
208226 async clearCredentialCache ( ) : Promise < void > {
209227 await this . _credentialStore . reset ( ) ;
210- this . state = ReposManagerState . Initializing ;
228+ this . updateState ( ReposManagerState . Initializing ) ;
211229 }
212230
213231 async authenticate ( enterprise ?: boolean ) : Promise < boolean > {
0 commit comments