From 63af713a3ff3c4d278ffb57022cd986145750f2b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 18 Feb 2015 09:11:48 -0800 Subject: [PATCH] Guard against detected repository that does not open Closes #5609 --- spec/git-repository-provider-spec.coffee | 18 ++++++++++++++++-- src/git-repository-provider.coffee | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/spec/git-repository-provider-spec.coffee b/spec/git-repository-provider-spec.coffee index 2082bd50f..7d77adc36 100644 --- a/spec/git-repository-provider-spec.coffee +++ b/spec/git-repository-provider-spec.coffee @@ -1,11 +1,12 @@ path = require 'path' +fs = require 'fs-plus' +temp = require 'temp' {Directory} = require 'pathwatcher' GitRepository = require '../src/git-repository' GitRepositoryProvider = require '../src/git-repository-provider' describe "GitRepositoryProvider", -> describe ".repositoryForDirectory(directory)", -> - describe "when specified a Directory with a Git repository", -> it "returns a Promise that resolves to a GitRepository", -> waitsForPromise -> @@ -37,6 +38,19 @@ describe "GitRepositoryProvider", -> it "returns a Promise that resolves to null", -> waitsForPromise -> provider = new GitRepositoryProvider atom.project - directory = new Directory '/tmp' + directory = new Directory temp.mkdirSync('dir') + provider.repositoryForDirectory(directory).then (result) -> + expect(result).toBe null + + describe "when specified a Directory with an invalid Git repository", -> + it "returns a Promise that resolves to null", -> + waitsForPromise -> + provider = new GitRepositoryProvider atom.project + dirPath = temp.mkdirSync('dir') + fs.writeFileSync(path.join(dirPath, '.git', 'objects'), '') + fs.writeFileSync(path.join(dirPath, '.git', 'HEAD'), '') + fs.writeFileSync(path.join(dirPath, '.git', 'refs'), '') + + directory = new Directory dirPath provider.repositoryForDirectory(directory).then (result) -> expect(result).toBe null diff --git a/src/git-repository-provider.coffee b/src/git-repository-provider.coffee index dd9c41f41..210197599 100644 --- a/src/git-repository-provider.coffee +++ b/src/git-repository-provider.coffee @@ -62,6 +62,7 @@ class GitRepositoryProvider repo = @pathToRepository[gitDirPath] unless repo repo = GitRepository.open(gitDirPath, project: @project) + return null unless repo repo.onDidDestroy(=> delete @pathToRepository[gitDirPath]) @pathToRepository[gitDirPath] = repo repo.refreshIndex()