Upgrade to telepath 0.61.0

This version adds a bunch of reactive primitives and ensures we destroy
documents when they are no longer referenced.
This commit is contained in:
Nathan Sobo 2013-12-06 12:38:46 -08:00
parent db1768a9c7
commit b61654b52f
8 changed files with 29 additions and 31 deletions

View File

@ -42,7 +42,7 @@
"season": "0.14.0",
"semver": "1.1.4",
"space-pen": "2.0.1",
"telepath": "0.45.1",
"telepath": "0.61.0",
"temp": "0.5.0",
"underscore-plus": "0.3.0"
},

View File

@ -699,11 +699,8 @@ describe "Pane", ->
it "focuses the pane after attach only if had focus when serialized", ->
reloadContainer = ->
projectReplica = atom.replicate().get('project')
containerState = container.serialize()
container.remove()
atom.project = projectReplica
atom.project.destroy()
container = atom.deserializers.deserialize(containerState)
pane = container.getRoot()
container.attachToDom()

View File

@ -55,7 +55,10 @@ beforeEach ->
window.resetTimeouts()
atom.packages.packageStates = {}
spyOn(atom, 'saveWindowState')
serializedWindowState = null
spyOn(atom, 'saveWindowState').andCallFake -> serializedWindowState = @getWindowState().serialize()
spyOn(atom, 'loadSerializedWindowState').andCallFake -> serializedWindowState
atom.syntax.clearGrammarOverrides()
atom.syntax.clearProperties()

View File

@ -18,15 +18,9 @@ describe "WorkspaceView", ->
describe "@deserialize()", ->
viewState = null
refreshWorkspaceViewAndProject = ->
workspaceViewState = atom.workspaceView.serialize()
atom.project.getState().serializeForPersistence()
project2 = atom.replicate().get('project')
atom.workspaceView.remove()
atom.project.destroy()
atom.project = project2
atom.workspaceView = atom.deserializers.deserialize(workspaceViewState)
atom.workspaceView.attachToDom()
simulateReload = ->
atom.unloadEditorWindow()
atom.deserializeEditorWindow()
describe "when the serialized WorkspaceView has an unsaved buffer", ->
it "constructs the view with the same panes", ->
@ -37,7 +31,7 @@ describe "WorkspaceView", ->
editor1.splitRight()
expect(atom.workspaceView.getActiveView()).toBe atom.workspaceView.getEditorViews()[2]
refreshWorkspaceViewAndProject()
simulateReload()
expect(atom.workspaceView.getEditorViews().length).toBe 2
expect(atom.workspaceView.getActiveView()).toBe atom.workspaceView.getEditorViews()[1]
@ -57,7 +51,7 @@ describe "WorkspaceView", ->
pane4.activeItem.setCursorScreenPosition([0, 2])
pane2.focus()
refreshWorkspaceViewAndProject()
simulateReload()
expect(atom.workspaceView.getEditorViews().length).toBe 4
editor1 = atom.workspaceView.panes.find('.row > .pane .editor:eq(0)').view()
@ -90,7 +84,7 @@ describe "WorkspaceView", ->
it "constructs the view with no open editors", ->
atom.workspaceView.getActivePane().remove()
expect(atom.workspaceView.getEditorViews().length).toBe 0
refreshWorkspaceViewAndProject()
simulateReload()
expect(atom.workspaceView.getEditorViews().length).toBe 0
describe "focus", ->

View File

@ -204,6 +204,7 @@ class Atom
@workspaceView.remove()
@project.destroy()
@windowEventHandler?.unsubscribe()
@windowState = null
# Set up the default event handlers and menus for a non-editor window.
#
@ -398,8 +399,8 @@ class Atom
windowState.set(keyPath, value)
windowState
# Private:
loadWindowState: ->
# Private
loadSerializedWindowState: ->
if windowStatePath = @getWindowStatePath()
if fs.existsSync(windowStatePath)
try
@ -414,7 +415,10 @@ class Atom
catch error
console.warn "Error parsing window state: #{windowStatePath}", error.stack, error
doc = Document.deserialize(documentState) if documentState?
# Private:
loadWindowState: ->
serializedWindowState = @loadSerializedWindowState()
doc = Document.deserialize(serializedWindowState) if serializedWindowState?
doc ?= Document.create()
doc.registerModelClasses(require('./text-buffer'), require('./project'))
# TODO: Remove this when everything is using telepath models

View File

@ -32,7 +32,7 @@ class Project extends telepath.Model
path.join(atom.config.get('core.projectHome'), repoName)
# Private: Called by telepath.
attached: ->
created: ->
for buffer in @buffers.getValues()
buffer.once 'destroyed', (buffer) => @removeBuffer(buffer)
@ -62,7 +62,7 @@ class Project extends telepath.Model
unregisterOpener: (opener) -> _.remove(@openers, opener)
# Private:
destroy: ->
destroyed: ->
editor.destroy() for editor in @getEditors()
buffer.release() for buffer in @getBuffers()
@destroyRepo()

View File

@ -6,7 +6,6 @@ class SiteShim
setRootDocument: (@document) ->
@id = @document.siteId
@document.set('looseDocuments', [])
createDocument: (values) ->
@document.get('looseDocuments').push(values)
@document.create({values})

View File

@ -38,7 +38,7 @@ class TextBuffer extends telepath.Model
@loadWhenAttached = @getState()?
# Private: Called by telepath.
attached: ->
created: ->
@loaded = false
@useSerializedText = @modifiedWhenLastPersisted != false
@ -63,12 +63,13 @@ class TextBuffer extends telepath.Model
@updateCachedDiskContents().then => @finishLoading()
finishLoading: ->
@loaded = true
if @useSerializedText and @digestWhenLastPersisted is @file?.getDigest()
@emitModifiedStatusChanged(true)
else
@reload()
@text.clearUndoStack()
if @isAlive()
@loaded = true
if @useSerializedText and @digestWhenLastPersisted is @file?.getDigest()
@emitModifiedStatusChanged(true)
else
@reload()
@text.clearUndoStack()
this
### Internal ###