From 5805bf967553b2337521b1dc725ebc9b23fdd19e Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Thu, 12 Feb 2015 17:11:06 -0800 Subject: [PATCH] Try to set the Project's repo if it does not have one when a new RepositoryProvider is registered. I tested this using my test `HgRepositoryProvider`. Now when I run the following from the command line: atom And then run the following in the console: atom.project.getRepositories() I get an array with an `HgRepository` in it. Previously, I got an empty array because the `Project`'s paths were set before my `HgRepositoryProvider` was registered. --- spec/project-spec.coffee | 33 +++++++++++++++++++++++++++++++++ spec/spec-helper.coffee | 2 +- src/project.coffee | 10 +++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index dbd0a0fbd..ed4cd8c2f 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -13,6 +13,39 @@ describe "Project", -> beforeEach -> atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')]) + describe "constructor", -> + it "tries to update repositories when a new RepositoryProvider is registered", -> + atom.project.setPaths(["/tmp"]) + expect(atom.project.getRepositories()).toEqual [null] + expect(atom.project.repositoryProviders.length).toEqual 1 + + # Register a new RepositoryProvider. + dummyRepository = destroy: () -> + repositoryProvider = + repositoryForDirectory: (directory) -> Promise.resolve(dummyRepository) + repositoryForDirectorySync: (directory) -> dummyRepository + atom.packages.serviceHub.provide( + "atom.repository-provider", "0.1.0", repositoryProvider) + + expect(atom.project.repositoryProviders.length).toBe 2 + expect(atom.project.getRepositories()).toEqual [dummyRepository] + + it "does not update @repositories if every path has a Repository", -> + repositories = atom.project.getRepositories() + expect(repositories.length).toEqual 1 + [repository] = repositories + expect(repository).toBeTruthy() + + # Register a new RepositoryProvider. + dummyRepository = destroy: () -> + repositoryProvider = + repositoryForDirectory: (directory) -> Promise.resolve(dummyRepository) + repositoryForDirectorySync: (directory) -> dummyRepository + atom.packages.serviceHub.provide( + "atom.repository-provider", "0.1.0", repositoryProvider) + + expect(atom.project.getRepositories()).toBe repositories + describe "serialization", -> deserializedProject = null diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 484ade2d9..a8b7478c1 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -76,9 +76,9 @@ beforeEach -> $.fx.off = true documentTitle = null projectPath = specProjectPath ? path.join(@specDirectory, 'fixtures') + atom.packages.serviceHub = new ServiceHub atom.project = new Project(paths: [projectPath]) atom.workspace = new Workspace() - atom.packages.serviceHub = new ServiceHub atom.keymaps.keyBindings = _.clone(keyBindingsToRestore) atom.commands.restoreSnapshot(commandsToRestore) atom.styles.restoreSnapshot(styleElementsToRestore) diff --git a/src/project.coffee b/src/project.coffee index 150e28d9a..4615a01b0 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -53,7 +53,15 @@ class Project extends Model atom.packages.serviceHub.consume( 'atom.repository-provider', '^0.1.0', - (provider) => @repositoryProviders.push(provider)) + (provider) => + @repositoryProviders.push(provider) + + # If a path in getPaths() does not have a corresponding Repository, try + # to assign one by running through setPaths() again now that + # @repositoryProviders has been updated. + if null in @repositories + @setPaths(@getPaths()) + ) @subscribeToBuffer(buffer) for buffer in @buffers