From ad0669d814e01967997358319bbf16ebcb7158f6 Mon Sep 17 00:00:00 2001 From: Mostafa Eweda Date: Fri, 27 Feb 2015 15:49:18 -0800 Subject: [PATCH 1/3] Default directory provider should handle only local filesystem directories --- src/default-directory-provider.coffee | 5 ++++- src/project.coffee | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/default-directory-provider.coffee b/src/default-directory-provider.coffee index 7ecdbd354..5ddc89cca 100644 --- a/src/default-directory-provider.coffee +++ b/src/default-directory-provider.coffee @@ -21,7 +21,10 @@ class DefaultDirectoryProvider else path.dirname(projectPath) - new Directory(directoryPath) + if fs.isDirectorySync(projectPath) + return new Directory(directoryPath) + else + return null # Public: Create a Directory that corresponds to the specified URI. # diff --git a/src/project.coffee b/src/project.coffee index c92462ead..946ae4c55 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -39,6 +39,7 @@ class Project extends Model @emitter = new Emitter @buffers ?= [] @rootDirectories = [] + @packageRootDirectoryPaths = [] @repositories = [] @directoryProviders = [new DefaultDirectoryProvider()] @@ -203,10 +204,12 @@ class Project extends Model for provider in @directoryProviders break if directory = provider.directoryForURISync?(projectPath) if directory is null - # This should never happen because DefaultDirectoryProvider should always - # return a Directory. - throw new Error(projectPath + ' could not be resolved to a directory') - @rootDirectories.push(directory) + # DefaultDirectoryProvider doesn't handle specific directory protocols + # Atom Packages may use packageDirectoryPaths to add thier own paths later. + @packageRootDirectoryPaths.push(projectPath) + return + else + @rootDirectories.push(directory) repo = null for provider in @repositoryProviders From ed8433cda45ab802fcb9b9ed30376f6645ce9325 Mon Sep 17 00:00:00 2001 From: Mostafa Eweda Date: Fri, 27 Feb 2015 17:47:40 -0800 Subject: [PATCH 2/3] nit: their --- src/project.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/project.coffee b/src/project.coffee index 946ae4c55..79cd7439b 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -205,7 +205,7 @@ class Project extends Model break if directory = provider.directoryForURISync?(projectPath) if directory is null # DefaultDirectoryProvider doesn't handle specific directory protocols - # Atom Packages may use packageDirectoryPaths to add thier own paths later. + # Atom Packages may use packageDirectoryPaths to add their own paths later. @packageRootDirectoryPaths.push(projectPath) return else From b74a688baa1a23fcfda9d5715e74301deb83cfbd Mon Sep 17 00:00:00 2001 From: Mostafa Eweda Date: Mon, 2 Mar 2015 14:28:01 -0800 Subject: [PATCH 3/3] Bare minimum fix to the default directory provider --- spec/project-spec.coffee | 14 ++++++++++++++ src/default-directory-provider.coffee | 11 ++++------- src/project.coffee | 11 ++++------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 0d115f56f..476d731ee 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -78,6 +78,20 @@ describe "Project", -> expect(directories.length).toBe 1 expect(directories[0].getPath()).toBe tmp + it "gets the parent directory from the default directory provider if it's a local directory", -> + tmp = temp.mkdirSync() + atom.project.setPaths([path.join(tmp, "not-existing")]) + directories = atom.project.getDirectories() + expect(directories.length).toBe 1 + expect(directories[0].getPath()).toBe tmp + + it "only normalizes the directory path if it isn't on the local filesystem", -> + nonLocalFsDirectory = "custom_proto://abc/def" + atom.project.setPaths([nonLocalFsDirectory]) + directories = atom.project.getDirectories() + expect(directories.length).toBe 1 + expect(directories[0].getPath()).toBe path.normalize(nonLocalFsDirectory) + it "tries to update repositories when a new RepositoryProvider is registered", -> tmp = temp.mkdirSync('atom-project') atom.project.setPaths([tmp]) diff --git a/src/default-directory-provider.coffee b/src/default-directory-provider.coffee index 5ddc89cca..a05c532a9 100644 --- a/src/default-directory-provider.coffee +++ b/src/default-directory-provider.coffee @@ -16,15 +16,12 @@ class DefaultDirectoryProvider directoryForURISync: (uri) -> projectPath = path.normalize(uri) - directoryPath = if fs.isDirectorySync(projectPath) - projectPath - else + directoryPath = if !fs.isDirectorySync(projectPath) and fs.isDirectorySync(path.dirname(projectPath)) path.dirname(projectPath) - - if fs.isDirectorySync(projectPath) - return new Directory(directoryPath) else - return null + projectPath + + new Directory(directoryPath) # Public: Create a Directory that corresponds to the specified URI. # diff --git a/src/project.coffee b/src/project.coffee index 79cd7439b..c92462ead 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -39,7 +39,6 @@ class Project extends Model @emitter = new Emitter @buffers ?= [] @rootDirectories = [] - @packageRootDirectoryPaths = [] @repositories = [] @directoryProviders = [new DefaultDirectoryProvider()] @@ -204,12 +203,10 @@ class Project extends Model for provider in @directoryProviders break if directory = provider.directoryForURISync?(projectPath) if directory is null - # DefaultDirectoryProvider doesn't handle specific directory protocols - # Atom Packages may use packageDirectoryPaths to add their own paths later. - @packageRootDirectoryPaths.push(projectPath) - return - else - @rootDirectories.push(directory) + # This should never happen because DefaultDirectoryProvider should always + # return a Directory. + throw new Error(projectPath + ' could not be resolved to a directory') + @rootDirectories.push(directory) repo = null for provider in @repositoryProviders