diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 73790a231..034a2e35c 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -9,7 +9,6 @@ Grim = require 'grim' KeymapManager = require '../src/keymap-extensions' {Point} = require 'text-buffer' -Project = require '../src/project' Workspace = require '../src/workspace' ServiceHub = require 'service-hub' TextEditor = require '../src/text-editor' @@ -73,9 +72,8 @@ isCoreSpec = false beforeEach -> documentTitle = null - projectPath = path.join(@specDirectory, 'fixtures') - atom.project = new Project({notificationManager: atom.notifications, packageManager: atom.packages, config: atom.config, confirm: atom.confirm}) - atom.project.setPaths([projectPath]) + atom.project.setPaths([path.join(@specDirectory, 'fixtures')]) + atom.workspace = new Workspace({ config: atom.config, project: atom.project, packageManager: atom.packages, notificationManager: atom.notifications, @@ -150,9 +148,6 @@ afterEach -> atom.themes.workspace = null delete atom.state.workspace - atom.project?.destroy() - atom.project = null - delete atom.state.packageStates atom.reset() diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index b4af72fc7..0dfbd9bb4 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -255,6 +255,8 @@ class AtomEnvironment extends Model @packages.serviceHub.clear() + @project.reset(@packages) + destroy: -> return if not @project diff --git a/src/project.coffee b/src/project.coffee index c33510ec4..7de4c6b69 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -27,45 +27,22 @@ class Project extends Model @paths = [] @rootDirectories = [] @repositories = [] - @directoryProviders = [] @defaultDirectoryProvider = new DefaultDirectoryProvider() - packageManager.serviceHub.consume( - 'atom.directory-provider', - '^0.1.0', - (provider) => - @directoryProviders.unshift(provider) - new Disposable => - @directoryProviders.splice(@directoryProviders.indexOf(provider), 1) - ) - - # Mapping from the real path of a {Directory} to a {Promise} that resolves - # to either a {Repository} or null. Ideally, the {Directory} would be used - # as the key; however, there can be multiple {Directory} objects created for - # the same real path, so it is not a good key. @repositoryPromisesByPath = new Map() - @repositoryProviders = [new GitRepositoryProvider(this, config, confirm)] - packageManager.serviceHub.consume( - 'atom.repository-provider', - '^0.1.0', - (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()) - - new Disposable => - @repositoryProviders.splice(@repositoryProviders.indexOf(provider), 1) - ) + @consumeServices(packageManager) destroyed: -> - buffer.destroy() for buffer in @getBuffers() + buffer.destroy() for buffer in @buffers @setPaths([]) + reset: (packageManager) -> + buffer.destroy() for buffer in @buffers + @buffers = [] + @setPaths([]) + @consumeServices(packageManager) + destroyUnretainedBuffers: -> buffer.destroy() for buffer in @getBuffers() when not buffer.isRetained() return @@ -294,6 +271,26 @@ class Project extends Model Section: Private ### + consumeServices: ({serviceHub}) -> + serviceHub.consume( + 'atom.directory-provider', + '^0.1.0', + (provider) => + @directoryProviders.unshift(provider) + new Disposable => + @directoryProviders.splice(@directoryProviders.indexOf(provider), 1) + ) + + serviceHub.consume( + 'atom.repository-provider', + '^0.1.0', + (provider) => + @repositoryProviders.push(provider) + @setPaths(@getPaths()) if null in @repositories + new Disposable => + @repositoryProviders.splice(@repositoryProviders.indexOf(provider), 1) + ) + # Retrieves all the {TextBuffer}s in the project; that is, the # buffers for all open files. #