Reduces git calls on known untrackables

This commit is contained in:
Eric Amodio
2017-05-15 01:50:09 -04:00
parent 3a38f6ae39
commit ce5ff1eb47
3 changed files with 18 additions and 11 deletions

View File

@@ -114,7 +114,7 @@ export class GitContextTracker extends Disposable {
private async _updateContextHasRemotes(uri: GitUri | undefined) { private async _updateContextHasRemotes(uri: GitUri | undefined) {
try { try {
let hasRemotes = false; let hasRemotes = false;
if (uri) { if (uri && this.git.isTrackable(uri)) {
const repoPath = uri.repoPath || this.git.repoPath; const repoPath = uri.repoPath || this.git.repoPath;
if (repoPath) { if (repoPath) {
const remotes = await this.git.getRemotes(repoPath); const remotes = await this.git.getRemotes(repoPath);

View File

@@ -72,17 +72,19 @@ export class GitUri extends Uri {
} }
getRelativePath(): string { getRelativePath(): string {
return GitService.normalizePath(path.relative(this.repoPath || '', this.fsPath)); return GitService.normalizePath(path.relative(this.repoPath || '', this.fsPath));
} }
static async fromUri(uri: Uri, git: GitService) { static async fromUri(uri: Uri, git: GitService) {
if (uri instanceof GitUri) return uri; if (uri instanceof GitUri) return uri;
if (!git.isTrackable(uri)) return new GitUri(uri, git.repoPath);
const gitUri = git.getGitUriForFile(uri.fsPath); const gitUri = git.getGitUriForFile(uri.fsPath);
if (gitUri) return gitUri; if (gitUri) return gitUri;
// If this is a git uri, assume it is showing the most recent commit // If this is a git uri, assume it is showing the most recent commit
if (uri.scheme === 'git' && uri.query === '~') { if (uri.scheme === DocumentSchemes.Git && uri.query === '~') {
const commit = await git.getLogCommit(undefined, uri.fsPath); const commit = await git.getLogCommit(undefined, uri.fsPath);
if (commit) return new GitUri(uri, commit); if (commit) return new GitUri(uri, commit);
} }

View File

@@ -306,7 +306,7 @@ export class GitService extends Disposable {
const cacheKey = this.getCacheEntryKey(uri.fsPath); const cacheKey = this.getCacheEntryKey(uri.fsPath);
const entry = this._gitCache.get(cacheKey); const entry = this._gitCache.get(cacheKey);
if (!entry) return await this.isTracked(uri); if (entry === undefined) return await this.isTracked(uri);
return !entry.hasErrors; return !entry.hasErrors;
} }
@@ -691,8 +691,8 @@ export class GitService extends Disposable {
} }
async getRemotes(repoPath: string): Promise<GitRemote[]> { async getRemotes(repoPath: string): Promise<GitRemote[]> {
if (!this.config.insiders) return Promise.resolve([]); if (!this.config.insiders) return [];
if (!repoPath) return Promise.resolve([]); if (!repoPath) return [];
Logger.log(`getRemotes('${repoPath}')`); Logger.log(`getRemotes('${repoPath}')`);
@@ -790,10 +790,7 @@ export class GitService extends Disposable {
} }
isEditorBlameable(editor: TextEditor): boolean { isEditorBlameable(editor: TextEditor): boolean {
return (editor.viewColumn !== undefined || return (editor.viewColumn !== undefined || this.isTrackable(editor.document.uri) || this.hasGitUriForFile(editor));
editor.document.uri.scheme === DocumentSchemes.File ||
editor.document.uri.scheme === DocumentSchemes.Git ||
this.hasGitUriForFile(editor));
} }
async isFileUncommitted(uri: GitUri): Promise<boolean> { async isFileUncommitted(uri: GitUri): Promise<boolean> {
@@ -803,8 +800,16 @@ export class GitService extends Disposable {
return !!status; return !!status;
} }
isTrackable(uri: Uri): boolean {
// Logger.log(`isTrackable('${uri.scheme}', '${uri.fsPath}')`);
return uri.scheme === DocumentSchemes.File || uri.scheme === DocumentSchemes.Git || uri.scheme === DocumentSchemes.GitLensGit;
}
async isTracked(uri: GitUri): Promise<boolean> { async isTracked(uri: GitUri): Promise<boolean> {
Logger.log(`isFileUncommitted('${uri.repoPath}', '${uri.fsPath}')`); if (!this.isTrackable(uri)) return false;
Logger.log(`isTracked('${uri.fsPath}', '${uri.repoPath}')`);
const result = await Git.ls_files(uri.repoPath === undefined ? '' : uri.repoPath, uri.fsPath); const result = await Git.ls_files(uri.repoPath === undefined ? '' : uri.repoPath, uri.fsPath);
return !!result; return !!result;