Skip to content

Commit 7064fe3

Browse files
authored
SCM - use sequencer for tree operations (microsoft#255979)
1 parent 501bb7c commit 7064fe3

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { MenuId } from '../../../../platform/actions/common/actions.js';
2828
import { IHoverService } from '../../../../platform/hover/browser/hover.js';
2929
import { observableConfigValue } from '../../../../platform/observable/common/platformObservableUtils.js';
3030
import { autorun, IObservable, IObservableSignal, observableSignal, observableSignalFromEvent, runOnChange } from '../../../../base/common/observable.js';
31+
import { Sequencer } from '../../../../base/common/async.js';
3132

3233
class ListDelegate implements IListVirtualDelegate<ISCMRepository> {
3334

@@ -101,6 +102,7 @@ export class SCMRepositoriesViewPane extends ViewPane {
101102
private treeViewModel!: SCMRepositoriesViewModel;
102103
private treeDataSource!: RepositoryTreeDataSource;
103104
private treeIdentityProvider!: RepositoryTreeIdentityProvider;
105+
private readonly treeOperationSequencer = new Sequencer();
104106

105107
private readonly visibleCountObs: IObservable<number>;
106108
private readonly providerCountBadgeObs: IObservable<'hidden' | 'auto' | 'visible'>;
@@ -149,32 +151,32 @@ export class SCMRepositoriesViewPane extends ViewPane {
149151
this.treeViewModel = this.instantiationService.createInstance(SCMRepositoriesViewModel);
150152
this._register(this.treeViewModel);
151153

152-
// Initial rendering
153-
await this.tree.setInput(this.treeViewModel);
154-
155-
// scm.repositories.visible setting
156-
this.visibilityDisposables.add(autorun(reader => {
157-
const visibleCount = this.visibleCountObs.read(reader);
158-
this.updateBodySize(visibleCount);
159-
}));
160-
161-
// onDidChangeRepositoriesSignal
162-
this.visibilityDisposables.add(autorun(async reader => {
163-
this.treeViewModel.onDidChangeRepositoriesSignal.read(reader);
164-
await this.updateChildren();
165-
}));
166-
167-
// onDidChangeRepositoryContextValueSignal
168-
this.visibilityDisposables.add(autorun(async reader => {
169-
this.treeViewModel.onDidChangeRepositoryContextValueSignal.read(reader);
170-
await this.updateChildren();
171-
}));
172-
173-
// onDidChangeVisibleRepositoriesSignal
174-
this.visibilityDisposables.add(autorun(async reader => {
175-
this.treeViewModel.onDidChangeVisibleRepositoriesSignal.read(reader);
176-
this.updateTreeSelection();
177-
}));
154+
this.treeOperationSequencer.queue(async () => {
155+
// Initial rendering
156+
await this.tree.setInput(this.treeViewModel);
157+
158+
// scm.repositories.visible setting
159+
this.visibilityDisposables.add(autorun(reader => {
160+
const visibleCount = this.visibleCountObs.read(reader);
161+
this.updateBodySize(visibleCount);
162+
}));
163+
164+
// onDidChangeRepositoriesSignal
165+
// onDidChangeRepositoryContextValueSignal
166+
this.visibilityDisposables.add(autorun(async reader => {
167+
this.treeViewModel.onDidChangeRepositoriesSignal.read(reader);
168+
this.treeViewModel.onDidChangeRepositoryContextValueSignal.read(reader);
169+
170+
await this.treeOperationSequencer.queue(() => this.updateChildren());
171+
}));
172+
173+
// onDidChangeVisibleRepositoriesSignal
174+
this.visibilityDisposables.add(autorun(async reader => {
175+
this.treeViewModel.onDidChangeVisibleRepositoriesSignal.read(reader);
176+
177+
await this.treeOperationSequencer.queue(async () => this.updateTreeSelection());
178+
}));
179+
});
178180
}, this, this._store);
179181
}
180182

0 commit comments

Comments
 (0)