diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index 68245e4ef67..faf1ca88dd9 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -34,42 +34,54 @@ class TextDocumentContentProvider { constructor(private git: Git, private rootPath: string) { } - provideTextDocumentContent(uri: Uri) { + async provideTextDocumentContent(uri: Uri): Promise { const relativePath = path.relative(this.rootPath, uri.fsPath); - return this.git.exec(this.rootPath, ['show', `HEAD:${relativePath}`]).then(result => { + try { + const result = await this.git.exec(this.rootPath, ['show', `HEAD:${relativePath}`]); + if (result.exitCode !== 0) { - return null; + return ''; } return result.stdout; - }); + } catch (err) { + return ''; + } } } +async function init(disposables: Disposable[]): Promise { + const rootPath = workspace.rootPath; + + if (!rootPath) { + return; + } + + const pathHint = workspace.getConfiguration('git').get('path'); + const info = await findGit(pathHint); + const git = new Git({ gitPath: info.path, version: info.version }); + + const outputChannel = window.createOutputChannel('git'); + outputChannel.appendLine(`Using git ${info.version} from ${info.path}`); + git.onOutput(str => outputChannel.append(str), null, disposables); + + disposables.push( + registerCommands(), + scm.registerSCMProvider('git', new GitSCMProvider()), + workspace.registerTextDocumentContentProvider('git-index', new TextDocumentContentProvider(git, rootPath)), + outputChannel + ); +} + export function activate(context: ExtensionContext): any { if (!workspace.rootPath) { return; } - const rootPath = workspace.rootPath; - const pathHint = workspace.getConfiguration('git').get('path'); + const disposables: Disposable[] = []; + context.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose())); - findGit(pathHint).then(info => { - const git = new Git({ gitPath: info.path, version: info.version }); - const disposables: Disposable[] = []; - - const outputChannel = window.createOutputChannel('git'); - outputChannel.appendLine(`Using git ${info.version} from ${info.path}`); - git.onOutput(str => outputChannel.append(str), null, disposables); - - disposables.push( - registerCommands(), - scm.registerSCMProvider('git', new GitSCMProvider()), - workspace.registerTextDocumentContentProvider('git-index', new TextDocumentContentProvider(git, rootPath)), - outputChannel - ); - - context.subscriptions.push(...disposables); - }); + init(disposables) + .catch(err => console.error(err)); } \ No newline at end of file