Don't use atom.{config,confirm} global in GitRepository

This commit is contained in:
Antonio Scandurra 2015-10-06 21:13:57 +02:00 committed by Nathan Sobo
parent ff86eb6a59
commit a3a6db7f68
7 changed files with 18 additions and 19 deletions

View File

@ -6,11 +6,15 @@ GitRepository = require '../src/git-repository'
GitRepositoryProvider = require '../src/git-repository-provider'
describe "GitRepositoryProvider", ->
provider = null
beforeEach ->
provider = new GitRepositoryProvider(atom.project, atom.config, atom.confirm)
describe ".repositoryForDirectory(directory)", ->
describe "when specified a Directory with a Git repository", ->
it "returns a Promise that resolves to a GitRepository", ->
waitsForPromise ->
provider = new GitRepositoryProvider atom.project
directory = new Directory path.join(__dirname, 'fixtures', 'git', 'master.git')
provider.repositoryForDirectory(directory).then (result) ->
expect(result).toBeInstanceOf GitRepository
@ -19,7 +23,6 @@ describe "GitRepositoryProvider", ->
expect(result.getType()).toBe 'git'
it "returns the same GitRepository for different Directory objects in the same repo", ->
provider = new GitRepositoryProvider atom.project
firstRepo = null
secondRepo = null
@ -38,7 +41,6 @@ describe "GitRepositoryProvider", ->
describe "when specified a Directory without a Git repository", ->
it "returns a Promise that resolves to null", ->
waitsForPromise ->
provider = new GitRepositoryProvider atom.project
directory = new Directory temp.mkdirSync('dir')
provider.repositoryForDirectory(directory).then (result) ->
expect(result).toBe null
@ -46,7 +48,6 @@ describe "GitRepositoryProvider", ->
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'), '')
@ -59,7 +60,6 @@ describe "GitRepositoryProvider", ->
describe "when specified a Directory with a valid gitfile-linked repository", ->
it "returns a Promise that resolves to a GitRepository", ->
waitsForPromise ->
provider = new GitRepositoryProvider atom.project
gitDirPath = path.join(__dirname, 'fixtures', 'git', 'master.git')
workDirPath = temp.mkdirSync('git-workdir')
fs.writeFileSync(path.join(workDirPath, '.git'), 'gitdir: ' + gitDirPath+'\n')
@ -75,8 +75,6 @@ describe "GitRepositoryProvider", ->
directory = null
provider = null
beforeEach ->
provider = new GitRepositoryProvider atom.project
# An implementation of Directory that does not implement existsSync().
subdirectory = {}
directory =

View File

@ -124,8 +124,10 @@ describe "GitRepository", ->
[filePath, editor] = []
beforeEach ->
spyOn(atom, "confirm")
workingDirPath = copyRepository()
repo = new GitRepository(workingDirPath)
repo = new GitRepository(workingDirPath, {project: atom.project, config: atom.config, confirm: atom.confirm})
filePath = path.join(workingDirPath, 'a.txt')
fs.writeFileSync(filePath, 'ch ch changes')
@ -136,7 +138,7 @@ describe "GitRepository", ->
editor = atom.workspace.getActiveTextEditor()
it "displays a confirmation dialog by default", ->
spyOn(atom, 'confirm').andCallFake ({buttons}) -> buttons.OK()
atom.confirm.andCallFake ({buttons}) -> buttons.OK()
atom.config.set('editor.confirmCheckoutHeadRevision', true)
repo.checkoutHeadForEditor(editor)
@ -144,7 +146,6 @@ describe "GitRepository", ->
expect(fs.readFileSync(filePath, 'utf8')).toBe ''
it "does not display a dialog when confirmation is disabled", ->
spyOn(atom, 'confirm')
atom.config.set('editor.confirmCheckoutHeadRevision', false)
repo.checkoutHeadForEditor(editor)

View File

@ -85,7 +85,7 @@ beforeEach ->
documentTitle = null
projectPath = specProjectPath ? path.join(@specDirectory, 'fixtures')
atom.packages.serviceHub = new ServiceHub
atom.project = new Project({notificationManager: atom.notifications, packageManager: atom.packages, confirm: atom.confirm})
atom.project = new Project({notificationManager: atom.notifications, packageManager: atom.packages, config: atom.config, confirm: atom.confirm})
atom.project.setPaths([projectPath])
atom.workspace = new Workspace({
config: atom.config, project: atom.project, packageManager: atom.packages,

View File

@ -171,7 +171,7 @@ class AtomEnvironment extends Model
@clipboard = new Clipboard()
Project = require './project'
@project = new Project({notificationManager: @notifications, packageManager: @packages, @confirm})
@project = new Project({notificationManager: @notifications, packageManager: @packages, @confirm, @config})
CommandInstaller = require './command-installer'
@commandInstaller = new CommandInstaller(@getVersion(), @confirm.bind(this))

View File

@ -48,7 +48,7 @@ isValidGitDirectorySync = (directory) ->
module.exports =
class GitRepositoryProvider
constructor: (@project) ->
constructor: (@project, @config, @confirm) ->
# Keys are real paths that end in `.git`.
# Values are the corresponding GitRepository objects.
@pathToRepository = {}
@ -75,7 +75,7 @@ class GitRepositoryProvider
gitDirPath = gitDir.getPath()
repo = @pathToRepository[gitDirPath]
unless repo
repo = GitRepository.open(gitDirPath, project: @project)
repo = GitRepository.open(gitDirPath, {@project, @config, @confirm})
return null unless repo
repo.onDidDestroy(=> delete @pathToRepository[gitDirPath])
@pathToRepository[gitDirPath] = repo

View File

@ -80,7 +80,7 @@ class GitRepository
for submodulePath, submoduleRepo of @repo.submodules
submoduleRepo.upstream = {ahead: 0, behind: 0}
{@project, refreshOnWindowFocus} = options
{@project, @config, @confirm, refreshOnWindowFocus} = options
refreshOnWindowFocus ?= true
if refreshOnWindowFocus
@ -452,8 +452,8 @@ class GitRepository
editor.buffer.reload() if editor.buffer.isModified()
@checkoutHead(filePath)
if atom.config.get('editor.confirmCheckoutHeadRevision')
atom.confirm
if @config.get('editor.confirmCheckoutHeadRevision')
@confirm
message: 'Confirm Checkout HEAD Revision'
detailedMessage: "Are you sure you want to discard all changes to \"#{fileName}\" since the last Git commit?"
buttons:

View File

@ -21,7 +21,7 @@ class Project extends Model
Section: Construction and Destruction
###
constructor: ({@confirm, @notificationManager, packageManager}) ->
constructor: ({@confirm, @notificationManager, packageManager, config}) ->
@emitter = new Emitter
@buffers = []
@paths = []
@ -41,7 +41,7 @@ class Project extends Model
# the same real path, so it is not a good key.
@repositoryPromisesByPath = new Map()
@repositoryProviders = [new GitRepositoryProvider(this)]
@repositoryProviders = [new GitRepositoryProvider(this, config, confirm)]
packageManager.serviceHub.consume(
'atom.repository-provider',
'^0.1.0',