Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions 18 src/github/folderRepositoryManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ const CACHED_TEMPLATE_BODY = 'templateBody';
export class FolderRepositoryManager extends Disposable {
static ID = 'FolderRepositoryManager';

private _state: ReposManagerState = ReposManagerState.Initializing;
private _activePullRequest?: PullRequestModel;
private _activeIssue?: IssueModel;
private _githubRepositories: GitHubRepository[];
Expand Down Expand Up @@ -468,6 +469,17 @@ export class FolderRepositoryManager extends Disposable {
return isAuthenticated;
}

get state(): ReposManagerState {
return this._state;
}

private set state(state: ReposManagerState) {
if (state !== this._state) {
this._state = state;
this._onDidLoadRepositories.fire(state);
}
}

private async doUpdateRepositories(silent: boolean): Promise<boolean> {
if (this._git.state === 'uninitialized') {
Logger.appendLine('Cannot updates repositories as git is uninitialized', this.id);
Expand All @@ -480,7 +492,7 @@ export class FolderRepositoryManager extends Disposable {
if (this.credentialStore.isAnyAuthenticated() && (activeRemotes.length === 0)) {
const areAllNeverGitHub = (await this.computeAllUnknownRemotes()).every(remote => GitHubManager.isNeverGitHub(vscode.Uri.parse(remote.normalizedHost).authority));
if (areAllNeverGitHub) {
this._onDidLoadRepositories.fire(ReposManagerState.RepositoriesLoaded);
this.state = ReposManagerState.RepositoriesLoaded;
return true;
}
}
Expand Down Expand Up @@ -562,9 +574,9 @@ export class FolderRepositoryManager extends Disposable {

this.getAssignableUsers(repositoriesAdded.length > 0);
if (isAuthenticated && activeRemotes.length) {
this._onDidLoadRepositories.fire(ReposManagerState.RepositoriesLoaded);
this.state = ReposManagerState.RepositoriesLoaded;
} else if (!isAuthenticated) {
this._onDidLoadRepositories.fire(ReposManagerState.NeedsAuthentication);
this.state = ReposManagerState.NeedsAuthentication;
}
if (!silent) {
this._onDidChangeRepositories.fire({ added: repositoriesAdded.length > 0 });
Expand Down
32 changes: 25 additions & 7 deletions 32 src/github/repositoriesManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ export class RepositoriesManager extends Disposable {

private registerFolderListeners(folderManager: FolderRepositoryManager) {
const disposables = [
folderManager.onDidLoadRepositories(state => {
this.state = state;
folderManager.onDidLoadRepositories(() => {
this.updateState();
this._onDidLoadAnyRepositories.fire();
}),
folderManager.onDidChangeActivePullRequest(() => this.updateActiveReviewCount()),
Expand Down Expand Up @@ -192,11 +192,29 @@ export class RepositoriesManager extends Disposable {
return this._state;
}

set state(state: ReposManagerState) {
const stateChange = state !== this._state;
this._state = state;
private updateState(state?: ReposManagerState) {
let maxState = ReposManagerState.Initializing;
if (state) {
maxState = state;
} else {
// Get the most advanced state from all folder managers
const stateValue = (testState: ReposManagerState) => {
switch (testState) {
case ReposManagerState.Initializing: return 0;
case ReposManagerState.NeedsAuthentication: return 1;
case ReposManagerState.RepositoriesLoaded: return 2;
}
};
for (const folderManager of this._folderManagers) {
if (stateValue(folderManager.state) > stateValue(maxState)) {
maxState = folderManager.state;
}
}
}
const stateChange = maxState !== this._state;
this._state = maxState;
if (stateChange) {
vscode.commands.executeCommand('setContext', ReposManagerStateContext, state);
vscode.commands.executeCommand('setContext', ReposManagerStateContext, maxState);
this._onDidChangeState.fire();
}
}
Expand All @@ -207,7 +225,7 @@ export class RepositoriesManager extends Disposable {

async clearCredentialCache(): Promise<void> {
await this._credentialStore.reset();
this.state = ReposManagerState.Initializing;
this.updateState(ReposManagerState.Initializing);
}

async authenticate(enterprise?: boolean): Promise<boolean> {
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.