From 6ad8aa7e5c336c19e456f13248e923468597fba6 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 15 Jan 2015 11:51:11 -0800 Subject: [PATCH] Ignore buffer errors when the path is a directory This would previously cause Atom to fail to launch if a buffer's serialized path was now a directory on launch. --- spec/project-spec.coffee | 13 +++++++++++++ src/project.coffee | 7 ++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 32022ca98..9c4f8571e 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -37,6 +37,19 @@ describe "Project", -> deserializedProject.getBuffers()[0].destroy() expect(deserializedProject.getBuffers().length).toBe 0 + + it "does not deserialize buffers when the path is a directory", -> + pathToOpen = path.join(temp.mkdirSync(), 'file.txt') + + waitsForPromise -> + atom.project.open(pathToOpen) + + runs -> + expect(atom.project.getBuffers().length).toBe 1 + fs.mkdirSync(pathToOpen) + deserializedProject = atom.project.testSerialization() + expect(deserializedProject.getBuffers().length).toBe 0 + describe "when an editor is saved and the project has no path", -> it "sets the project's path to the saved file's parent directory", -> tempFile = temp.openSync().path diff --git a/src/project.coffee b/src/project.coffee index e36d954c7..6f71873af 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -66,7 +66,12 @@ class Project extends Model buffers: _.compact(@buffers.map (buffer) -> buffer.serialize() if buffer.isRetained()) deserializeParams: (params) -> - params.buffers = params.buffers.map (bufferState) -> atom.deserializers.deserialize(bufferState) + params.buffers = _.compact params.buffers.map (bufferState) -> + try + atom.deserializers.deserialize(bufferState) + catch error + # Ignore buffers for files that are now folders + throw error unless error.code is 'EISDIR' params