in src/view/reviewManager.ts [101:167]
private registerListeners(): void {
this._disposables.push(
this._repository.state.onDidChange(_ => {
const oldHead = this._previousRepositoryState.HEAD;
const newHead = this._repository.state.HEAD;
if (!oldHead && !newHead) {
// both oldHead and newHead are undefined
return;
}
let sameUpstream;
if (!oldHead || !newHead) {
sameUpstream = false;
} else {
sameUpstream = !!oldHead.upstream
? newHead.upstream &&
oldHead.upstream.name === newHead.upstream.name &&
oldHead.upstream.remote === newHead.upstream.remote
: !newHead.upstream;
}
const sameHead =
sameUpstream && // falsy if oldHead or newHead is undefined.
oldHead!.ahead === newHead!.ahead &&
oldHead!.behind === newHead!.behind &&
oldHead!.commit === newHead!.commit &&
oldHead!.name === newHead!.name &&
oldHead!.remote === newHead!.remote &&
oldHead!.type === newHead!.type;
const remotes = parseRepositoryRemotes(this._repository);
const sameRemotes =
this._previousRepositoryState.remotes.length === remotes.length &&
this._previousRepositoryState.remotes.every(remote => remotes.some(r => remote.equals(r)));
if (!sameHead || !sameRemotes) {
this._previousRepositoryState = {
HEAD: this._repository.state.HEAD,
remotes: remotes,
};
// The first time this event occurs we do want to do visible updates.
// The first time, oldHead will be undefined.
// For subsequent changes, we don't want to make visible updates.
// This occurs on branch changes.
// Note that the visible changes will occur when checking out a PR.
this.updateState(true);
}
}),
);
this._disposables.push(
vscode.workspace.onDidChangeConfiguration(_ => {
this.updateFocusedViewMode();
}),
);
this._disposables.push(
this._folderRepoManager.onDidChangeActivePullRequest(_ => {
this.updateFocusedViewMode();
}),
);
GitHubCreatePullRequestLinkProvider.registerProvider(this._disposables, this, this._folderRepoManager);
}