Skip to content

Commit c66a91b

Browse files
committed
hook open/close repository events to decoration change event
1 parent a5afeca commit c66a91b

2 files changed

Lines changed: 14 additions & 9 deletions

File tree

extensions/git/src/decorationProvider.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@ import * as path from 'path';
1010
import { Repository, GitResourceGroup, Status } from './repository';
1111
import { Model } from './model';
1212
import { debounce } from './decorators';
13-
import { filterEvent, dispose } from './util';
13+
import { filterEvent, dispose, anyEvent, mapEvent, fireEvent } from './util';
1414
import { Submodule, GitErrorCodes } from './git';
1515

1616
type Callback = { resolve: (status: boolean) => void, reject: (err: any) => void };
1717

1818
class GitIgnoreDecorationProvider implements DecorationProvider {
1919

20-
private readonly _onDidChangeDecorations = new EventEmitter<Uri[]>();
21-
readonly onDidChangeDecorations: Event<Uri[]> = this._onDidChangeDecorations.event;
22-
20+
readonly onDidChangeDecorations: Event<Uri[]>;
2321
private queue = new Map<string, { repository: Repository; queue: Map<string, Callback>; }>();
2422
private disposables: Disposable[] = [];
2523

2624
constructor(private model: Model) {
27-
this.disposables.push(
28-
window.registerDecorationProvider(this),
29-
filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore'))(_ => this._onDidChangeDecorations.fire())
30-
//todo@joh -> events when the ignore status actually changes, not only when the file changes
31-
);
25+
//todo@joh -> events when the ignore status actually changes, not only when the file changes
26+
this.onDidChangeDecorations = fireEvent(anyEvent<any>(
27+
filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore')),
28+
model.onDidOpenRepository,
29+
model.onDidCloseRepository
30+
));
31+
32+
this.disposables.push(window.registerDecorationProvider(this));
3233
}
3334

3435
provideDecoration(uri: Uri): Promise<DecorationData | undefined> {

extensions/git/src/util.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ export function combinedDisposable(disposables: IDisposable[]): IDisposable {
3434

3535
export const EmptyDisposable = toDisposable(() => null);
3636

37+
export function fireEvent<T>(event: Event<T>): Event<T> {
38+
return (listener, thisArgs = null, disposables?) => event(_ => listener.call(thisArgs), null, disposables);
39+
}
40+
3741
export function mapEvent<I, O>(event: Event<I>, map: (i: I) => O): Event<O> {
3842
return (listener, thisArgs = null, disposables?) => event(i => listener.call(thisArgs, map(i)), null, disposables);
3943
}

0 commit comments

Comments
 (0)