From d2ad2b6a0f4b4f51bb16db16f2a400dbf8826dc5 Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Tue, 10 Jan 2017 08:41:08 -0500 Subject: [PATCH] Fixes #20: adds gitlens.advanced.gitignore.enabled Nested .gitignore files can cause blame to fail with a repo within another repo --- CHANGELOG.md | 3 +++ package.json | 7 ++++++- src/configuration.ts | 3 +++ src/gitProvider.ts | 42 ++++++++++++++++++++++++------------------ 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a2ffdb..90ca7d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ --- ## Release Notes +### 1.4.1 + - Adds `gitlens.advanced.gitignore.enabled` to enable/disable .gitignore parsing. Addresses [#20](https://github.com/eamodio/vscode-gitlens/issues/20) - Nested .gitignore files can cause blame to fail with a repo within another repo + ### 1.4.0 - Adds `alt+h` shortcut for the `gitlens.showQuickFileHistory` command diff --git a/package.json b/package.json index d161c2a..df24709 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitlens", - "version": "1.4.0", + "version": "1.4.1", "author": { "name": "Eric Amodio", "email": "eamodio@gmail.com" @@ -226,6 +226,11 @@ "default": null, "description": "Specifies a git path to use" }, + "gitlens.advanced.gitignore.enabled": { + "type": "boolean", + "default": true, + "description": "Specifies whether or not to parse the root .gitignore file for better performance (i.e. avoids blaming excluded files)" + }, "gitlens.advanced.maxQuickHistory": { "type": "number", "default": 200, diff --git a/src/configuration.ts b/src/configuration.ts index bdd028a..8e2a60c 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -92,6 +92,9 @@ export interface IAdvancedConfig { }; debug: boolean; git: string; + gitignore: { + enabled: boolean; + }; maxQuickHistory: number; output: { level: OutputLevel; diff --git a/src/gitProvider.ts b/src/gitProvider.ts index 378c9e3..b8177cb 100644 --- a/src/gitProvider.ts +++ b/src/gitProvider.ts @@ -45,6 +45,7 @@ enum RemoveCacheReason { export default class GitProvider extends Disposable { private _gitCache: Map | undefined; private _cacheDisposable: Disposable | undefined; + private _repoPath: string; private _uriCache: Map | undefined; config: IConfig; @@ -58,27 +59,10 @@ export default class GitProvider extends Disposable { constructor(private context: ExtensionContext) { super(() => this.dispose()); - const repoPath = context.workspaceState.get(WorkspaceState.RepoPath) as string; + this._repoPath = context.workspaceState.get(WorkspaceState.RepoPath) as string; this._onConfigure(); - this._gitignore = new Promise((resolve, reject) => { - const gitignorePath = path.join(repoPath, '.gitignore'); - fs.exists(gitignorePath, e => { - if (e) { - fs.readFile(gitignorePath, 'utf8', (err, data) => { - if (!err) { - resolve(ignore().add(data)); - return; - } - resolve(undefined); - }); - return; - } - resolve(undefined); - }); - }); - const subscriptions: Disposable[] = []; subscriptions.push(workspace.onDidChangeConfiguration(this._onConfigure, this)); @@ -146,6 +130,28 @@ export default class GitProvider extends Disposable { this._gitCache && this._gitCache.clear(); this._gitCache = undefined; } + + this._gitignore = new Promise((resolve, reject) => { + if (!config.advanced.gitignore.enabled) { + resolve(undefined); + return; + } + + const gitignorePath = path.join(this._repoPath, '.gitignore'); + fs.exists(gitignorePath, e => { + if (e) { + fs.readFile(gitignorePath, 'utf8', (err, data) => { + if (!err) { + resolve(ignore().add(data)); + return; + } + resolve(undefined); + }); + return; + } + resolve(undefined); + }); + }); } this.config = config;