From 05f54d427d4d8ed2e1dac2bec7ead8d7adcdc9ba Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 9 Sep 2014 14:28:30 -0700 Subject: [PATCH] Add Git::onDidChangeStatus --- spec/git-spec.coffee | 24 ++++++++++++------------ src/git.coffee | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/spec/git-spec.coffee b/spec/git-spec.coffee index 2de1d2e16..4e3bb7de3 100644 --- a/spec/git-spec.coffee +++ b/spec/git-spec.coffee @@ -111,10 +111,10 @@ describe "Git", -> fs.writeFileSync(filePath, 'ch ch changes') repo.getPathStatus(filePath) statusHandler = jasmine.createSpy('statusHandler') - repo.on 'status-changed', statusHandler + repo.onDidChangeStatus statusHandler repo.checkoutHead(filePath) expect(statusHandler.callCount).toBe 1 - expect(statusHandler.argsForCall[0][0..1]).toEqual [filePath, 0] + expect(statusHandler.argsForCall[0][0]).toEqual {path: filePath, pathStatus: 0} repo.checkoutHead(filePath) expect(statusHandler.callCount).toBe 1 @@ -167,11 +167,11 @@ describe "Git", -> it "trigger a status-changed event when the new status differs from the last cached one", -> statusHandler = jasmine.createSpy("statusHandler") - repo.on 'status-changed', statusHandler + repo.onDidChangeStatus statusHandler fs.writeFileSync(filePath, '') status = repo.getPathStatus(filePath) expect(statusHandler.callCount).toBe 1 - expect(statusHandler.argsForCall[0][0..1]).toEqual [filePath, status] + expect(statusHandler.argsForCall[0][0]).toEqual {path: filePath, pathStatus: status} fs.writeFileSync(filePath, 'abc') status = repo.getPathStatus(filePath) @@ -232,19 +232,19 @@ describe "Git", -> editor.insertNewline() statusHandler = jasmine.createSpy('statusHandler') - atom.project.getRepo().on 'status-changed', statusHandler + atom.project.getRepo().onDidChangeStatus statusHandler editor.save() expect(statusHandler.callCount).toBe 1 - expect(statusHandler).toHaveBeenCalledWith editor.getPath(), 256 + expect(statusHandler).toHaveBeenCalledWith {path: editor.getPath(), pathStatus: 256} it "emits a status-changed event when a buffer is reloaded", -> fs.writeFileSync(editor.getPath(), 'changed') statusHandler = jasmine.createSpy('statusHandler') - atom.project.getRepo().on 'status-changed', statusHandler + atom.project.getRepo().onDidChangeStatus statusHandler editor.getBuffer().reload() expect(statusHandler.callCount).toBe 1 - expect(statusHandler).toHaveBeenCalledWith editor.getPath(), 256 + expect(statusHandler).toHaveBeenCalledWith {path: editor.getPath(), pathStatus: 256} editor.getBuffer().reload() expect(statusHandler.callCount).toBe 1 @@ -252,10 +252,10 @@ describe "Git", -> fs.writeFileSync(editor.getPath(), 'changed') statusHandler = jasmine.createSpy('statusHandler') - atom.project.getRepo().on 'status-changed', statusHandler + atom.project.getRepo().onDidChangeStatus statusHandler editor.getBuffer().emitter.emit 'did-change-path' expect(statusHandler.callCount).toBe 1 - expect(statusHandler).toHaveBeenCalledWith editor.getPath(), 256 + expect(statusHandler).toHaveBeenCalledWith {path: editor.getPath(), pathStatus: 256} editor.getBuffer().emitter.emit 'did-change-path' expect(statusHandler.callCount).toBe 1 @@ -283,7 +283,7 @@ describe "Git", -> buffer.append('changes') statusHandler = jasmine.createSpy('statusHandler') - project2.getRepo().on 'status-changed', statusHandler + project2.getRepo().onDidChangeStatus statusHandler buffer.save() expect(statusHandler.callCount).toBe 1 - expect(statusHandler).toHaveBeenCalledWith buffer.getPath(), 256 + expect(statusHandler).toHaveBeenCalledWith {path: buffer.getPath(), pathStatus: 256} diff --git a/src/git.coffee b/src/git.coffee index d3c811440..bfabcf829 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -1,9 +1,12 @@ {basename, join} = require 'path' _ = require 'underscore-plus' -{Emitter, Subscriber} = require 'emissary' +{Subscriber} = require 'emissary' +EmitterMixin = require('emissary').Emitter +{Emitter} = require 'event-kit' fs = require 'fs-plus' GitUtils = require 'git-utils' +{deprecate} = require 'grim' Task = require './task' @@ -41,7 +44,7 @@ Task = require './task' # ``` module.exports = class Git - Emitter.includeInto(this) + EmitterMixin.includeInto(this) Subscriber.includeInto(this) # Public: Creates a new Git instance. @@ -67,6 +70,7 @@ class Git false constructor: (path, options={}) -> + @emitter = new Emitter @repo = GitUtils.open(path) unless @repo? throw new Error("No Git repository found searching path: #{path}") @@ -88,6 +92,32 @@ class Git if @project? @subscribe @project.observeBuffers (buffer) => @subscribeToBuffer(buffer) + ### + Section: Events + ### + + # Essential: When the {Decoration} is updated via {Decoration::update}. + # + # * `callback` {Function} + # * `event` {Object} + # * `path` {String} the old parameters the decoration used to have + # * `pathStatus` {Number} representing the status. This value can be passed to + # {::isStatusModified} or {::isStatusNew} to get more information. + onDidChangeStatus: (callback) -> + @emitter.on 'did-change-status', callback + + on: (eventName) -> + switch eventName + when 'status-changed' + deprecate 'Use Git::onDidChangeStatus instead' + else + deprecate 'Git::on is deprecated. Use event subscription methods instead.' + EmitterMixin::on.apply(this, arguments) + + ### + Section: Methods + ### + # Subscribes to buffer events. subscribeToBuffer: (buffer) -> getBufferPathStatus = => @@ -171,6 +201,8 @@ class Git delete @statuses[relativePath] if currentPathStatus isnt pathStatus @emit 'status-changed', path, pathStatus + @emitter.emit 'did-change-status', {path, pathStatus} + pathStatus # Public: Is the given path ignored?