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 <path-to-directory-with-hg-repository>

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.
This commit is contained in:
Michael Bolin
2015-02-12 17:11:06 -08:00
parent f7138e5190
commit 5805bf9675
3 changed files with 43 additions and 2 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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