mirror of
https://github.com/atom/atom.git
synced 2026-04-06 03:02:13 -04:00
Deserialize TextBuffers that have never been saved to disk
This commit is contained in:
@@ -143,6 +143,26 @@ describe "Project", ->
|
||||
runs ->
|
||||
expect(deserializedProject.getBuffers().length).toBe 0
|
||||
|
||||
it "deserializes buffers that have never been saved before", ->
|
||||
pathToOpen = path.join(temp.mkdirSync('atom-spec-project'), 'file.txt')
|
||||
|
||||
waitsForPromise ->
|
||||
atom.workspace.open(pathToOpen)
|
||||
|
||||
runs ->
|
||||
atom.workspace.getActiveTextEditor().setText('unsaved\n')
|
||||
expect(atom.project.getBuffers().length).toBe 1
|
||||
|
||||
deserializedProject = new Project({notificationManager: atom.notifications, packageManager: atom.packages, confirm: atom.confirm})
|
||||
|
||||
waitsForPromise ->
|
||||
deserializedProject.deserialize(atom.project.serialize({isUnloading: false}))
|
||||
|
||||
runs ->
|
||||
expect(deserializedProject.getBuffers().length).toBe 1
|
||||
expect(deserializedProject.getBuffers()[0].getPath()).toBe pathToOpen
|
||||
expect(deserializedProject.getBuffers()[0].getText()).toBe 'unsaved\n'
|
||||
|
||||
it "serializes marker layers and history only if Atom is quitting", ->
|
||||
waitsForPromise -> atom.workspace.open('a')
|
||||
|
||||
|
||||
@@ -65,7 +65,11 @@ class Project extends Model
|
||||
|
||||
handleBufferState = (bufferState) =>
|
||||
bufferState.shouldDestroyOnFileDelete ?= -> atom.config.get('core.closeDeletedFileTabs')
|
||||
bufferState.mustExist = true
|
||||
|
||||
# Use a little guilty knowledge of the way TextBuffers are serialized.
|
||||
# This allows TextBuffers that have never been saved (but have filePaths) to be deserialized, but prevents
|
||||
# TextBuffers backed by files that have been deleted from being saved.
|
||||
bufferState.mustExist = bufferState.digestWhenLastPersisted isnt false
|
||||
|
||||
TextBuffer.deserialize(bufferState).catch (err) =>
|
||||
@retiredBufferIDs.add(bufferState.id)
|
||||
|
||||
Reference in New Issue
Block a user