From ef7121dfb3e8a01b057ee099a4a2deb4a55a153e Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Mon, 2 Jul 2012 17:47:54 -0700 Subject: [PATCH 1/2] File does not trigger 'contents-change' when its md5 does not change --- src/app/file.coffee | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/file.coffee b/src/app/file.coffee index b025bfc7d..c19c54a22 100644 --- a/src/app/file.coffee +++ b/src/app/file.coffee @@ -5,7 +5,11 @@ _ = require 'underscore' module.exports = class File + path: null + md5: null + constructor: (@path) -> + @updateMd5() getPath: -> @path @@ -13,6 +17,9 @@ class File getName: -> fs.base(@path) + updateMd5: -> + @md5 = fs.md5ForPath(@path) + afterSubscribe: -> @subscribeToNativeChangeEvents() if @subscriptionCount() == 1 @@ -21,7 +28,10 @@ class File subscribeToNativeChangeEvents: -> @watchId = $native.watchPath @path, (eventTypes) => - @trigger 'contents-change' if eventTypes.modified? + newMd5 = fs.md5ForPath(@getPath()) + if eventTypes.modified? and newMd5 != @md5 + @md5 = newMd5 + @trigger 'contents-change' unsubscribeFromNativeChangeEvents: -> $native.unwatchPath(@path, @watchId) From b59bd4bc7b9bac516afadaf332cd23a92fcdcf68 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Mon, 2 Jul 2012 17:48:30 -0700 Subject: [PATCH 2/2] Saving a buffer does not trigger a "contents-change" event --- spec/app/buffer-spec.coffee | 12 +++++++++++- src/app/buffer.coffee | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/spec/app/buffer-spec.coffee b/spec/app/buffer-spec.coffee index 2cc5ed279..a12885af5 100644 --- a/spec/app/buffer-spec.coffee +++ b/spec/app/buffer-spec.coffee @@ -57,13 +57,23 @@ describe 'Buffer', -> path = "/tmp/tmp.txt" fs.write(path, "first") buffer.destroy() + buffer = new Buffer(path) afterEach -> fs.remove(path) + it "does not trigger a contents-change event when Atom modifies the file", -> + buffer.insert([0,0], "HELLO!") + changeHandler = jasmine.createSpy("buffer changed") + buffer.on "change", changeHandler + buffer.save() + + waits 30 + runs -> + expect(changeHandler).not.toHaveBeenCalled() + describe "when the buffer is unmodified", -> it "triggers 'change' event and buffer remains unmodified", -> - buffer = new Buffer(path) changeHandler = jasmine.createSpy('changeHandler') buffer.on 'change', changeHandler fs.write(path, "second") diff --git a/src/app/buffer.coffee b/src/app/buffer.coffee index 0c9d6bd11..0c720121e 100644 --- a/src/app/buffer.coffee +++ b/src/app/buffer.coffee @@ -172,6 +172,7 @@ class Buffer @trigger 'before-save' fs.write path, @getText() + @file?.updateMd5() @modified = false @setPath(path) @trigger 'after-save'