From b61654b52f3b0f19da11591d1112e26ec652bcaf Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 6 Dec 2013 12:38:46 -0800 Subject: [PATCH] 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. --- package.json | 2 +- spec/pane-spec.coffee | 3 --- spec/spec-helper.coffee | 5 ++++- spec/workspace-view-spec.coffee | 18 ++++++------------ src/atom.coffee | 10 +++++++--- src/project.coffee | 4 ++-- src/site-shim.coffee | 3 +-- src/text-buffer.coffee | 15 ++++++++------- 8 files changed, 29 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 08a0ac185..b2d2b0bd6 100644 --- a/package.json +++ b/package.json @@ -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" }, diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index b6a3d478a..029765227 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -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() diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 996352277..74d95c431 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -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() diff --git a/spec/workspace-view-spec.coffee b/spec/workspace-view-spec.coffee index ab2feedcd..25f9c31aa 100644 --- a/spec/workspace-view-spec.coffee +++ b/spec/workspace-view-spec.coffee @@ -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", -> diff --git a/src/atom.coffee b/src/atom.coffee index 260da48d2..4cabe7372 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -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 diff --git a/src/project.coffee b/src/project.coffee index a1026ebf5..8b1758e28 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -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() diff --git a/src/site-shim.coffee b/src/site-shim.coffee index 257d1b232..93b46feca 100644 --- a/src/site-shim.coffee +++ b/src/site-shim.coffee @@ -6,7 +6,6 @@ class SiteShim setRootDocument: (@document) -> @id = @document.siteId - @document.set('looseDocuments', []) createDocument: (values) -> - @document.get('looseDocuments').push(values) + @document.create({values}) diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index d3f9eac9f..a32913679 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -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 ###