Catch read errors during deserialization

Prevents Atom from failing to open because of a read error with a
serialized editor.
This commit is contained in:
Kevin Sawicki
2015-06-01 17:54:43 -07:00
parent 52732e8cc2
commit 34591d3542
2 changed files with 22 additions and 1 deletions

View File

@@ -16,6 +16,19 @@ describe "Workspace", ->
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
atom.workspace = workspace = new Workspace
describe "serialization", ->
it "does not deserialize text editors for files that can't be read", ->
pathToOpen = path.join(temp.mkdirSync(), 'file.txt')
waitsForPromise ->
workspace.open(pathToOpen)
runs ->
expect(workspace.getPaneItems().length).toBe 1
fs.mkdirSync(pathToOpen)
deserializedWorkspace = atom.workspace.testSerialization()
expect(deserializedWorkspace.getPaneItems().length).toBe 0
describe "::open(uri, options)", ->
openEvents = null

View File

@@ -128,7 +128,15 @@ class TextEditor extends Model
displayBuffer: @displayBuffer.serialize()
deserializeParams: (params) ->
params.displayBuffer = DisplayBuffer.deserialize(params.displayBuffer)
try
displayBuffer = DisplayBuffer.deserialize(params.displayBuffer)
catch error
if error.syscall is 'read'
return # Error reading the file, don't deserialize an editor for it
else
throw error
params.displayBuffer = displayBuffer
params.registerEditor = true
params