mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 01:58:53 +01:00
git: fix range staging timing issues
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
'use strict';
|
||||
|
||||
import { workspace, Uri, Disposable, Event, EventEmitter } from 'vscode';
|
||||
import { debounce } from './decorators';
|
||||
import { Model } from './model';
|
||||
|
||||
export class GitContentProvider {
|
||||
@@ -15,7 +16,7 @@ export class GitContentProvider {
|
||||
private onDidChangeEmitter = new EventEmitter<Uri>();
|
||||
get onDidChange(): Event<Uri> { return this.onDidChangeEmitter.event; }
|
||||
|
||||
private uris = new Set<Uri>();
|
||||
private uris: { [uri: string]: Uri } = Object.create(null) as { [uri: string]: Uri };
|
||||
|
||||
constructor(private model: Model) {
|
||||
this.disposables.push(
|
||||
@@ -24,10 +25,11 @@ export class GitContentProvider {
|
||||
);
|
||||
}
|
||||
|
||||
private fireChangeEvents(arg): void {
|
||||
for (let uri of this.uris) {
|
||||
this.onDidChangeEmitter.fire(uri);
|
||||
}
|
||||
@debounce(300)
|
||||
private fireChangeEvents(): void {
|
||||
Object.keys(this.uris).forEach(key => {
|
||||
this.onDidChangeEmitter.fire(this.uris[key]);
|
||||
});
|
||||
}
|
||||
|
||||
async provideTextDocumentContent(uri: Uri): Promise<string> {
|
||||
@@ -42,10 +44,10 @@ export class GitContentProvider {
|
||||
|
||||
try {
|
||||
const result = await this.model.show(ref, uri);
|
||||
this.uris.add(uri);
|
||||
this.uris[uri.toString()] = uri;
|
||||
return result;
|
||||
} catch (err) {
|
||||
this.uris.delete(uri);
|
||||
delete this.uris[uri.toString()];
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user