From c73b3ca474af58e0ceaf827d5d5bd698b338fe52 Mon Sep 17 00:00:00 2001 From: Vyacheslav Pukhanov Date: Tue, 8 Sep 2020 06:39:19 +0000 Subject: [PATCH 1/2] detect local `exclude` file edits --- extensions/git/src/decorationProvider.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index 2ed893ed766de..1375ffed43f0c 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { window, workspace, Uri, Disposable, Event, EventEmitter, Decoration, DecorationProvider, ThemeColor } from 'vscode'; +import { window, workspace, Uri, Disposable, Event, EventEmitter, Decoration, DecorationProvider, ThemeColor, TextDocument } from 'vscode'; import * as path from 'path'; import { Repository, GitResourceGroup } from './repository'; import { Model } from './model'; @@ -21,7 +21,7 @@ class GitIgnoreDecorationProvider implements DecorationProvider { constructor(private model: Model) { this.onDidChangeDecorations = fireEvent(anyEvent( - filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore')), + filterEvent(workspace.onDidSaveTextDocument, this.isIgnoreConfig), model.onDidOpenRepository, model.onDidCloseRepository )); @@ -78,6 +78,13 @@ class GitIgnoreDecorationProvider implements DecorationProvider { } } + private isIgnoreConfig(document: TextDocument): boolean { + return ( + document.fileName.endsWith('.gitignore') || + document.fileName.replace(/\\/g, '/').endsWith('.git/info/exclude') + ); + } + dispose(): void { this.disposables.forEach(d => d.dispose()); this.queue.clear(); From 77c2c990d57b6dbf27755ae996baef6436fb5ac7 Mon Sep 17 00:00:00 2001 From: Vyacheslav Pukhanov Date: Tue, 8 Sep 2020 14:55:53 +0000 Subject: [PATCH 2/2] use `uri.path` to detect exclude file edits `uri.path` uses forward slash as a path separator indepentent of the host system, which makes it easier to use with regex --- extensions/git/src/decorationProvider.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index 1375ffed43f0c..ab6e5713e11d4 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { window, workspace, Uri, Disposable, Event, EventEmitter, Decoration, DecorationProvider, ThemeColor, TextDocument } from 'vscode'; +import { window, workspace, Uri, Disposable, Event, EventEmitter, Decoration, DecorationProvider, ThemeColor } from 'vscode'; import * as path from 'path'; import { Repository, GitResourceGroup } from './repository'; import { Model } from './model'; @@ -21,7 +21,7 @@ class GitIgnoreDecorationProvider implements DecorationProvider { constructor(private model: Model) { this.onDidChangeDecorations = fireEvent(anyEvent( - filterEvent(workspace.onDidSaveTextDocument, this.isIgnoreConfig), + filterEvent(workspace.onDidSaveTextDocument, e => /\.gitignore$|\.git\/info\/exclude$/.test(e.uri.path)), model.onDidOpenRepository, model.onDidCloseRepository )); @@ -78,13 +78,6 @@ class GitIgnoreDecorationProvider implements DecorationProvider { } } - private isIgnoreConfig(document: TextDocument): boolean { - return ( - document.fileName.endsWith('.gitignore') || - document.fileName.replace(/\\/g, '/').endsWith('.git/info/exclude') - ); - } - dispose(): void { this.disposables.forEach(d => d.dispose()); this.queue.clear();