From 7f7ca75113533cefb7a4f283f66437245b831794 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 19:44:26 -0400 Subject: [PATCH 001/139] Implement editor:move-selection-right command --- menus/darwin.cson | 1 + src/text-editor-element.coffee | 1 + src/text-editor.coffee | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/menus/darwin.cson b/menus/darwin.cson index 17072e14f..7fef9f9a4 100644 --- a/menus/darwin.cson +++ b/menus/darwin.cson @@ -128,6 +128,7 @@ { label: 'Select to First Character of Line', command: 'editor:select-to-first-character-of-line' } { label: 'Select to End of Word', command: 'editor:select-to-end-of-word' } { label: 'Select to End of Line', command: 'editor:select-to-end-of-line' } + { label: 'Move Selection Right', command: 'editor:move-selection-right' } ] } diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index e3eaaeb2a..8e6878a16 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -343,6 +343,7 @@ atom.commands.add 'atom-text-editor:not([mini])', stopEventPropagationAndGroupUn 'editor:checkout-head-revision': -> @checkoutHeadRevision() 'editor:move-line-up': -> @moveLineUp() 'editor:move-line-down': -> @moveLineDown() + 'editor:move-selection-right': -> @moveSelectionRight() 'editor:duplicate-lines': -> @duplicateLines() 'editor:join-lines': -> @joinLines() ) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 7afc99236..59bb91ebe 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -932,6 +932,25 @@ class TextEditor extends Model @setSelectedBufferRange(selection.translate([insertDelta]), preserveFolds: true, autoscroll: true) + moveSelectionRight: -> + selections = @getSelectedBufferRanges() + + translationDelta = [0, 1] + translatedRanges = [] + + @transact => + for selection in selections + range = new Range(selection.end, selection.end.translate(translationDelta)) + + insertionPoint = selection.start + text = @buffer.getTextInRange(range) + + @buffer.delete(range) + @buffer.insert(insertionPoint, text) + translatedRanges.push(selection.translate(translationDelta)) + + @setSelectedBufferRanges(translatedRanges) + # Duplicate the most recent cursor's current line. duplicateLines: -> @transact => From 1f023d1d2c64b44e1d120872c67c30426916ffaf Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 20:25:47 -0400 Subject: [PATCH 002/139] Implement editor:move-selection-left --- keymaps/darwin.cson | 2 ++ menus/darwin.cson | 8 +++++++- src/text-editor-element.coffee | 1 + src/text-editor.coffee | 21 +++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/keymaps/darwin.cson b/keymaps/darwin.cson index 34d18e159..cd7d0ecb6 100644 --- a/keymaps/darwin.cson +++ b/keymaps/darwin.cson @@ -127,6 +127,8 @@ # Atom Specific 'ctrl-W': 'editor:select-word' + 'cmd-ctrl-left': 'editor:move-selection-left' + 'cmd-ctrl-right': 'editor:move-selection-right' # Sublime Parity 'cmd-a': 'core:select-all' diff --git a/menus/darwin.cson b/menus/darwin.cson index 7fef9f9a4..642126259 100644 --- a/menus/darwin.cson +++ b/menus/darwin.cson @@ -74,6 +74,13 @@ { label: 'Join Lines', command: 'editor:join-lines' } ] } + { + label: 'Columns', + submenu: [ + { label: 'Move Selection Left', command: 'editor:move-selection-left' } + { label: 'Move Selection Right', command: 'editor:move-selection-right' } + ] + } { label: 'Text', submenu: [ @@ -128,7 +135,6 @@ { label: 'Select to First Character of Line', command: 'editor:select-to-first-character-of-line' } { label: 'Select to End of Word', command: 'editor:select-to-end-of-word' } { label: 'Select to End of Line', command: 'editor:select-to-end-of-line' } - { label: 'Move Selection Right', command: 'editor:move-selection-right' } ] } diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index 8e6878a16..f428e3ced 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -343,6 +343,7 @@ atom.commands.add 'atom-text-editor:not([mini])', stopEventPropagationAndGroupUn 'editor:checkout-head-revision': -> @checkoutHeadRevision() 'editor:move-line-up': -> @moveLineUp() 'editor:move-line-down': -> @moveLineDown() + 'editor:move-selection-left': -> @moveSelectionLeft() 'editor:move-selection-right': -> @moveSelectionRight() 'editor:duplicate-lines': -> @duplicateLines() 'editor:join-lines': -> @joinLines() diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 59bb91ebe..4071e5cfc 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -932,6 +932,27 @@ class TextEditor extends Model @setSelectedBufferRange(selection.translate([insertDelta]), preserveFolds: true, autoscroll: true) + moveSelectionLeft: -> + selections = @getSelectedBufferRanges() + + translationDelta = [0, -1] + translatedRanges = [] + + @transact => + for selection in selections + range = new Range(selection.start.translate(translationDelta), selection.start) + + insertionPoint = selection.end + text = @buffer.getTextInRange(range) + + console.log(text) + + @buffer.insert(insertionPoint, text) + @buffer.delete(range) + translatedRanges.push(selection.translate(translationDelta)) + + @setSelectedBufferRanges(translatedRanges) + moveSelectionRight: -> selections = @getSelectedBufferRanges() From 93e019407d99e83d170d73f781fbb5c7d40b4242 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 20:32:44 -0400 Subject: [PATCH 003/139] :fire: Errant console.log --- src/text-editor.coffee | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 4071e5cfc..e7dcd3f26 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -945,8 +945,6 @@ class TextEditor extends Model insertionPoint = selection.end text = @buffer.getTextInRange(range) - console.log(text) - @buffer.insert(insertionPoint, text) @buffer.delete(range) translatedRanges.push(selection.translate(translationDelta)) From 7a928be1143e3d7b2923afe10f9d886953d32d19 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 20:58:52 -0400 Subject: [PATCH 004/139] Rename range to make its contents more clear --- src/text-editor.coffee | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index e7dcd3f26..720171c0a 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -940,13 +940,13 @@ class TextEditor extends Model @transact => for selection in selections - range = new Range(selection.start.translate(translationDelta), selection.start) + charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) insertionPoint = selection.end - text = @buffer.getTextInRange(range) + text = @buffer.getTextInRange(charToLeftOfSelection) @buffer.insert(insertionPoint, text) - @buffer.delete(range) + @buffer.delete(charToLeftOfSelection) translatedRanges.push(selection.translate(translationDelta)) @setSelectedBufferRanges(translatedRanges) @@ -959,12 +959,12 @@ class TextEditor extends Model @transact => for selection in selections - range = new Range(selection.end, selection.end.translate(translationDelta)) + charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) insertionPoint = selection.start - text = @buffer.getTextInRange(range) + text = @buffer.getTextInRange(charToRightOfSelection) - @buffer.delete(range) + @buffer.delete(charToRightOfSelection) @buffer.insert(insertionPoint, text) translatedRanges.push(selection.translate(translationDelta)) From 4931609d4ba0109cafd60cc934653ba0749243c5 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 22:55:55 -0400 Subject: [PATCH 005/139] Add specs for moveSelectionLeft() --- spec/text-editor-spec.coffee | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 53eb32acb..df87a29e4 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -3427,6 +3427,36 @@ describe "TextEditor", -> expect(cursor1.getBufferPosition()).toEqual [0, 0] expect(cursor3.getBufferPosition()).toEqual [1, 2] + describe ".moveSelectionLeft()", -> + it "moves one active selection on one line one column to the left", -> + editor.setSelectedBufferRange [[0, 4], [0, 13]] + expect(editor.getSelectedText()).toBe 'quicksort' + editor.moveSelectionLeft() + expect(editor.getSelectedText()).toBe 'quicksort' + expect(editor.getSelectedBufferRange()).toEqual [[0, 3], [0, 12]] + + it "moves multiple active selections on one line one column to the left", -> + editor.setSelectedBufferRanges([[[0, 4], [0, 13]], [[0, 16], [0, 24]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'function' + editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'function' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[0, 15], [0, 23]]] + + it "moves multiple active selections on multiple lines one column to the left", -> + editor.setSelectedBufferRanges([[[0, 4], [0, 13]], [[1, 6], [1, 10]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'sort' + editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'sort' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[1, 5], [1, 9]]] + describe 'reading text', -> it '.lineTextForScreenRow(row)', -> editor.foldBufferRow(4) From c2132114af7fb8c0dd01ca07e6de51bcacada546 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 22:59:17 -0400 Subject: [PATCH 006/139] Add specs for moveSelectionRight() --- spec/text-editor-spec.coffee | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index df87a29e4..83747aee4 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -3457,6 +3457,36 @@ describe "TextEditor", -> expect(selections[1].getText()).toBe 'sort' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[1, 5], [1, 9]]] + describe ".moveSelectionRight()", -> + it "moves one active selection on one line one column to the right", -> + editor.setSelectedBufferRange [[0, 4], [0, 13]] + expect(editor.getSelectedText()).toBe 'quicksort' + editor.moveSelectionRight() + expect(editor.getSelectedText()).toBe 'quicksort' + expect(editor.getSelectedBufferRange()).toEqual [[0, 5], [0, 14]] + + it "moves multiple active selections on one line one column to the right", -> + editor.setSelectedBufferRanges([[[0, 4], [0, 13]], [[0, 16], [0, 24]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'function' + editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'function' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 5], [0, 14]], [[0, 17], [0, 25]]] + + it "moves multiple active selections on multiple lines one column to the right", -> + editor.setSelectedBufferRanges([[[0, 4], [0, 13]], [[1, 6], [1, 10]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'sort' + editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'quicksort' + expect(selections[1].getText()).toBe 'sort' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 5], [0, 14]], [[1, 7], [1, 11]]] + describe 'reading text', -> it '.lineTextForScreenRow(row)', -> editor.foldBufferRow(4) From aabde38f614ac781b230c92e3e965759c480cd49 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 23:32:52 -0400 Subject: [PATCH 007/139] Fix case when selection is at the beginning or end of a line --- src/text-editor.coffee | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 720171c0a..0594b7365 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -942,14 +942,15 @@ class TextEditor extends Model for selection in selections charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) - insertionPoint = selection.end - text = @buffer.getTextInRange(charToLeftOfSelection) + unless charToLeftOfSelection.start.column < 0 + insertionPoint = selection.end + text = @buffer.getTextInRange(charToLeftOfSelection) - @buffer.insert(insertionPoint, text) - @buffer.delete(charToLeftOfSelection) - translatedRanges.push(selection.translate(translationDelta)) + @buffer.insert(insertionPoint, text) + @buffer.delete(charToLeftOfSelection) + translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) + @setSelectedBufferRanges(translatedRanges) if translatedRanges.length > 0 moveSelectionRight: -> selections = @getSelectedBufferRanges() @@ -961,14 +962,15 @@ class TextEditor extends Model for selection in selections charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) - insertionPoint = selection.start - text = @buffer.getTextInRange(charToRightOfSelection) + unless charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) + insertionPoint = selection.start + text = @buffer.getTextInRange(charToRightOfSelection) - @buffer.delete(charToRightOfSelection) - @buffer.insert(insertionPoint, text) - translatedRanges.push(selection.translate(translationDelta)) + @buffer.delete(charToRightOfSelection) + @buffer.insert(insertionPoint, text) + translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) + @setSelectedBufferRanges(translatedRanges) if translatedRanges.length > 0 # Duplicate the most recent cursor's current line. duplicateLines: -> From e269b3bad9bc2e1b5329af9c8bbd2e86d2d5aff5 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 23:43:19 -0400 Subject: [PATCH 008/139] :art: --- src/text-editor.coffee | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 0594b7365..8ecd5bf40 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -943,10 +943,9 @@ class TextEditor extends Model charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) unless charToLeftOfSelection.start.column < 0 - insertionPoint = selection.end text = @buffer.getTextInRange(charToLeftOfSelection) - @buffer.insert(insertionPoint, text) + @buffer.insert(selection.end, text) @buffer.delete(charToLeftOfSelection) translatedRanges.push(selection.translate(translationDelta)) @@ -963,11 +962,10 @@ class TextEditor extends Model charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) unless charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) - insertionPoint = selection.start text = @buffer.getTextInRange(charToRightOfSelection) @buffer.delete(charToRightOfSelection) - @buffer.insert(insertionPoint, text) + @buffer.insert(selection.start, text) translatedRanges.push(selection.translate(translationDelta)) @setSelectedBufferRanges(translatedRanges) if translatedRanges.length > 0 From 8479e1c34f5866d97998e9fdcfdf6e39cdbb74ec Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Sun, 3 May 2015 23:59:33 -0400 Subject: [PATCH 009/139] Fix selection behavior at beginning or end of line --- src/text-editor.coffee | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 8ecd5bf40..c35438cdb 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -942,14 +942,16 @@ class TextEditor extends Model for selection in selections charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) - unless charToLeftOfSelection.start.column < 0 + if charToLeftOfSelection.start.column < 0 + translatedRanges.push(selection) + else text = @buffer.getTextInRange(charToLeftOfSelection) @buffer.insert(selection.end, text) @buffer.delete(charToLeftOfSelection) translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) if translatedRanges.length > 0 + @setSelectedBufferRanges(translatedRanges) moveSelectionRight: -> selections = @getSelectedBufferRanges() @@ -961,14 +963,16 @@ class TextEditor extends Model for selection in selections charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) - unless charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) + if charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) + translatedRanges.push(selection) + else text = @buffer.getTextInRange(charToRightOfSelection) @buffer.delete(charToRightOfSelection) @buffer.insert(selection.start, text) translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) if translatedRanges.length > 0 + @setSelectedBufferRanges(translatedRanges) # Duplicate the most recent cursor's current line. duplicateLines: -> From f396b972987ec170a32cbbc411aa057f464f7bf0 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Mon, 4 May 2015 00:11:42 -0400 Subject: [PATCH 010/139] Add specs for first / last column cases --- spec/text-editor-spec.coffee | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 83747aee4..ee1d513ae 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -3457,6 +3457,19 @@ describe "TextEditor", -> expect(selections[1].getText()).toBe 'sort' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[1, 5], [1, 9]]] + describe "when a selection is at the first column of a line", -> + it "does not change the selection", -> + editor.setSelectedBufferRanges([[[0, 0], [0, 3]], [[1, 0], [1, 3]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'var' + expect(selections[1].getText()).toBe ' v' + editor.moveSelectionLeft() + editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'var' + expect(selections[1].getText()).toBe ' v' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 0], [0, 3]], [[1, 0], [1, 3]]] + describe ".moveSelectionRight()", -> it "moves one active selection on one line one column to the right", -> editor.setSelectedBufferRange [[0, 4], [0, 13]] @@ -3487,6 +3500,19 @@ describe "TextEditor", -> expect(selections[1].getText()).toBe 'sort' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 5], [0, 14]], [[1, 7], [1, 11]]] + describe "when a selection is at the last column of a line", -> + it "does not change the selection", -> + editor.setSelectedBufferRanges([[[2, 34], [2, 40]], [[5, 22], [5, 30]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'items;' + expect(selections[1].getText()).toBe 'shift();' + editor.moveSelectionRight() + editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'items;' + expect(selections[1].getText()).toBe 'shift();' + expect(editor.getSelectedBufferRanges()).toEqual [[[2, 34], [2, 40]], [[5, 22], [5, 30]]] + describe 'reading text', -> it '.lineTextForScreenRow(row)', -> editor.foldBufferRow(4) From 7028fb4add1670518c6fcd924c8fc4e3a95448c8 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Mon, 4 May 2015 00:17:43 -0400 Subject: [PATCH 011/139] Add Linux and Windows menu items --- menus/linux.cson | 7 +++++++ menus/win32.cson | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/menus/linux.cson b/menus/linux.cson index 9363d02e5..6253f21eb 100644 --- a/menus/linux.cson +++ b/menus/linux.cson @@ -48,6 +48,13 @@ { label: '&Join Lines', command: 'editor:join-lines' } ] } + { + label: 'Columns', + submenu: [ + { label: 'Move Selection &Left', command: 'editor:move-selection-left' } + { label: 'Move Selection &Right', command: 'editor:move-selection-right' } + ] + } { label: 'Text', submenu: [ diff --git a/menus/win32.cson b/menus/win32.cson index 068817888..f612983f7 100644 --- a/menus/win32.cson +++ b/menus/win32.cson @@ -55,6 +55,13 @@ { label: '&Join Lines', command: 'editor:join-lines' } ] } + { + label: 'Columns', + submenu: [ + { label: 'Move Selection &Left', command: 'editor:move-selection-left' } + { label: 'Move Selection &Right', command: 'editor:move-selection-right' } + ] + } { label: 'Text', submenu: [ From b0f38066fa7d188115e6f257f9e34831eee138f1 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Mon, 4 May 2015 00:39:07 -0400 Subject: [PATCH 012/139] :art: Add comments to new methods --- src/text-editor.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index c35438cdb..106309235 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -932,6 +932,7 @@ class TextEditor extends Model @setSelectedBufferRange(selection.translate([insertDelta]), preserveFolds: true, autoscroll: true) + # Move any active selections one column to the left. moveSelectionLeft: -> selections = @getSelectedBufferRanges() @@ -953,6 +954,7 @@ class TextEditor extends Model @setSelectedBufferRanges(translatedRanges) + # Move any active selections one column to the right. moveSelectionRight: -> selections = @getSelectedBufferRanges() From 98aac5aba62da12692fbb88ae2c2503a13d80620 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Mon, 4 May 2015 10:04:54 -0400 Subject: [PATCH 013/139] :art: Better name for text --- src/text-editor.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 106309235..54f1d61de 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -946,9 +946,9 @@ class TextEditor extends Model if charToLeftOfSelection.start.column < 0 translatedRanges.push(selection) else - text = @buffer.getTextInRange(charToLeftOfSelection) + charTextToLeftOfSelection = @buffer.getTextInRange(charToLeftOfSelection) - @buffer.insert(selection.end, text) + @buffer.insert(selection.end, charTextToLeftOfSelection) @buffer.delete(charToLeftOfSelection) translatedRanges.push(selection.translate(translationDelta)) @@ -968,10 +968,10 @@ class TextEditor extends Model if charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) translatedRanges.push(selection) else - text = @buffer.getTextInRange(charToRightOfSelection) + charTextToRightOfSelection = @buffer.getTextInRange(charToRightOfSelection) @buffer.delete(charToRightOfSelection) - @buffer.insert(selection.start, text) + @buffer.insert(selection.start, charTextToRightOfSelection) translatedRanges.push(selection.translate(translationDelta)) @setSelectedBufferRanges(translatedRanges) From de186c1d0eea729a3fdf8467152aef202f06a0a3 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Thu, 7 May 2015 13:03:19 -0400 Subject: [PATCH 014/139] Add Linux and Windows keybindings for move selection --- keymaps/linux.cson | 2 ++ keymaps/win32.cson | 2 ++ 2 files changed, 4 insertions(+) diff --git a/keymaps/linux.cson b/keymaps/linux.cson index cd71d99e7..31218b428 100644 --- a/keymaps/linux.cson +++ b/keymaps/linux.cson @@ -15,6 +15,8 @@ 'ctrl-shift-pageup': 'pane:move-item-left' 'ctrl-shift-pagedown': 'pane:move-item-right' 'F11': 'window:toggle-full-screen' + 'alt-shift-left': 'editor:move-selection-left' + 'alt-shift-right': 'editor:move-selection-right' # Sublime Parity 'ctrl-,': 'application:show-settings' diff --git a/keymaps/win32.cson b/keymaps/win32.cson index 5d3629386..7422d045d 100644 --- a/keymaps/win32.cson +++ b/keymaps/win32.cson @@ -19,6 +19,8 @@ 'ctrl-shift-left': 'pane:move-item-left' 'ctrl-shift-right': 'pane:move-item-right' 'F11': 'window:toggle-full-screen' + 'alt-shift-left': 'editor:move-selection-left' + 'alt-shift-right': 'editor:move-selection-right' # Sublime Parity 'ctrl-,': 'application:show-settings' From 8ffcea381ed76a45259c1f5786767902b925c7bf Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Sat, 12 Mar 2016 01:48:59 -0800 Subject: [PATCH 015/139] load config in atom-application and pass it to auto-update-manager --- src/browser/atom-application.coffee | 7 ++++++- src/browser/auto-update-manager.coffee | 6 +----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 4767c9065..416202cc6 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -3,6 +3,7 @@ ApplicationMenu = require './application-menu' AtomProtocolHandler = require './atom-protocol-handler' AutoUpdateManager = require './auto-update-manager' StorageFolder = require '../storage-folder' +Config = require '../config' ipcHelpers = require '../ipc-helpers' {BrowserWindow, Menu, app, dialog, ipcMain, shell} = require 'electron' fs = require 'fs-plus' @@ -70,7 +71,11 @@ class AtomApplication @pidsToOpenWindows = {} @windows = [] - @autoUpdateManager = new AutoUpdateManager(@version, options.test, @resourcePath) + @config = new Config({configDirPath: process.env.ATOM_HOME, @resourcePath, enablePersistence: true}) + @config.setSchema null, {type: 'object', properties: _.clone(require('../config-schema'))} + @config.load() + + @autoUpdateManager = new AutoUpdateManager(@version, options.test, @resourcePath, @config) @applicationMenu = new ApplicationMenu(@version, @autoUpdateManager) @atomProtocolHandler = new AtomProtocolHandler(@resourcePath, @safeMode) diff --git a/src/browser/auto-update-manager.coffee b/src/browser/auto-update-manager.coffee index c8c57cb01..8cf06b833 100644 --- a/src/browser/auto-update-manager.coffee +++ b/src/browser/auto-update-manager.coffee @@ -1,6 +1,5 @@ autoUpdater = null _ = require 'underscore-plus' -Config = require '../config' {EventEmitter} = require 'events' path = require 'path' @@ -16,13 +15,10 @@ module.exports = class AutoUpdateManager _.extend @prototype, EventEmitter.prototype - constructor: (@version, @testMode, resourcePath) -> + constructor: (@version, @testMode, resourcePath, @config) -> @state = IdleState @iconPath = path.resolve(__dirname, '..', '..', 'resources', 'atom.png') @feedUrl = "https://atom.io/api/updates?version=#{@version}" - @config = new Config({configDirPath: process.env.ATOM_HOME, resourcePath, enablePersistence: true}) - @config.setSchema null, {type: 'object', properties: _.clone(require('../config-schema'))} - @config.load() process.nextTick => @setupAutoUpdater() setupAutoUpdater: -> From 4e4c85970bf93a0524af90f0331e9bb0f645fbf7 Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Sat, 12 Mar 2016 01:49:38 -0800 Subject: [PATCH 016/139] add option to choose whether atom rememebers your last windows --- spec/integration/startup-spec.coffee | 30 ++++++++++++++++++++++++++++ src/browser/atom-application.coffee | 12 ++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/spec/integration/startup-spec.coffee b/spec/integration/startup-spec.coffee index f6b0e1cf3..136ca9676 100644 --- a/spec/integration/startup-spec.coffee +++ b/spec/integration/startup-spec.coffee @@ -268,6 +268,36 @@ describe "Starting Atom", -> [otherTempDirPath] ].sort() + it "doesn't reopen any previously opened windows if restorePreviousWindowsOnStart is disabled", -> + configPath = path.join(atomHome, 'config.cson') + config = CSON.readFileSync(configPath) + config['*'].core = {restorePreviousWindowsOnStart: false} + CSON.writeFileSync(configPath, config) + + runAtom [tempDirPath], {ATOM_HOME: atomHome}, (client) -> + client + .waitForExist("atom-workspace") + .waitForNewWindow(-> + @startAnotherAtom([otherTempDirPath], ATOM_HOME: atomHome) + , 5000) + .waitForExist("atom-workspace") + + runAtom [], {ATOM_HOME: atomHome}, (client) -> + windowProjectPaths = [] + + client + .waitForWindowCount(1, 10000) + .then ({value: windowHandles}) -> + @window(windowHandles[0]) + .waitForExist("atom-workspace") + .treeViewRootDirectories() + .then ({value: directories}) -> windowProjectPaths.push(directories) + + .call -> + expect(windowProjectPaths).toEqual [ + [] + ] + describe "opening a remote directory", -> it "opens the parent directory and creates an empty text editor", -> remoteDirectory = 'remote://server:3437/some/directory/path' diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 416202cc6..d057aef52 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -506,12 +506,14 @@ class AtomApplication saveState: (allowEmpty=false) -> return if @quitting + restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true states = [] - for window in @windows - unless window.isSpec - if loadSettings = window.getLoadSettings() - states.push(initialPaths: loadSettings.initialPaths) - if states.length > 0 or allowEmpty + if restorePreviousState + for window in @windows + unless window.isSpec + if loadSettings = window.getLoadSettings() + states.push(initialPaths: loadSettings.initialPaths) + if states.length > 0 or allowEmpty or not restorePreviousState @storageFolder.storeSync('application.json', states) loadState: (options) -> From dbf7214670b9f625a718f8f5a71b8ffff63e22a5 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Mar 2016 17:26:30 -0700 Subject: [PATCH 017/139] Fix clean command to actually work when paths missing --- script/clean | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/script/clean b/script/clean index 0c947baf2..cc4933f95 100755 --- a/script/clean +++ b/script/clean @@ -1,11 +1,10 @@ #!/usr/bin/env node -var cp = require('./utils/child-process-wrapper.js'); +var childProcess = require('./utils/child-process-wrapper.js'); var fs = require('fs'); var path = require('path'); var os = require('os'); var isWindows = process.platform === 'win32'; -var removeCommand = isWindows ? 'rmdir /S /Q ' : 'rm -rf '; var productName = require('../package.json').productName; process.chdir(path.dirname(__dirname)); @@ -13,10 +12,10 @@ var home = process.env[isWindows ? 'USERPROFILE' : 'HOME']; var tmpdir = os.tmpdir(); // Windows: Use START as a way to ignore error if Atom.exe isnt running -var killatom = isWindows ? 'START taskkill /F /IM ' + productName + '.exe' : 'pkill -9 ' + productName + ' || true'; +var killAtomCommand = isWindows ? 'START taskkill /F /IM ' + productName + '.exe' : 'pkill -9 ' + productName + ' || true'; +//childProcess.safeExec(killAtomCommand); -var commands = [ - killatom, +var pathsToRemove = [ [__dirname, '..', 'node_modules'], [__dirname, '..', 'build', 'node_modules'], [__dirname, '..', 'apm', 'node_modules'], @@ -32,37 +31,30 @@ var commands = [ [home, '.atom', 'electron'], [tmpdir, 'atom-build'], [tmpdir, 'atom-cached-atom-shells'], -]; -var run = function() { - var next = commands.shift(); - if (!next) - process.exit(0); +].map(function(pathSegments) { + return path.resolve.apply(null, pathSegments); +}); - if (Array.isArray(next)) { - var pathToRemove = path.resolve.apply(path.resolve, next); - if (fs.existsSync(pathToRemove)) { - if (isWindows) { - removeFolderRecursive(pathToRemove); - } else { - next = removeCommand + pathToRemove; - cp.safeExec(next, run); - } - } - else { - return run(); - } +pathsToRemove.forEach(function(pathToRemove) { + if (fs.existsSync(pathToRemove)) { + removePath(pathToRemove); } - else - cp.safeExec(next, run); -}; -run(); +}); + +function removePath(pathToRemove) { + if (isWindows) { + removePathOnWindows(pathToRemove); + } else { + childProcess.safeExec('rm -rf ' + pathToRemove); + } +} // Windows has a 260-char path limit for rmdir etc. Just recursively delete in Node. -var removeFolderRecursive = function(folderPath) { +function removePathOnWindows(folderPath) { fs.readdirSync(folderPath).forEach(function(entry, index) { var entryPath = path.join(folderPath, entry); if (fs.lstatSync(entryPath).isDirectory()) { - removeFolderRecursive(entryPath); + removePathOnWindows(entryPath); } else { fs.unlinkSync(entryPath); } From de6ab3b814cd305523f0ae95314fc2bc19e28f51 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 22 Mar 2016 17:26:41 -0700 Subject: [PATCH 018/139] Exclude PATH entries with msbuild.exe to fix node-gyp on Windows --- script/build | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/script/build b/script/build index a40a02e13..ca5569d0f 100755 --- a/script/build +++ b/script/build @@ -2,9 +2,24 @@ var cp = require('./utils/child-process-wrapper.js'); var runGrunt = require('./utils/run-grunt.js'); var path = require('path'); +var fs = require('fs'); process.chdir(path.dirname(__dirname)); +if (process.platform === 'win32') { + process.env['PATH'] = process.env['PATH'] + .split(';') + .filter(function(p) { + if (fs.existsSync(path.resolve(p, 'msbuild.exe'))) { + console.log('Excluding "' + p + '" from PATH to avoid msbuild.exe mismatch') + return false; + } else { + return true; + } + }) + .join(';'); +} + cp.safeExec('node script/bootstrap', function() { // build/node_modules/.bin/grunt "$@" var args = process.argv.slice(2); From 3b222dbee82a2d98351296bdde0d874c4ed14eb3 Mon Sep 17 00:00:00 2001 From: Machiste Quintana Date: Mon, 28 Mar 2016 23:26:28 -0700 Subject: [PATCH 019/139] Don't merge selections if at start or end of line --- spec/text-editor-spec.coffee | 44 ++++++++++++++++++++++++++++++++++++ src/text-editor.coffee | 28 +++++++++++------------ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 261d311c1..4de7168b7 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -4565,7 +4565,9 @@ describe "TextEditor", -> it "moves one active selection on one line one column to the left", -> editor.setSelectedBufferRange [[0, 4], [0, 13]] expect(editor.getSelectedText()).toBe 'quicksort' + editor.moveSelectionLeft() + expect(editor.getSelectedText()).toBe 'quicksort' expect(editor.getSelectedBufferRange()).toEqual [[0, 3], [0, 12]] @@ -4575,7 +4577,9 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'function' + editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'function' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[0, 15], [0, 23]]] @@ -4586,7 +4590,9 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'sort' + editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'sort' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 3], [0, 12]], [[1, 5], [1, 9]]] @@ -4598,17 +4604,35 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'var' expect(selections[1].getText()).toBe ' v' + editor.moveSelectionLeft() editor.moveSelectionLeft() + expect(selections[0].getText()).toBe 'var' expect(selections[1].getText()).toBe ' v' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 0], [0, 3]], [[1, 0], [1, 3]]] + describe "when multiple selections are active on one line", -> + it "does not change the selection", -> + editor.setSelectedBufferRanges([[[0, 0], [0, 3]], [[0, 4], [0, 13]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'var' + expect(selections[1].getText()).toBe 'quicksort' + + editor.moveSelectionLeft() + + expect(selections[0].getText()).toBe 'var' + expect(selections[1].getText()).toBe 'quicksort' + expect(editor.getSelectedBufferRanges()).toEqual [[[0, 0], [0, 3]], [[0, 4], [0, 13]]] + describe ".moveSelectionRight()", -> it "moves one active selection on one line one column to the right", -> editor.setSelectedBufferRange [[0, 4], [0, 13]] expect(editor.getSelectedText()).toBe 'quicksort' + editor.moveSelectionRight() + expect(editor.getSelectedText()).toBe 'quicksort' expect(editor.getSelectedBufferRange()).toEqual [[0, 5], [0, 14]] @@ -4618,7 +4642,9 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'function' + editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'function' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 5], [0, 14]], [[0, 17], [0, 25]]] @@ -4629,7 +4655,9 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'sort' + editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'quicksort' expect(selections[1].getText()).toBe 'sort' expect(editor.getSelectedBufferRanges()).toEqual [[[0, 5], [0, 14]], [[1, 7], [1, 11]]] @@ -4641,12 +4669,28 @@ describe "TextEditor", -> expect(selections[0].getText()).toBe 'items;' expect(selections[1].getText()).toBe 'shift();' + editor.moveSelectionRight() editor.moveSelectionRight() + expect(selections[0].getText()).toBe 'items;' expect(selections[1].getText()).toBe 'shift();' expect(editor.getSelectedBufferRanges()).toEqual [[[2, 34], [2, 40]], [[5, 22], [5, 30]]] + describe "when multiple selections are active on one line", -> + it "does not change the selection", -> + editor.setSelectedBufferRanges([[[2, 27], [2, 33]], [[2, 34], [2, 40]]]) + selections = editor.getSelections() + + expect(selections[0].getText()).toBe 'return' + expect(selections[1].getText()).toBe 'items;' + + editor.moveSelectionRight() + + expect(selections[0].getText()).toBe 'return' + expect(selections[1].getText()).toBe 'items;' + expect(editor.getSelectedBufferRanges()).toEqual [[[2, 27], [2, 33]], [[2, 34], [2, 40]]] + describe 'reading text', -> it '.lineTextForScreenRow(row)', -> editor.foldBufferRow(4) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 6f075b579..b6be33071 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1077,46 +1077,46 @@ class TextEditor extends Model # Move any active selections one column to the left. moveSelectionLeft: -> selections = @getSelectedBufferRanges() + noSelectionAtStartOfLine = selections.every((selection) -> + selection.start.column isnt 0 + ) translationDelta = [0, -1] translatedRanges = [] @transact => - for selection in selections - charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) - - if charToLeftOfSelection.start.column < 0 - translatedRanges.push(selection) - else + if noSelectionAtStartOfLine + for selection in selections + charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) charTextToLeftOfSelection = @buffer.getTextInRange(charToLeftOfSelection) @buffer.insert(selection.end, charTextToLeftOfSelection) @buffer.delete(charToLeftOfSelection) translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) + @setSelectedBufferRanges(translatedRanges) # Move any active selections one column to the right. moveSelectionRight: -> selections = @getSelectedBufferRanges() + noSelectionAtEndOfLine = selections.every((selection) => + selection.end.column isnt @buffer.lineLengthForRow(selection.end.row) + ) translationDelta = [0, 1] translatedRanges = [] @transact => - for selection in selections - charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) - - if charToRightOfSelection.end.column > @buffer.lineLengthForRow(charToRightOfSelection.end.row) - translatedRanges.push(selection) - else + if noSelectionAtEndOfLine + for selection in selections + charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) charTextToRightOfSelection = @buffer.getTextInRange(charToRightOfSelection) @buffer.delete(charToRightOfSelection) @buffer.insert(selection.start, charTextToRightOfSelection) translatedRanges.push(selection.translate(translationDelta)) - @setSelectedBufferRanges(translatedRanges) + @setSelectedBufferRanges(translatedRanges) # Duplicate the most recent cursor's current line. duplicateLines: -> From f4b94fef30a952efda6997e28d4c53973196fd3d Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Tue, 29 Mar 2016 08:30:18 -0700 Subject: [PATCH 020/139] always save state on close, check config on open --- src/browser/atom-application.coffee | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index d057aef52..eea2fdc57 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -506,18 +506,17 @@ class AtomApplication saveState: (allowEmpty=false) -> return if @quitting - restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true states = [] - if restorePreviousState - for window in @windows - unless window.isSpec - if loadSettings = window.getLoadSettings() - states.push(initialPaths: loadSettings.initialPaths) - if states.length > 0 or allowEmpty or not restorePreviousState + for window in @windows + unless window.isSpec + if loadSettings = window.getLoadSettings() + states.push(initialPaths: loadSettings.initialPaths) + if states.length > 0 or allowEmpty @storageFolder.storeSync('application.json', states) loadState: (options) -> - if (states = @storageFolder.load('application.json'))?.length > 0 + restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true + if (states = @storageFolder.load('application.json'))?.length > 0 and restorePreviousState for state in states @openWithOptions(_.extend(options, { initialPaths: state.initialPaths From 265aa2f6c8ba1040858fa19daa498eb0b67db3cd Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 29 Mar 2016 16:46:57 -0600 Subject: [PATCH 021/139] Warn rather than failing if we detect leaked pathwatcher subscriptions --- spec/git-repository-async-spec.js | 4 +--- spec/spec-helper.coffee | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/spec/git-repository-async-spec.js b/spec/git-repository-async-spec.js index 900d81bfb..0442248e1 100644 --- a/spec/git-repository-async-spec.js +++ b/spec/git-repository-async-spec.js @@ -230,9 +230,7 @@ describe('GitRepositoryAsync', () => { }) }) - // @joshaber: Disabling for now. There seems to be some race with path - // subscriptions leading to intermittent test failures, e.g.: https://travis-ci.org/atom/atom/jobs/102702554 - xdescribe('.checkoutHeadForEditor(editor)', () => { + describe('.checkoutHeadForEditor(editor)', () => { let filePath let editor diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 758a232aa..1194f2f76 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -112,14 +112,14 @@ afterEach -> document.getElementById('jasmine-content').innerHTML = '' unless window.debugContent - ensureNoPathSubscriptions() + warnIfLeakingPathSubscriptions() waits(0) # yield to ui thread to make screen update more frequently -ensureNoPathSubscriptions = -> +warnIfLeakingPathSubscriptions = -> watchedPaths = pathwatcher.getWatchedPaths() - pathwatcher.closeAllWatchers() if watchedPaths.length > 0 - throw new Error("Leaking subscriptions for paths: " + watchedPaths.join(", ")) + console.error("WARNING: Leaking subscriptions for paths: " + watchedPaths.join(", ")) + pathwatcher.closeAllWatchers() ensureNoDeprecatedFunctionsCalled = -> deprecations = Grim.getDeprecations() From 36121e3bf87f895e7c0846e8c92af1efe2f02f14 Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 29 Mar 2016 22:59:24 -0400 Subject: [PATCH 022/139] First pass at the git work queue. --- spec/git-work-queue-spec.js | 68 +++++++++++++++++++++++++++++++++++++ src/git-repository-async.js | 6 +++- src/git-work-queue.js | 61 +++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 spec/git-work-queue-spec.js create mode 100644 src/git-work-queue.js diff --git a/spec/git-work-queue-spec.js b/spec/git-work-queue-spec.js new file mode 100644 index 000000000..18ce63f0b --- /dev/null +++ b/spec/git-work-queue-spec.js @@ -0,0 +1,68 @@ +/** @babel */ + +import GitWorkQueue from '../src/git-work-queue' + +import {it} from './async-spec-helpers' + +fdescribe('GitWorkQueue', () => { + let queue + + beforeEach(() => { + queue = new GitWorkQueue() + }) + + describe('.enqueue', () => { + it('calls the enqueued function', async () => { + let called = false + await queue.enqueue(() => { + called = true + return Promise.resolve() + }) + expect(called).toBe(true) + }) + + it('forwards values from the inner promise', async () => { + const result = await queue.enqueue(() => Promise.resolve(42)) + expect(result).toBe(42) + }) + + it('forwards errors from the inner promise', async () => { + let threw = false + try { + await queue.enqueue(() => Promise.reject(new Error('down with the sickness'))) + } catch (e) { + threw = true + } + expect(threw).toBe(true) + }) + + it('continues to dequeue work after a promise has been rejected', async () => { + try { + await queue.enqueue(() => Promise.reject(new Error('down with the sickness'))) + } catch (e) {} + + const result = await queue.enqueue(() => Promise.resolve(42)) + expect(result).toBe(42) + }) + + it('queues up work', async () => { + let resolve = null + queue.enqueue(() => { + return new Promise((resolve_, reject) => { + resolve = resolve_ + }) + }) + + expect(queue.getQueueDepth()).toBe(0) + + queue.enqueue(() => { + return new Promise((resolve, reject) => {}) + }) + + expect(queue.getQueueDepth()).toBe(1) + resolve() + + waitsFor(() => queue.getQueueDepth() === 0) + }) + }) +}) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index 17d293c14..c7f05e68d 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -3,6 +3,7 @@ import fs from 'fs-plus' import path from 'path' import Git from 'nodegit' +import GitWorkQueue from './git-work-queue' import {Emitter, CompositeDisposable, Disposable} from 'event-kit' const modifiedStatusFlags = Git.Status.STATUS.WT_MODIFIED | Git.Status.STATUS.INDEX_MODIFIED | Git.Status.STATUS.WT_DELETED | Git.Status.STATUS.INDEX_DELETED | Git.Status.STATUS.WT_TYPECHANGE | Git.Status.STATUS.INDEX_TYPECHANGE @@ -38,8 +39,10 @@ export default class GitRepositoryAsync { } constructor (_path, options = {}) { - Git.enableThreadSafety() + // We'll serialize our access manually. + Git.disableThreadSafety() + this.workQueue = new GitWorkQueue() this.emitter = new Emitter() this.subscriptions = new CompositeDisposable() this.pathStatusCache = {} @@ -81,6 +84,7 @@ export default class GitRepositoryAsync { this.emitter.dispose() this.emitter = null } + if (this.subscriptions) { this.subscriptions.dispose() this.subscriptions = null diff --git a/src/git-work-queue.js b/src/git-work-queue.js new file mode 100644 index 000000000..1d69e654a --- /dev/null +++ b/src/git-work-queue.js @@ -0,0 +1,61 @@ +/** @babel */ + +// A queue used to manage git work. +export default class GitWorkQueue { + constructor () { + this.queue = [] + this.working = false + } + + // Enqueue the given function. The function must return a {Promise} when + // called. + enqueue (fn) { + let resolve = null + let reject = null + const wrapperPromise = new Promise((resolve_, reject_) => { + resolve = resolve_ + reject = reject_ + }) + + this.queue.push(this.wrapFunction(fn, resolve, reject)) + + this.startNext() + + return wrapperPromise + } + + wrapFunction (fn, resolve, reject) { + return () => { + const promise = fn() + promise + .then(result => { + resolve(result) + this.taskDidComplete() + }, error => { + reject(error) + this.taskDidComplete() + }) + } + } + + taskDidComplete () { + this.working = false + + this.startNext() + } + + shouldStartNext () { + return !this.working && this.queue.length > 0 + } + + startNext () { + if (!this.shouldStartNext()) return + + this.working = true + + const fn = this.queue.shift() + fn() + } + + getQueueDepth () { return this.queue.length } +} From f1516f7de4a2a1bee64804ea0319c3d06fd6df3a Mon Sep 17 00:00:00 2001 From: joshaber Date: Tue, 29 Mar 2016 23:54:39 -0400 Subject: [PATCH 023/139] First pass at using the work queue. --- spec/git-work-queue-spec.js | 4 +- src/git-repository-async.js | 128 ++++++++++++++++++++---------------- src/git-work-queue.js | 10 +-- 3 files changed, 79 insertions(+), 63 deletions(-) diff --git a/spec/git-work-queue-spec.js b/spec/git-work-queue-spec.js index 18ce63f0b..9d8e8cea0 100644 --- a/spec/git-work-queue-spec.js +++ b/spec/git-work-queue-spec.js @@ -55,9 +55,7 @@ fdescribe('GitWorkQueue', () => { expect(queue.getQueueDepth()).toBe(0) - queue.enqueue(() => { - return new Promise((resolve, reject) => {}) - }) + queue.enqueue(() => new Promise((resolve, reject) => {})) expect(queue.getQueueDepth()).toBe(1) resolve() diff --git a/src/git-repository-async.js b/src/git-repository-async.js index c7f05e68d..f7c4f1b5b 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -264,10 +264,12 @@ export default class GitRepositoryAsync { // Public: Returns a {Promise} which resolves to whether the given branch // exists. hasBranch (branch) { - return this.getRepo() - .then(repo => repo.getBranch(branch)) - .then(branch => branch != null) - .catch(_ => false) + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => repo.getBranch(branch)) + .then(branch => branch != null) + .catch(_ => false) + }) } // Public: Retrieves a shortened version of the HEAD reference value. @@ -281,9 +283,11 @@ export default class GitRepositoryAsync { // // Returns a {Promise} which resolves to a {String}. getShortHead (_path) { - return this.getRepo(_path) - .then(repo => repo.getCurrentBranch()) - .then(branch => branch.shorthand()) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => repo.getCurrentBranch()) + .then(branch => branch.shorthand()) + }) } // Public: Is the given path a submodule in the repository? @@ -315,16 +319,18 @@ export default class GitRepositoryAsync { // * `ahead` The {Number} of commits ahead. // * `behind` The {Number} of commits behind. getAheadBehindCount (reference, _path) { - return this.getRepo(_path) - .then(repo => Promise.all([repo, repo.getBranch(reference)])) - .then(([repo, local]) => { - const upstream = Git.Branch.upstream(local) - return Promise.all([repo, local, upstream]) - }) - .then(([repo, local, upstream]) => { - return Git.Graph.aheadBehind(repo, local.target(), upstream.target()) - }) - .catch(_ => ({ahead: 0, behind: 0})) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => Promise.all([repo, repo.getBranch(reference)])) + .then(([repo, local]) => { + const upstream = Git.Branch.upstream(local) + return Promise.all([repo, local, upstream]) + }) + .then(([repo, local, upstream]) => { + return Git.Graph.aheadBehind(repo, local.target(), upstream.target()) + }) + .catch(_ => ({ahead: 0, behind: 0})) + }) } // Public: Get the cached ahead/behind commit counts for the current branch's @@ -356,10 +362,12 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to the {String} git configuration value // specified by the key. getConfigValue (key, _path) { - return this.getRepo(_path) - .then(repo => repo.configSnapshot()) - .then(config => config.getStringBuf(key)) - .catch(_ => null) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => repo.configSnapshot()) + .then(config => config.getStringBuf(key)) + .catch(_ => null) + }) } // Public: Get the URL for the 'origin' remote. @@ -382,9 +390,11 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {String} branch name such as // `refs/remotes/origin/master`. getUpstreamBranch (_path) { - return this.getRepo(_path) - .then(repo => repo.getCurrentBranch()) - .then(branch => Git.Branch.upstream(branch)) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => repo.getCurrentBranch()) + .then(branch => Git.Branch.upstream(branch)) + }) } // Public: Gets all the local and remote references. @@ -397,23 +407,25 @@ export default class GitRepositoryAsync { // * `remotes` An {Array} of remote reference names. // * `tags` An {Array} of tag reference names. getReferences (_path) { - return this.getRepo(_path) - .then(repo => repo.getReferences(Git.Reference.TYPE.LISTALL)) - .then(refs => { - const heads = [] - const remotes = [] - const tags = [] - for (const ref of refs) { - if (ref.isTag()) { - tags.push(ref.name()) - } else if (ref.isRemote()) { - remotes.push(ref.name()) - } else if (ref.isBranch()) { - heads.push(ref.name()) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => repo.getReferences(Git.Reference.TYPE.LISTALL)) + .then(refs => { + const heads = [] + const remotes = [] + const tags = [] + for (const ref of refs) { + if (ref.isTag()) { + tags.push(ref.name()) + } else if (ref.isRemote()) { + remotes.push(ref.name()) + } else if (ref.isBranch()) { + heads.push(ref.name()) + } } - } - return {heads, remotes, tags} - }) + return {heads, remotes, tags} + }) + }) } // Public: Get the SHA for the given reference. @@ -425,9 +437,11 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to the current {String} SHA for the // given reference. getReferenceTarget (reference, _path) { - return this.getRepo(_path) - .then(repo => Git.Reference.nameToId(repo, reference)) - .then(oid => oid.tostrS()) + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => Git.Reference.nameToId(repo, reference)) + .then(oid => oid.tostrS()) + }) } // Reading Status @@ -505,8 +519,8 @@ export default class GitRepositoryAsync { // status bit for the path. refreshStatusForPath (_path) { let relativePath - return Promise.all([this.getRepo(), this.getWorkingDirectory()]) - .then(([repo, wd]) => { + return this.getWorkingDirectory() + .then(wd => { relativePath = this.relativize(_path, wd) return this._getStatus([relativePath]) }) @@ -1081,18 +1095,20 @@ export default class GitRepositoryAsync { // // Returns a {Promise} which resolves to an {Array} of {NodeGit.StatusFile} // statuses for the paths. - _getStatus (paths, repo) { - return this.getRepo() - .then(repo => { - const opts = { - flags: Git.Status.OPT.INCLUDE_UNTRACKED | Git.Status.OPT.RECURSE_UNTRACKED_DIRS - } + _getStatus (paths) { + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => { + const opts = { + flags: Git.Status.OPT.INCLUDE_UNTRACKED | Git.Status.OPT.RECURSE_UNTRACKED_DIRS + } - if (paths) { - opts.pathspec = paths - } + if (paths) { + opts.pathspec = paths + } - return repo.getStatusExt(opts) - }) + return repo.getStatusExt(opts) + }) + }) } } diff --git a/src/git-work-queue.js b/src/git-work-queue.js index 1d69e654a..6e8c2af67 100644 --- a/src/git-work-queue.js +++ b/src/git-work-queue.js @@ -19,7 +19,9 @@ export default class GitWorkQueue { this.queue.push(this.wrapFunction(fn, resolve, reject)) - this.startNext() + if (this.shouldStartNext()) { + this.startNext() + } return wrapperPromise } @@ -41,7 +43,9 @@ export default class GitWorkQueue { taskDidComplete () { this.working = false - this.startNext() + if (this.shouldStartNext()) { + this.startNext() + } } shouldStartNext () { @@ -49,8 +53,6 @@ export default class GitWorkQueue { } startNext () { - if (!this.shouldStartNext()) return - this.working = true const fn = this.queue.shift() From fb2a08f1f730bfc193de0d7fbd9c5197a460d1bf Mon Sep 17 00:00:00 2001 From: simurai Date: Wed, 30 Mar 2016 14:38:44 +0900 Subject: [PATCH 024/139] :arrow_up: solarized-dark/light-syntax@v1.0.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index dbeb5c61c..5b314ffc1 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,8 @@ "one-light-ui": "1.3.0", "one-dark-syntax": "1.2.0", "one-light-syntax": "1.2.0", - "solarized-dark-syntax": "1.0.0", - "solarized-light-syntax": "1.0.0", + "solarized-dark-syntax": "1.0.1", + "solarized-light-syntax": "1.0.1", "about": "1.4.2", "archive-view": "0.61.1", "autocomplete-atom-api": "0.10.0", From 1a124853f032624516540dd138b030f05d0f8b12 Mon Sep 17 00:00:00 2001 From: Christian Oliff Date: Wed, 30 Mar 2016 17:23:50 +0900 Subject: [PATCH 025/139] https link to nodejs.org https link to nodejs.org --- docs/build-instructions/os-x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-instructions/os-x.md b/docs/build-instructions/os-x.md index 76da080c9..54d0c2ff8 100644 --- a/docs/build-instructions/os-x.md +++ b/docs/build-instructions/os-x.md @@ -3,7 +3,7 @@ ## Requirements * OS X 10.8 or later - * [Node.js](http://nodejs.org/download/) (0.10.x or above) + * [Node.js](https://nodejs.org/download/) (0.10.x or above) * Command Line Tools for [Xcode](https://developer.apple.com/xcode/downloads/) (run `xcode-select --install` to install) ## Instructions From 0442aac9a3cd762f62680a49b7842df7b9d225aa Mon Sep 17 00:00:00 2001 From: Christian Oliff Date: Wed, 30 Mar 2016 17:25:59 +0900 Subject: [PATCH 026/139] https link to nodejs.org and visualstudio.com https links to nodejs.org and visualstudio.com --- docs/build-instructions/windows.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index fdd55fdde..db2fb56ee 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -3,7 +3,7 @@ ## Requirements ### General - * [Node.js](http://nodejs.org/en/download/) v4.x + * [Node.js](https://nodejs.org/en/download/) v4.x * [Python](https://www.python.org/downloads/) v2.7.x * The python.exe must be available at `%SystemDrive%\Python27\python.exe`. If it is installed elsewhere, you can create a symbolic link to the @@ -14,8 +14,8 @@ You can use either: - * [Visual Studio 2013 Update 5](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Express or better) on Windows 7, 8 or 10 - * [Visual Studio 2015](http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Community or better) with Windows 8 or 10 + * [Visual Studio 2013 Update 5](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Express or better) on Windows 7, 8 or 10 + * [Visual Studio 2015](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) (Community or better) with Windows 8 or 10 Whichever version you use, ensure that: From 2d5e6970164ccfc71535a4bf3235ceac6ceabed3 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 30 Mar 2016 15:05:57 +0200 Subject: [PATCH 027/139] Add AutoUpdateManager.prototype.onUpdateError --- spec/auto-update-manager-spec.js | 10 ++++++++++ src/application-delegate.coffee | 8 ++++++++ src/auto-update-manager.js | 7 +++++++ src/browser/auto-update-manager.coffee | 1 + 4 files changed, 26 insertions(+) diff --git a/spec/auto-update-manager-spec.js b/spec/auto-update-manager-spec.js index 6f7dbbb1a..12fe0c825 100644 --- a/spec/auto-update-manager-spec.js +++ b/spec/auto-update-manager-spec.js @@ -64,6 +64,16 @@ describe('AutoUpdateManager (renderer)', () => { }) }) + describe('::onUpdateError', () => { + it('subscribes to "update-error" event', () => { + const spy = jasmine.createSpy('spy') + autoUpdateManager.onUpdateError(spy) + electronAutoUpdater.emit('error', {}, 'an error') + waitsFor(() => spy.callCount === 1) + runs(() => expect(spy).toHaveBeenCalledWith('an error')) + }) + }) + describe('::platformSupportsUpdates', () => { let state, releaseChannel it('returns true on OS X and Windows when in stable', () => { diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index 3aff9e457..ecefc4b67 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -211,6 +211,14 @@ class ApplicationDelegate new Disposable -> ipcRenderer.removeListener('message', outerCallback) + onUpdateError: (callback) -> + outerCallback = (event, message, detail) -> + callback(detail) if message is 'update-error' + + ipcRenderer.on('message', outerCallback) + new Disposable -> + ipcRenderer.removeListener('message', outerCallback) + onApplicationMenuCommand: (callback) -> outerCallback = (event, args...) -> callback(args...) diff --git a/src/auto-update-manager.js b/src/auto-update-manager.js index 62cc03f85..07e0db4be 100644 --- a/src/auto-update-manager.js +++ b/src/auto-update-manager.js @@ -20,6 +20,9 @@ export default class AutoUpdateManager { }), applicationDelegate.onUpdateNotAvailable(() => { this.emitter.emit('update-not-available') + }), + applicationDelegate.onUpdateError((message) => { + this.emitter.emit('update-error', message) }) ) } @@ -67,6 +70,10 @@ export default class AutoUpdateManager { return this.emitter.on('update-not-available', callback) } + onUpdateError (callback) { + return this.emitter.on('update-error', callback) + } + getPlatform () { return process.platform } diff --git a/src/browser/auto-update-manager.coffee b/src/browser/auto-update-manager.coffee index c8c57cb01..391d1f0b4 100644 --- a/src/browser/auto-update-manager.coffee +++ b/src/browser/auto-update-manager.coffee @@ -33,6 +33,7 @@ class AutoUpdateManager autoUpdater.on 'error', (event, message) => @setState(ErrorState) + @emitWindowEvent('update-error', message) console.error "Error Downloading Update: #{message}" autoUpdater.setFeedURL @feedUrl From e8e2370ed102ae6994739b178744fcf37266b31d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 30 Mar 2016 15:06:26 +0200 Subject: [PATCH 028/139] Log an error message to console as well --- src/auto-update-manager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/auto-update-manager.js b/src/auto-update-manager.js index 07e0db4be..a6cea92fe 100644 --- a/src/auto-update-manager.js +++ b/src/auto-update-manager.js @@ -22,6 +22,7 @@ export default class AutoUpdateManager { this.emitter.emit('update-not-available') }), applicationDelegate.onUpdateError((message) => { + console.error(message) this.emitter.emit('update-error', message) }) ) From cea3ac64a53e959b1b0796d93bb09fe528d15b8c Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Wed, 30 Mar 2016 09:37:38 -0400 Subject: [PATCH 029/139] :arrow_up: language-less@0.29.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b314ffc1..438c7a22a 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "language-java": "0.17.0", "language-javascript": "0.110.0", "language-json": "0.18.0", - "language-less": "0.29.1", + "language-less": "0.29.2", "language-make": "0.21.0", "language-mustache": "0.13.0", "language-objective-c": "0.15.1", From 1d4ba76756e74ab371b59921a4ab1f2f26a9b2ca Mon Sep 17 00:00:00 2001 From: Christian Oliff Date: Wed, 30 Mar 2016 22:53:04 +0900 Subject: [PATCH 030/139] Updated link to NodeJS with nicer landing page Updated link to NodeJS with nicer landing page --- docs/build-instructions/os-x.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-instructions/os-x.md b/docs/build-instructions/os-x.md index 54d0c2ff8..d9e15808b 100644 --- a/docs/build-instructions/os-x.md +++ b/docs/build-instructions/os-x.md @@ -3,7 +3,7 @@ ## Requirements * OS X 10.8 or later - * [Node.js](https://nodejs.org/download/) (0.10.x or above) + * [Node.js](https://nodejs.org/en/download/) (0.10.x or above) * Command Line Tools for [Xcode](https://developer.apple.com/xcode/downloads/) (run `xcode-select --install` to install) ## Instructions From 2a6e4110944e91d5be165a8c79bf93a6934ef43f Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Mar 2016 07:42:18 -0700 Subject: [PATCH 031/139] Add troubleshooting for no Visual C++ installed --- docs/build-instructions/windows.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index db2fb56ee..29f258d59 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -67,6 +67,9 @@ If none of this works, do install Github Desktop and use its Git Shell as it mak * If you just installed Node.js, you'll need to restart your PowerShell/Command Prompt/Git Shell before the node command is available on your Path. +* `msbuild.exe failed with exit code: 1` + * Ensure you have Visual C++ support installed. Go into Add/Remove Programs, select Visual Studio and press Modify and then check the Visual C++ box. + * `script/build` outputs only the Node.js and Python versions before returning * Try moving the repository to `C:\atom`. Most likely, the path is too long. From eb1afced744d1b68afb9640ea7f34e3d1f551c83 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Wed, 30 Mar 2016 08:05:39 -0700 Subject: [PATCH 032/139] More Windows build clarifications. --- docs/build-instructions/windows.md | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index 29f258d59..0a999ee3b 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -21,8 +21,8 @@ Whichever version you use, ensure that: * The default installation folder is chosen so the build tools can find it * Visual C++ support is installed - * You set the `GYP_MSVS_VERSION` environment variable to the Visual Studio version (`2013` or `2015`), e.g. , e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell or set it in Windows advanced system settings control panel. - * The git command is in your path + * A `git` command is in your path + * If you have both VS2013 and VS2015 installed set the `GYP_MSVS_VERSION` environment variable to the Visual Studio version (`2013` or `2015`) you wish to use, e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell or set it in Windows advanced system settings control panel. ## Instructions @@ -63,7 +63,6 @@ If none of this works, do install Github Desktop and use its Git Shell as it mak ### Common Errors * `node is not recognized` - * If you just installed Node.js, you'll need to restart your PowerShell/Command Prompt/Git Shell before the node command is available on your Path. @@ -71,33 +70,25 @@ If none of this works, do install Github Desktop and use its Git Shell as it mak * Ensure you have Visual C++ support installed. Go into Add/Remove Programs, select Visual Studio and press Modify and then check the Visual C++ box. * `script/build` outputs only the Node.js and Python versions before returning - * Try moving the repository to `C:\atom`. Most likely, the path is too long. See [issue #2200](https://github.com/atom/atom/issues/2200). * `error MSB4025: The project file could not be loaded. Invalid character in the given encoding.` - * This can occur because your home directory (`%USERPROFILE%`) has non-ASCII characters in it. This is a bug in [gyp](https://code.google.com/p/gyp/) which is used to build native Node.js modules and there is no known workaround. * https://github.com/TooTallNate/node-gyp/issues/297 * https://code.google.com/p/gyp/issues/detail?id=393 -* `script/build` stops at installing runas with `Failed at the runas@x.y.z install script.` +* `'node_modules\.bin\npm' is not recognized as an internal or external command, operable program or batch file.` + * This occurs if the previous build left things in a bad state. Run `script\clean` and then `script\build` again. +* `script/build` stops at installing runas with `Failed at the runas@x.y.z install script.` * See the next item. * `error MSB8020: The build tools for Visual Studio 201? (Platform Toolset = 'v1?0') cannot be found.` - - * If you're building Atom with Visual Studio 2013 or above make sure the `GYP_MSVS_VERSION` environment variable is set, and then re-run `script/build` after a clean: - - ```bash - $env:GYP_MSVS_VERSION='2013' # '2015' if using Visual Studio 2015, and so on - script/clean - script/build - ``` - * If you are using Visual Studio 2013 or above and the build fails with some other error message this environment variable might still be required and ensure you have Visual C++ language support installed. - + * If you're building Atom with Visual Studio 2013 try setting the `GYP_MSVS_VERSION` environment variable to 2013 and then `script/clean` followed by `script/build` (re-open your command prompt or Powershell window if you set it using the GUI) + * * Other `node-gyp` errors on first build attempt, even though the right Node.js and Python versions are installed. * Do try the build command one more time, as experience shows it often works on second try in many of these cases. From c0e9fde59066d1eb9ded8f2a9e3b2745daa6b140 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:17:58 -0400 Subject: [PATCH 033/139] Re-organize to prevent recursive work queueing. --- src/git-repository-async.js | 204 +++++++++++++++++++++--------------- 1 file changed, 117 insertions(+), 87 deletions(-) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index f7c4f1b5b..29788da08 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -297,14 +297,18 @@ export default class GitRepositoryAsync { // Returns a {Promise} that resolves true if the given path is a submodule in // the repository. isSubmodule (_path) { - return this.getRepo() - .then(repo => repo.openIndex()) - .then(index => Promise.all([index, this.relativizeToWorkingDirectory(_path)])) - .then(([index, relativePath]) => { - const entry = index.getByPath(relativePath) - if (!entry) return false + return this.relativizeToWorkingDirectory(_path) + .then(relativePath => { + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => repo.openIndex()) + .then(index => { + const entry = index.getByPath(relativePath) + if (!entry) return false - return entry.mode === submoduleMode + return entry.mode === submoduleMode + }) + }) }) } @@ -478,12 +482,17 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {Boolean} that's true if the `path` // is ignored. isPathIgnored (_path) { - return Promise.all([this.getRepo(), this.getWorkingDirectory()]) - .then(([repo, wd]) => { - const relativePath = this.relativize(_path, wd) - return Git.Ignore.pathIsIgnored(repo, relativePath) + return this.getWorkingDirectory() + .then(wd => { + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => { + const relativePath = this.relativize(_path, wd) + return Git.Ignore.pathIsIgnored(repo, relativePath) + }) + .then(ignored => Boolean(ignored)) + }) }) - .then(ignored => Boolean(ignored)) } // Get the status of a directory in the repository's working directory. @@ -627,34 +636,39 @@ export default class GitRepositoryAsync { // * `added` The {Number} of added lines. // * `deleted` The {Number} of deleted lines. getDiffStats (_path) { - return this.getRepo(_path) - .then(repo => Promise.all([repo, repo.getHeadCommit()])) - .then(([repo, headCommit]) => Promise.all([repo, headCommit.getTree(), this.getWorkingDirectory(_path)])) - .then(([repo, tree, wd]) => { - const options = new Git.DiffOptions() - options.contextLines = 0 - options.flags = Git.Diff.OPTION.DISABLE_PATHSPEC_MATCH - options.pathspec = this.relativize(_path, wd) - if (process.platform === 'win32') { - // Ignore eol of line differences on windows so that files checked in - // as LF don't report every line modified when the text contains CRLF - // endings. - options.flags |= Git.Diff.OPTION.IGNORE_WHITESPACE_EOL - } - return Git.Diff.treeToWorkdir(repo, tree, options) - }) - .then(diff => this._getDiffLines(diff)) - .then(lines => { - const stats = {added: 0, deleted: 0} - for (const line of lines) { - const origin = line.origin() - if (origin === Git.Diff.LINE.ADDITION) { - stats.added++ - } else if (origin === Git.Diff.LINE.DELETION) { - stats.deleted++ - } - } - return stats + return this.getWorkingDirectory(_path) + .then(wd => { + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => Promise.all([repo, repo.getHeadCommit()])) + .then(([repo, headCommit]) => Promise.all([repo, headCommit.getTree()])) + .then(([repo, tree]) => { + const options = new Git.DiffOptions() + options.contextLines = 0 + options.flags = Git.Diff.OPTION.DISABLE_PATHSPEC_MATCH + options.pathspec = this.relativize(_path, wd) + if (process.platform === 'win32') { + // Ignore eol of line differences on windows so that files checked in + // as LF don't report every line modified when the text contains CRLF + // endings. + options.flags |= Git.Diff.OPTION.IGNORE_WHITESPACE_EOL + } + return Git.Diff.treeToWorkdir(repo, tree, options) + }) + .then(diff => this._getDiffLines(diff)) + .then(lines => { + const stats = {added: 0, deleted: 0} + for (const line of lines) { + const origin = line.origin() + if (origin === Git.Diff.LINE.ADDITION) { + stats.added++ + } else if (origin === Git.Diff.LINE.DELETION) { + stats.deleted++ + } + } + return stats + }) + }) }) } @@ -670,24 +684,29 @@ export default class GitRepositoryAsync { // * `oldLines` The {Number} of lines in the old hunk. // * `newLines` The {Number} of lines in the new hunk getLineDiffs (_path, text) { - let relativePath = null - return Promise.all([this.getRepo(_path), this.getWorkingDirectory(_path)]) - .then(([repo, wd]) => { - relativePath = this.relativize(_path, wd) - return repo.getHeadCommit() - }) - .then(commit => commit.getEntry(relativePath)) - .then(entry => entry.getBlob()) - .then(blob => { - const options = new Git.DiffOptions() - options.contextLines = 0 - if (process.platform === 'win32') { - // Ignore eol of line differences on windows so that files checked in - // as LF don't report every line modified when the text contains CRLF - // endings. - options.flags = Git.Diff.OPTION.IGNORE_WHITESPACE_EOL - } - return this._diffBlobToBuffer(blob, text, options) + return this.getWorkingDirectory(_path) + .then(wd => { + let relativePath = null + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => { + relativePath = this.relativize(_path, wd) + return repo.getHeadCommit() + }) + .then(commit => commit.getEntry(relativePath)) + .then(entry => entry.getBlob()) + .then(blob => { + const options = new Git.DiffOptions() + options.contextLines = 0 + if (process.platform === 'win32') { + // Ignore eol of line differences on windows so that files checked in + // as LF don't report every line modified when the text contains CRLF + // endings. + options.flags = Git.Diff.OPTION.IGNORE_WHITESPACE_EOL + } + return this._diffBlobToBuffer(blob, text, options) + }) + }) }) } @@ -709,14 +728,19 @@ export default class GitRepositoryAsync { // Returns a {Promise} that resolves or rejects depending on whether the // method was successful. checkoutHead (_path) { - return Promise.all([this.getRepo(_path), this.getWorkingDirectory(_path)]) - .then(([repo, wd]) => { - const checkoutOptions = new Git.CheckoutOptions() - checkoutOptions.paths = [this.relativize(_path, wd)] - checkoutOptions.checkoutStrategy = Git.Checkout.STRATEGY.FORCE | Git.Checkout.STRATEGY.DISABLE_PATHSPEC_MATCH - return Git.Checkout.head(repo, checkoutOptions) + return this.getWorkingDirectory(_path) + .then(wd => { + return this.workQueue.enqueue(() => { + return this.getRepo(_path) + .then(repo => { + const checkoutOptions = new Git.CheckoutOptions() + checkoutOptions.paths = [this.relativize(_path, wd)] + checkoutOptions.checkoutStrategy = Git.Checkout.STRATEGY.FORCE | Git.Checkout.STRATEGY.DISABLE_PATHSPEC_MATCH + return Git.Checkout.head(repo, checkoutOptions) + }) + .then(() => this.refreshStatusForPath(_path)) + }) }) - .then(() => this.refreshStatusForPath(_path)) } // Public: Checks out a branch in your repository. @@ -727,17 +751,19 @@ export default class GitRepositoryAsync { // // Returns a {Promise} that resolves if the method was successful. checkoutReference (reference, create) { - return this.getRepo() - .then(repo => repo.checkoutBranch(reference)) - .catch(error => { - if (create) { - return this._createBranch(reference) - .then(_ => this.checkoutReference(reference, false)) - } else { - throw error - } - }) - .then(_ => null) + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => repo.checkoutBranch(reference)) + }) + .catch(error => { + if (create) { + return this._createBranch(reference) + .then(_ => this.checkoutReference(reference, false)) + } else { + throw error + } + }) + .then(_ => null) } // Private @@ -763,9 +789,11 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {NodeGit.Ref} reference to the // created branch. _createBranch (name) { - return this.getRepo() - .then(repo => Promise.all([repo, repo.getHeadCommit()])) - .then(([repo, commit]) => repo.createBranch(name, commit)) + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => Promise.all([repo, repo.getHeadCommit()])) + .then(([repo, commit]) => repo.createBranch(name, commit)) + }) } // Get all the hunks in the diff. @@ -822,14 +850,16 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {boolean} indicating whether the // branch name changed. _refreshBranch () { - return this.getRepo() - .then(repo => repo.getCurrentBranch()) - .then(ref => ref.name()) - .then(branchName => { - const changed = branchName !== this.branch - this.branch = branchName - return changed - }) + return this.workQueue.enqueue(() => { + return this.getRepo() + .then(repo => repo.getCurrentBranch()) + .then(ref => ref.name()) + .then(branchName => { + const changed = branchName !== this.branch + this.branch = branchName + return changed + }) + }) } // Refresh the cached ahead/behind count with the given branch. From 6ba2f6d4b8da38b60399fd4a7d14df109dd3e41a Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:23:54 -0400 Subject: [PATCH 034/139] Pull refresh outside the work function. Otherwise we deadlock lolololol --- src/git-repository-async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index 29788da08..86db4a574 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -738,9 +738,9 @@ export default class GitRepositoryAsync { checkoutOptions.checkoutStrategy = Git.Checkout.STRATEGY.FORCE | Git.Checkout.STRATEGY.DISABLE_PATHSPEC_MATCH return Git.Checkout.head(repo, checkoutOptions) }) - .then(() => this.refreshStatusForPath(_path)) }) }) + .then(() => this.refreshStatusForPath(_path)) } // Public: Checks out a branch in your repository. From f028c779b16aa9a5986502f35d7e1941ca0abd88 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:44:24 -0400 Subject: [PATCH 035/139] Treat it more like a pool. --- spec/git-work-queue-spec.js | 2 +- src/git-work-queue.js | 32 +++++++++++++------------------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/spec/git-work-queue-spec.js b/spec/git-work-queue-spec.js index 9d8e8cea0..cd38ddd72 100644 --- a/spec/git-work-queue-spec.js +++ b/spec/git-work-queue-spec.js @@ -8,7 +8,7 @@ fdescribe('GitWorkQueue', () => { let queue beforeEach(() => { - queue = new GitWorkQueue() + queue = new GitWorkQueue([{}]) }) describe('.enqueue', () => { diff --git a/src/git-work-queue.js b/src/git-work-queue.js index 6e8c2af67..d73c7153a 100644 --- a/src/git-work-queue.js +++ b/src/git-work-queue.js @@ -2,9 +2,10 @@ // A queue used to manage git work. export default class GitWorkQueue { - constructor () { + constructor (pool) { + this.pool = pool + this.queue = [] - this.working = false } // Enqueue the given function. The function must return a {Promise} when @@ -19,41 +20,34 @@ export default class GitWorkQueue { this.queue.push(this.wrapFunction(fn, resolve, reject)) - if (this.shouldStartNext()) { - this.startNext() - } + this.startNextIfAble() return wrapperPromise } wrapFunction (fn, resolve, reject) { return () => { - const promise = fn() + const repo = this.pool.shift() + const promise = fn(repo) promise .then(result => { resolve(result) - this.taskDidComplete() + this.taskDidComplete(repo) }, error => { reject(error) - this.taskDidComplete() + this.taskDidComplete(repo) }) } } - taskDidComplete () { - this.working = false + taskDidComplete (repo) { + this.pool.push(repo) - if (this.shouldStartNext()) { - this.startNext() - } + this.startNextIfAble() } - shouldStartNext () { - return !this.working && this.queue.length > 0 - } - - startNext () { - this.working = true + startNextIfAble () { + if (!this.pool.length || !this.queue.length) return const fn = this.queue.shift() fn() From e701fcc2926d261e102279c3cdf0589d039ece39 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:47:05 -0400 Subject: [PATCH 036/139] Rename work queue to resource pool. --- ...rk-queue-spec.js => resource-pool-spec.js} | 6 +-- src/git-repository-async.js | 37 ++++++++++--------- src/{git-work-queue.js => resource-pool.js} | 4 +- 3 files changed, 24 insertions(+), 23 deletions(-) rename spec/{git-work-queue-spec.js => resource-pool-spec.js} (92%) rename src/{git-work-queue.js => resource-pool.js} (93%) diff --git a/spec/git-work-queue-spec.js b/spec/resource-pool-spec.js similarity index 92% rename from spec/git-work-queue-spec.js rename to spec/resource-pool-spec.js index cd38ddd72..3a5d79bcd 100644 --- a/spec/git-work-queue-spec.js +++ b/spec/resource-pool-spec.js @@ -1,14 +1,14 @@ /** @babel */ -import GitWorkQueue from '../src/git-work-queue' +import ResourcePool from '../src/resource-pool' import {it} from './async-spec-helpers' -fdescribe('GitWorkQueue', () => { +fdescribe('ResourcePool', () => { let queue beforeEach(() => { - queue = new GitWorkQueue([{}]) + queue = new ResourcePool([{}]) }) describe('.enqueue', () => { diff --git a/src/git-repository-async.js b/src/git-repository-async.js index 86db4a574..f700ab049 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -3,7 +3,7 @@ import fs from 'fs-plus' import path from 'path' import Git from 'nodegit' -import GitWorkQueue from './git-work-queue' +import ResourcePool from './resource-pool' import {Emitter, CompositeDisposable, Disposable} from 'event-kit' const modifiedStatusFlags = Git.Status.STATUS.WT_MODIFIED | Git.Status.STATUS.INDEX_MODIFIED | Git.Status.STATUS.WT_DELETED | Git.Status.STATUS.INDEX_DELETED | Git.Status.STATUS.WT_TYPECHANGE | Git.Status.STATUS.INDEX_TYPECHANGE @@ -42,7 +42,6 @@ export default class GitRepositoryAsync { // We'll serialize our access manually. Git.disableThreadSafety() - this.workQueue = new GitWorkQueue() this.emitter = new Emitter() this.subscriptions = new CompositeDisposable() this.pathStatusCache = {} @@ -53,6 +52,8 @@ export default class GitRepositoryAsync { this._openExactPath = options.openExactPath || false this.repoPromise = this.openRepository() + this.repoPool = new ResourcePool([this.repoPromise]) + this.isCaseInsensitive = fs.isCaseInsensitive() this.upstream = {} this.submodules = {} @@ -264,7 +265,7 @@ export default class GitRepositoryAsync { // Public: Returns a {Promise} which resolves to whether the given branch // exists. hasBranch (branch) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => repo.getBranch(branch)) .then(branch => branch != null) @@ -283,7 +284,7 @@ export default class GitRepositoryAsync { // // Returns a {Promise} which resolves to a {String}. getShortHead (_path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => repo.getCurrentBranch()) .then(branch => branch.shorthand()) @@ -299,7 +300,7 @@ export default class GitRepositoryAsync { isSubmodule (_path) { return this.relativizeToWorkingDirectory(_path) .then(relativePath => { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => repo.openIndex()) .then(index => { @@ -323,7 +324,7 @@ export default class GitRepositoryAsync { // * `ahead` The {Number} of commits ahead. // * `behind` The {Number} of commits behind. getAheadBehindCount (reference, _path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => Promise.all([repo, repo.getBranch(reference)])) .then(([repo, local]) => { @@ -366,7 +367,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to the {String} git configuration value // specified by the key. getConfigValue (key, _path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => repo.configSnapshot()) .then(config => config.getStringBuf(key)) @@ -394,7 +395,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {String} branch name such as // `refs/remotes/origin/master`. getUpstreamBranch (_path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => repo.getCurrentBranch()) .then(branch => Git.Branch.upstream(branch)) @@ -411,7 +412,7 @@ export default class GitRepositoryAsync { // * `remotes` An {Array} of remote reference names. // * `tags` An {Array} of tag reference names. getReferences (_path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => repo.getReferences(Git.Reference.TYPE.LISTALL)) .then(refs => { @@ -441,7 +442,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to the current {String} SHA for the // given reference. getReferenceTarget (reference, _path) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => Git.Reference.nameToId(repo, reference)) .then(oid => oid.tostrS()) @@ -484,7 +485,7 @@ export default class GitRepositoryAsync { isPathIgnored (_path) { return this.getWorkingDirectory() .then(wd => { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => { const relativePath = this.relativize(_path, wd) @@ -638,7 +639,7 @@ export default class GitRepositoryAsync { getDiffStats (_path) { return this.getWorkingDirectory(_path) .then(wd => { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => Promise.all([repo, repo.getHeadCommit()])) .then(([repo, headCommit]) => Promise.all([repo, headCommit.getTree()])) @@ -687,7 +688,7 @@ export default class GitRepositoryAsync { return this.getWorkingDirectory(_path) .then(wd => { let relativePath = null - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => { relativePath = this.relativize(_path, wd) @@ -730,7 +731,7 @@ export default class GitRepositoryAsync { checkoutHead (_path) { return this.getWorkingDirectory(_path) .then(wd => { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo(_path) .then(repo => { const checkoutOptions = new Git.CheckoutOptions() @@ -751,7 +752,7 @@ export default class GitRepositoryAsync { // // Returns a {Promise} that resolves if the method was successful. checkoutReference (reference, create) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => repo.checkoutBranch(reference)) }) @@ -789,7 +790,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {NodeGit.Ref} reference to the // created branch. _createBranch (name) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => Promise.all([repo, repo.getHeadCommit()])) .then(([repo, commit]) => repo.createBranch(name, commit)) @@ -850,7 +851,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to a {boolean} indicating whether the // branch name changed. _refreshBranch () { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => repo.getCurrentBranch()) .then(ref => ref.name()) @@ -1126,7 +1127,7 @@ export default class GitRepositoryAsync { // Returns a {Promise} which resolves to an {Array} of {NodeGit.StatusFile} // statuses for the paths. _getStatus (paths) { - return this.workQueue.enqueue(() => { + return this.repoPool.enqueue(() => { return this.getRepo() .then(repo => { const opts = { diff --git a/src/git-work-queue.js b/src/resource-pool.js similarity index 93% rename from src/git-work-queue.js rename to src/resource-pool.js index d73c7153a..2a40b4304 100644 --- a/src/git-work-queue.js +++ b/src/resource-pool.js @@ -1,7 +1,7 @@ /** @babel */ -// A queue used to manage git work. -export default class GitWorkQueue { +// Manages a pool of some resource. +export default class ResourcePool { constructor (pool) { this.pool = pool From dea119ef3ed1934a4c8055237d74d38fc99aa583 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:50:05 -0400 Subject: [PATCH 037/139] Less repo-centric naming. --- src/resource-pool.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/resource-pool.js b/src/resource-pool.js index 2a40b4304..ae7cb71d0 100644 --- a/src/resource-pool.js +++ b/src/resource-pool.js @@ -8,8 +8,8 @@ export default class ResourcePool { this.queue = [] } - // Enqueue the given function. The function must return a {Promise} when - // called. + // Enqueue the given function. The function will be given an object from the + // pool. The function must return a {Promise}. enqueue (fn) { let resolve = null let reject = null @@ -20,37 +20,37 @@ export default class ResourcePool { this.queue.push(this.wrapFunction(fn, resolve, reject)) - this.startNextIfAble() + this.dequeueIfAble() return wrapperPromise } wrapFunction (fn, resolve, reject) { - return () => { - const repo = this.pool.shift() - const promise = fn(repo) + return (resource) => { + const promise = fn(resource) promise .then(result => { resolve(result) - this.taskDidComplete(repo) + this.taskDidComplete(resource) }, error => { reject(error) - this.taskDidComplete(repo) + this.taskDidComplete(resource) }) } } - taskDidComplete (repo) { - this.pool.push(repo) + taskDidComplete (resource) { + this.pool.push(resource) - this.startNextIfAble() + this.dequeueIfAble() } - startNextIfAble () { + dequeueIfAble () { if (!this.pool.length || !this.queue.length) return const fn = this.queue.shift() - fn() + const resource = this.pool.shift() + fn(resource) } getQueueDepth () { return this.queue.length } From f59a86b2b9360a5219685335f49712e7767caaf3 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:51:49 -0400 Subject: [PATCH 038/139] Note that we're not using this yet. --- src/git-repository-async.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index f700ab049..e45c1e47e 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -52,6 +52,9 @@ export default class GitRepositoryAsync { this._openExactPath = options.openExactPath || false this.repoPromise = this.openRepository() + // NB: We don't currently _use_ the pooled object. But by giving it one + // thing, we're really just serializing all the work. Down the road, we + // could open multiple connections to the repository. this.repoPool = new ResourcePool([this.repoPromise]) this.isCaseInsensitive = fs.isCaseInsensitive() From f19d3a2bce88d03ebf3fe7604b57a25a815f8d8e Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 11:59:35 -0400 Subject: [PATCH 039/139] Unfocus. --- spec/resource-pool-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/resource-pool-spec.js b/spec/resource-pool-spec.js index 3a5d79bcd..27893360a 100644 --- a/spec/resource-pool-spec.js +++ b/spec/resource-pool-spec.js @@ -4,7 +4,7 @@ import ResourcePool from '../src/resource-pool' import {it} from './async-spec-helpers' -fdescribe('ResourcePool', () => { +describe('ResourcePool', () => { let queue beforeEach(() => { From ceaeef86755b50cf2e04ecc0ae1441d1d7c9c19e Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Wed, 30 Mar 2016 09:34:20 -0700 Subject: [PATCH 040/139] Add request for OS and version --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 8144a4b62..e142ec930 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -25,4 +25,4 @@ For more information on how to write a good [bug report](https://github.com/atom ### Versions -You can get this information from executing `atom --version` and `apm --version` at the command line. +You can get this information from executing `atom --version` and `apm --version` at the command line. Also, please include the OS and what version of the OS you're running. From 3068631d19b500162e3eb633cc36da5c20321597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Machist=C3=A9=20N=2E=20Quintana?= Date: Wed, 30 Mar 2016 12:48:11 -0700 Subject: [PATCH 041/139] Don't open a transaction if there's a selection at the start / end of line --- src/text-editor.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index b6be33071..58ecf4712 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1084,8 +1084,8 @@ class TextEditor extends Model translationDelta = [0, -1] translatedRanges = [] - @transact => - if noSelectionAtStartOfLine + if noSelectionAtStartOfLine + @transact => for selection in selections charToLeftOfSelection = new Range(selection.start.translate(translationDelta), selection.start) charTextToLeftOfSelection = @buffer.getTextInRange(charToLeftOfSelection) @@ -1106,8 +1106,8 @@ class TextEditor extends Model translationDelta = [0, 1] translatedRanges = [] - @transact => - if noSelectionAtEndOfLine + if noSelectionAtEndOfLine + @transact => for selection in selections charToRightOfSelection = new Range(selection.end, selection.end.translate(translationDelta)) charTextToRightOfSelection = @buffer.getTextInRange(charToRightOfSelection) From b3a2680fabc758f7c7c87f361a6c40ac2fc8fb08 Mon Sep 17 00:00:00 2001 From: joshaber Date: Wed, 30 Mar 2016 16:33:25 -0400 Subject: [PATCH 042/139] :arrow_up: nodegit@0.12.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 438c7a22a..bdaf6a834 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "less-cache": "0.23", "line-top-index": "0.2.0", "marked": "^0.3.4", - "nodegit": "0.12.0", + "nodegit": "0.12.1", "normalize-package-data": "^2.0.0", "nslog": "^3", "oniguruma": "^5", From 81d3a23c95752ac8d22c2d8033d6ace540c9b61f Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 30 Mar 2016 16:13:21 -0600 Subject: [PATCH 043/139] :arrow_up: text-buffer --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 438c7a22a..391ab1b3c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "service-hub": "^0.7.0", "source-map-support": "^0.3.2", "temp": "0.8.1", - "text-buffer": "8.4.3", + "text-buffer": "8.4.6", "typescript-simple": "1.0.0", "underscore-plus": "^1.6.6", "yargs": "^3.23.0" From 4dd6f4acd7e12fe4ad5c6ee3f229af8f4ca3d027 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 30 Mar 2016 16:26:56 -0600 Subject: [PATCH 044/139] :arrow_up: atom-keymap --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 391ab1b3c..4ca6be99e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "electronVersion": "0.36.8", "dependencies": { "async": "0.2.6", - "atom-keymap": "^6.3.1", + "atom-keymap": "6.3.2", "babel-core": "^5.8.21", "bootstrap": "^3.3.4", "cached-run-in-this-context": "0.4.1", From 4d4ee6bf3b6fe3467dc67d7427f156d99ef72ffd Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 10:13:41 +0200 Subject: [PATCH 045/139] Add `applicationDelegate.getAutoUpdateManagerErrorMessage()` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sometimes, the error event gets emitted before the renderer process has the chance to subscribe. Therefore, we expose an `autoUpdateManager.getErrorMessage()` in the browser process, so that we don’t lose that information. --- spec/auto-update-manager-spec.js | 1 - src/application-delegate.coffee | 3 +++ src/auto-update-manager.js | 9 ++++++--- src/browser/atom-application.coffee | 3 +++ src/browser/auto-update-manager.coffee | 10 +++++++--- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/spec/auto-update-manager-spec.js b/spec/auto-update-manager-spec.js index 12fe0c825..581e5e7c3 100644 --- a/spec/auto-update-manager-spec.js +++ b/spec/auto-update-manager-spec.js @@ -70,7 +70,6 @@ describe('AutoUpdateManager (renderer)', () => { autoUpdateManager.onUpdateError(spy) electronAutoUpdater.emit('error', {}, 'an error') waitsFor(() => spy.callCount === 1) - runs(() => expect(spy).toHaveBeenCalledWith('an error')) }) }) diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index ecefc4b67..8bfae13fc 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -252,3 +252,6 @@ class ApplicationDelegate getAutoUpdateManagerState: -> ipcRenderer.sendSync('get-auto-update-manager-state') + + getAutoUpdateManagerErrorMessage: -> + ipcRenderer.sendSync('get-auto-update-manager-error') diff --git a/src/auto-update-manager.js b/src/auto-update-manager.js index a6cea92fe..fb6325a26 100644 --- a/src/auto-update-manager.js +++ b/src/auto-update-manager.js @@ -21,9 +21,8 @@ export default class AutoUpdateManager { applicationDelegate.onUpdateNotAvailable(() => { this.emitter.emit('update-not-available') }), - applicationDelegate.onUpdateError((message) => { - console.error(message) - this.emitter.emit('update-error', message) + applicationDelegate.onUpdateError(() => { + this.emitter.emit('update-error') }) ) } @@ -45,6 +44,10 @@ export default class AutoUpdateManager { return this.applicationDelegate.getAutoUpdateManagerState() } + getErrorMessage () { + return this.applicationDelegate.getAutoUpdateManagerErrorMessage() + } + platformSupportsUpdates () { return atom.getReleaseChannel() !== 'dev' && this.getState() !== 'unsupported' } diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 4767c9065..e58b31e10 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -311,6 +311,9 @@ class AtomApplication ipcMain.on 'get-auto-update-manager-state', (event) => event.returnValue = @autoUpdateManager.getState() + ipcMain.on 'get-auto-update-manager-error', (event) => + event.returnValue = @autoUpdateManager.getErrorMessage() + ipcMain.on 'execute-javascript-in-dev-tools', (event, code) -> event.sender.devToolsWebContents?.executeJavaScript(code) diff --git a/src/browser/auto-update-manager.coffee b/src/browser/auto-update-manager.coffee index 391d1f0b4..06a71698d 100644 --- a/src/browser/auto-update-manager.coffee +++ b/src/browser/auto-update-manager.coffee @@ -32,8 +32,8 @@ class AutoUpdateManager {autoUpdater} = require 'electron' autoUpdater.on 'error', (event, message) => - @setState(ErrorState) - @emitWindowEvent('update-error', message) + @setState(ErrorState, message) + @emitWindowEvent('update-error') console.error "Error Downloading Update: #{message}" autoUpdater.setFeedURL @feedUrl @@ -83,14 +83,18 @@ class AutoUpdateManager atomWindow.sendMessage(eventName, payload) return - setState: (state) -> + setState: (state, errorMessage) -> return if @state is state @state = state + @errorMessage = errorMessage @emit 'state-changed', @state getState: -> @state + getErrorMessage: -> + @errorMessage + scheduleUpdateCheck: -> # Only schedule update check periodically if running in release version and # and there is no existing scheduled update check. From cd41b1a0cad765506974ffec8b453e26984e094b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 10:40:39 +0200 Subject: [PATCH 046/139] Improve assertion This allows us to test that the configuration can be changed outside of Atom. --- spec/integration/startup-spec.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/integration/startup-spec.coffee b/spec/integration/startup-spec.coffee index 136ca9676..7c2503e69 100644 --- a/spec/integration/startup-spec.coffee +++ b/spec/integration/startup-spec.coffee @@ -269,11 +269,6 @@ describe "Starting Atom", -> ].sort() it "doesn't reopen any previously opened windows if restorePreviousWindowsOnStart is disabled", -> - configPath = path.join(atomHome, 'config.cson') - config = CSON.readFileSync(configPath) - config['*'].core = {restorePreviousWindowsOnStart: false} - CSON.writeFileSync(configPath, config) - runAtom [tempDirPath], {ATOM_HOME: atomHome}, (client) -> client .waitForExist("atom-workspace") @@ -282,6 +277,11 @@ describe "Starting Atom", -> , 5000) .waitForExist("atom-workspace") + configPath = path.join(atomHome, 'config.cson') + config = CSON.readFileSync(configPath) + config['*'].core = {restorePreviousWindowsOnStart: false} + CSON.writeFileSync(configPath, config) + runAtom [], {ATOM_HOME: atomHome}, (client) -> windowProjectPaths = [] From 296c016bf866943589954c92d58132195c55a51a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 10:41:23 +0200 Subject: [PATCH 047/139] :racehorse: Don't load state when restorePreviousState is false --- src/browser/atom-application.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index eea2fdc57..14713ee18 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -516,7 +516,7 @@ class AtomApplication loadState: (options) -> restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true - if (states = @storageFolder.load('application.json'))?.length > 0 and restorePreviousState + if restorePreviousState and (states = @storageFolder.load('application.json'))?.length > 0 for state in states @openWithOptions(_.extend(options, { initialPaths: state.initialPaths From d568c76b0b5ab7c246fbc0c5640988b7b64e1a41 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 11:44:32 +0200 Subject: [PATCH 048/139] :apple: Fix emoji rendering --- src/workspace-element.coffee | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/workspace-element.coffee b/src/workspace-element.coffee index 8f6dca48a..02ff2e5b4 100644 --- a/src/workspace-element.coffee +++ b/src/workspace-element.coffee @@ -44,10 +44,15 @@ class WorkspaceElement extends HTMLElement @subscriptions.add @config.onDidChange 'editor.lineHeight', @updateGlobalTextEditorStyleSheet.bind(this) updateGlobalTextEditorStyleSheet: -> + fontFamily = @config.get('editor.fontFamily') + # TODO: There is a bug in how some emojis (e.g. ❤️) are rendered on OSX. + # This workaround should be removed once we update to Chromium 51, where the + # problem was fixed. + fontFamily += ', "Apple Color Emoji"' if process.platform is 'darwin' styleSheetSource = """ atom-text-editor { font-size: #{@config.get('editor.fontSize')}px; - font-family: #{@config.get('editor.fontFamily')}; + font-family: #{fontFamily}; line-height: #{@config.get('editor.lineHeight')}; } """ From dea5c5560e7a98977cf1d265f55686c1efc1d04b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 12:03:15 +0200 Subject: [PATCH 049/139] :arrow_up: bracket-matcher --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b62c8add0..050f6a139 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "autosave": "0.23.1", "background-tips": "0.26.0", "bookmarks": "0.38.2", - "bracket-matcher": "0.81.0", + "bracket-matcher": "0.82.0", "command-palette": "0.38.0", "deprecation-cop": "0.54.1", "dev-live-reload": "0.47.0", From d89d34f4ef5d819e517548bda70d8486531dc3be Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 13:02:52 +0200 Subject: [PATCH 050/139] :green_heart: --- spec/workspace-element-spec.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/workspace-element-spec.coffee b/spec/workspace-element-spec.coffee index cf773b4ef..186a33258 100644 --- a/spec/workspace-element-spec.coffee +++ b/spec/workspace-element-spec.coffee @@ -47,9 +47,9 @@ describe "WorkspaceElement", -> it "updates the font-family based on the 'editor.fontFamily' config value", -> initialCharWidth = editor.getDefaultCharWidth() - expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + ", 'Apple Color Emoji'" atom.config.set('editor.fontFamily', 'sans-serif') - expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + ", 'Apple Color Emoji'" expect(editor.getDefaultCharWidth()).not.toBe initialCharWidth it "updates the line-height based on the 'editor.lineHeight' config value", -> From 22acdb76f6a4b7f5640d90873094fca2b3911dfa Mon Sep 17 00:00:00 2001 From: Thomas Johansen Date: Thu, 31 Mar 2016 13:24:14 +0200 Subject: [PATCH 051/139] :bug: Fix potential null reference callback invokation Fixes #11328 --- script/utils/child-process-wrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/utils/child-process-wrapper.js b/script/utils/child-process-wrapper.js index 2afc57934..55e6733d1 100644 --- a/script/utils/child-process-wrapper.js +++ b/script/utils/child-process-wrapper.js @@ -17,7 +17,7 @@ exports.safeExec = function(command, options, callback) { var child = childProcess.exec(command, options, function(error, stdout, stderr) { if (error) process.exit(error.code || 1); - else + else if (callback) callback(null); }); child.stderr.pipe(process.stderr); From 47bbd8b4bba38ba8a51eda7ddc8d66b5c442aafc Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 17:45:32 +0200 Subject: [PATCH 052/139] Ensure we test for emojis only on Darwin --- spec/workspace-element-spec.coffee | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/spec/workspace-element-spec.coffee b/spec/workspace-element-spec.coffee index 186a33258..efb1d1b26 100644 --- a/spec/workspace-element-spec.coffee +++ b/spec/workspace-element-spec.coffee @@ -47,9 +47,14 @@ describe "WorkspaceElement", -> it "updates the font-family based on the 'editor.fontFamily' config value", -> initialCharWidth = editor.getDefaultCharWidth() - expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + ", 'Apple Color Emoji'" + fontFamily = atom.config.get('editor.fontFamily') + fontFamily += ", 'Apple Color Emoji'" if process.platform is 'darwin' + expect(getComputedStyle(editorElement).fontFamily).toBe fontFamily + atom.config.set('editor.fontFamily', 'sans-serif') - expect(getComputedStyle(editorElement).fontFamily).toBe atom.config.get('editor.fontFamily') + ", 'Apple Color Emoji'" + fontFamily = atom.config.get('editor.fontFamily') + fontFamily += ", 'Apple Color Emoji'" if process.platform is 'darwin' + expect(getComputedStyle(editorElement).fontFamily).toBe fontFamily expect(editor.getDefaultCharWidth()).not.toBe initialCharWidth it "updates the line-height based on the 'editor.lineHeight' config value", -> From 34e2bf13cec7969ecbc705adeacdf901ff0e0c5e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 31 Mar 2016 16:52:36 -0600 Subject: [PATCH 053/139] Add native profiling instructions --- docs/native-profiling.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/native-profiling.md diff --git a/docs/native-profiling.md b/docs/native-profiling.md new file mode 100644 index 000000000..f9f9160a5 --- /dev/null +++ b/docs/native-profiling.md @@ -0,0 +1,18 @@ +# Profiling the Atom Render Process on OS X with Instruments + +![Instruments](https://cloud.githubusercontent.com/assets/1789/14193295/d503db7a-f760-11e5-88bf-fe417c0cd913.png) + +* Determine the version of Electron for your version of Atom. + * Open the dev tools with `alt-cmd-i` + * Evaluate `process.versions.electron` in the console. +* Based on this version, download the appropriate Electron symbols from the [releases](https://github.com/atom/electron/releases) page. + * The file name should look like `electron-v0.X.Y-darwin-x64-dsym.zip`. + * Decompress these symbols in your `~/Downloads` directory. +* Now create a time profile in Instruments. + * Open `Instruments.app`. + * Select `Time Profiler` + * In Atom, determine the pid to attach to by evaluating `process.pid` in the dev tools console. + * Attach to this pid via the menu at the upper left corner of the Instruments profiler. + * Click record, do your thing. + * Click stop. + * The symbols should have been automatically located by Instruments (via Spotlight or something?), giving you a readable profile. From 6f1c1fd0e0242b096f4781698066788b26af2fa4 Mon Sep 17 00:00:00 2001 From: simurai Date: Fri, 1 Apr 2016 11:17:57 +0900 Subject: [PATCH 054/139] :arrow_up: one-dark/light-ui@v1.3.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 050f6a139..33faff84f 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ "atom-light-ui": "0.43.0", "base16-tomorrow-dark-theme": "1.1.0", "base16-tomorrow-light-theme": "1.1.1", - "one-dark-ui": "1.3.0", - "one-light-ui": "1.3.0", + "one-dark-ui": "1.3.1", + "one-light-ui": "1.3.1", "one-dark-syntax": "1.2.0", "one-light-syntax": "1.2.0", "solarized-dark-syntax": "1.0.1", From bb11c4e5bd7a98f05215e853b2142af6252ab99e Mon Sep 17 00:00:00 2001 From: Christian Oliff Date: Fri, 1 Apr 2016 15:20:00 +0900 Subject: [PATCH 055/139] HTTPS a couple of links HTTPS a couple of links --- docs/build-instructions/linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index 1d746bcd6..c6a9e74eb 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -6,8 +6,8 @@ Ubuntu LTS 12.04 64-bit is the recommended platform. * OS with 64-bit or 32-bit architecture * C++ toolchain - * [Git](http://git-scm.com/) - * [Node.js](http://nodejs.org/download/) (0.10.x or above) + * [Git](https://git-scm.com/) + * [Node.js](https://nodejs.org/en/download/) (0.10.x or above) * [npm](https://www.npmjs.com/) v1.4.x or above (automatically bundled with Node.js) * `npm -v` to check the version. * `npm config set python /usr/bin/python2 -g` to ensure that gyp uses python2. From fa469121d8a9e4d45bccb0f2b4ddf9316364ce8a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 1 Apr 2016 09:06:32 +0200 Subject: [PATCH 056/139] Ensure getErrorMessage() works properly --- spec/auto-update-manager-spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/auto-update-manager-spec.js b/spec/auto-update-manager-spec.js index 581e5e7c3..91b52192c 100644 --- a/spec/auto-update-manager-spec.js +++ b/spec/auto-update-manager-spec.js @@ -68,8 +68,9 @@ describe('AutoUpdateManager (renderer)', () => { it('subscribes to "update-error" event', () => { const spy = jasmine.createSpy('spy') autoUpdateManager.onUpdateError(spy) - electronAutoUpdater.emit('error', {}, 'an error') + electronAutoUpdater.emit('error', {}, 'an error message') waitsFor(() => spy.callCount === 1) + runs(() => expect(autoUpdateManager.getErrorMessage()).toBe('an error message')) }) }) From 2b05995b1cd4b07ac76f3ba3f838144ff6fb917e Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 1 Apr 2016 09:12:01 +0200 Subject: [PATCH 057/139] :arrow_up: about --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33faff84f..1d3bf647e 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "one-light-syntax": "1.2.0", "solarized-dark-syntax": "1.0.1", "solarized-light-syntax": "1.0.1", - "about": "1.4.2", + "about": "1.5.0", "archive-view": "0.61.1", "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.11.0", From 9b4e45133379ea74e9330aa097c71dbdd402e26c Mon Sep 17 00:00:00 2001 From: simurai Date: Fri, 1 Apr 2016 17:27:14 +0900 Subject: [PATCH 058/139] :arrow_up: solarized-dark/light-syntax@v1.0.2 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1d3bf647e..8f893203c 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,8 @@ "one-light-ui": "1.3.1", "one-dark-syntax": "1.2.0", "one-light-syntax": "1.2.0", - "solarized-dark-syntax": "1.0.1", - "solarized-light-syntax": "1.0.1", + "solarized-dark-syntax": "1.0.2", + "solarized-light-syntax": "1.0.2", "about": "1.5.0", "archive-view": "0.61.1", "autocomplete-atom-api": "0.10.0", From 158d0193716f9c157cfaa7ec72b84146dec1a181 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 1 Apr 2016 10:56:20 +0200 Subject: [PATCH 059/139] Use application-level events to control updates in the browser process --- src/application-delegate.coffee | 4 ++-- src/browser/atom-application.coffee | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index 8bfae13fc..8ac6ceb5e 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -245,10 +245,10 @@ class ApplicationDelegate webFrame.setZoomLevelLimits(1, 1) checkForUpdate: -> - ipcRenderer.send('check-for-update') + ipcRenderer.send('command', 'application:check-for-update') restartAndInstallUpdate: -> - ipcRenderer.send('install-update') + ipcRenderer.send('command', 'application:install-update') getAutoUpdateManagerState: -> ipcRenderer.sendSync('get-auto-update-manager-state') diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 772afc0e0..a579fb762 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -310,9 +310,6 @@ class AtomApplication ipcMain.on 'execute-javascript-in-dev-tools', (event, code) -> event.sender.devToolsWebContents?.executeJavaScript(code) - ipcMain.on 'check-for-update', => - @autoUpdateManager.check() - ipcMain.on 'get-auto-update-manager-state', (event) => event.returnValue = @autoUpdateManager.getState() From 793f5f96924c356f5d00fd2ca26f0eee6d36bb81 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 1 Apr 2016 15:33:48 +0200 Subject: [PATCH 060/139] Disable zoom every time a display gets added or removed --- src/application-delegate.coffee | 17 ++++++++++++++--- src/atom-environment.coffee | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/application-delegate.coffee b/src/application-delegate.coffee index 8ac6ceb5e..aee02ee8e 100644 --- a/src/application-delegate.coffee +++ b/src/application-delegate.coffee @@ -1,5 +1,5 @@ _ = require 'underscore-plus' -{ipcRenderer, remote, shell, webFrame} = require 'electron' +{screen, ipcRenderer, remote, shell, webFrame} = require 'electron' ipcHelpers = require './ipc-helpers' {Disposable} = require 'event-kit' {getWindowLoadSettings, setWindowLoadSettings} = require './window-load-settings-helpers' @@ -241,8 +241,19 @@ class ApplicationDelegate openExternal: (url) -> shell.openExternal(url) - disablePinchToZoom: -> - webFrame.setZoomLevelLimits(1, 1) + disableZoom: -> + outerCallback = -> + webFrame.setZoomLevelLimits(1, 1) + + outerCallback() + # Set the limits every time a display is added or removed, otherwise the + # configuration gets reset to the default, which allows zooming the + # webframe. + screen.on('display-added', outerCallback) + screen.on('display-removed', outerCallback) + new Disposable -> + screen.removeListener('display-added', outerCallback) + screen.removeListener('display-removed', outerCallback) checkForUpdate: -> ipcRenderer.send('command', 'application:check-for-update') diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 6ef46dc2a..ffff564ba 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -208,7 +208,7 @@ class AtomEnvironment extends Model @stylesElement = @styles.buildStylesElement() @document.head.appendChild(@stylesElement) - @applicationDelegate.disablePinchToZoom() + @disposables.add(@applicationDelegate.disableZoom()) @keymaps.subscribeToFileReadFailure() @keymaps.loadBundledKeymaps() From 0330e3366794bb9925b095aec84f980e5c5639d8 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Fri, 1 Apr 2016 21:56:56 -0400 Subject: [PATCH 061/139] :arrow_up: language-c@0.51.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f893203c..be1bb2f51 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "welcome": "0.34.0", "whitespace": "0.32.2", "wrap-guide": "0.38.1", - "language-c": "0.51.2", + "language-c": "0.51.3", "language-clojure": "0.20.0", "language-coffee-script": "0.46.1", "language-csharp": "0.12.0", From 3d8ce38e6b30f4d33fc8bae0d5b86dafa59fbe70 Mon Sep 17 00:00:00 2001 From: Florian Kinder Date: Sat, 2 Apr 2016 15:37:59 +0200 Subject: [PATCH 062/139] :arrow_up: language-perl@0.33.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index be1bb2f51..55900a980 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "language-make": "0.21.0", "language-mustache": "0.13.0", "language-objective-c": "0.15.1", - "language-perl": "0.32.0", + "language-perl": "0.33.0", "language-php": "0.37.0", "language-property-list": "0.8.0", "language-python": "0.43.1", From f1cf66ba32a8d277cd098a9ea8595e12e108660d Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sat, 2 Apr 2016 10:42:55 -0400 Subject: [PATCH 063/139] :arrow_up: language-csharp@0.12.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55900a980..a630dabfc 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "language-c": "0.51.3", "language-clojure": "0.20.0", "language-coffee-script": "0.46.1", - "language-csharp": "0.12.0", + "language-csharp": "0.12.1", "language-css": "0.36.0", "language-gfm": "0.85.0", "language-git": "0.12.1", From 8575b38c7b674e5d1e4be99b54c8322154b5673d Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sat, 2 Apr 2016 17:48:24 -0700 Subject: [PATCH 064/139] Pending pane items shouldn't be made permanent before being replaced Previously, when a Pane would replace a pending item with another pending item, it would emit `onItemDidTerminatePendingState` for that item, which was not true because the item was actually being destroyed. --- spec/pane-spec.coffee | 20 ++++++++++++++++++++ src/pane.coffee | 8 +++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index d0b191f38..9969b1dcc 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -262,6 +262,26 @@ describe "Pane", -> pane.setPendingItem("fake item two") expect(callbackCalled).toBeTruthy() + it "isn't called when a pending item is replaced with a new one", -> + pane = null + pendingSpy = jasmine.createSpy("onItemDidTerminatePendingState") + destroySpy = jasmine.createSpy("onWillDestroyItem") + + waitsForPromise -> + atom.workspace.open('sample.txt', pending: true).then -> + pane = atom.workspace.getActivePane() + + runs -> + pane.onItemDidTerminatePendingState pendingSpy + pane.onWillDestroyItem destroySpy + + waitsForPromise -> + atom.workspace.open('sample.js', pending: true) + + runs -> + expect(destroySpy).toHaveBeenCalled() + expect(pendingSpy).not.toHaveBeenCalled() + describe "::activateNextRecentlyUsedItem() and ::activatePreviousRecentlyUsedItem()", -> it "sets the active item to the next/previous item in the itemStack, looping around at either end", -> pane = new Pane(paneParams(items: [new Item("A"), new Item("B"), new Item("C"), new Item("D"), new Item("E")])) diff --git a/src/pane.coffee b/src/pane.coffee index 3ff62993c..e8858a2b9 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -442,15 +442,16 @@ class Pane extends Model if typeof item.onDidTerminatePendingState is "function" itemSubscriptions.add item.onDidTerminatePendingState => @clearPendingItem() if @getPendingItem() is item - itemSubscriptions.add item.onDidDestroy => @removeItem(item, false) @subscriptionsPerItem.set item, itemSubscriptions @items.splice(index, 0, item) lastPendingItem = @getPendingItem() + replacingPendingItem = lastPendingItem? and not moved + @pendingItem = null if replacingPendingItem @setPendingItem(item) if pending @emitter.emit 'did-add-item', {item, index, moved} - @destroyItem(lastPendingItem) if lastPendingItem? and not moved + @destroyItem(lastPendingItem) if replacingPendingItem @setActiveItem(item) unless @getActiveItem()? item @@ -458,7 +459,8 @@ class Pane extends Model if @pendingItem isnt item mostRecentPendingItem = @pendingItem @pendingItem = item - @emitter.emit 'item-did-terminate-pending-state', mostRecentPendingItem + if mostRecentPendingItem? + @emitter.emit 'item-did-terminate-pending-state', mostRecentPendingItem getPendingItem: => @pendingItem or null From 2a7344091d74de66f77a366ee963eb82bba00cb4 Mon Sep 17 00:00:00 2001 From: Isaac Salier-Hellendag Date: Wed, 23 Mar 2016 19:18:02 -0700 Subject: [PATCH 065/139] Avoid setting hidden input value on textInput Atom currently sets the `value` of the input on every `textInput` event, in an effort to appropriately handle changes made via the OSX diacritic menu (for accents, umlauts, etc). The drawback of this is approach is that updating the value of the input will trigger layout and a subsequent layer tree update. To resolve this, here is my proposal: - Track a flag for `keypress` events. When the diacritic menu is used, there are two `textInput` events, with no `keypress` in between. Therefore, when no `keypress` has occurred just prior to a `textInput`, the editor model can select the previous character to be replaced by the new accented character. - Track a flag for `compositionstart` events. When a user is in IME mode, the diacritic menu cannot be used, so the editor can skip the backward selection. Test Plan: Tested in a plaintext file. - Type Latin characters, verify proper character insertion. - Press and hold a. Diacritic menu appears. Select an option using the keyboard or mouse. Verify that the `a` is replaced by an accented `a`, with no extra characters. - Type test strings in Katakana, 2-Set Korean, Telex (Vietnamese), Simplified Pinyin. Verify that characters are inserted correctly while composing, and after committing strings. --- src/text-editor-component.coffee | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 9b091100d..50851279b 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -244,6 +244,7 @@ class TextEditorComponent listenForDOMEvents: -> @domNode.addEventListener 'mousewheel', @onMouseWheel @domNode.addEventListener 'textInput', @onTextInput + @domNode.addEventListener 'keypress', @onKeyPress @scrollViewNode.addEventListener 'mousedown', @onMouseDown @scrollViewNode.addEventListener 'scroll', @onScrollViewScroll @@ -266,6 +267,7 @@ class TextEditorComponent checkpoint = null @domNode.addEventListener 'compositionstart', => + @imeMode = true checkpoint = @editor.createCheckpoint() @domNode.addEventListener 'compositionupdate', (event) => @editor.insertText(event.data, select: true) @@ -319,26 +321,27 @@ class TextEditorComponent if @mounted @presenter.setFocused(false) + onKeyPress: (event) => + @detectedKeyPress = true + onTextInput: (event) => event.stopPropagation() - - # If we prevent the insertion of a space character, then the browser - # interprets the spacebar keypress as a page-down command. - event.preventDefault() unless event.data is ' ' + event.preventDefault() return unless @isInputEnabled() - inputNode = event.target + # Workaround of the accented character suggestion feature in OS X. + # This will only occur when the user is not composing in IME mode. + # When the user selects a modified character from the OSX menu, `textInput` + # will occur twice, once for the initial character, and once for the + # modified character. However, only a single keypress will have fired. If + # this is the case, select backward to replace the original character. + if not @imeMode and not @detectedKeyPress + @editor.selectLeft() - # Work around of the accented character suggestion feature in OS X. - # Text input fires before a character is inserted, and if the browser is - # replacing the previous un-accented character with an accented variant, it - # will select backward over it. - selectedLength = inputNode.selectionEnd - inputNode.selectionStart - @editor.selectLeft() if selectedLength is 1 - - insertedRange = @editor.insertText(event.data, groupUndo: true) - inputNode.value = event.data if insertedRange + @editor.insertText(event.data, groupUndo: true) + @detectedKeyPress = false + @imeMode = false onVerticalScroll: (scrollTop) => return if @updateRequested or scrollTop is @presenter.getScrollTop() From a99ee14ac0be502d6e18b56b8b9b84a5c1c472e9 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 4 Apr 2016 17:47:36 -0600 Subject: [PATCH 066/139] Make accented character menu detection work with left/right arrow keys --- spec/text-editor-component-spec.js | 3 ++- src/text-editor-component.coffee | 29 +++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index 1d1e4eb9f..30bc9251c 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -3767,11 +3767,12 @@ describe('TextEditorComponent', function () { expect(editor.lineTextForBufferRow(0)).toBe('xyvar quicksort = function () {') }) - it('replaces the last character if the length of the input\'s value does not increase, as occurs with the accented character menu', async function () { + it('replaces the last character if the textInput event is followed by one or more additional keydown events, which occurs when the accented character menu is shown', async function () { componentNode.dispatchEvent(buildTextInputEvent({ data: 'u', target: inputNode })) + componentNode.dispatchEvent(new KeyboardEvent('keydown')) await nextViewUpdatePromise() expect(editor.lineTextForBufferRow(0)).toBe('uvar quicksort = function () {') diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 50851279b..8e91557c8 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -244,13 +244,28 @@ class TextEditorComponent listenForDOMEvents: -> @domNode.addEventListener 'mousewheel', @onMouseWheel @domNode.addEventListener 'textInput', @onTextInput - @domNode.addEventListener 'keypress', @onKeyPress @scrollViewNode.addEventListener 'mousedown', @onMouseDown @scrollViewNode.addEventListener 'scroll', @onScrollViewScroll + @detectAccentedCharacterMenu() @listenForIMEEvents() @trackSelectionClipboard() if process.platform is 'linux' + detectAccentedCharacterMenu: -> + # We need to get clever to detect when the accented character menu is + # opened on OS X. Usually, every keydown event that could cause input is + # paired with a corresponding keypress. However, when pressing and holding + # long enough to open the accented character menu causes additional keydown + # events to fire that aren't followed by their own keypress and textInput + # events. We exploit this by assuming the accented character menu is open + # until a subsequent keypress event proves otherwise. + @domNode.addEventListener 'keydown', (event) => + unless event.keyCode is 229 # Skip keydown events associated with IME compositionupdate events + @openedAccentedCharacterMenu = true + + @domNode.addEventListener 'keypress', => + @openedAccentedCharacterMenu = false + listenForIMEEvents: -> # The IME composition events work like this: # @@ -267,7 +282,9 @@ class TextEditorComponent checkpoint = null @domNode.addEventListener 'compositionstart', => - @imeMode = true + if @openedAccentedCharacterMenu + @editor.selectLeft() + @openedAccentedCharacterMenu = false checkpoint = @editor.createCheckpoint() @domNode.addEventListener 'compositionupdate', (event) => @editor.insertText(event.data, select: true) @@ -321,9 +338,6 @@ class TextEditorComponent if @mounted @presenter.setFocused(false) - onKeyPress: (event) => - @detectedKeyPress = true - onTextInput: (event) => event.stopPropagation() event.preventDefault() @@ -336,12 +350,11 @@ class TextEditorComponent # will occur twice, once for the initial character, and once for the # modified character. However, only a single keypress will have fired. If # this is the case, select backward to replace the original character. - if not @imeMode and not @detectedKeyPress + if @openedAccentedCharacterMenu @editor.selectLeft() + @openedAccentedCharacterMenu = false @editor.insertText(event.data, groupUndo: true) - @detectedKeyPress = false - @imeMode = false onVerticalScroll: (scrollTop) => return if @updateRequested or scrollTop is @presenter.getScrollTop() From 9eff3a952b90900f106604ade3e52828e083b0e1 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 4 Apr 2016 20:18:59 -0400 Subject: [PATCH 067/139] :arrow_up: language-ruby@0.68.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a630dabfc..3089c4418 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "language-php": "0.37.0", "language-property-list": "0.8.0", "language-python": "0.43.1", - "language-ruby": "0.68.4", + "language-ruby": "0.68.5", "language-ruby-on-rails": "0.25.0", "language-sass": "0.46.0", "language-shellscript": "0.21.1", From f638bcbb6d97a27a90d9d8b780659eb61d87de55 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 4 Apr 2016 18:56:08 -0600 Subject: [PATCH 068/139] =?UTF-8?q?Don=E2=80=99t=20assume=20the=20accented?= =?UTF-8?q?=20character=20menu=20on=20every=20IME=20event?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/text-editor-component.coffee | 35 +++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 8e91557c8..b76a23ddc 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -254,18 +254,43 @@ class TextEditorComponent detectAccentedCharacterMenu: -> # We need to get clever to detect when the accented character menu is # opened on OS X. Usually, every keydown event that could cause input is - # paired with a corresponding keypress. However, when pressing and holding + # followed by a corresponding keypress. However, pressing and holding # long enough to open the accented character menu causes additional keydown # events to fire that aren't followed by their own keypress and textInput - # events. We exploit this by assuming the accented character menu is open - # until a subsequent keypress event proves otherwise. + # events. + # + # Therefore, we assume the accented character menu has been deployed if, + # before observing any keyup event, we observe events in the following + # sequence: + # + # keydown(keyCode: X), keypress, keydown(codeCode: X) + # + # The keyCode X must be the same in the keydown events that bracket the + # keypress, meaning we're *holding* the _same_ key we intially pressed. + # Got that? + lastKeydown = null + lastKeydownBeforeKeypress = null + @domNode.addEventListener 'keydown', (event) => - unless event.keyCode is 229 # Skip keydown events associated with IME compositionupdate events - @openedAccentedCharacterMenu = true + if lastKeydownBeforeKeypress + if lastKeydownBeforeKeypress.keyCode is event.keyCode + @openedAccentedCharacterMenu = true + lastKeydownBeforeKeypress = null + else + lastKeydown = event @domNode.addEventListener 'keypress', => + lastKeydownBeforeKeypress = lastKeydown + lastKeydown = null + + # This cancels the accented character behavior if we type a key normally + # with the menu open. @openedAccentedCharacterMenu = false + @domNode.addEventListener 'keyup', => + lastKeydownBeforeKeypress = null + lastKeydown = null + listenForIMEEvents: -> # The IME composition events work like this: # From 9833e54ec349d9503c1facac44ad8b7e6bc09bc0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 4 Apr 2016 19:22:44 -0600 Subject: [PATCH 069/139] Fix typo --- src/text-editor-component.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index b76a23ddc..12f481be5 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -263,7 +263,7 @@ class TextEditorComponent # before observing any keyup event, we observe events in the following # sequence: # - # keydown(keyCode: X), keypress, keydown(codeCode: X) + # keydown(keyCode: X), keypress, keydown(keyCode: X) # # The keyCode X must be the same in the keydown events that bracket the # keypress, meaning we're *holding* the _same_ key we intially pressed. From 402a335eefa8c15b95c917496d29c740a4a1535f Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 4 Apr 2016 19:50:39 -0600 Subject: [PATCH 070/139] Fix accented character menu spec --- spec/text-editor-component-spec.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index 30bc9251c..b031cba33 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -3745,6 +3745,21 @@ describe('TextEditorComponent', function () { return event } + function buildKeydownEvent ({keyCode, target}) { + let event = new KeyboardEvent('keydown') + Object.defineProperty(event, 'keyCode', { + get: function () { + return keyCode + } + }) + Object.defineProperty(event, 'target', { + get: function () { + return target + } + }) + return event + } + let inputNode beforeEach(function () { @@ -3767,12 +3782,12 @@ describe('TextEditorComponent', function () { expect(editor.lineTextForBufferRow(0)).toBe('xyvar quicksort = function () {') }) - it('replaces the last character if the textInput event is followed by one or more additional keydown events, which occurs when the accented character menu is shown', async function () { - componentNode.dispatchEvent(buildTextInputEvent({ - data: 'u', - target: inputNode - })) - componentNode.dispatchEvent(new KeyboardEvent('keydown')) + it('replaces the last character if a keypress event is bracketed by keydown events with matching keyCodes, which occurs when the accented character menu is shown', async function () { + componentNode.dispatchEvent(buildKeydownEvent({keyCode: 85, target: inputNode})) + componentNode.dispatchEvent(buildTextInputEvent({data: 'u', target: inputNode})) + componentNode.dispatchEvent(new KeyboardEvent('keypress')) + componentNode.dispatchEvent(buildKeydownEvent({keyCode: 85, target: inputNode})) + componentNode.dispatchEvent(new KeyboardEvent('keyup')) await nextViewUpdatePromise() expect(editor.lineTextForBufferRow(0)).toBe('uvar quicksort = function () {') From fd3789223c16307925511c1c586b130980aac317 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 4 Apr 2016 19:53:41 -0600 Subject: [PATCH 071/139] :arrow_up: status-bar --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3089c4418..4c03b3916 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "settings-view": "0.235.1", "snippets": "1.0.2", "spell-check": "0.67.0", - "status-bar": "1.2.0", + "status-bar": "1.2.1", "styleguide": "0.45.2", "symbols-view": "0.112.0", "tabs": "0.92.0", From 47d374a09aac493e220327c6e6ecf6e96af0bc50 Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Thu, 12 Nov 2015 16:09:31 +0100 Subject: [PATCH 072/139] :penguin: Add "mktar" gulp task to create an Linux binary archive This archive in tar.gz format contains the whole Atom binary and resources to enable multiple channels and versions to be installed on the same distribution. --- build/tasks/mktar-task.coffee | 30 +++++++++++++++++++++++++++ script/mktar | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 build/tasks/mktar-task.coffee create mode 100755 script/mktar diff --git a/build/tasks/mktar-task.coffee b/build/tasks/mktar-task.coffee new file mode 100644 index 000000000..f5edbb4be --- /dev/null +++ b/build/tasks/mktar-task.coffee @@ -0,0 +1,30 @@ +path = require 'path' + +module.exports = (grunt) -> + {spawn, fillTemplate} = require('./task-helpers')(grunt) + + grunt.registerTask 'mktar', 'Create an archive', -> + done = @async() + + appFileName = grunt.config.get('atom.appFileName') + buildDir = grunt.config.get('atom.buildDir') + shellAppDir = grunt.config.get('atom.shellAppDir') + {version, description} = grunt.config.get('atom.metadata') + + if process.arch is 'ia32' + arch = 'i386' + else if process.arch is 'x64' + arch = 'amd64' + else + return done("Unsupported arch #{process.arch}") + + iconPath = path.join(shellAppDir, 'resources', 'app.asar.unpacked', 'resources', 'atom.png') + + cmd = path.join('script', 'mktar') + args = [appFileName, version, arch, iconPath, buildDir] + spawn {cmd, args}, (error) -> + if error? + done(error) + else + grunt.log.ok "Created " + path.join(buildDir, "#{appFileName}-#{version}-#{arch}.tar.gz") + done() diff --git a/script/mktar b/script/mktar new file mode 100755 index 000000000..986063f9a --- /dev/null +++ b/script/mktar @@ -0,0 +1,39 @@ +#!/bin/bash +# mktar name version arch icon-path build-root-path + +set -e + +SCRIPT=`readlink -f "$0"` +ROOT=`readlink -f $(dirname $SCRIPT)/..` +cd $ROOT + +NAME="$1" +VERSION="$2" +ARCH="$3" +ICON_FILE="$4" +BUILD_ROOT_PATH="$5" +FILE_MODE=755 + +TAR_PATH=$BUILD_ROOT_PATH +ATOM_PATH="$BUILD_ROOT_PATH/Atom" + +TARGET_ROOT="`mktemp -d`" +chmod $FILE_MODE "$TARGET_ROOT" +NAME_IN_TAR="$NAME-$VERSION-$ARCH" +TARGET="$TARGET_ROOT/$NAME_IN_TAR" + +# Copy executable and resources +cp -a "$ATOM_PATH" "$TARGET" + +# Copy icon file +cp "$ICON_FILE" "$TARGET/$NAME.png" + +# Remove executable bit from .node files +find "$TARGET" -type f -name "*.node" -exec chmod a-x {} \; + +# Create the archive +pushd "$TARGET_ROOT" +tar caf "$TAR_PATH/$NAME_IN_TAR.tar.gz" "$NAME_IN_TAR" +popd + +rm -rf "$TARGET_ROOT" From 4a51841159b16e312949c23ebf83e59b4264ceba Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Thu, 12 Nov 2015 16:12:06 +0100 Subject: [PATCH 073/139] Add the mktar task to linux CI --- build/Gruntfile.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/build/Gruntfile.coffee b/build/Gruntfile.coffee index d9375d05c..f8ee607e5 100644 --- a/build/Gruntfile.coffee +++ b/build/Gruntfile.coffee @@ -285,6 +285,7 @@ module.exports = (grunt) -> ciTasks.push('dump-symbols') if process.platform is 'darwin' ciTasks.push('set-version', 'check-licenses', 'lint', 'generate-asar') ciTasks.push('mkdeb') if process.platform is 'linux' + ciTasks.push('mktar') if process.platform is 'linux' ciTasks.push('codesign:exe') if process.platform is 'win32' and not process.env.CI ciTasks.push('create-windows-installer:installer') if process.platform is 'win32' ciTasks.push('test') if process.platform is 'darwin' From 6a17b2dee83180106fca108189dc87bd58b2388a Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Thu, 12 Nov 2015 16:13:11 +0100 Subject: [PATCH 074/139] Add the newly created archive to the publish-build task This archive is created on an Ubuntu 64 bits machine, publish it if present in the assets. The version contains the channel name, so don't append channel name to it. --- build/tasks/publish-build-task.coffee | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/build/tasks/publish-build-task.coffee b/build/tasks/publish-build-task.coffee index de46eb4fe..19061db02 100644 --- a/build/tasks/publish-build-task.coffee +++ b/build/tasks/publish-build-task.coffee @@ -85,13 +85,13 @@ getAssets = -> arch = 'amd64' # Check for a Debian build - sourcePath = "#{buildDir}/#{appFileName}-#{version}-#{arch}.deb" + sourcePath = path.join(buildDir, "#{appFileName}-#{version}-#{arch}.deb") assetName = "atom-#{arch}.deb" # Check for a Fedora build unless fs.isFileSync(sourcePath) rpmName = fs.readdirSync("#{buildDir}/rpm")[0] - sourcePath = "#{buildDir}/rpm/#{rpmName}" + sourcePath = path.join(buildDir, "rpm", rpmName) if process.arch is 'ia32' arch = 'i386' else @@ -99,10 +99,17 @@ getAssets = -> assetName = "atom.#{arch}.rpm" cp sourcePath, path.join(buildDir, assetName) + assets = [{assetName, sourcePath}] - [ - {assetName, sourcePath} - ] + # Check for an archive build on a debian build machine. + # We could provide a Fedora version if some libraries are not compatible + sourcePath = path.join(buildDir, "#{appFileName}-#{version}-#{arch}.tar.gz") + if fs.isFileSync(sourcePath) + assetName = "atom-#{arch}.tar.gz" + cp sourcePath, path.join(buildDir, assetName) + assets.push({assetName, sourcePath}) + + assets logError = (message, error, details) -> grunt.log.error(message) From d50da12bca3daa188a9817ce6adf777f1f13310d Mon Sep 17 00:00:00 2001 From: Didier Roche Date: Thu, 12 Nov 2015 16:15:19 +0100 Subject: [PATCH 075/139] Add Linux archive installation and build instructions --- README.md | 16 ++++++++++++++++ docs/build-instructions/linux.md | 8 +++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dcda2146c..20e940689 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,22 @@ Currently only a 64-bit version is available. The Linux version does not currently automatically update so you will need to repeat these steps to upgrade to future releases. +### Archive extraction + +An archive is available for people who don't want to install `atom` as root. + +This version enables you to install multiple Atom versions in parallel. It has been built on Ubuntu 64-bit, +but should be compatible with other Linux distributions. + +1. Install dependencies (on Ubuntu): `sudo apt install git gconf2 gconf-service libgtk2.0-0 libudev1 libgcrypt20 +libnotify4 libxtst6 libnss3 python gvfs-bin xdg-utils libcap2` +2. Download `atom-amd64.tar.gz` from the [Atom releases page](https://github.com/atom/atom/releases/latest). +3. Run `tar xf atom-amd64.tar.gz` in the directory where you want to extract the Atom folder. +4. Launch Atom using the installed `atom` command from the newly extracted directory. + +The Linux version does not currently automatically update so you will need to +repeat these steps to upgrade to future releases. + ## Building * [Linux](docs/build-instructions/linux.md) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index c6a9e74eb..99b9b5afc 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -74,7 +74,7 @@ If you have problems with permissions don't forget to prefix with `sudo` To use the newly installed Atom, quit and restart all running Atom instances. -5. *Optionally*, you may generate distributable packages of Atom at `out`. Currently, `.deb` and `.rpm` package types are supported. To create a `.deb` package run: +5. *Optionally*, you may generate distributable packages of Atom at `out`. Currently, `.deb` and `.rpm` package types are supported, as well as a `tar gz` archive. To create a `.deb` package run: ```sh script/grunt mkdeb @@ -86,6 +86,12 @@ If you have problems with permissions don't forget to prefix with `sudo` script/grunt mkrpm ``` + To create a `.tar.gz` package run + + ```sh + script/grunt mktar + ``` + ## Advanced Options ### Custom build directory From b3ea0a6494be5da732bce61bc76946c43149ecbb Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 5 Apr 2016 16:40:06 -0600 Subject: [PATCH 076/139] :arrow_up: bookmarks --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c03b3916..4e5fce85a 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "autoflow": "0.27.0", "autosave": "0.23.1", "background-tips": "0.26.0", - "bookmarks": "0.38.2", + "bookmarks": "0.38.3", "bracket-matcher": "0.82.0", "command-palette": "0.38.0", "deprecation-cop": "0.54.1", From 26ddee4a05a4539d89dd03a26bfdb7968454a19b Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 5 Apr 2016 16:40:15 -0600 Subject: [PATCH 077/139] :arrow_up: autocomplete-plus --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e5fce85a..6c796a711 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "autocomplete-atom-api": "0.10.0", "autocomplete-css": "0.11.0", "autocomplete-html": "0.7.2", - "autocomplete-plus": "2.29.1", + "autocomplete-plus": "2.29.2", "autocomplete-snippets": "1.10.0", "autoflow": "0.27.0", "autosave": "0.23.1", From 50c1bd34ca41efd3e7ec02f17d3237dcf6b8c6a6 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Tue, 5 Apr 2016 19:00:34 -0700 Subject: [PATCH 078/139] :arrow_up: tabs@0.92.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c796a711..b087667bf 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "status-bar": "1.2.1", "styleguide": "0.45.2", "symbols-view": "0.112.0", - "tabs": "0.92.0", + "tabs": "0.92.1", "timecop": "0.33.1", "tree-view": "0.203.3", "update-package-dependencies": "0.10.0", From 917f20d1c4c5f436522e45e8087975f95b4aac29 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 6 Apr 2016 16:05:43 -0600 Subject: [PATCH 079/139] :arrow_up: tree-view --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b087667bf..d48b1f41e 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "symbols-view": "0.112.0", "tabs": "0.92.1", "timecop": "0.33.1", - "tree-view": "0.203.3", + "tree-view": "0.203.4", "update-package-dependencies": "0.10.0", "welcome": "0.34.0", "whitespace": "0.32.2", From a084882cb130fa6f7ffe51a88ebd140292bf4f03 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Wed, 6 Apr 2016 19:23:26 -0400 Subject: [PATCH 080/139] :memo: Minor cleanup for the new .tar.gz archive [ci skip] --- docs/build-instructions/linux.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build-instructions/linux.md b/docs/build-instructions/linux.md index 99b9b5afc..126604c49 100644 --- a/docs/build-instructions/linux.md +++ b/docs/build-instructions/linux.md @@ -74,19 +74,19 @@ If you have problems with permissions don't forget to prefix with `sudo` To use the newly installed Atom, quit and restart all running Atom instances. -5. *Optionally*, you may generate distributable packages of Atom at `out`. Currently, `.deb` and `.rpm` package types are supported, as well as a `tar gz` archive. To create a `.deb` package run: +5. *Optionally*, you may generate distributable packages of Atom at `out`. Currently, `.deb` and `.rpm` package types are supported, as well as a `.tar.gz` archive. To create a `.deb` package run: ```sh script/grunt mkdeb ``` - To create an `.rpm` package run + To create a `.rpm` package run ```sh script/grunt mkrpm ``` - To create a `.tar.gz` package run + To create a `.tar.gz` archive run ```sh script/grunt mktar From ffe33cb3791e1b541de5a21892ee05affbaa5b34 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Wed, 6 Apr 2016 18:31:13 -0700 Subject: [PATCH 081/139] :arrow_up: language-perl@0.34.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d48b1f41e..c0191b551 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "language-make": "0.21.0", "language-mustache": "0.13.0", "language-objective-c": "0.15.1", - "language-perl": "0.33.0", + "language-perl": "0.34.0", "language-php": "0.37.0", "language-property-list": "0.8.0", "language-python": "0.43.1", From b5f0f846a9cd2be8e323a104c84542563cc79aa4 Mon Sep 17 00:00:00 2001 From: Daniel Hengeveld Date: Thu, 7 Apr 2016 10:06:13 +0200 Subject: [PATCH 082/139] :arrow_up: exception-reporting@0.38.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c0191b551..19739ea2f 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "deprecation-cop": "0.54.1", "dev-live-reload": "0.47.0", "encoding-selector": "0.21.0", - "exception-reporting": "0.37.0", + "exception-reporting": "0.38.0", "find-and-replace": "0.197.4", "fuzzy-finder": "1.0.3", "git-diff": "1.0.1", From 3bff9515f79a35588e216b2fbce926e3e7fc2e10 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 7 Apr 2016 10:30:01 +0200 Subject: [PATCH 083/139] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19739ea2f..f2d518d8d 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.21.0", "exception-reporting": "0.38.0", - "find-and-replace": "0.197.4", + "find-and-replace": "0.197.5", "fuzzy-finder": "1.0.3", "git-diff": "1.0.1", "go-to-line": "0.30.0", From c08a5c3f54e1557e7717882f17f76a0dd9f64cd7 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 7 Apr 2016 10:57:51 +0200 Subject: [PATCH 084/139] :arrow_up: spell-check --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f2d518d8d..a1f33742b 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "package-generator": "1.0.0", "settings-view": "0.235.1", "snippets": "1.0.2", - "spell-check": "0.67.0", + "spell-check": "0.67.1", "status-bar": "1.2.1", "styleguide": "0.45.2", "symbols-view": "0.112.0", From c3d03f4d5721a536c4b97ba58e56c1a04cd58798 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 7 Apr 2016 14:50:57 +0200 Subject: [PATCH 085/139] :arrow_up: find-and-replace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1f33742b..20847be99 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.21.0", "exception-reporting": "0.38.0", - "find-and-replace": "0.197.5", + "find-and-replace": "0.197.6", "fuzzy-finder": "1.0.3", "git-diff": "1.0.1", "go-to-line": "0.30.0", From db8e62315c13b97ff6cebb419042115502229304 Mon Sep 17 00:00:00 2001 From: joshaber Date: Thu, 7 Apr 2016 11:19:27 -0400 Subject: [PATCH 086/139] Defer the callback to the next tick. This gives GitRepository the chance to clear its path cache before the callback is invoked. Otherwise reads from the cached status state within the callback would be wrong. --- src/git-repository.coffee | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/git-repository.coffee b/src/git-repository.coffee index 30d99791d..a04124b78 100644 --- a/src/git-repository.coffee +++ b/src/git-repository.coffee @@ -166,7 +166,12 @@ class GitRepository # # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. onDidChangeStatuses: (callback) -> - @async.onDidChangeStatuses callback + @async.onDidChangeStatuses -> + # Defer the callback to the next tick so that we've reset + # `@statusesByPath` by the time it's called. Otherwise reads from within + # the callback could be inconsistent. + # See https://github.com/atom/atom/issues/11396 + process.nextTick callback ### Section: Repository Details From 130c40075815e63e15da826d6419e123cc45f61f Mon Sep 17 00:00:00 2001 From: joshaber Date: Thu, 7 Apr 2016 11:25:00 -0400 Subject: [PATCH 087/139] Remove unnecessary fat arrow. Looks like this was introduced in https://github.com/atom/atom/pull/11369. :see_no_evil: --- src/text-editor-component.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-component.coffee b/src/text-editor-component.coffee index 12f481be5..488b74d09 100644 --- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -287,7 +287,7 @@ class TextEditorComponent # with the menu open. @openedAccentedCharacterMenu = false - @domNode.addEventListener 'keyup', => + @domNode.addEventListener 'keyup', -> lastKeydownBeforeKeypress = null lastKeydown = null From 9c601aad6f697780b812bc4325f53ede195a67ad Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 7 Apr 2016 14:49:40 -0600 Subject: [PATCH 088/139] :arrow-up: status-bar --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 20847be99..13e06062a 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "settings-view": "0.235.1", "snippets": "1.0.2", "spell-check": "0.67.1", - "status-bar": "1.2.1", + "status-bar": "1.2.2", "styleguide": "0.45.2", "symbols-view": "0.112.0", "tabs": "0.92.1", From 421dbec1edd6751ae355112a147471662e139cbf Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Thu, 7 Apr 2016 14:30:33 -0700 Subject: [PATCH 089/139] Git Shell now works fine, avoid paths with spaces --- docs/build-instructions/windows.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index 0a999ee3b..13e3be590 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -28,15 +28,13 @@ Whichever version you use, ensure that: You can run these commands using Command Prompt, PowerShell or Git Shell via [GitHub Desktop](https://desktop.github.com/). These instructions will assume the use of Bash from Git Shell - if you are using Command Prompt use a backslash instead: i.e. `script\build`. -**VS2015 + Git Shell users** should note that the default path supplied with Git Shell includes reference to an older version of msbuild that will fail. It is recommended you use a PowerShell window that has git in the path at this time. - ```bash cd C:\ git clone https://github.com/atom/atom/ cd atom script/build ``` -This will create the Atom application in the `Program Files` folder. +This will create the Atom application in the `out\Atom` folder as well as copy it to a folder named `Atom` within `Program Files`. ### `script/build` Options * `--install-dir` - Creates the final built application in this directory. Example (trailing slash is optional): @@ -69,6 +67,9 @@ If none of this works, do install Github Desktop and use its Git Shell as it mak * `msbuild.exe failed with exit code: 1` * Ensure you have Visual C++ support installed. Go into Add/Remove Programs, select Visual Studio and press Modify and then check the Visual C++ box. +* `script/build` stops with no error or warning shortly after displaying the versions of node, npm and Python + * Make sure that the path where you have checked out Atom does not include a space. e.g. use `c:\atom` and not `c:\my stuff\atom` + * `script/build` outputs only the Node.js and Python versions before returning * Try moving the repository to `C:\atom`. Most likely, the path is too long. See [issue #2200](https://github.com/atom/atom/issues/2200). @@ -88,7 +89,7 @@ If none of this works, do install Github Desktop and use its Git Shell as it mak * `error MSB8020: The build tools for Visual Studio 201? (Platform Toolset = 'v1?0') cannot be found.` * If you're building Atom with Visual Studio 2013 try setting the `GYP_MSVS_VERSION` environment variable to 2013 and then `script/clean` followed by `script/build` (re-open your command prompt or Powershell window if you set it using the GUI) - * + * Other `node-gyp` errors on first build attempt, even though the right Node.js and Python versions are installed. * Do try the build command one more time, as experience shows it often works on second try in many of these cases. From 5d8cd7bcc8237e642f212cf12685f531152b74e0 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 7 Apr 2016 17:38:16 -0400 Subject: [PATCH 090/139] :arrow_up: language-make@0.21.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 13e06062a..79eeda981 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "language-javascript": "0.110.0", "language-json": "0.18.0", "language-less": "0.29.2", - "language-make": "0.21.0", + "language-make": "0.21.1", "language-mustache": "0.13.0", "language-objective-c": "0.15.1", "language-perl": "0.34.0", From 822e0c95108aadb91631570e386d8cf96d7cfdd0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 7 Apr 2016 15:51:38 -0600 Subject: [PATCH 091/139] :arrow_up: fuzzy-finder --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 79eeda981..689b6f9df 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "encoding-selector": "0.21.0", "exception-reporting": "0.38.0", "find-and-replace": "0.197.6", - "fuzzy-finder": "1.0.3", + "fuzzy-finder": "1.0.4", "git-diff": "1.0.1", "go-to-line": "0.30.0", "grammar-selector": "0.48.1", From 6dd37761fedff7cbb8ed666e7a890d5b4eb19b1d Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Thu, 7 Apr 2016 21:35:35 -0400 Subject: [PATCH 092/139] :memo: Fix dead atom.io/docs links [ci skip] --- CONTRIBUTING.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4519bcf1..0aa249c18 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ To get a sense for the packages that are bundled with Atom, you can go to Settin Here's a list of the big ones: -* [atom/atom](https://github.com/atom/atom) - Atom Core! The core editor component is responsible for basic text editing (e.g. cursors, selections, scrolling), text indentation, wrapping, and folding, text rendering, editor rendering, file system operations (e.g. saving), and installation and auto-updating. You should also use this repository for feedback related to the [core API](https://atom.io/docs/api/latest/Notification) and for large, overarching design proposals. +* [atom/atom](https://github.com/atom/atom) - Atom Core! The core editor component is responsible for basic text editing (e.g. cursors, selections, scrolling), text indentation, wrapping, and folding, text rendering, editor rendering, file system operations (e.g. saving), and installation and auto-updating. You should also use this repository for feedback related to the [core API](https://atom.io/docs/api/latest) and for large, overarching design proposals. * [tree-view](https://github.com/atom/tree-view) - file and directory listing on the left of the UI. * [fuzzy-finder](https://github.com/atom/fuzzy-finder) - the quick file opener. * [find-and-replace](https://github.com/atom/find-and-replace) - all search and replace functionality. @@ -82,7 +82,7 @@ Before creating bug reports, please check [this list](#before-submitting-a-bug-r #### Before Submitting A Bug Report -* **Check the [debugging guide](https://atom.io/docs/latest/hacking-atom-debugging).** You might be able to find the cause of the problem and fix things yourself. Most importantly, check if you can reproduce the problem [in the latest version of Atom](https://atom.io/docs/latest/hacking-atom-debugging#update-to-the-latest-version), if the problem happens when you run Atom in [safe mode](https://atom.io/docs/latest/hacking-atom-debugging#check-if-the-problem-shows-up-in-safe-mode), and if you can get the desired behavior by changing [Atom's or packages' config settings](https://atom.io/docs/latest/hacking-atom-debugging#check-atom-and-package-settings). +* **Check the [debugging guide](http://flight-manual.atom.io/hacking-atom/sections/debugging/).** You might be able to find the cause of the problem and fix things yourself. Most importantly, check if you can reproduce the problem [in the latest version of Atom](http://flight-manual.atom.io/hacking-atom/sections/debugging/#update-to-the-latest-version), if the problem happens when you run Atom in [safe mode](http://flight-manual.atom.io/hacking-atom/sections/debugging/#check-if-the-problem-shows-up-in-safe-mode), and if you can get the desired behavior by changing [Atom's or packages' config settings](http://flight-manual.atom.io/hacking-atom/sections/debugging/#check-atom-and-package-settings). * **Check the [FAQs on the forum](https://discuss.atom.io/c/faq)** for a list of common questions and problems. * **Determine [which repository the problem should be reported in](#atom-and-packages)**. * **Perform a [cursory search](https://github.com/issues?q=+is%3Aissue+user%3Aatom)** to see if the problem has already been reported. If it has, add a comment to the existing issue instead of opening a new one. @@ -100,13 +100,13 @@ Explain the problem and include additional details to help maintainers reproduce * **Explain which behavior you expected to see instead and why.** * **Include screenshots and animated GIFs** which show you following the described steps and clearly demonstrate the problem. If you use the keyboard while following the steps, **record the GIF with the [Keybinding Resolver](https://github.com/atom/keybinding-resolver) shown**. You can use [this tool](http://www.cockos.com/licecap/) to record GIFs on OSX and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. * **If you're reporting that Atom crashed**, include a crash report with a stack trace from the operating system. On OSX, the crash report will be available in `Console.app` under "Diagnostic and usage information" > "User diagnostic reports". Include the crash report in the issue in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a [file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in a [gist](https://gist.github.com/) and provide link to that gist. -* **If the problem is related to performance**, include a [CPU profile capture and a screenshot](https://atom.io/docs/latest/hacking-atom-debugging#diagnose-performance-problems-with-the-dev-tools-cpu-profiler) with your report. +* **If the problem is related to performance**, include a [CPU profile capture and a screenshot](http://flight-manual.atom.io/hacking-atom/sections/debugging/#diagnose-performance-problems-with-the-dev-tools-cpu-profiler) with your report. * **If the Chrome's developer tools pane is shown without you triggering it**, that normally means that an exception was thrown. The Console tab will include an entry for the exception. Expand the exception so that the stack trace is visible, and provide the full exception and stack trace in a [code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines) and as a screenshot. * **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and share more information using the guidelines below. Provide more context by answering these questions: -* **Can you reproduce the problem in [safe mode](https://atom.io/docs/latest/hacking-atom-debugging#check-if-the-problem-shows-up-in-safe-mode)?** +* **Can you reproduce the problem in [safe mode](http://flight-manual.atom.io/hacking-atom/sections/debugging/#diagnose-runtime-performance-problems-with-the-dev-tools-cpu-profiler)?** * **Did the problem start happening recently** (e.g. after updating to a new version of Atom) or was this always a problem? * If the problem started happening recently, **can you reproduce the problem in an older version of Atom?** What's the most recent version in which the problem doesn't happen? You can download older versions of Atom from [the releases page](https://github.com/atom/atom/releases). * **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens. @@ -118,7 +118,7 @@ Include details about your configuration and environment: * **What's the name and version of the OS you're using**? * **Are you running Atom in a virtual machine?** If so, which VM software are you using and which operating systems and versions are used for the host and the guest? * **Which [packages](#atom-and-packages) do you have installed?** You can get that list by running `apm list --installed`. -* **Are you using [local configuration files](https://atom.io/docs/latest/using-atom-basic-customization)** `config.cson`, `keymap.cson`, `snippets.cson`, `styles.less` and `init.coffee` to customize Atom? If so, provide the contents of those files, preferably in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines) or with a link to a [gist](https://gist.github.com/). +* **Are you using [local configuration files](http://flight-manual.atom.io/using-atom/sections/basic-customization/)** `config.cson`, `keymap.cson`, `snippets.cson`, `styles.less` and `init.coffee` to customize Atom? If so, provide the contents of those files, preferably in a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines) or with a link to a [gist](https://gist.github.com/). * **Are you using Atom with multiple monitors?** If so, can you reproduce the problem when you use a single monitor? * **Which keyboard layout are you using?** Are you using a US layout or some other layout? @@ -166,7 +166,7 @@ Before creating enhancement suggestions, please check [this list](#before-submit #### Before Submitting An Enhancement Suggestion -* **Check the [debugging guide](https://atom.io/docs/latest/hacking-atom-debugging)** for tips — you might discover that the enhancement is already available. Most importantly, check if you're using [the latest version of Atom](https://atom.io/docs/latest/hacking-atom-debugging#update-to-the-latest-version) and if you can get the desired behavior by changing [Atom's or packages' config settings](https://atom.io/docs/latest/hacking-atom-debugging#check-atom-and-package-settings). +* **Check the [debugging guide](http://flight-manual.atom.io/hacking-atom/sections/debugging/)** for tips — you might discover that the enhancement is already available. Most importantly, check if you're using [the latest version of Atom](http://flight-manual.atom.io/hacking-atom/sections/debugging/#update-to-the-latest-version) and if you can get the desired behavior by changing [Atom's or packages' config settings](http://flight-manual.atom.io/hacking-atom/sections/debugging/#check-atom-and-package-settings). * **Check if there's already [a package](https://atom.io/packages) which provides that enhancement.** * **Determine [which repository the enhancement should be suggested in](#atom-and-packages).** * **Perform a [cursory search](https://github.com/issues?q=+is%3Aissue+user%3Aatom)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. @@ -376,7 +376,7 @@ Please open an issue on `atom/atom` if you have suggestions for new labels, and | `windows` | [search][search-atom-repo-label-windows] | [search][search-atom-org-label-windows] | Related to Atom running on Windows. | | `linux` | [search][search-atom-repo-label-linux] | [search][search-atom-org-label-linux] | Related to Atom running on Linux. | | `mac` | [search][search-atom-repo-label-mac] | [search][search-atom-org-label-mac] | Related to Atom running on OSX. | -| `documentation` | [search][search-atom-repo-label-documentation] | [search][search-atom-org-label-documentation] | Related to any type of documentation (e.g. [API documentation](https://atom.io/docs/api/latest/Atom) and the [flight manual](https://atom.io/docs/latest/)). | +| `documentation` | [search][search-atom-repo-label-documentation] | [search][search-atom-org-label-documentation] | Related to any type of documentation (e.g. [API documentation](https://atom.io/docs/api/latest/) and the [flight manual](http://flight-manual.atom.io/)). | | `performance` | [search][search-atom-repo-label-performance] | [search][search-atom-org-label-performance] | Related to performance. | | `security` | [search][search-atom-repo-label-security] | [search][search-atom-org-label-security] | Related to security. | | `ui` | [search][search-atom-repo-label-ui] | [search][search-atom-org-label-ui] | Related to visual design. | From 14afb4967694f90497823568869e39c74054d35f Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 8 Apr 2016 15:58:23 -0400 Subject: [PATCH 093/139] Use #index instead of #openIndex. #openIndex is going away: https://github.com/nodegit/nodegit/pull/989 --- src/git-repository-async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index e45c1e47e..373ee44bc 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -305,7 +305,7 @@ export default class GitRepositoryAsync { .then(relativePath => { return this.repoPool.enqueue(() => { return this.getRepo() - .then(repo => repo.openIndex()) + .then(repo => repo.index()) .then(index => { const entry = index.getByPath(relativePath) if (!entry) return false From 6bbf0d3271d73c51ff009bf6f081ebd47a699c55 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 8 Apr 2016 14:36:51 -0700 Subject: [PATCH 094/139] Signing support on Windows with P12 keys --- build/certs/AtomDevTestSignKey.p12 | Bin 0 -> 1765 bytes build/tasks/codesign-task.coffee | 49 +++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 build/certs/AtomDevTestSignKey.p12 diff --git a/build/certs/AtomDevTestSignKey.p12 b/build/certs/AtomDevTestSignKey.p12 new file mode 100644 index 0000000000000000000000000000000000000000..a93e9a9f042a29411a05cdf832c99041fd6d6180 GIT binary patch literal 1765 zcmb7FX;c$e6n--kgF*JN2!|yK2+B4g2@((#0yaktvM6vs!xADON+3jBs7iveDWJuQ ziqXi9R0Tv-tY8rX9wVq&WDBAqu2rcDiWT~>Ew$(Pr{~U_x%a#8yLaZ!d}nY8@d1ip zxP&Mrk`|=1)5p{i6+|W><`N{tYzU|0670%s?L4xjU5^!8sZU|RO&n#=eOfsq7hlf{6-QGPd zN^vc!Deho{doNAf#RQ#~XIp7Y+8y#MRqlJ#@k~9(=3BFrSs$#) zd`02jljrXL(%+Ok-0#^`u^d}9vO^@U?$q;@+In8I=`m4T+c+6{px0}~J+FPmzwWKd zeqEGpwK$VJ=x>-|q7c1Z>Z@?RU+;Qj!l?Sy>E;50oa3e~tZE=*0IBDrJ#O-}|*FF1AK)**vT^=o;o>j|mW?snuqjixmXK+hj zN`w|G?ec{)iIhv?jK*-|9AqM^Vty+n$s*?M^*z01XKSLas@&W;l4t|sxH_ykg=>tq zJauamQN71Cm)ck|s}z;iEmyc*NWY9^=YRI)fgR7S$F-Y{lp@`H_OeBq0@|Ltn-k)* zY|gGPcyIM=vN>qU@9t3+^O`z4l|E8#wm-#l6fPLKK>k$+XUFRb%gxJb=dK=IM?({ReW?q|0{~WUz_};=g+EdmI z%~zF1YgcX0vs|$&wUuEpX4qnt?UI|rxP+=jW?p$3Js4y7v!yUb{fJz!cb_<+>%_rs zzZa!hvWnHpxx-E4f$5{RZ7Dv|P;{C|cVM%XBR%1#4nD zyfS9>7clzBqO!n&>r`+hasWA(R7OfFaA>eEdSwHW}%srI-n5nD~b$d(==!A6P~KbgNlkiZvGR`HWWlz`ai z_}KVpipM5Vj6fJG+KQVRs8gMAnj;Oz=}vU#5Ce4@lj=x=2ZPCAhTsdS44n2?McZ#x zWC^19(`8wFp(u7;EH6UD$Hm9LzByzDz{EKK7iXbjF=&~`>Fe^F`*2|UZnM}0-M1$` z-C>80Z8Tu`sQA51JQq}$U{aEztr3=Z>@;=3HY3}*5)~5z>H0WEuEc^xk87-OXUm39 zI-FX1Ap5$3z;Q4^(OY?A_vmN#4}^St@y>)4JqB})=foL*_Z7tlU$>lR8&*B`ST>;1 znWNM66Q}zziXi|gPQnv$HTY;IWCWQcpg6!IrXqw8f(NH+HQ$wNeG`1b_l=|>53PA0 ze!}tpPgkN9IIoAB_GDron={)vb6_Il>zTk8hQVQwf}aD$Ctgs4^jMjTB9x-aCA>ho zt*I++$>lTUbY-dRWN5h?=_unYJMFDp=aqUgXY}Lz{oV}QXGra6QO7P$M0ZbzfrI@} zx#8^F^6}#|{STkpTccWTF7c+|)+J_FG5*2W(K(vdXj>ugqjGf8CGMcvfboa1uCTo8cd_e`A@*-rK0Jqhg6_rrc^3ot+O=)Q RYtV|ry%{EHmBgtZ&Yvnyq?G^w literal 0 HcmV?d00001 diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index 2a061742b..a00e2d358 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -1,24 +1,46 @@ path = require 'path' +fs = require 'fs' +request = require 'request' module.exports = (grunt) -> {spawn} = require('./task-helpers')(grunt) + signUsingWindowsSDK = (exeToSign, callback) -> + {WIN_P12KEY_PASSWORD, WIN_P12KEY_URL} = process.env + if WIN_P12KEY_URL? + grunt.log.ok("Obtaining signing key") + downloadedKeyFile = path.resolve(__dirname, 'DownloadedSignKey.p12') + downloadFile WIN_P12KEY_URL, downloadedKeyFile, (done) -> + signUsingWindowsSDKTool exeToSign, downloadedKeyFile, WIN_P12KEY_PASSWORD, (done) -> + fs.unlinkSync(downloadedKeyFile) + callback() + else + signUsingWindowsSDKTool exeToSign, path.resolve(__dirname, '..', 'certs', 'AtomDevTestSignKey.p12'), 'password', callback + + signUsingWindowsSDKTool = (exeToSign, keyFilePath, password, callback) -> + grunt.log.ok("Signing #{exeToSign}") + args = ['sign', '/v', '/p', password, '/f', keyFilePath, exeToSign] + spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback + + signUsingJanky = (exeToSign, callback) -> + spawn {cmd: 'signtool', args: [exeToSign]}, callback + + signWindowsExecutable = if process.env.JANKY_SIGNTOOL then signUsingJanky else signUsingWindowsSDK + grunt.registerTask 'codesign:exe', 'CodeSign Atom.exe and Update.exe', -> done = @async() spawn {cmd: 'taskkill', args: ['/F', '/IM', 'atom.exe']}, -> - cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomExePath = path.join(grunt.config.get('atom.shellAppDir'), 'atom.exe') - spawn {cmd, args: [atomExePath]}, (error) -> + signWindowsExecutable atomExePath, (error) -> return done(error) if error? updateExePath = path.resolve(__dirname, '..', 'node_modules', 'grunt-electron-installer', 'vendor', 'Update.exe') - spawn {cmd, args: [updateExePath]}, (error) -> done(error) + signWindowsExecutable updateExePath, (error) -> done(error) grunt.registerTask 'codesign:installer', 'CodeSign AtomSetup.exe', -> done = @async() - cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomSetupExePath = path.resolve(grunt.config.get('atom.buildDir'), 'installer', 'AtomSetup.exe') - spawn {cmd, args: [atomSetupExePath]}, (error) -> done(error) + signWindowsExecutable atomSetupExePath, (error) -> done(error) grunt.registerTask 'codesign:app', 'CodeSign Atom.app', -> done = @async() @@ -26,14 +48,23 @@ module.exports = (grunt) -> unlockKeychain (error) -> return done(error) if error? - cmd = 'codesign' args = ['--deep', '--force', '--verbose', '--sign', 'Developer ID Application: GitHub', grunt.config.get('atom.shellAppDir')] - spawn {cmd, args}, (error) -> done(error) + spawn {cmd: 'codesign', args: args}, (error) -> done(error) unlockKeychain = (callback) -> return callback() unless process.env.XCODE_KEYCHAIN - cmd = 'security' {XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN} = process.env args = ['unlock-keychain', '-p', XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN] - spawn {cmd, args}, (error) -> callback(error) + spawn {cmd: 'security', args: args}, (error) -> callback(error) + + downloadFile = (sourceUrl, targetPath, callback) -> + options = { + url: sourceUrl + headers: { + 'User-Agent': 'Atom Signing Key build task', + 'Accept': 'application/vnd.github.VERSION.raw' } + } + request(options) + .pipe(fs.createWriteStream(targetPath)) + .on('finish', callback) From 913183417101b99428da357240471e078b87b2dd Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Fri, 8 Apr 2016 20:05:00 -0400 Subject: [PATCH 095/139] :arrow_up: language-css@0.36.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 689b6f9df..5c472966c 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "language-clojure": "0.20.0", "language-coffee-script": "0.46.1", "language-csharp": "0.12.1", - "language-css": "0.36.0", + "language-css": "0.36.1", "language-gfm": "0.85.0", "language-git": "0.12.1", "language-go": "0.42.0", From 88aa5cc68e7af9cead465ecfab1ef41cd1eca513 Mon Sep 17 00:00:00 2001 From: Cole R Lawrence Date: Sat, 9 Apr 2016 13:58:31 -0500 Subject: [PATCH 096/139] :memo: Add the --no-install flag to the windows build readme --- docs/build-instructions/windows.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-instructions/windows.md b/docs/build-instructions/windows.md index 13e3be590..3ec28f139 100644 --- a/docs/build-instructions/windows.md +++ b/docs/build-instructions/windows.md @@ -45,6 +45,7 @@ This will create the Atom application in the `out\Atom` folder as well as copy i ```bash ./script/build --build-dir Z:\Some\Temporary\Directory\ ``` + * `--no-install` - Skips the installation task after building. * `--verbose` - Verbose mode. A lot more information output. ## Do I have to use GitHub Desktop? From 7decbf0d06f36b540d66627250e182f40762d1c1 Mon Sep 17 00:00:00 2001 From: Cole R Lawrence Date: Sat, 9 Apr 2016 14:07:37 -0500 Subject: [PATCH 097/139] :memo: Fix linking the decorateMarker Error happens at this place in the docs https://atom.io/docs/api/v1.6.2/TextEditor#instance-decorateMarkerLayer --- src/text-editor.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 58ecf4712..0d1b3795e 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -1551,7 +1551,7 @@ class TextEditor extends Model # # * `markerLayer` A {TextEditorMarkerLayer} or {MarkerLayer} to decorate. # * `decorationParams` The same parameters that are passed to - # {decorateMarker}, except the `type` cannot be `overlay` or `gutter`. + # {TextEditor::decorateMarker}, except the `type` cannot be `overlay` or `gutter`. # # This API is experimental and subject to change on any release. # From 4c80c7721055f298aecb9baf05c4e3ae29cf4a0b Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sun, 10 Apr 2016 11:58:04 -0400 Subject: [PATCH 098/139] :arrow_up: autocomplete-css@0.11.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c472966c..27725f915 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "about": "1.5.0", "archive-view": "0.61.1", "autocomplete-atom-api": "0.10.0", - "autocomplete-css": "0.11.0", + "autocomplete-css": "0.11.1", "autocomplete-html": "0.7.2", "autocomplete-plus": "2.29.2", "autocomplete-snippets": "1.10.0", From 038640a65829015c200b3a049bc10520b9a5ffd1 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Sun, 10 Apr 2016 12:00:20 -0400 Subject: [PATCH 099/139] :arrow_up: language-less@0.29.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 27725f915..7e6fa0838 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "language-java": "0.17.0", "language-javascript": "0.110.0", "language-json": "0.18.0", - "language-less": "0.29.2", + "language-less": "0.29.3", "language-make": "0.21.1", "language-mustache": "0.13.0", "language-objective-c": "0.15.1", From 852d8d71a401333fbc60ccd37ca4b58956f411d4 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 11 Apr 2016 13:14:30 +0200 Subject: [PATCH 100/139] :arrow_up: bookmarks --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7e6fa0838..2917a512b 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "autoflow": "0.27.0", "autosave": "0.23.1", "background-tips": "0.26.0", - "bookmarks": "0.38.3", + "bookmarks": "0.39.0", "bracket-matcher": "0.82.0", "command-palette": "0.38.0", "deprecation-cop": "0.54.1", From a6e90ba7ee082a056929e01855609d584077283a Mon Sep 17 00:00:00 2001 From: SEAPUNK Date: Thu, 7 Apr 2016 19:09:20 -0500 Subject: [PATCH 101/139] :arrow_up: nodegit@0.12.2 This adds support for 32-bit linux systems --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2917a512b..80c3cdce7 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "less-cache": "0.23", "line-top-index": "0.2.0", "marked": "^0.3.4", - "nodegit": "0.12.1", + "nodegit": "0.12.2", "normalize-package-data": "^2.0.0", "nslog": "^3", "oniguruma": "^5", From 26206bb9c076be653fdb7cd3c4eb443d0fcb1784 Mon Sep 17 00:00:00 2001 From: joshaber Date: Mon, 11 Apr 2016 10:55:13 -0400 Subject: [PATCH 102/139] Update license override for tweetnacl. --- build/tasks/license-overrides.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/tasks/license-overrides.coffee b/build/tasks/license-overrides.coffee index aa136eb37..be56934a2 100644 --- a/build/tasks/license-overrides.coffee +++ b/build/tasks/license-overrides.coffee @@ -123,10 +123,10 @@ module.exports = (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ - 'tweetnacl@0.13.2': + 'tweetnacl@0.14.3': repository: 'https://github.com/dchest/tweetnacl-js' license: 'Public Domain' - source: 'https://github.com/dchest/tweetnacl-js/blob/2f328394f74d83564634fb89ea2798caa3a4edb9/README.md says public domain.' + source: 'https://github.com/dchest/tweetnacl-js/blob/1042c9c65dc8f1dcb9e981d962d7dbbcf58f1fdc/COPYING.txt says public domain.' 'json-schema@0.2.2': repository: 'https://github.com/kriszyp/json-schema' license: 'BSD' From 041906cdae53a22867fd34742fc970994a665f78 Mon Sep 17 00:00:00 2001 From: joshaber Date: Mon, 11 Apr 2016 11:42:21 -0400 Subject: [PATCH 103/139] Update nodegit API usage. This changed in https://github.com/nodegit/nodegit/pull/968. --- src/git-repository-async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/git-repository-async.js b/src/git-repository-async.js index 373ee44bc..aacd482f7 100644 --- a/src/git-repository-async.js +++ b/src/git-repository-async.js @@ -40,7 +40,7 @@ export default class GitRepositoryAsync { constructor (_path, options = {}) { // We'll serialize our access manually. - Git.disableThreadSafety() + Git.setThreadSafetyStatus(Git.THREAD_SAFETY.DISABLED) this.emitter = new Emitter() this.subscriptions = new CompositeDisposable() From 35982bc6ed421bf658287a607a9a4c3e6585a7bc Mon Sep 17 00:00:00 2001 From: joshaber Date: Mon, 11 Apr 2016 13:47:06 -0400 Subject: [PATCH 104/139] :arrow_up: status-bar@1.2.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 80c3cdce7..e99251778 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "settings-view": "0.235.1", "snippets": "1.0.2", "spell-check": "0.67.1", - "status-bar": "1.2.2", + "status-bar": "1.2.3", "styleguide": "0.45.2", "symbols-view": "0.112.0", "tabs": "0.92.1", From d6e00bb53b3460d1a1aad7b19ebd4bb022411e8c Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 11 Apr 2016 16:03:11 -0400 Subject: [PATCH 105/139] Correctly link the debugging guide It was being interpreted as a relative link --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index e142ec930..5b3ea42f4 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -2,7 +2,7 @@ * [ ] Can you reproduce the problem in [safe mode](http://flight-manual.atom.io/hacking-atom/sections/debugging/#check-if-the-problem-shows-up-in-safe-mode)? * [ ] Are you running the [latest version of Atom](http://flight-manual.atom.io/hacking-atom/sections/debugging/#update-to-the-latest-version)? -* [ ] Did you check the [debugging guide](flight-manual.atom.io/hacking-atom/sections/debugging/)? +* [ ] Did you check the [debugging guide](http://flight-manual.atom.io/hacking-atom/sections/debugging/)? * [ ] Did you check the [FAQs on Discuss](https://discuss.atom.io/c/faq)? * [ ] Are you reporting to the [correct repository](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#atom-and-packages)? * [ ] Did you [perform a cursory search](https://github.com/issues?q=is%3Aissue+user%3Aatom+-repo%3Aatom%2Felectron) to see if your bug or enhancement is already reported? From 38fdbac450335a8e3128efeaf2ebe4e090861bd7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 11 Apr 2016 14:30:25 -0600 Subject: [PATCH 106/139] Fix lint error --- build/tasks/codesign-task.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index a00e2d358..d084028a7 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -63,7 +63,8 @@ module.exports = (grunt) -> url: sourceUrl headers: { 'User-Agent': 'Atom Signing Key build task', - 'Accept': 'application/vnd.github.VERSION.raw' } + 'Accept': 'application/vnd.github.VERSION.raw' + } } request(options) .pipe(fs.createWriteStream(targetPath)) From 639ee963a0aec8368fdb5ff8d9d93d77e27976ab Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 11 Apr 2016 14:35:47 -0600 Subject: [PATCH 107/139] Revert "Merge pull request #11412 from damieng/dg-ns-codesign" This reverts commit 91b0726c9edc8937a7d97069a6494ddb209f8f0d, reversing changes made to d6e00bb53b3460d1a1aad7b19ebd4bb022411e8c. --- build/certs/AtomDevTestSignKey.p12 | Bin 1765 -> 0 bytes build/tasks/codesign-task.coffee | 50 ++++++----------------------- 2 files changed, 9 insertions(+), 41 deletions(-) delete mode 100644 build/certs/AtomDevTestSignKey.p12 diff --git a/build/certs/AtomDevTestSignKey.p12 b/build/certs/AtomDevTestSignKey.p12 deleted file mode 100644 index a93e9a9f042a29411a05cdf832c99041fd6d6180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmb7FX;c$e6n--kgF*JN2!|yK2+B4g2@((#0yaktvM6vs!xADON+3jBs7iveDWJuQ ziqXi9R0Tv-tY8rX9wVq&WDBAqu2rcDiWT~>Ew$(Pr{~U_x%a#8yLaZ!d}nY8@d1ip zxP&Mrk`|=1)5p{i6+|W><`N{tYzU|0670%s?L4xjU5^!8sZU|RO&n#=eOfsq7hlf{6-QGPd zN^vc!Deho{doNAf#RQ#~XIp7Y+8y#MRqlJ#@k~9(=3BFrSs$#) zd`02jljrXL(%+Ok-0#^`u^d}9vO^@U?$q;@+In8I=`m4T+c+6{px0}~J+FPmzwWKd zeqEGpwK$VJ=x>-|q7c1Z>Z@?RU+;Qj!l?Sy>E;50oa3e~tZE=*0IBDrJ#O-}|*FF1AK)**vT^=o;o>j|mW?snuqjixmXK+hj zN`w|G?ec{)iIhv?jK*-|9AqM^Vty+n$s*?M^*z01XKSLas@&W;l4t|sxH_ykg=>tq zJauamQN71Cm)ck|s}z;iEmyc*NWY9^=YRI)fgR7S$F-Y{lp@`H_OeBq0@|Ltn-k)* zY|gGPcyIM=vN>qU@9t3+^O`z4l|E8#wm-#l6fPLKK>k$+XUFRb%gxJb=dK=IM?({ReW?q|0{~WUz_};=g+EdmI z%~zF1YgcX0vs|$&wUuEpX4qnt?UI|rxP+=jW?p$3Js4y7v!yUb{fJz!cb_<+>%_rs zzZa!hvWnHpxx-E4f$5{RZ7Dv|P;{C|cVM%XBR%1#4nD zyfS9>7clzBqO!n&>r`+hasWA(R7OfFaA>eEdSwHW}%srI-n5nD~b$d(==!A6P~KbgNlkiZvGR`HWWlz`ai z_}KVpipM5Vj6fJG+KQVRs8gMAnj;Oz=}vU#5Ce4@lj=x=2ZPCAhTsdS44n2?McZ#x zWC^19(`8wFp(u7;EH6UD$Hm9LzByzDz{EKK7iXbjF=&~`>Fe^F`*2|UZnM}0-M1$` z-C>80Z8Tu`sQA51JQq}$U{aEztr3=Z>@;=3HY3}*5)~5z>H0WEuEc^xk87-OXUm39 zI-FX1Ap5$3z;Q4^(OY?A_vmN#4}^St@y>)4JqB})=foL*_Z7tlU$>lR8&*B`ST>;1 znWNM66Q}zziXi|gPQnv$HTY;IWCWQcpg6!IrXqw8f(NH+HQ$wNeG`1b_l=|>53PA0 ze!}tpPgkN9IIoAB_GDron={)vb6_Il>zTk8hQVQwf}aD$Ctgs4^jMjTB9x-aCA>ho zt*I++$>lTUbY-dRWN5h?=_unYJMFDp=aqUgXY}Lz{oV}QXGra6QO7P$M0ZbzfrI@} zx#8^F^6}#|{STkpTccWTF7c+|)+J_FG5*2W(K(vdXj>ugqjGf8CGMcvfboa1uCTo8cd_e`A@*-rK0Jqhg6_rrc^3ot+O=)Q RYtV|ry%{EHmBgtZ&Yvnyq?G^w diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index d084028a7..2a061742b 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -1,46 +1,24 @@ path = require 'path' -fs = require 'fs' -request = require 'request' module.exports = (grunt) -> {spawn} = require('./task-helpers')(grunt) - signUsingWindowsSDK = (exeToSign, callback) -> - {WIN_P12KEY_PASSWORD, WIN_P12KEY_URL} = process.env - if WIN_P12KEY_URL? - grunt.log.ok("Obtaining signing key") - downloadedKeyFile = path.resolve(__dirname, 'DownloadedSignKey.p12') - downloadFile WIN_P12KEY_URL, downloadedKeyFile, (done) -> - signUsingWindowsSDKTool exeToSign, downloadedKeyFile, WIN_P12KEY_PASSWORD, (done) -> - fs.unlinkSync(downloadedKeyFile) - callback() - else - signUsingWindowsSDKTool exeToSign, path.resolve(__dirname, '..', 'certs', 'AtomDevTestSignKey.p12'), 'password', callback - - signUsingWindowsSDKTool = (exeToSign, keyFilePath, password, callback) -> - grunt.log.ok("Signing #{exeToSign}") - args = ['sign', '/v', '/p', password, '/f', keyFilePath, exeToSign] - spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback - - signUsingJanky = (exeToSign, callback) -> - spawn {cmd: 'signtool', args: [exeToSign]}, callback - - signWindowsExecutable = if process.env.JANKY_SIGNTOOL then signUsingJanky else signUsingWindowsSDK - grunt.registerTask 'codesign:exe', 'CodeSign Atom.exe and Update.exe', -> done = @async() spawn {cmd: 'taskkill', args: ['/F', '/IM', 'atom.exe']}, -> + cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomExePath = path.join(grunt.config.get('atom.shellAppDir'), 'atom.exe') - signWindowsExecutable atomExePath, (error) -> + spawn {cmd, args: [atomExePath]}, (error) -> return done(error) if error? updateExePath = path.resolve(__dirname, '..', 'node_modules', 'grunt-electron-installer', 'vendor', 'Update.exe') - signWindowsExecutable updateExePath, (error) -> done(error) + spawn {cmd, args: [updateExePath]}, (error) -> done(error) grunt.registerTask 'codesign:installer', 'CodeSign AtomSetup.exe', -> done = @async() + cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomSetupExePath = path.resolve(grunt.config.get('atom.buildDir'), 'installer', 'AtomSetup.exe') - signWindowsExecutable atomSetupExePath, (error) -> done(error) + spawn {cmd, args: [atomSetupExePath]}, (error) -> done(error) grunt.registerTask 'codesign:app', 'CodeSign Atom.app', -> done = @async() @@ -48,24 +26,14 @@ module.exports = (grunt) -> unlockKeychain (error) -> return done(error) if error? + cmd = 'codesign' args = ['--deep', '--force', '--verbose', '--sign', 'Developer ID Application: GitHub', grunt.config.get('atom.shellAppDir')] - spawn {cmd: 'codesign', args: args}, (error) -> done(error) + spawn {cmd, args}, (error) -> done(error) unlockKeychain = (callback) -> return callback() unless process.env.XCODE_KEYCHAIN + cmd = 'security' {XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN} = process.env args = ['unlock-keychain', '-p', XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN] - spawn {cmd: 'security', args: args}, (error) -> callback(error) - - downloadFile = (sourceUrl, targetPath, callback) -> - options = { - url: sourceUrl - headers: { - 'User-Agent': 'Atom Signing Key build task', - 'Accept': 'application/vnd.github.VERSION.raw' - } - } - request(options) - .pipe(fs.createWriteStream(targetPath)) - .on('finish', callback) + spawn {cmd, args}, (error) -> callback(error) From 95adf1616067a27387c72acae768a0d8d1df6063 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Fri, 8 Apr 2016 14:36:51 -0700 Subject: [PATCH 108/139] Signing support on Windows with P12 keys --- build/certs/AtomDevTestSignKey.p12 | Bin 0 -> 1765 bytes build/tasks/codesign-task.coffee | 49 +++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 build/certs/AtomDevTestSignKey.p12 diff --git a/build/certs/AtomDevTestSignKey.p12 b/build/certs/AtomDevTestSignKey.p12 new file mode 100644 index 0000000000000000000000000000000000000000..a93e9a9f042a29411a05cdf832c99041fd6d6180 GIT binary patch literal 1765 zcmb7FX;c$e6n--kgF*JN2!|yK2+B4g2@((#0yaktvM6vs!xADON+3jBs7iveDWJuQ ziqXi9R0Tv-tY8rX9wVq&WDBAqu2rcDiWT~>Ew$(Pr{~U_x%a#8yLaZ!d}nY8@d1ip zxP&Mrk`|=1)5p{i6+|W><`N{tYzU|0670%s?L4xjU5^!8sZU|RO&n#=eOfsq7hlf{6-QGPd zN^vc!Deho{doNAf#RQ#~XIp7Y+8y#MRqlJ#@k~9(=3BFrSs$#) zd`02jljrXL(%+Ok-0#^`u^d}9vO^@U?$q;@+In8I=`m4T+c+6{px0}~J+FPmzwWKd zeqEGpwK$VJ=x>-|q7c1Z>Z@?RU+;Qj!l?Sy>E;50oa3e~tZE=*0IBDrJ#O-}|*FF1AK)**vT^=o;o>j|mW?snuqjixmXK+hj zN`w|G?ec{)iIhv?jK*-|9AqM^Vty+n$s*?M^*z01XKSLas@&W;l4t|sxH_ykg=>tq zJauamQN71Cm)ck|s}z;iEmyc*NWY9^=YRI)fgR7S$F-Y{lp@`H_OeBq0@|Ltn-k)* zY|gGPcyIM=vN>qU@9t3+^O`z4l|E8#wm-#l6fPLKK>k$+XUFRb%gxJb=dK=IM?({ReW?q|0{~WUz_};=g+EdmI z%~zF1YgcX0vs|$&wUuEpX4qnt?UI|rxP+=jW?p$3Js4y7v!yUb{fJz!cb_<+>%_rs zzZa!hvWnHpxx-E4f$5{RZ7Dv|P;{C|cVM%XBR%1#4nD zyfS9>7clzBqO!n&>r`+hasWA(R7OfFaA>eEdSwHW}%srI-n5nD~b$d(==!A6P~KbgNlkiZvGR`HWWlz`ai z_}KVpipM5Vj6fJG+KQVRs8gMAnj;Oz=}vU#5Ce4@lj=x=2ZPCAhTsdS44n2?McZ#x zWC^19(`8wFp(u7;EH6UD$Hm9LzByzDz{EKK7iXbjF=&~`>Fe^F`*2|UZnM}0-M1$` z-C>80Z8Tu`sQA51JQq}$U{aEztr3=Z>@;=3HY3}*5)~5z>H0WEuEc^xk87-OXUm39 zI-FX1Ap5$3z;Q4^(OY?A_vmN#4}^St@y>)4JqB})=foL*_Z7tlU$>lR8&*B`ST>;1 znWNM66Q}zziXi|gPQnv$HTY;IWCWQcpg6!IrXqw8f(NH+HQ$wNeG`1b_l=|>53PA0 ze!}tpPgkN9IIoAB_GDron={)vb6_Il>zTk8hQVQwf}aD$Ctgs4^jMjTB9x-aCA>ho zt*I++$>lTUbY-dRWN5h?=_unYJMFDp=aqUgXY}Lz{oV}QXGra6QO7P$M0ZbzfrI@} zx#8^F^6}#|{STkpTccWTF7c+|)+J_FG5*2W(K(vdXj>ugqjGf8CGMcvfboa1uCTo8cd_e`A@*-rK0Jqhg6_rrc^3ot+O=)Q RYtV|ry%{EHmBgtZ&Yvnyq?G^w literal 0 HcmV?d00001 diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index 2a061742b..a00e2d358 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -1,24 +1,46 @@ path = require 'path' +fs = require 'fs' +request = require 'request' module.exports = (grunt) -> {spawn} = require('./task-helpers')(grunt) + signUsingWindowsSDK = (exeToSign, callback) -> + {WIN_P12KEY_PASSWORD, WIN_P12KEY_URL} = process.env + if WIN_P12KEY_URL? + grunt.log.ok("Obtaining signing key") + downloadedKeyFile = path.resolve(__dirname, 'DownloadedSignKey.p12') + downloadFile WIN_P12KEY_URL, downloadedKeyFile, (done) -> + signUsingWindowsSDKTool exeToSign, downloadedKeyFile, WIN_P12KEY_PASSWORD, (done) -> + fs.unlinkSync(downloadedKeyFile) + callback() + else + signUsingWindowsSDKTool exeToSign, path.resolve(__dirname, '..', 'certs', 'AtomDevTestSignKey.p12'), 'password', callback + + signUsingWindowsSDKTool = (exeToSign, keyFilePath, password, callback) -> + grunt.log.ok("Signing #{exeToSign}") + args = ['sign', '/v', '/p', password, '/f', keyFilePath, exeToSign] + spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback + + signUsingJanky = (exeToSign, callback) -> + spawn {cmd: 'signtool', args: [exeToSign]}, callback + + signWindowsExecutable = if process.env.JANKY_SIGNTOOL then signUsingJanky else signUsingWindowsSDK + grunt.registerTask 'codesign:exe', 'CodeSign Atom.exe and Update.exe', -> done = @async() spawn {cmd: 'taskkill', args: ['/F', '/IM', 'atom.exe']}, -> - cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomExePath = path.join(grunt.config.get('atom.shellAppDir'), 'atom.exe') - spawn {cmd, args: [atomExePath]}, (error) -> + signWindowsExecutable atomExePath, (error) -> return done(error) if error? updateExePath = path.resolve(__dirname, '..', 'node_modules', 'grunt-electron-installer', 'vendor', 'Update.exe') - spawn {cmd, args: [updateExePath]}, (error) -> done(error) + signWindowsExecutable updateExePath, (error) -> done(error) grunt.registerTask 'codesign:installer', 'CodeSign AtomSetup.exe', -> done = @async() - cmd = process.env.JANKY_SIGNTOOL ? 'signtool' atomSetupExePath = path.resolve(grunt.config.get('atom.buildDir'), 'installer', 'AtomSetup.exe') - spawn {cmd, args: [atomSetupExePath]}, (error) -> done(error) + signWindowsExecutable atomSetupExePath, (error) -> done(error) grunt.registerTask 'codesign:app', 'CodeSign Atom.app', -> done = @async() @@ -26,14 +48,23 @@ module.exports = (grunt) -> unlockKeychain (error) -> return done(error) if error? - cmd = 'codesign' args = ['--deep', '--force', '--verbose', '--sign', 'Developer ID Application: GitHub', grunt.config.get('atom.shellAppDir')] - spawn {cmd, args}, (error) -> done(error) + spawn {cmd: 'codesign', args: args}, (error) -> done(error) unlockKeychain = (callback) -> return callback() unless process.env.XCODE_KEYCHAIN - cmd = 'security' {XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN} = process.env args = ['unlock-keychain', '-p', XCODE_KEYCHAIN_PASSWORD, XCODE_KEYCHAIN] - spawn {cmd, args}, (error) -> callback(error) + spawn {cmd: 'security', args: args}, (error) -> callback(error) + + downloadFile = (sourceUrl, targetPath, callback) -> + options = { + url: sourceUrl + headers: { + 'User-Agent': 'Atom Signing Key build task', + 'Accept': 'application/vnd.github.VERSION.raw' } + } + request(options) + .pipe(fs.createWriteStream(targetPath)) + .on('finish', callback) From 77657aca0d19348efd56cd2240f066b267552092 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 11 Apr 2016 15:13:20 -0600 Subject: [PATCH 109/139] Fix linter error --- build/tasks/codesign-task.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index a00e2d358..d084028a7 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -63,7 +63,8 @@ module.exports = (grunt) -> url: sourceUrl headers: { 'User-Agent': 'Atom Signing Key build task', - 'Accept': 'application/vnd.github.VERSION.raw' } + 'Accept': 'application/vnd.github.VERSION.raw' + } } request(options) .pipe(fs.createWriteStream(targetPath)) From 1721938057ee732583d26d66808564689fbb70b0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 11 Apr 2016 15:13:45 -0600 Subject: [PATCH 110/139] Use signtool from environment variable --- build/tasks/codesign-task.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/tasks/codesign-task.coffee b/build/tasks/codesign-task.coffee index d084028a7..559d41bbf 100644 --- a/build/tasks/codesign-task.coffee +++ b/build/tasks/codesign-task.coffee @@ -23,7 +23,7 @@ module.exports = (grunt) -> spawn {cmd: 'C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.1A\\bin\\signtool.exe', args: args}, callback signUsingJanky = (exeToSign, callback) -> - spawn {cmd: 'signtool', args: [exeToSign]}, callback + spawn {cmd: process.env.JANKY_SIGNTOOL, args: [exeToSign]}, callback signWindowsExecutable = if process.env.JANKY_SIGNTOOL then signUsingJanky else signUsingWindowsSDK From 0f5841376c6d179c20f4c94d34f2d6291fab0ccc Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Mon, 11 Apr 2016 21:00:16 -0700 Subject: [PATCH 111/139] :arrow_up: tree view (cherry picked from commit a3b844ee003f6af6739a515ae34338883a211493) --- changes.md | 0 changes2.md | 397 ++++++++++++++++++++++++++++++++++++++++++++++++ changes3.md | 414 +++++++++++++++++++++++++++++++++++++++++++++++++++ fsck.txt | 84 +++++++++++ package.json | 1 + 5 files changed, 896 insertions(+) create mode 100644 changes.md create mode 100644 changes2.md create mode 100644 changes3.md create mode 100644 fsck.txt diff --git a/changes.md b/changes.md new file mode 100644 index 000000000..e69de29bb diff --git a/changes2.md b/changes2.md new file mode 100644 index 000000000..e8224e628 --- /dev/null +++ b/changes2.md @@ -0,0 +1,397 @@ +### [Atom Core](https://github.com/atom/atom) + +v1.6.0...v1.7.0-beta0 + +* [atom/atom#10747 - Clarify Windows build docs for VS2015 etc.](https://github.com/atom/atom/pull/10747) +* [atom/atom#10743 - Don't cascade on reload](https://github.com/atom/atom/pull/10743) +* [atom/atom#9198 - permit any whole number for tabLength](https://github.com/atom/atom/pull/9198) +* [atom/atom#10758 - Fix status in subdir](https://github.com/atom/atom/pull/10758) +* [atom/atom#10768 - Temporarily disable deserializers & viewProviders metadata fields](https://github.com/atom/atom/pull/10768) +* [atom/atom#10764 - Let packages define deserializers & view providers as main module methods](https://github.com/atom/atom/pull/10764) +* [atom/atom#10778 - Fix minor typo in CONTRIBUTING.md](https://github.com/atom/atom/pull/10778) +* [atom/atom#10789 - Upgrade autocomplete-plus to use new text-buffer API](https://github.com/atom/atom/pull/10789) +* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) +* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) +* [atom/atom#10792 - Fix TextEditorPresenter spec timeout.](https://github.com/atom/atom/pull/10792) +* [atom/atom#10803 - Fix typo in function call](https://github.com/atom/atom/pull/10803) +* [atom/atom#10828 - Fix another TextEditorPresenter spec race](https://github.com/atom/atom/pull/10828) +* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) +* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) +* [atom/atom#10838 - Log output for core specs](https://github.com/atom/atom/pull/10838) +* [atom/atom#10818 - Register Atom for file associations in Windows](https://github.com/atom/atom/pull/10818) +* [atom/atom#10605 - Periodically save state and store in indexedDB](https://github.com/atom/atom/pull/10605) +* [atom/atom#9627 - Update to Electron 0.36](https://github.com/atom/atom/pull/9627) +* [atom/atom#10835 - Add TextEditor.prototype.cursorsForScreenRowRange](https://github.com/atom/atom/pull/10835) +* [atom/atom#10795 - Remove unused Core Team Project Management labels](https://github.com/atom/atom/pull/10795) +* [atom/atom#10858 - Update grunt-electron-installer to latest version](https://github.com/atom/atom/pull/10858) +* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) +* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) +* [atom/atom#10873 - Avoid emitting config events while loading packages](https://github.com/atom/atom/pull/10873) +* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) +* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) +* [atom/atom#10863 - Compare markers instead of ranges in Selection](https://github.com/atom/atom/pull/10863) +* [atom/atom#10874 - Avoid Windows 260-character path limits in script\clean](https://github.com/atom/atom/pull/10874) +* [atom/atom#10861 - Compute line foldability lazily](https://github.com/atom/atom/pull/10861) +* [atom/atom#10843 - Bump packages to use async git](https://github.com/atom/atom/pull/10843) +* [atom/atom#10886 - Update Atom build directory in build instructions](https://github.com/atom/atom/pull/10886) +* [atom/atom#10885 - Cache regexes in LanguageMode.prototype.getRegexForProperty](https://github.com/atom/atom/pull/10885) +* [atom/atom#10888 - Load packages before deserializing state](https://github.com/atom/atom/pull/10888) +* [atom/atom#10870 - Add Issue template and extra version info](https://github.com/atom/atom/pull/10870) +* [atom/atom#10878 - Allow pasting white space when `autoIndentOnPaste` is enabled](https://github.com/atom/atom/pull/10878) +* [atom/atom#10895 - Fix some spec issues](https://github.com/atom/atom/pull/10895) +* [atom/atom#10901 - remove Open Roadmap menu item, fixes #10884](https://github.com/atom/atom/pull/10901) +* [atom/atom#10898 - Pass the notification manager when splitting panes](https://github.com/atom/atom/pull/10898) +* [atom/atom#10927 - Upgrade electron to fix command-backtick bug](https://github.com/atom/atom/pull/10927) +* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) +* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) +* [atom/atom#10921 - Add support for keybindings with keyup keystrokes](https://github.com/atom/atom/pull/10921) +* [atom/atom#10841 - Add the -a, --add CLI option](https://github.com/atom/atom/pull/10841) +* [atom/atom#10933 - Fix block decorations spec in text editor presenter](https://github.com/atom/atom/pull/10933) +* [atom/atom#10925 - Faster state serialization](https://github.com/atom/atom/pull/10925) +* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) +* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) +* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) +* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) +* [atom/atom#10326 - Fix Windows installer path update woes](https://github.com/atom/atom/pull/10326) +* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) +* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) +* [atom/atom#10984 - [WIP] experiment with circle ci](https://github.com/atom/atom/pull/10984) +* [atom/atom#10737 - Add MRU tab switching functionality](https://github.com/atom/atom/pull/10737) +* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) +* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) +* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) +* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) +* [atom/atom#11006 - Move spec from tabs package](https://github.com/atom/atom/pull/11006) +* [atom/atom#10851 - Registry for TextEditors](https://github.com/atom/atom/pull/10851) +* [atom/atom#11010 - Always strip git+ prefix and .git suffix from package repository URLs](https://github.com/atom/atom/pull/11010) +* [atom/atom#11011 - Autoscroll after consolidating selections](https://github.com/atom/atom/pull/11011) +* [atom/atom#11008 - Add documentation for order key in config.](https://github.com/atom/atom/pull/11008) +* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) +* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) +* [atom/atom#10675 - Expose application updater lifecycle events to packages](https://github.com/atom/atom/pull/10675) +* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) +* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) +* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) +* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) +* [atom/atom#11036 - Skip deleted directories when restoring application windows](https://github.com/atom/atom/pull/11036) +* [atom/atom#11063 - Show tooltip immediately if the tooltip trigger is manual](https://github.com/atom/atom/pull/11063) +* [atom/atom#10511 - Use ELECTRON_RUN_AS_NODE Variable Key](https://github.com/atom/atom/pull/10511) +* [atom/atom#10955 - TextEditor customization](https://github.com/atom/atom/pull/10955) +* [atom/atom#11065 - Default to auto height being true.](https://github.com/atom/atom/pull/11065) +* [atom/atom#11053 - Ensure atom.cmd --wait correctly waits in Windows cmd & powershell](https://github.com/atom/atom/pull/11053) +* [atom/atom#11060 - Serialize MarkerLayers only on quit](https://github.com/atom/atom/pull/11060) +* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) +* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) +* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) +* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) +* [atom/atom#11099 - Add zero to hexadecimal numbers below F (16)](https://github.com/atom/atom/pull/11099) +* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) +* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) +* [atom/atom#11077 - Scroll to cursor on unfold all](https://github.com/atom/atom/pull/11077) +* [atom/atom#11103 - Make cli atom --wait work on Cygwin](https://github.com/atom/atom/pull/11103) +* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) +* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) +* [atom/atom#11111 - Default the options parameter to an empty object](https://github.com/atom/atom/pull/11111) +* [atom/atom#11127 - Bump markdown-preview@v0.158.0](https://github.com/atom/atom/pull/11127) +* [atom/atom#8793 - squirrel-update test on desktop shortcut groups too many assertions](https://github.com/atom/atom/pull/8793) +* [atom/atom#11078 - Add TextEditors to the registry only when opting in](https://github.com/atom/atom/pull/11078) +* [atom/atom#11054 - Patch Environment On OSX And Allow A Different Environment Per Window](https://github.com/atom/atom/pull/11054) +* [atom/atom#11153 - Fix node env](https://github.com/atom/atom/pull/11153) +* [atom/atom#11162 - BufferedProcess: search only new data for new lines rather than entire buffer, take 2](https://github.com/atom/atom/pull/11162) +* [atom/atom#11166 - Note where GitRepositoryAsync deviates from its synchronous predecessor](https://github.com/atom/atom/pull/11166) + +### [one-dark-ui](https://github.com/atom/one-dark-ui) + +v1.1.9...v1.2.0 + +* [atom/one-dark-ui#113 - Specify config schema in package.json](https://github.com/atom/one-dark-ui/pull/113) +* [atom/one-dark-ui#121 - Fix typo in comment for ui-variables.less](https://github.com/atom/one-dark-ui/pull/121) + +### [one-light-ui](https://github.com/atom/one-light-ui) + +v1.1.9...v1.2.0 + +* [atom/one-light-ui#48 - Specify config schema in package.json](https://github.com/atom/one-light-ui/pull/48) + +### [about](https://github.com/atom/about) + +v1.3.0...v1.4.1 + +* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) +* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) +* [atom/about#13 - Specify deserializer method in package.json, the new way](https://github.com/atom/about/pull/13) +* [atom/about#12 - Show update information on the about page](https://github.com/atom/about/pull/12) +* [atom/about#15 - Move away from deprecated Electron require syntax](https://github.com/atom/about/pull/15) + +### [archive-view](https://github.com/atom/archive-view) + +v0.61.0...v0.61.1 + +* [atom/archive-view#32 - Specify deserializer in package.json](https://github.com/atom/archive-view/pull/32) + +### [autocomplete-plus](https://github.com/atom/autocomplete-plus) + +v2.25.0...v2.29.1 + +* [atom/autocomplete-plus#612 - bugfix: auto indentation after suggestion confirm](https://github.com/atom/autocomplete-plus/pull/612) +* [atom/autocomplete-plus#641 - Stop flickering when adjusting margins](https://github.com/atom/autocomplete-plus/pull/641) +* [atom/autocomplete-plus#637 - Move config schema to package.json](https://github.com/atom/autocomplete-plus/pull/637) +* [atom/autocomplete-plus#659 - Batch autocompletion show/hide](https://github.com/atom/autocomplete-plus/pull/659) +* [atom/autocomplete-plus#675 - :art: Clean up formatting of fileBlacklist setting description](https://github.com/atom/autocomplete-plus/pull/675) +* [atom/autocomplete-plus#672 - Redesign SymbolStore and SymbolProvider](https://github.com/atom/autocomplete-plus/pull/672) +* [atom/autocomplete-plus#667 - Add unicode support for \w regexps](https://github.com/atom/autocomplete-plus/pull/667) +* [atom/autocomplete-plus#681 - Fix maximum call stack size exceeded error](https://github.com/atom/autocomplete-plus/pull/681) + +### [autosave](https://github.com/atom/autosave) + +v0.23.0...v0.23.1 + +* [atom/autosave#56 - Move config schema to package.json](https://github.com/atom/autosave/pull/56) + +### [bracket-matcher](https://github.com/atom/bracket-matcher) + +v0.79.0...v0.81.0 + +* [atom/bracket-matcher#196 - Fix spelling in settings](https://github.com/atom/bracket-matcher/pull/196) +* [atom/bracket-matcher#197 - Move config schema to package.json](https://github.com/atom/bracket-matcher/pull/197) +* [atom/bracket-matcher#212 - Make updating matches faster for multi-cursor editing](https://github.com/atom/bracket-matcher/pull/212) +* [atom/bracket-matcher#219 - Clean up view subscriptions when editor is destroyed](https://github.com/atom/bracket-matcher/pull/219) +* [atom/bracket-matcher#221 - Enable bracket matching for elixir](https://github.com/atom/bracket-matcher/pull/221) + +### [deprecation-cop](https://github.com/atom/deprecation-cop) + +v0.54.0...v0.54.1 + +* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) +* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) +* [atom/deprecation-cop#67 - Specify deserializer method in package.json](https://github.com/atom/deprecation-cop/pull/67) + +### [fuzzy-finder](https://github.com/atom/fuzzy-finder) + +v0.94.0...v1.0.3 + +* [atom/fuzzy-finder#160 - Move config schema to package.json](https://github.com/atom/fuzzy-finder/pull/160) +* [atom/fuzzy-finder#167 - Async git](https://github.com/atom/fuzzy-finder/pull/167) +* [atom/fuzzy-finder#174 - Fix spec race](https://github.com/atom/fuzzy-finder/pull/174) +* [atom/fuzzy-finder#178 - Handle symlink project paths](https://github.com/atom/fuzzy-finder/pull/178) +* [atom/fuzzy-finder#180 - Return project paths correctly if last-opened path is not in project](https://github.com/atom/fuzzy-finder/pull/180) + +### [git-diff](https://github.com/atom/git-diff) + +v0.57.0...v1.0.1 + +* [atom/git-diff#81 - Move config schema to package.json](https://github.com/atom/git-diff/pull/81) +* [atom/git-diff#82 - Async git](https://github.com/atom/git-diff/pull/82) +* [atom/git-diff#95 - Catch errors from new files.](https://github.com/atom/git-diff/pull/95) + +### [grammar-selector](https://github.com/atom/grammar-selector) + +v0.48.0...v0.48.1 + +* [atom/grammar-selector#25 - Add description for config setting](https://github.com/atom/grammar-selector/pull/25) +* [atom/grammar-selector#29 - Move config schema to package.json](https://github.com/atom/grammar-selector/pull/29) + +### [image-view](https://github.com/atom/image-view) + +v0.56.0...v0.57.0 + +* [atom/image-view#40 - Zoom to fit](https://github.com/atom/image-view/pull/40) + +### [incompatible-packages](https://github.com/atom/incompatible-packages) + +v0.25.0...v0.25.1 + +* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) +* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) +* [atom/incompatible-packages#12 - Specify deserializer method in package.json](https://github.com/atom/incompatible-packages/pull/12) + +### [keybinding-resolver](https://github.com/atom/keybinding-resolver) + +v0.33.0...v0.35.0 + +* [atom/keybinding-resolver#23 - Update coffeelint support](https://github.com/atom/keybinding-resolver/pull/23) +* [atom/keybinding-resolver#37 - Show keyup events that match a binding](https://github.com/atom/keybinding-resolver/pull/37) + +### [line-ending-selector](https://github.com/atom/line-ending-selector) + +v0.3.0...v0.3.1 + +* [atom/line-ending-selector#17 - Move config schema to package.json](https://github.com/atom/line-ending-selector/pull/17) + +### [link](https://github.com/atom/link) + +v0.31.0...v0.31.1 + +* [atom/link#14 - Move away from deprecated Electron require syntax](https://github.com/atom/link/pull/14) + +### [markdown-preview](https://github.com/atom/markdown-preview) + +v0.157.2...v0.158.0 + +* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) +* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) +* [atom/markdown-preview#367 - Use new package.json fields to allow deferred loading](https://github.com/atom/markdown-preview/pull/367) +* [atom/markdown-preview#335 - Use GitHub style when "Save as HTML"](https://github.com/atom/markdown-preview/pull/335) + +### [notifications](https://github.com/atom/notifications) + +v0.62.1...v0.63.1 + +* [atom/notifications#105 - Move config schema to package.json](https://github.com/atom/notifications/pull/105) +* [atom/notifications#111 - Use https://git.io insead of http](https://github.com/atom/notifications/pull/111) +* [atom/notifications#113 - replace ATOM_HOME in issue title with generic placeholder](https://github.com/atom/notifications/pull/113) +* [atom/notifications#114 - Use bit.ly instead of git.io.](https://github.com/atom/notifications/pull/114) +* [atom/notifications#115 - URL shortening, take 2](https://github.com/atom/notifications/pull/115) + +### [open-on-github](https://github.com/atom/open-on-github) + +v0.41.0...v1.0.1 + +* [atom/open-on-github#59 - Move config schema to package.json](https://github.com/atom/open-on-github/pull/59) +* [atom/open-on-github#60 - Async git](https://github.com/atom/open-on-github/pull/60) +* [atom/open-on-github#66 - Move away from deprecated Electron require syntax](https://github.com/atom/open-on-github/pull/66) + +### [package-generator](https://github.com/atom/package-generator) + +v0.41.0...v1.0.0 + +* [atom/package-generator#37 - Move config schema to package.json](https://github.com/atom/package-generator/pull/37) +* [atom/package-generator#36 - Support JS package generation](https://github.com/atom/package-generator/pull/36) + +### [settings-view](https://github.com/atom/settings-view) + +v0.232.3...v0.235.0 + +* [atom/settings-view#731 - Specify deserializer in package.json](https://github.com/atom/settings-view/pull/731) +* [atom/settings-view#749 - Move away from deprecated Electron require syntax](https://github.com/atom/settings-view/pull/749) +* [atom/settings-view#750 - Another require fix for remote](https://github.com/atom/settings-view/pull/750) +* [atom/settings-view#743 - Display and manage Git-based packages](https://github.com/atom/settings-view/pull/743) +* [atom/settings-view#748 - Add defaults on focus](https://github.com/atom/settings-view/pull/748) +* [atom/settings-view#736 - Add collapsable section for option groups](https://github.com/atom/settings-view/pull/736) + +### [spell-check](https://github.com/atom/spell-check) + +v0.65.0...v0.67.0 + +* [atom/spell-check#103 - Update README.md](https://github.com/atom/spell-check/pull/103) +* [atom/spell-check#33 - Add feature: toggle on/off](https://github.com/atom/spell-check/pull/33) +* [atom/spell-check#108 - subscriptionsOfCommands -> commandSubscription](https://github.com/atom/spell-check/pull/108) +* [atom/spell-check#112 - Move config schema to package.json](https://github.com/atom/spell-check/pull/112) +* [atom/spell-check#114 - updates spellchecker to use system language](https://github.com/atom/spell-check/pull/114) + +### [status-bar](https://github.com/atom/status-bar) + +v0.83.0...v1.2.0 + +* [atom/status-bar#121 - Move config schema to package.json](https://github.com/atom/status-bar/pull/121) +* [atom/status-bar#114 - Async git](https://github.com/atom/status-bar/pull/114) +* [atom/status-bar#122 - Make updating info faster for multi-cursor edits](https://github.com/atom/status-bar/pull/122) +* [atom/status-bar#129 - Hide diff stats for new files](https://github.com/atom/status-bar/pull/129) +* [atom/status-bar#131 - Fix error with no active item](https://github.com/atom/status-bar/pull/131) +* [atom/status-bar#133 - Move to the footer](https://github.com/atom/status-bar/pull/133) + +### [styleguide](https://github.com/atom/styleguide) + +v0.45.1...v0.45.2 + +* [atom/styleguide#34 - Specify deserializer in package.json](https://github.com/atom/styleguide/pull/34) + +### [symbols-view](https://github.com/atom/symbols-view) + +v0.110.1...v0.112.0 + +* [atom/symbols-view#147 - Add support for ES2015 static methods](https://github.com/atom/symbols-view/pull/147) +* [atom/symbols-view#151 - Specify config schema in package.json](https://github.com/atom/symbols-view/pull/151) +* [atom/symbols-view#157 - Add es7 async functions to ctags](https://github.com/atom/symbols-view/pull/157) + +### [tabs](https://github.com/atom/tabs) + +v0.91.3...v0.92.0 + +* [atom/tabs#134 - Add "open in new window" option to tabs context menu](https://github.com/atom/tabs/pull/134) + +### [timecop](https://github.com/atom/timecop) + +v0.33.0...v0.33.1 + +* [atom/timecop#15 - Specify deserializer in package.json](https://github.com/atom/timecop/pull/15) + +### [welcome](https://github.com/atom/welcome) + +v0.33.0...v0.34.0 + +* [atom/welcome#45 - Move config schema to package.json](https://github.com/atom/welcome/pull/45) +* [atom/welcome#47 - Change menu names for different platforms](https://github.com/atom/welcome/pull/47) + +### [whitespace](https://github.com/atom/whitespace) + +v0.32.1...v0.32.2 + +* [atom/whitespace#107 - Move config schema to package.json](https://github.com/atom/whitespace/pull/107) + +### [language-clojure](https://github.com/atom/language-clojure) + +v0.19.1...v0.20.0 + +* [atom/language-clojure#39 - Fix tokenization of sexp and map nested at beginning of another sexp](https://github.com/atom/language-clojure/pull/39) + +### [language-coffee-script](https://github.com/atom/language-coffee-script) + +v0.46.0...v0.46.1 + +* [atom/language-coffee-script#85 - Check for word boundaries when attempting to auto-indent](https://github.com/atom/language-coffee-script/pull/85) + +### [language-csharp](https://github.com/atom/language-csharp) + +v0.11.0...v0.12.0 + +* [atom/language-csharp#53 - Make nameof a keyword](https://github.com/atom/language-csharp/pull/53) +* [atom/language-csharp#54 - Make C# 6's when a keyword](https://github.com/atom/language-csharp/pull/54) + +### [language-gfm](https://github.com/atom/language-gfm) + +v0.84.0...v0.85.0 + +* [atom/language-gfm#140 - Highlight HTML entities inside bold, italic, and strikethrough text](https://github.com/atom/language-gfm/pull/140) + +### [language-html](https://github.com/atom/language-html) + +v0.44.0...v0.44.1 + +* [atom/language-html#108 - Fixes #102 - ng-template highlighting for script tags](https://github.com/atom/language-html/pull/108) + +### [language-json](https://github.com/atom/language-json) + +v0.17.4...v0.17.6 + +* [atom/language-json#42 - Add .jsonld file support](https://github.com/atom/language-json/pull/42) +* [atom/language-json#43 - add composer.lock files](https://github.com/atom/language-json/pull/43) +* [atom/language-json#44 - Add .tern-project and .tern-config to file types](https://github.com/atom/language-json/pull/44) + +### [language-ruby](https://github.com/atom/language-ruby) + +v0.68.0...v0.68.3 + +* [atom/language-ruby#135 - Adds cr (Crystal lang) to fileTypes for Ruby grammar](https://github.com/atom/language-ruby/pull/135) +* [atom/language-ruby#137 - Changes dop and do order priority](https://github.com/atom/language-ruby/pull/137) +* [atom/language-ruby#136 - Fixes for tokenization of Kernel methods ending in ? or !](https://github.com/atom/language-ruby/pull/136) +* [atom/language-ruby#140 - Revert do/dop order change](https://github.com/atom/language-ruby/pull/140) + +### [language-sass](https://github.com/atom/language-sass) + +v0.45.0...v0.46.0 + +* [atom/language-sass#101 - Add individual border-radius properties](https://github.com/atom/language-sass/pull/101) + +### [language-text](https://github.com/atom/language-text) + +v0.7.0...v0.7.1 + +* [atom/language-text#5 - Add travis.yml](https://github.com/atom/language-text/pull/5) +* [atom/language-text#6 - Update legal date to 2016](https://github.com/atom/language-text/pull/6) + +### [language-xml](https://github.com/atom/language-xml) + +v0.34.2...v0.34.4 + +* [atom/language-xml#43 - Fix incorrect highlighting for empty element](https://github.com/atom/language-xml/pull/43) diff --git a/changes3.md b/changes3.md new file mode 100644 index 000000000..60d70731a --- /dev/null +++ b/changes3.md @@ -0,0 +1,414 @@ +### Notable Changes + +* Crash Recovery +* Most Recently Used Tab Switching +* Windows Improvements +* Environment Patching on OS X +* Electron Update + +### [Atom Core](https://github.com/atom/atom) + +v1.6.0-beta8...v1.7.0-beta0 + +* [atom/atom#10747 - Clarify Windows build docs for VS2015 etc.](https://github.com/atom/atom/pull/10747) +* [atom/atom#10743 - Don't cascade on reload](https://github.com/atom/atom/pull/10743) +* [atom/atom#9198 - permit any whole number for tabLength](https://github.com/atom/atom/pull/9198) +* [atom/atom#10758 - Fix status in subdir](https://github.com/atom/atom/pull/10758) +* [atom/atom#10768 - Temporarily disable deserializers & viewProviders metadata fields](https://github.com/atom/atom/pull/10768) +* [atom/atom#10764 - Let packages define deserializers & view providers as main module methods](https://github.com/atom/atom/pull/10764) +* [atom/atom#10778 - Fix minor typo in CONTRIBUTING.md](https://github.com/atom/atom/pull/10778) +* [atom/atom#10789 - Upgrade autocomplete-plus to use new text-buffer API](https://github.com/atom/atom/pull/10789) +* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) +* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) +* [atom/atom#10792 - Fix TextEditorPresenter spec timeout.](https://github.com/atom/atom/pull/10792) +* [atom/atom#10803 - Fix typo in function call](https://github.com/atom/atom/pull/10803) +* [atom/atom#10828 - Fix another TextEditorPresenter spec race](https://github.com/atom/atom/pull/10828) +* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) +* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) +* [atom/atom#10838 - Log output for core specs](https://github.com/atom/atom/pull/10838) +* [atom/atom#10818 - Register Atom for file associations in Windows](https://github.com/atom/atom/pull/10818) +* [atom/atom#10605 - Periodically save state and store in indexedDB](https://github.com/atom/atom/pull/10605) +* [atom/atom#9627 - Update to Electron 0.36](https://github.com/atom/atom/pull/9627) +* [atom/atom#10835 - Add TextEditor.prototype.cursorsForScreenRowRange](https://github.com/atom/atom/pull/10835) +* [atom/atom#10795 - Remove unused Core Team Project Management labels](https://github.com/atom/atom/pull/10795) +* [atom/atom#10858 - Update grunt-electron-installer to latest version](https://github.com/atom/atom/pull/10858) +* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) +* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) +* [atom/atom#10873 - Avoid emitting config events while loading packages](https://github.com/atom/atom/pull/10873) +* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) +* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) +* [atom/atom#10863 - Compare markers instead of ranges in Selection](https://github.com/atom/atom/pull/10863) +* [atom/atom#10874 - Avoid Windows 260-character path limits in script\clean](https://github.com/atom/atom/pull/10874) +* [atom/atom#10861 - Compute line foldability lazily](https://github.com/atom/atom/pull/10861) +* [atom/atom#10843 - Bump packages to use async git](https://github.com/atom/atom/pull/10843) +* [atom/atom#10886 - Update Atom build directory in build instructions](https://github.com/atom/atom/pull/10886) +* [atom/atom#10885 - Cache regexes in LanguageMode.prototype.getRegexForProperty](https://github.com/atom/atom/pull/10885) +* [atom/atom#10888 - Load packages before deserializing state](https://github.com/atom/atom/pull/10888) +* [atom/atom#10870 - Add Issue template and extra version info](https://github.com/atom/atom/pull/10870) +* [atom/atom#10878 - Allow pasting white space when `autoIndentOnPaste` is enabled](https://github.com/atom/atom/pull/10878) +* [atom/atom#10895 - Fix some spec issues](https://github.com/atom/atom/pull/10895) +* [atom/atom#10901 - remove Open Roadmap menu item, fixes #10884](https://github.com/atom/atom/pull/10901) +* [atom/atom#10898 - Pass the notification manager when splitting panes](https://github.com/atom/atom/pull/10898) +* [atom/atom#10927 - Upgrade electron to fix command-backtick bug](https://github.com/atom/atom/pull/10927) +* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) +* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) +* [atom/atom#10921 - Add support for keybindings with keyup keystrokes](https://github.com/atom/atom/pull/10921) +* [atom/atom#10841 - Add the -a, --add CLI option](https://github.com/atom/atom/pull/10841) +* [atom/atom#10933 - Fix block decorations spec in text editor presenter](https://github.com/atom/atom/pull/10933) +* [atom/atom#10925 - Faster state serialization](https://github.com/atom/atom/pull/10925) +* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) +* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) +* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) +* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) +* [atom/atom#10326 - Fix Windows installer path update woes](https://github.com/atom/atom/pull/10326) +* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) +* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) +* [atom/atom#10984 - [WIP] experiment with circle ci](https://github.com/atom/atom/pull/10984) +* [atom/atom#10737 - Add MRU tab switching functionality](https://github.com/atom/atom/pull/10737) +* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) +* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) +* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) +* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) +* [atom/atom#11006 - Move spec from tabs package](https://github.com/atom/atom/pull/11006) +* [atom/atom#10851 - Registry for TextEditors](https://github.com/atom/atom/pull/10851) +* [atom/atom#11010 - Always strip git+ prefix and .git suffix from package repository URLs](https://github.com/atom/atom/pull/11010) +* [atom/atom#11011 - Autoscroll after consolidating selections](https://github.com/atom/atom/pull/11011) +* [atom/atom#11008 - Add documentation for order key in config.](https://github.com/atom/atom/pull/11008) +* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) +* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) +* [atom/atom#10675 - Expose application updater lifecycle events to packages](https://github.com/atom/atom/pull/10675) +* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) +* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) +* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) +* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) +* [atom/atom#11036 - Skip deleted directories when restoring application windows](https://github.com/atom/atom/pull/11036) +* [atom/atom#11063 - Show tooltip immediately if the tooltip trigger is manual](https://github.com/atom/atom/pull/11063) +* [atom/atom#10511 - Use ELECTRON_RUN_AS_NODE Variable Key](https://github.com/atom/atom/pull/10511) +* [atom/atom#10955 - TextEditor customization](https://github.com/atom/atom/pull/10955) +* [atom/atom#11065 - Default to auto height being true.](https://github.com/atom/atom/pull/11065) +* [atom/atom#11053 - Ensure atom.cmd --wait correctly waits in Windows cmd & powershell](https://github.com/atom/atom/pull/11053) +* [atom/atom#11060 - Serialize MarkerLayers only on quit](https://github.com/atom/atom/pull/11060) +* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) +* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) +* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) +* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) +* [atom/atom#11099 - Add zero to hexadecimal numbers below F (16)](https://github.com/atom/atom/pull/11099) +* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) +* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) +* [atom/atom#11077 - Scroll to cursor on unfold all](https://github.com/atom/atom/pull/11077) +* [atom/atom#11103 - Make cli atom --wait work on Cygwin](https://github.com/atom/atom/pull/11103) +* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) +* [atom/atom#11111 - Default the options parameter to an empty object](https://github.com/atom/atom/pull/11111) +* [atom/atom#11127 - Bump markdown-preview@v0.158.0](https://github.com/atom/atom/pull/11127) +* [atom/atom#8793 - squirrel-update test on desktop shortcut groups too many assertions](https://github.com/atom/atom/pull/8793) +* [atom/atom#11078 - Add TextEditors to the registry only when opting in](https://github.com/atom/atom/pull/11078) +* [atom/atom#11054 - Patch Environment On OSX And Allow A Different Environment Per Window](https://github.com/atom/atom/pull/11054) +* [atom/atom#11153 - Fix node env](https://github.com/atom/atom/pull/11153) +* [atom/atom#11162 - BufferedProcess: search only new data for new lines rather than entire buffer, take 2](https://github.com/atom/atom/pull/11162) +* [atom/atom#11166 - Note where GitRepositoryAsync deviates from its synchronous predecessor](https://github.com/atom/atom/pull/11166) + +### [one-dark-ui](https://github.com/atom/one-dark-ui) + +v1.1.9...v1.2.0 + +* [atom/one-dark-ui#113 - Specify config schema in package.json](https://github.com/atom/one-dark-ui/pull/113) +* [atom/one-dark-ui#121 - Fix typo in comment for ui-variables.less](https://github.com/atom/one-dark-ui/pull/121) + +### [one-light-ui](https://github.com/atom/one-light-ui) + +v1.1.9...v1.2.0 + +* [atom/one-light-ui#48 - Specify config schema in package.json](https://github.com/atom/one-light-ui/pull/48) + +### [about](https://github.com/atom/about) + +v1.3.0...v1.4.1 + +* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) +* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) +* [atom/about#13 - Specify deserializer method in package.json, the new way](https://github.com/atom/about/pull/13) +* [atom/about#12 - Show update information on the about page](https://github.com/atom/about/pull/12) +* [atom/about#15 - Move away from deprecated Electron require syntax](https://github.com/atom/about/pull/15) + +### [archive-view](https://github.com/atom/archive-view) + +v0.61.0...v0.61.1 + +* [atom/archive-view#32 - Specify deserializer in package.json](https://github.com/atom/archive-view/pull/32) + +### [autocomplete-plus](https://github.com/atom/autocomplete-plus) + +v2.25.0...v2.29.1 + +* [atom/autocomplete-plus#612 - bugfix: auto indentation after suggestion confirm](https://github.com/atom/autocomplete-plus/pull/612) +* [atom/autocomplete-plus#641 - Stop flickering when adjusting margins](https://github.com/atom/autocomplete-plus/pull/641) +* [atom/autocomplete-plus#637 - Move config schema to package.json](https://github.com/atom/autocomplete-plus/pull/637) +* [atom/autocomplete-plus#659 - Batch autocompletion show/hide](https://github.com/atom/autocomplete-plus/pull/659) +* [atom/autocomplete-plus#675 - :art: Clean up formatting of fileBlacklist setting description](https://github.com/atom/autocomplete-plus/pull/675) +* [atom/autocomplete-plus#672 - Redesign SymbolStore and SymbolProvider](https://github.com/atom/autocomplete-plus/pull/672) +* [atom/autocomplete-plus#667 - Add unicode support for \w regexps](https://github.com/atom/autocomplete-plus/pull/667) +* [atom/autocomplete-plus#681 - Fix maximum call stack size exceeded error](https://github.com/atom/autocomplete-plus/pull/681) + +### [autosave](https://github.com/atom/autosave) + +v0.23.0...v0.23.1 + +* [atom/autosave#56 - Move config schema to package.json](https://github.com/atom/autosave/pull/56) + +### [bracket-matcher](https://github.com/atom/bracket-matcher) + +v0.79.0...v0.81.0 + +* [atom/bracket-matcher#196 - Fix spelling in settings](https://github.com/atom/bracket-matcher/pull/196) +* [atom/bracket-matcher#197 - Move config schema to package.json](https://github.com/atom/bracket-matcher/pull/197) +* [atom/bracket-matcher#212 - Make updating matches faster for multi-cursor editing](https://github.com/atom/bracket-matcher/pull/212) +* [atom/bracket-matcher#219 - Clean up view subscriptions when editor is destroyed](https://github.com/atom/bracket-matcher/pull/219) +* [atom/bracket-matcher#221 - Enable bracket matching for elixir](https://github.com/atom/bracket-matcher/pull/221) + +### [deprecation-cop](https://github.com/atom/deprecation-cop) + +v0.54.0...v0.54.1 + +* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) +* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) +* [atom/deprecation-cop#67 - Specify deserializer method in package.json](https://github.com/atom/deprecation-cop/pull/67) + +### [fuzzy-finder](https://github.com/atom/fuzzy-finder) + +v0.94.0...v1.0.3 + +* [atom/fuzzy-finder#160 - Move config schema to package.json](https://github.com/atom/fuzzy-finder/pull/160) +* [atom/fuzzy-finder#167 - Async git](https://github.com/atom/fuzzy-finder/pull/167) +* [atom/fuzzy-finder#174 - Fix spec race](https://github.com/atom/fuzzy-finder/pull/174) +* [atom/fuzzy-finder#178 - Handle symlink project paths](https://github.com/atom/fuzzy-finder/pull/178) +* [atom/fuzzy-finder#180 - Return project paths correctly if last-opened path is not in project](https://github.com/atom/fuzzy-finder/pull/180) + +### [git-diff](https://github.com/atom/git-diff) + +v0.57.0...v1.0.1 + +* [atom/git-diff#81 - Move config schema to package.json](https://github.com/atom/git-diff/pull/81) +* [atom/git-diff#82 - Async git](https://github.com/atom/git-diff/pull/82) +* [atom/git-diff#95 - Catch errors from new files.](https://github.com/atom/git-diff/pull/95) + +### [grammar-selector](https://github.com/atom/grammar-selector) + +v0.48.0...v0.48.1 + +* [atom/grammar-selector#25 - Add description for config setting](https://github.com/atom/grammar-selector/pull/25) +* [atom/grammar-selector#29 - Move config schema to package.json](https://github.com/atom/grammar-selector/pull/29) + +### [image-view](https://github.com/atom/image-view) + +v0.56.0...v0.57.0 + +* [atom/image-view#40 - Zoom to fit](https://github.com/atom/image-view/pull/40) + +### [incompatible-packages](https://github.com/atom/incompatible-packages) + +v0.25.0...v0.25.1 + +* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) +* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) +* [atom/incompatible-packages#12 - Specify deserializer method in package.json](https://github.com/atom/incompatible-packages/pull/12) + +### [keybinding-resolver](https://github.com/atom/keybinding-resolver) + +v0.33.0...v0.35.0 + +* [atom/keybinding-resolver#23 - Update coffeelint support](https://github.com/atom/keybinding-resolver/pull/23) +* [atom/keybinding-resolver#37 - Show keyup events that match a binding](https://github.com/atom/keybinding-resolver/pull/37) + +### [line-ending-selector](https://github.com/atom/line-ending-selector) + +v0.3.0...v0.3.1 + +* [atom/line-ending-selector#17 - Move config schema to package.json](https://github.com/atom/line-ending-selector/pull/17) + +### [link](https://github.com/atom/link) + +v0.31.0...v0.31.1 + +* [atom/link#14 - Move away from deprecated Electron require syntax](https://github.com/atom/link/pull/14) + +### [markdown-preview](https://github.com/atom/markdown-preview) + +v0.157.2...v0.158.0 + +* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) +* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) +* [atom/markdown-preview#367 - Use new package.json fields to allow deferred loading](https://github.com/atom/markdown-preview/pull/367) +* [atom/markdown-preview#335 - Use GitHub style when "Save as HTML"](https://github.com/atom/markdown-preview/pull/335) + +### [notifications](https://github.com/atom/notifications) + +v0.62.1...v0.63.1 + +* [atom/notifications#105 - Move config schema to package.json](https://github.com/atom/notifications/pull/105) +* [atom/notifications#111 - Use https://git.io insead of http](https://github.com/atom/notifications/pull/111) +* [atom/notifications#113 - replace ATOM_HOME in issue title with generic placeholder](https://github.com/atom/notifications/pull/113) +* [atom/notifications#114 - Use bit.ly instead of git.io.](https://github.com/atom/notifications/pull/114) +* [atom/notifications#115 - URL shortening, take 2](https://github.com/atom/notifications/pull/115) + +### [open-on-github](https://github.com/atom/open-on-github) + +v0.41.0...v1.0.1 + +* [atom/open-on-github#59 - Move config schema to package.json](https://github.com/atom/open-on-github/pull/59) +* [atom/open-on-github#60 - Async git](https://github.com/atom/open-on-github/pull/60) +* [atom/open-on-github#66 - Move away from deprecated Electron require syntax](https://github.com/atom/open-on-github/pull/66) + +### [package-generator](https://github.com/atom/package-generator) + +v0.41.0...v1.0.0 + +* [atom/package-generator#37 - Move config schema to package.json](https://github.com/atom/package-generator/pull/37) +* [atom/package-generator#36 - Support JS package generation](https://github.com/atom/package-generator/pull/36) + +### [settings-view](https://github.com/atom/settings-view) + +v0.232.3...v0.235.0 + +* [atom/settings-view#731 - Specify deserializer in package.json](https://github.com/atom/settings-view/pull/731) +* [atom/settings-view#749 - Move away from deprecated Electron require syntax](https://github.com/atom/settings-view/pull/749) +* [atom/settings-view#750 - Another require fix for remote](https://github.com/atom/settings-view/pull/750) +* [atom/settings-view#743 - Display and manage Git-based packages](https://github.com/atom/settings-view/pull/743) +* [atom/settings-view#748 - Add defaults on focus](https://github.com/atom/settings-view/pull/748) +* [atom/settings-view#736 - Add collapsable section for option groups](https://github.com/atom/settings-view/pull/736) + +### [spell-check](https://github.com/atom/spell-check) + +v0.65.0...v0.67.0 + +* [atom/spell-check#103 - Update README.md](https://github.com/atom/spell-check/pull/103) +* [atom/spell-check#33 - Add feature: toggle on/off](https://github.com/atom/spell-check/pull/33) +* [atom/spell-check#108 - subscriptionsOfCommands -> commandSubscription](https://github.com/atom/spell-check/pull/108) +* [atom/spell-check#112 - Move config schema to package.json](https://github.com/atom/spell-check/pull/112) +* [atom/spell-check#114 - updates spellchecker to use system language](https://github.com/atom/spell-check/pull/114) + +### [status-bar](https://github.com/atom/status-bar) + +v0.83.0...v1.2.0 + +* [atom/status-bar#121 - Move config schema to package.json](https://github.com/atom/status-bar/pull/121) +* [atom/status-bar#114 - Async git](https://github.com/atom/status-bar/pull/114) +* [atom/status-bar#122 - Make updating info faster for multi-cursor edits](https://github.com/atom/status-bar/pull/122) +* [atom/status-bar#129 - Hide diff stats for new files](https://github.com/atom/status-bar/pull/129) +* [atom/status-bar#131 - Fix error with no active item](https://github.com/atom/status-bar/pull/131) +* [atom/status-bar#133 - Move to the footer](https://github.com/atom/status-bar/pull/133) + +### [styleguide](https://github.com/atom/styleguide) + +v0.45.1...v0.45.2 + +* [atom/styleguide#34 - Specify deserializer in package.json](https://github.com/atom/styleguide/pull/34) + +### [symbols-view](https://github.com/atom/symbols-view) + +v0.110.1...v0.112.0 + +* [atom/symbols-view#147 - Add support for ES2015 static methods](https://github.com/atom/symbols-view/pull/147) +* [atom/symbols-view#151 - Specify config schema in package.json](https://github.com/atom/symbols-view/pull/151) +* [atom/symbols-view#157 - Add es7 async functions to ctags](https://github.com/atom/symbols-view/pull/157) + +### [tabs](https://github.com/atom/tabs) + +v0.91.3...v0.92.0 + +* [atom/tabs#134 - Add "open in new window" option to tabs context menu](https://github.com/atom/tabs/pull/134) + +### [timecop](https://github.com/atom/timecop) + +v0.33.0...v0.33.1 + +* [atom/timecop#15 - Specify deserializer in package.json](https://github.com/atom/timecop/pull/15) + +### [tree-view](https://github.com/atom/tree-view) + +v0.201.5...v0.203.2 + +* [atom/tree-view#754 - Add option to auto-reveal tree view entries when they become the active pane item](https://github.com/atom/tree-view/pull/754) +* [atom/tree-view#755 - Add `focusOnReveal` option](https://github.com/atom/tree-view/pull/755) +* [atom/tree-view#695 - Make 'Move in trash' more verbose on failure, add a note for Linux](https://github.com/atom/tree-view/pull/695) +* [atom/tree-view#769 - Move away from deprecated Electron require syntax](https://github.com/atom/tree-view/pull/769) +* [atom/tree-view#768 - Fix exception when double clicking opened file after activation](https://github.com/atom/tree-view/pull/768) + +### [welcome](https://github.com/atom/welcome) + +v0.33.0...v0.34.0 + +* [atom/welcome#45 - Move config schema to package.json](https://github.com/atom/welcome/pull/45) +* [atom/welcome#47 - Change menu names for different platforms](https://github.com/atom/welcome/pull/47) + +### [whitespace](https://github.com/atom/whitespace) + +v0.32.1...v0.32.2 + +* [atom/whitespace#107 - Move config schema to package.json](https://github.com/atom/whitespace/pull/107) + +### [language-clojure](https://github.com/atom/language-clojure) + +v0.19.1...v0.20.0 + +* [atom/language-clojure#39 - Fix tokenization of sexp and map nested at beginning of another sexp](https://github.com/atom/language-clojure/pull/39) + +### [language-coffee-script](https://github.com/atom/language-coffee-script) + +v0.46.0...v0.46.1 + +* [atom/language-coffee-script#85 - Check for word boundaries when attempting to auto-indent](https://github.com/atom/language-coffee-script/pull/85) + +### [language-csharp](https://github.com/atom/language-csharp) + +v0.11.0...v0.12.0 + +* [atom/language-csharp#53 - Make nameof a keyword](https://github.com/atom/language-csharp/pull/53) +* [atom/language-csharp#54 - Make C# 6's when a keyword](https://github.com/atom/language-csharp/pull/54) + +### [language-gfm](https://github.com/atom/language-gfm) + +v0.84.0...v0.85.0 + +* [atom/language-gfm#140 - Highlight HTML entities inside bold, italic, and strikethrough text](https://github.com/atom/language-gfm/pull/140) + +### [language-html](https://github.com/atom/language-html) + +v0.44.0...v0.44.1 + +* [atom/language-html#108 - Fixes #102 - ng-template highlighting for script tags](https://github.com/atom/language-html/pull/108) + +### [language-json](https://github.com/atom/language-json) + +v0.17.4...v0.17.6 + +* [atom/language-json#42 - Add .jsonld file support](https://github.com/atom/language-json/pull/42) +* [atom/language-json#43 - add composer.lock files](https://github.com/atom/language-json/pull/43) +* [atom/language-json#44 - Add .tern-project and .tern-config to file types](https://github.com/atom/language-json/pull/44) + +### [language-ruby](https://github.com/atom/language-ruby) + +v0.68.0...v0.68.3 + +* [atom/language-ruby#135 - Adds cr (Crystal lang) to fileTypes for Ruby grammar](https://github.com/atom/language-ruby/pull/135) +* [atom/language-ruby#137 - Changes dop and do order priority](https://github.com/atom/language-ruby/pull/137) +* [atom/language-ruby#136 - Fixes for tokenization of Kernel methods ending in ? or !](https://github.com/atom/language-ruby/pull/136) +* [atom/language-ruby#140 - Revert do/dop order change](https://github.com/atom/language-ruby/pull/140) + +### [language-sass](https://github.com/atom/language-sass) + +v0.45.0...v0.46.0 + +* [atom/language-sass#101 - Add individual border-radius properties](https://github.com/atom/language-sass/pull/101) + +### [language-text](https://github.com/atom/language-text) + +v0.7.0...v0.7.1 + +* [atom/language-text#5 - Add travis.yml](https://github.com/atom/language-text/pull/5) +* [atom/language-text#6 - Update legal date to 2016](https://github.com/atom/language-text/pull/6) + +### [language-xml](https://github.com/atom/language-xml) + +v0.34.2...v0.34.4 + +* [atom/language-xml#43 - Fix incorrect highlighting for empty element](https://github.com/atom/language-xml/pull/43) diff --git a/fsck.txt b/fsck.txt new file mode 100644 index 000000000..2b4444696 --- /dev/null +++ b/fsck.txt @@ -0,0 +1,84 @@ +dangling blob 8e1e50c470eb9e341f51dd728c371ec9e6ba967f +dangling blob 312880903e5988a36556c71047cfab48f7cabb0a +dangling commit d14e40a5f4e51d329bf51eed9c5ac405cef8a4e7 +dangling blob ed4f3083f21ee505b90e49bc719126b3a0ca8717 +dangling commit 1981b88bcacc6a68408a7f21c840ebe50a3f76a1 +dangling commit b490508111afcabff3afd35b877f6afa0dd9ed57 +dangling commit 629c78769aa70249e6aceaed24ca5ed02a2b24e2 +dangling blob 3db2f0aa0e9ffeda9f614085d0b55ad3669439f8 +dangling commit 34f8200a8eecf014d43defaf8c6dd4e50e99d2ee +dangling commit 5d1009b9be44874de85d5cea8bfa8692fb1c9e93 +dangling commit 9b1e51e67ebc5de354858b555eb9b4e4c92bd4dd +dangling commit 4b8039b1d3f06b0f4e0f00ca195748ee8c1e32ed +dangling blob 7ca269d19d59fa66955e17e0861eb45652d1ba2d +dangling blob c8a8a9065ef35c949d666f7e4d7f743218ec6bc7 +dangling blob 9cb1c9364187f4a7665f1c7b5dee3c3fbd8f1c99 +dangling commit eec8e92d898d645a6ce442ae7c35ec9584396c58 +dangling blob dcc9712690f1c859158aebc40a56fbf27e833d76 +dangling blob 1fe2e195f16e0d750d8d995b87b8035a44b381d2 +dangling blob 50e29981374b4dfe0c4262a4cd73aea35ca76315 +dangling blob 8ce7099a661bb3a8f4918ecb57c0279b2bbc5830 +dangling commit 08e8d1fe6d81c1ef46bee56003c93b267bae2bd8 +dangling commit 07f9710adffbd72b6142892662135540826304f4 +dangling blob 52f9e94a0f8773639c2b934c0f6dc1480b857d84 +dangling commit e813da3e669e6ff94efa7ece2b0ff72781b4989d +dangling commit 0b30da3c7e93250e5b4ad07cf70a1d6477f14f1c +dangling commit 5d5c9a487e098214b4f956c20b6f6a07aec44954 +dangling commit c5916ad2075a90dc188e612c369affdf1dc0bc23 +dangling commit fe9efa90b53d85c6ee8a7d455f61cab0f1495bb4 +dangling blob 0e9f6a422bd61e3ac86b1317d6b12356328b6d66 +dangling commit 86d8bade0a8e08537f2c6a5f278bc426e3136310 +dangling commit 44fb9a4521e7f05cfb80fcd7057fdf75a9cd57f0 +dangling blob 0efdb238e664cf22a41e19fa327ab5582fba88f9 +dangling commit 5d0aabf92aa8606b08619ee7fc3654f14aa68bad +dangling commit 2d19dbc0fc42216b8892e261201cc53a378b5d7e +dangling commit 952263ff6ad07751137586a10b7766d292d1d249 +dangling commit 6d266b46d74b6acab92a3c8787973b46936d9fee +dangling commit 8346a391ecc5c8cbccecf1da359f3b975173dcf4 +dangling commit 0554dbd09d5d199382f612e9587e9044135e1266 +dangling commit 0f667bdaa3156942835a7f55bca7d116f02bc678 +dangling blob e27e1b3bbda2e7c75cfae7715ece1adec8b7b044 +dangling blob 9b9bbba7c0ef471ef195119db8f3bc2a903c5d5e +dangling commit 4fa8734a6537b8265064e31be40e1635996a543f +dangling blob 97b793cd3612ec045881b27477927cfc2a4a2083 +dangling blob 5ceaabe3ccb8c6b2c4ffde8dacb506601431ddbb +dangling commit eb13c4a2b1ee9854a238463ecc99d27dda8641d5 +dangling commit 14421ccec537f5b034d35bd3a6578c848532d06d +dangling commit 295d1c1d8df1ebf9c8477686d5a294135c9a413c +dangling commit 4e96d4ca9770282c120e6ab909f101fb7604999f +dangling commit e6b82450a1065c2be1313376be900014f98fb340 +dangling blob 4fc1849c928074155f28caa53b06ad61ad5b140e +dangling commit f7fe343d0a2eb0016b8fdad61512921dabd188db +dangling commit 0107a55520447e6b24ce224f5c2269c6e9e09f5b +dangling commit 2f2395435ea382bdf2aaa6f8a9d313bf337dbf96 +dangling commit 7c2ca56b3b5702e3a59c85540bd6c278415071ce +dangling commit 2d59bdd296fc06664c84ff6aeb98af3346b7b1fb +dangling blob 3c6a0514c057cd275aeb9df47f7ebbc3da1bcd1f +dangling blob b08cdddd620140a4bf79f6af455ce11979ecf2c2 +dangling commit a38e850b7648a7cef9d57725a27e298bc7d03cd4 +dangling blob b6af9d9e202c61bda1ac21b66f5d576805c617f6 +dangling commit 40c3bd9d3e7e23e1d6032180b37d5e49d16c0d5c +dangling commit 34d42d33ccd9cfec6c0aacbf145f4ef37353db98 +dangling commit 1ffdbd581d994dc633c1344747b4da809c400a08 +dangling blob 490d76d4f5acb1b44d7840bc8a3c7bda62d11d07 +dangling commit b72a56ec43568db6d299c1eba54726a6e3cc1c97 +dangling commit 693c0657285beff0d4aaca0641375283c5a56c74 +dangling blob c66026146ba927fc352451448472982845a3727e +dangling blob 1671d6b83241b80fa4ba87ac8a3644e8dd9dbb23 +dangling blob 6175d60e2dd97a0a67321ca2eeccf567b6c2d988 +dangling commit 9a9deedebdea0ae0b731791ecc08caea0623fa50 +dangling blob d0aa062f7df257a3120025cbbba8aa6b0b31d1bb +dangling blob 28b82ef47e6226d52364a2a675af3145987d0710 +dangling commit 43ea466643b314b20fe374b64dbd7a47816b962a +dangling blob 52ebb6f16e8b667cd321dea15461e0d8eb690ad8 +dangling blob 7bf4fec5c7b11c2dbd64556c3422cd4e838e6690 +dangling blob 45f506658f41781d33ec9b975a73c75199ef6757 +dangling blob ee27c707653877b4f644aecce296e68c23438d0f +dangling commit a357b773b0601eb14cdc921233fd50bb1c3e3286 +dangling commit cd598fcd5927deb5ad8443614c8bd6383ff3a765 +dangling commit 8960cfeed612451e272e9da34ac831c81b7b324c +dangling commit 3e6def8d1b7eac9fa9b3053d8824440770d01ecf +dangling commit f0782fb3b7b108201648ddc895e61cee26a2070d +dangling commit a87a2781ff62ef0810740dba02d70669dc1fa315 +dangling blob 3a7e57e783324bf9b95cf66502675f450c4fb6d0 +dangling blob 1ae10fac3e2c076e3053305ec2785a63a04101d2 diff --git a/package.json b/package.json index e99251778..01b6d061e 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,7 @@ "tabs": "0.92.1", "timecop": "0.33.1", "tree-view": "0.203.4", + "tree-view": "0.204.0", "update-package-dependencies": "0.10.0", "welcome": "0.34.0", "whitespace": "0.32.2", From dcefde8838377d85d499bedf8488bc1495bc61fc Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Mon, 11 Apr 2016 21:01:36 -0700 Subject: [PATCH 112/139] :arrow_up: find-and-replace (cherry picked from commit 0676cdd863bdfe645a0aa00e10ab718b7f2ba4e8) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 01b6d061e..bb0a0deee 100644 --- a/package.json +++ b/package.json @@ -89,9 +89,9 @@ "dev-live-reload": "0.47.0", "encoding-selector": "0.21.0", "exception-reporting": "0.38.0", - "find-and-replace": "0.197.6", "fuzzy-finder": "1.0.4", "git-diff": "1.0.1", + "find-and-replace": "0.198.0", "go-to-line": "0.30.0", "grammar-selector": "0.48.1", "image-view": "0.57.0", From 82fa61e54d88799788ab4125dd8152974d8496c3 Mon Sep 17 00:00:00 2001 From: Joe Fitzgerald Date: Tue, 12 Apr 2016 11:29:33 -0600 Subject: [PATCH 113/139] Allow Multiple Launches Of Atom To Result In An Updated Environment --- src/browser/atom-application.coffee | 1 + src/browser/atom-window.coffee | 4 ++++ src/environment-helpers.js | 10 +++++++++- src/initialize-application-window.coffee | 8 ++++++-- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index a579fb762..69eff1845 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -466,6 +466,7 @@ class AtomApplication openedWindow.restore() else openedWindow.focus() + openedWindow.replaceEnvironment(env) else if devMode try diff --git a/src/browser/atom-window.coffee b/src/browser/atom-window.coffee index 33c64da7d..60e6d0553 100644 --- a/src/browser/atom-window.coffee +++ b/src/browser/atom-window.coffee @@ -68,6 +68,7 @@ class AtomWindow @loaded = true @setLoadSettings(loadSettings) + @env = loadSettings.env if loadSettings.env? @browserWindow.focusOnWebView() if @isSpec @browserWindow.temporaryState = {windowDimensions} if windowDimensions? @@ -169,6 +170,9 @@ class AtomWindow else @browserWindow.once 'window:loaded', => @openLocations(locationsToOpen) + replaceEnvironment: (env) -> + @browserWindow.webContents.send 'environment', env + sendMessage: (message, detail) -> @browserWindow.webContents.send 'message', message, detail diff --git a/src/environment-helpers.js b/src/environment-helpers.js index 00c112bda..e2baeb26b 100644 --- a/src/environment-helpers.js +++ b/src/environment-helpers.js @@ -91,4 +91,12 @@ function normalize (options = {}) { } } -export default { getFromShell, needsPatching, normalize } +function replace (env) { + if (!env || !env.PATH) { + return + } + + process.env = env +} + +export default { getFromShell, needsPatching, normalize, replace } diff --git a/src/initialize-application-window.coffee b/src/initialize-application-window.coffee index ea811f515..463bdd48e 100644 --- a/src/initialize-application-window.coffee +++ b/src/initialize-application-window.coffee @@ -4,11 +4,12 @@ module.exports = ({blobStore}) -> path = require 'path' require './window' {getWindowLoadSettings} = require './window-load-settings-helpers' - + {ipcRenderer} = require 'electron' {resourcePath, isSpec, devMode, env} = getWindowLoadSettings() # Set baseline environment environmentHelpers.normalize({env: env}) + env = process.env # Add application-specific exports to module search path. exportsPath = path.join(resourcePath, 'exports') @@ -25,7 +26,7 @@ module.exports = ({blobStore}) -> applicationDelegate: new ApplicationDelegate, configDirPath: process.env.ATOM_HOME enablePersistence: true - env: env + env: process.env }) atom.startEditorWindow().then -> @@ -35,3 +36,6 @@ module.exports = ({blobStore}) -> window.removeEventListener('focus', windowFocused) setTimeout (-> document.querySelector('atom-workspace').focus()), 0 window.addEventListener('focus', windowFocused) + ipcRenderer.on('environment', (event, env) -> + environmentHelpers.replace(env) + ) From 2d173911b22a588f10467e723d0736c85c49bea0 Mon Sep 17 00:00:00 2001 From: Damien Guard Date: Tue, 12 Apr 2016 12:02:20 -0700 Subject: [PATCH 114/139] Ignore autorun on our buffered process commands. Fixes #10082 --- spec/buffered-process-spec.coffee | 7 ++++--- src/buffered-process.coffee | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/spec/buffered-process-spec.coffee b/spec/buffered-process-spec.coffee index 1f524d66a..643a2d411 100644 --- a/spec/buffered-process-spec.coffee +++ b/spec/buffered-process-spec.coffee @@ -88,14 +88,15 @@ describe "BufferedProcess", -> describe "when the explorer command is spawned on Windows", -> it "doesn't quote arguments of the form /root,C...", -> new BufferedProcess({command: 'explorer.exe', args: ['/root,C:\\foo']}) - expect(ChildProcess.spawn.argsForCall[0][1][2]).toBe '"explorer.exe /root,C:\\foo"' + expect(ChildProcess.spawn.argsForCall[0][1][3]).toBe '"explorer.exe /root,C:\\foo"' it "spawns the command using a cmd.exe wrapper", -> new BufferedProcess({command: 'dir'}) expect(path.basename(ChildProcess.spawn.argsForCall[0][0])).toBe 'cmd.exe' expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe '/s' - expect(ChildProcess.spawn.argsForCall[0][1][1]).toBe '/c' - expect(ChildProcess.spawn.argsForCall[0][1][2]).toBe '"dir"' + expect(ChildProcess.spawn.argsForCall[0][1][1]).toBe '/d' + expect(ChildProcess.spawn.argsForCall[0][1][2]).toBe '/c' + expect(ChildProcess.spawn.argsForCall[0][1][3]).toBe '"dir"' it "calls the specified stdout, stderr, and exit callbacks", -> stdout = '' diff --git a/src/buffered-process.coffee b/src/buffered-process.coffee index 53934c02d..59f2a7e9a 100644 --- a/src/buffered-process.coffee +++ b/src/buffered-process.coffee @@ -67,7 +67,7 @@ class BufferedProcess cmdArgs.unshift("\"#{command}\"") else cmdArgs.unshift(command) - cmdArgs = ['/s', '/c', "\"#{cmdArgs.join(' ')}\""] + cmdArgs = ['/s', '/d', '/c', "\"#{cmdArgs.join(' ')}\""] cmdOptions = _.clone(options) cmdOptions.windowsVerbatimArguments = true @spawn(@getCmdPath(), cmdArgs, cmdOptions) From 7d13ba5d4e7f7fa9d00a9ae39ab05e55be02a172 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Tue, 12 Apr 2016 15:48:37 -0700 Subject: [PATCH 115/139] :arrow_up: tree-view --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index bb0a0deee..4d24f87ae 100644 --- a/package.json +++ b/package.json @@ -112,8 +112,7 @@ "symbols-view": "0.112.0", "tabs": "0.92.1", "timecop": "0.33.1", - "tree-view": "0.203.4", - "tree-view": "0.204.0", + "tree-view": "0.205.0", "update-package-dependencies": "0.10.0", "welcome": "0.34.0", "whitespace": "0.32.2", From c936ed96dc2cbedc025c898ebb5f00c7c6072407 Mon Sep 17 00:00:00 2001 From: Hubot Date: Tue, 12 Apr 2016 19:16:53 -0500 Subject: [PATCH 116/139] 1.9.0-dev --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d24f87ae..59a0302c0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom", "productName": "Atom", - "version": "1.8.0-dev", + "version": "1.9.0-dev", "description": "A hackable text editor for the 21st Century.", "main": "./src/browser/main.js", "repository": { From 49fb28759292541c3d60224db5d12392c6d0c359 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Tue, 12 Apr 2016 20:35:30 -0700 Subject: [PATCH 117/139] Don't load packages starting with dot. Fixes #9805 --- spec/package-manager-spec.coffee | 3 +++ src/package-manager.coffee | 2 ++ 2 files changed, 5 insertions(+) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 6a1610a8a..f68005cf5 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -66,6 +66,9 @@ describe "PackageManager", -> expect(addErrorHandler.argsForCall[0][0].message).toContain("Failed to load the package-with-broken-package-json package") expect(addErrorHandler.argsForCall[0][0].options.packageName).toEqual "package-with-broken-package-json" + it "returns null if the package name or path starts with a dot", -> + expect(atom.packages.loadPackage("/Users/user/.atom/packages/.git")).toBeNull() + it "normalizes short repository urls in package.json", -> {metadata} = atom.packages.loadPackage("package-with-short-url-package-json") expect(metadata.repository.type).toBe "git" diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 0e76a762f..8f2924358 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -367,6 +367,8 @@ class PackageManager @emitter.emit 'did-load-initial-packages' loadPackage: (nameOrPath) -> + return null if path.basename(nameOrPath)[0].match /^\./ # primarily to skip .git folder + return pack if pack = @getLoadedPackage(nameOrPath) if packagePath = @resolvePackagePath(nameOrPath) From 043982ca3d6b2debeb0f1f542c64bcfc0c1c824d Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Wed, 13 Apr 2016 11:23:55 -0700 Subject: [PATCH 118/139] :fire: files accidentally committed --- changes.md | 0 changes2.md | 397 ------------------------------------------------- changes3.md | 414 ---------------------------------------------------- fsck.txt | 84 ----------- 4 files changed, 895 deletions(-) delete mode 100644 changes.md delete mode 100644 changes2.md delete mode 100644 changes3.md delete mode 100644 fsck.txt diff --git a/changes.md b/changes.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/changes2.md b/changes2.md deleted file mode 100644 index e8224e628..000000000 --- a/changes2.md +++ /dev/null @@ -1,397 +0,0 @@ -### [Atom Core](https://github.com/atom/atom) - -v1.6.0...v1.7.0-beta0 - -* [atom/atom#10747 - Clarify Windows build docs for VS2015 etc.](https://github.com/atom/atom/pull/10747) -* [atom/atom#10743 - Don't cascade on reload](https://github.com/atom/atom/pull/10743) -* [atom/atom#9198 - permit any whole number for tabLength](https://github.com/atom/atom/pull/9198) -* [atom/atom#10758 - Fix status in subdir](https://github.com/atom/atom/pull/10758) -* [atom/atom#10768 - Temporarily disable deserializers & viewProviders metadata fields](https://github.com/atom/atom/pull/10768) -* [atom/atom#10764 - Let packages define deserializers & view providers as main module methods](https://github.com/atom/atom/pull/10764) -* [atom/atom#10778 - Fix minor typo in CONTRIBUTING.md](https://github.com/atom/atom/pull/10778) -* [atom/atom#10789 - Upgrade autocomplete-plus to use new text-buffer API](https://github.com/atom/atom/pull/10789) -* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) -* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) -* [atom/atom#10792 - Fix TextEditorPresenter spec timeout.](https://github.com/atom/atom/pull/10792) -* [atom/atom#10803 - Fix typo in function call](https://github.com/atom/atom/pull/10803) -* [atom/atom#10828 - Fix another TextEditorPresenter spec race](https://github.com/atom/atom/pull/10828) -* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) -* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) -* [atom/atom#10838 - Log output for core specs](https://github.com/atom/atom/pull/10838) -* [atom/atom#10818 - Register Atom for file associations in Windows](https://github.com/atom/atom/pull/10818) -* [atom/atom#10605 - Periodically save state and store in indexedDB](https://github.com/atom/atom/pull/10605) -* [atom/atom#9627 - Update to Electron 0.36](https://github.com/atom/atom/pull/9627) -* [atom/atom#10835 - Add TextEditor.prototype.cursorsForScreenRowRange](https://github.com/atom/atom/pull/10835) -* [atom/atom#10795 - Remove unused Core Team Project Management labels](https://github.com/atom/atom/pull/10795) -* [atom/atom#10858 - Update grunt-electron-installer to latest version](https://github.com/atom/atom/pull/10858) -* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) -* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) -* [atom/atom#10873 - Avoid emitting config events while loading packages](https://github.com/atom/atom/pull/10873) -* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) -* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) -* [atom/atom#10863 - Compare markers instead of ranges in Selection](https://github.com/atom/atom/pull/10863) -* [atom/atom#10874 - Avoid Windows 260-character path limits in script\clean](https://github.com/atom/atom/pull/10874) -* [atom/atom#10861 - Compute line foldability lazily](https://github.com/atom/atom/pull/10861) -* [atom/atom#10843 - Bump packages to use async git](https://github.com/atom/atom/pull/10843) -* [atom/atom#10886 - Update Atom build directory in build instructions](https://github.com/atom/atom/pull/10886) -* [atom/atom#10885 - Cache regexes in LanguageMode.prototype.getRegexForProperty](https://github.com/atom/atom/pull/10885) -* [atom/atom#10888 - Load packages before deserializing state](https://github.com/atom/atom/pull/10888) -* [atom/atom#10870 - Add Issue template and extra version info](https://github.com/atom/atom/pull/10870) -* [atom/atom#10878 - Allow pasting white space when `autoIndentOnPaste` is enabled](https://github.com/atom/atom/pull/10878) -* [atom/atom#10895 - Fix some spec issues](https://github.com/atom/atom/pull/10895) -* [atom/atom#10901 - remove Open Roadmap menu item, fixes #10884](https://github.com/atom/atom/pull/10901) -* [atom/atom#10898 - Pass the notification manager when splitting panes](https://github.com/atom/atom/pull/10898) -* [atom/atom#10927 - Upgrade electron to fix command-backtick bug](https://github.com/atom/atom/pull/10927) -* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) -* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) -* [atom/atom#10921 - Add support for keybindings with keyup keystrokes](https://github.com/atom/atom/pull/10921) -* [atom/atom#10841 - Add the -a, --add CLI option](https://github.com/atom/atom/pull/10841) -* [atom/atom#10933 - Fix block decorations spec in text editor presenter](https://github.com/atom/atom/pull/10933) -* [atom/atom#10925 - Faster state serialization](https://github.com/atom/atom/pull/10925) -* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) -* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) -* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) -* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) -* [atom/atom#10326 - Fix Windows installer path update woes](https://github.com/atom/atom/pull/10326) -* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) -* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) -* [atom/atom#10984 - [WIP] experiment with circle ci](https://github.com/atom/atom/pull/10984) -* [atom/atom#10737 - Add MRU tab switching functionality](https://github.com/atom/atom/pull/10737) -* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) -* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) -* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) -* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) -* [atom/atom#11006 - Move spec from tabs package](https://github.com/atom/atom/pull/11006) -* [atom/atom#10851 - Registry for TextEditors](https://github.com/atom/atom/pull/10851) -* [atom/atom#11010 - Always strip git+ prefix and .git suffix from package repository URLs](https://github.com/atom/atom/pull/11010) -* [atom/atom#11011 - Autoscroll after consolidating selections](https://github.com/atom/atom/pull/11011) -* [atom/atom#11008 - Add documentation for order key in config.](https://github.com/atom/atom/pull/11008) -* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) -* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) -* [atom/atom#10675 - Expose application updater lifecycle events to packages](https://github.com/atom/atom/pull/10675) -* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) -* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) -* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) -* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) -* [atom/atom#11036 - Skip deleted directories when restoring application windows](https://github.com/atom/atom/pull/11036) -* [atom/atom#11063 - Show tooltip immediately if the tooltip trigger is manual](https://github.com/atom/atom/pull/11063) -* [atom/atom#10511 - Use ELECTRON_RUN_AS_NODE Variable Key](https://github.com/atom/atom/pull/10511) -* [atom/atom#10955 - TextEditor customization](https://github.com/atom/atom/pull/10955) -* [atom/atom#11065 - Default to auto height being true.](https://github.com/atom/atom/pull/11065) -* [atom/atom#11053 - Ensure atom.cmd --wait correctly waits in Windows cmd & powershell](https://github.com/atom/atom/pull/11053) -* [atom/atom#11060 - Serialize MarkerLayers only on quit](https://github.com/atom/atom/pull/11060) -* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) -* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) -* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) -* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) -* [atom/atom#11099 - Add zero to hexadecimal numbers below F (16)](https://github.com/atom/atom/pull/11099) -* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) -* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) -* [atom/atom#11077 - Scroll to cursor on unfold all](https://github.com/atom/atom/pull/11077) -* [atom/atom#11103 - Make cli atom --wait work on Cygwin](https://github.com/atom/atom/pull/11103) -* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) -* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) -* [atom/atom#11111 - Default the options parameter to an empty object](https://github.com/atom/atom/pull/11111) -* [atom/atom#11127 - Bump markdown-preview@v0.158.0](https://github.com/atom/atom/pull/11127) -* [atom/atom#8793 - squirrel-update test on desktop shortcut groups too many assertions](https://github.com/atom/atom/pull/8793) -* [atom/atom#11078 - Add TextEditors to the registry only when opting in](https://github.com/atom/atom/pull/11078) -* [atom/atom#11054 - Patch Environment On OSX And Allow A Different Environment Per Window](https://github.com/atom/atom/pull/11054) -* [atom/atom#11153 - Fix node env](https://github.com/atom/atom/pull/11153) -* [atom/atom#11162 - BufferedProcess: search only new data for new lines rather than entire buffer, take 2](https://github.com/atom/atom/pull/11162) -* [atom/atom#11166 - Note where GitRepositoryAsync deviates from its synchronous predecessor](https://github.com/atom/atom/pull/11166) - -### [one-dark-ui](https://github.com/atom/one-dark-ui) - -v1.1.9...v1.2.0 - -* [atom/one-dark-ui#113 - Specify config schema in package.json](https://github.com/atom/one-dark-ui/pull/113) -* [atom/one-dark-ui#121 - Fix typo in comment for ui-variables.less](https://github.com/atom/one-dark-ui/pull/121) - -### [one-light-ui](https://github.com/atom/one-light-ui) - -v1.1.9...v1.2.0 - -* [atom/one-light-ui#48 - Specify config schema in package.json](https://github.com/atom/one-light-ui/pull/48) - -### [about](https://github.com/atom/about) - -v1.3.0...v1.4.1 - -* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) -* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) -* [atom/about#13 - Specify deserializer method in package.json, the new way](https://github.com/atom/about/pull/13) -* [atom/about#12 - Show update information on the about page](https://github.com/atom/about/pull/12) -* [atom/about#15 - Move away from deprecated Electron require syntax](https://github.com/atom/about/pull/15) - -### [archive-view](https://github.com/atom/archive-view) - -v0.61.0...v0.61.1 - -* [atom/archive-view#32 - Specify deserializer in package.json](https://github.com/atom/archive-view/pull/32) - -### [autocomplete-plus](https://github.com/atom/autocomplete-plus) - -v2.25.0...v2.29.1 - -* [atom/autocomplete-plus#612 - bugfix: auto indentation after suggestion confirm](https://github.com/atom/autocomplete-plus/pull/612) -* [atom/autocomplete-plus#641 - Stop flickering when adjusting margins](https://github.com/atom/autocomplete-plus/pull/641) -* [atom/autocomplete-plus#637 - Move config schema to package.json](https://github.com/atom/autocomplete-plus/pull/637) -* [atom/autocomplete-plus#659 - Batch autocompletion show/hide](https://github.com/atom/autocomplete-plus/pull/659) -* [atom/autocomplete-plus#675 - :art: Clean up formatting of fileBlacklist setting description](https://github.com/atom/autocomplete-plus/pull/675) -* [atom/autocomplete-plus#672 - Redesign SymbolStore and SymbolProvider](https://github.com/atom/autocomplete-plus/pull/672) -* [atom/autocomplete-plus#667 - Add unicode support for \w regexps](https://github.com/atom/autocomplete-plus/pull/667) -* [atom/autocomplete-plus#681 - Fix maximum call stack size exceeded error](https://github.com/atom/autocomplete-plus/pull/681) - -### [autosave](https://github.com/atom/autosave) - -v0.23.0...v0.23.1 - -* [atom/autosave#56 - Move config schema to package.json](https://github.com/atom/autosave/pull/56) - -### [bracket-matcher](https://github.com/atom/bracket-matcher) - -v0.79.0...v0.81.0 - -* [atom/bracket-matcher#196 - Fix spelling in settings](https://github.com/atom/bracket-matcher/pull/196) -* [atom/bracket-matcher#197 - Move config schema to package.json](https://github.com/atom/bracket-matcher/pull/197) -* [atom/bracket-matcher#212 - Make updating matches faster for multi-cursor editing](https://github.com/atom/bracket-matcher/pull/212) -* [atom/bracket-matcher#219 - Clean up view subscriptions when editor is destroyed](https://github.com/atom/bracket-matcher/pull/219) -* [atom/bracket-matcher#221 - Enable bracket matching for elixir](https://github.com/atom/bracket-matcher/pull/221) - -### [deprecation-cop](https://github.com/atom/deprecation-cop) - -v0.54.0...v0.54.1 - -* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) -* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) -* [atom/deprecation-cop#67 - Specify deserializer method in package.json](https://github.com/atom/deprecation-cop/pull/67) - -### [fuzzy-finder](https://github.com/atom/fuzzy-finder) - -v0.94.0...v1.0.3 - -* [atom/fuzzy-finder#160 - Move config schema to package.json](https://github.com/atom/fuzzy-finder/pull/160) -* [atom/fuzzy-finder#167 - Async git](https://github.com/atom/fuzzy-finder/pull/167) -* [atom/fuzzy-finder#174 - Fix spec race](https://github.com/atom/fuzzy-finder/pull/174) -* [atom/fuzzy-finder#178 - Handle symlink project paths](https://github.com/atom/fuzzy-finder/pull/178) -* [atom/fuzzy-finder#180 - Return project paths correctly if last-opened path is not in project](https://github.com/atom/fuzzy-finder/pull/180) - -### [git-diff](https://github.com/atom/git-diff) - -v0.57.0...v1.0.1 - -* [atom/git-diff#81 - Move config schema to package.json](https://github.com/atom/git-diff/pull/81) -* [atom/git-diff#82 - Async git](https://github.com/atom/git-diff/pull/82) -* [atom/git-diff#95 - Catch errors from new files.](https://github.com/atom/git-diff/pull/95) - -### [grammar-selector](https://github.com/atom/grammar-selector) - -v0.48.0...v0.48.1 - -* [atom/grammar-selector#25 - Add description for config setting](https://github.com/atom/grammar-selector/pull/25) -* [atom/grammar-selector#29 - Move config schema to package.json](https://github.com/atom/grammar-selector/pull/29) - -### [image-view](https://github.com/atom/image-view) - -v0.56.0...v0.57.0 - -* [atom/image-view#40 - Zoom to fit](https://github.com/atom/image-view/pull/40) - -### [incompatible-packages](https://github.com/atom/incompatible-packages) - -v0.25.0...v0.25.1 - -* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) -* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) -* [atom/incompatible-packages#12 - Specify deserializer method in package.json](https://github.com/atom/incompatible-packages/pull/12) - -### [keybinding-resolver](https://github.com/atom/keybinding-resolver) - -v0.33.0...v0.35.0 - -* [atom/keybinding-resolver#23 - Update coffeelint support](https://github.com/atom/keybinding-resolver/pull/23) -* [atom/keybinding-resolver#37 - Show keyup events that match a binding](https://github.com/atom/keybinding-resolver/pull/37) - -### [line-ending-selector](https://github.com/atom/line-ending-selector) - -v0.3.0...v0.3.1 - -* [atom/line-ending-selector#17 - Move config schema to package.json](https://github.com/atom/line-ending-selector/pull/17) - -### [link](https://github.com/atom/link) - -v0.31.0...v0.31.1 - -* [atom/link#14 - Move away from deprecated Electron require syntax](https://github.com/atom/link/pull/14) - -### [markdown-preview](https://github.com/atom/markdown-preview) - -v0.157.2...v0.158.0 - -* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) -* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) -* [atom/markdown-preview#367 - Use new package.json fields to allow deferred loading](https://github.com/atom/markdown-preview/pull/367) -* [atom/markdown-preview#335 - Use GitHub style when "Save as HTML"](https://github.com/atom/markdown-preview/pull/335) - -### [notifications](https://github.com/atom/notifications) - -v0.62.1...v0.63.1 - -* [atom/notifications#105 - Move config schema to package.json](https://github.com/atom/notifications/pull/105) -* [atom/notifications#111 - Use https://git.io insead of http](https://github.com/atom/notifications/pull/111) -* [atom/notifications#113 - replace ATOM_HOME in issue title with generic placeholder](https://github.com/atom/notifications/pull/113) -* [atom/notifications#114 - Use bit.ly instead of git.io.](https://github.com/atom/notifications/pull/114) -* [atom/notifications#115 - URL shortening, take 2](https://github.com/atom/notifications/pull/115) - -### [open-on-github](https://github.com/atom/open-on-github) - -v0.41.0...v1.0.1 - -* [atom/open-on-github#59 - Move config schema to package.json](https://github.com/atom/open-on-github/pull/59) -* [atom/open-on-github#60 - Async git](https://github.com/atom/open-on-github/pull/60) -* [atom/open-on-github#66 - Move away from deprecated Electron require syntax](https://github.com/atom/open-on-github/pull/66) - -### [package-generator](https://github.com/atom/package-generator) - -v0.41.0...v1.0.0 - -* [atom/package-generator#37 - Move config schema to package.json](https://github.com/atom/package-generator/pull/37) -* [atom/package-generator#36 - Support JS package generation](https://github.com/atom/package-generator/pull/36) - -### [settings-view](https://github.com/atom/settings-view) - -v0.232.3...v0.235.0 - -* [atom/settings-view#731 - Specify deserializer in package.json](https://github.com/atom/settings-view/pull/731) -* [atom/settings-view#749 - Move away from deprecated Electron require syntax](https://github.com/atom/settings-view/pull/749) -* [atom/settings-view#750 - Another require fix for remote](https://github.com/atom/settings-view/pull/750) -* [atom/settings-view#743 - Display and manage Git-based packages](https://github.com/atom/settings-view/pull/743) -* [atom/settings-view#748 - Add defaults on focus](https://github.com/atom/settings-view/pull/748) -* [atom/settings-view#736 - Add collapsable section for option groups](https://github.com/atom/settings-view/pull/736) - -### [spell-check](https://github.com/atom/spell-check) - -v0.65.0...v0.67.0 - -* [atom/spell-check#103 - Update README.md](https://github.com/atom/spell-check/pull/103) -* [atom/spell-check#33 - Add feature: toggle on/off](https://github.com/atom/spell-check/pull/33) -* [atom/spell-check#108 - subscriptionsOfCommands -> commandSubscription](https://github.com/atom/spell-check/pull/108) -* [atom/spell-check#112 - Move config schema to package.json](https://github.com/atom/spell-check/pull/112) -* [atom/spell-check#114 - updates spellchecker to use system language](https://github.com/atom/spell-check/pull/114) - -### [status-bar](https://github.com/atom/status-bar) - -v0.83.0...v1.2.0 - -* [atom/status-bar#121 - Move config schema to package.json](https://github.com/atom/status-bar/pull/121) -* [atom/status-bar#114 - Async git](https://github.com/atom/status-bar/pull/114) -* [atom/status-bar#122 - Make updating info faster for multi-cursor edits](https://github.com/atom/status-bar/pull/122) -* [atom/status-bar#129 - Hide diff stats for new files](https://github.com/atom/status-bar/pull/129) -* [atom/status-bar#131 - Fix error with no active item](https://github.com/atom/status-bar/pull/131) -* [atom/status-bar#133 - Move to the footer](https://github.com/atom/status-bar/pull/133) - -### [styleguide](https://github.com/atom/styleguide) - -v0.45.1...v0.45.2 - -* [atom/styleguide#34 - Specify deserializer in package.json](https://github.com/atom/styleguide/pull/34) - -### [symbols-view](https://github.com/atom/symbols-view) - -v0.110.1...v0.112.0 - -* [atom/symbols-view#147 - Add support for ES2015 static methods](https://github.com/atom/symbols-view/pull/147) -* [atom/symbols-view#151 - Specify config schema in package.json](https://github.com/atom/symbols-view/pull/151) -* [atom/symbols-view#157 - Add es7 async functions to ctags](https://github.com/atom/symbols-view/pull/157) - -### [tabs](https://github.com/atom/tabs) - -v0.91.3...v0.92.0 - -* [atom/tabs#134 - Add "open in new window" option to tabs context menu](https://github.com/atom/tabs/pull/134) - -### [timecop](https://github.com/atom/timecop) - -v0.33.0...v0.33.1 - -* [atom/timecop#15 - Specify deserializer in package.json](https://github.com/atom/timecop/pull/15) - -### [welcome](https://github.com/atom/welcome) - -v0.33.0...v0.34.0 - -* [atom/welcome#45 - Move config schema to package.json](https://github.com/atom/welcome/pull/45) -* [atom/welcome#47 - Change menu names for different platforms](https://github.com/atom/welcome/pull/47) - -### [whitespace](https://github.com/atom/whitespace) - -v0.32.1...v0.32.2 - -* [atom/whitespace#107 - Move config schema to package.json](https://github.com/atom/whitespace/pull/107) - -### [language-clojure](https://github.com/atom/language-clojure) - -v0.19.1...v0.20.0 - -* [atom/language-clojure#39 - Fix tokenization of sexp and map nested at beginning of another sexp](https://github.com/atom/language-clojure/pull/39) - -### [language-coffee-script](https://github.com/atom/language-coffee-script) - -v0.46.0...v0.46.1 - -* [atom/language-coffee-script#85 - Check for word boundaries when attempting to auto-indent](https://github.com/atom/language-coffee-script/pull/85) - -### [language-csharp](https://github.com/atom/language-csharp) - -v0.11.0...v0.12.0 - -* [atom/language-csharp#53 - Make nameof a keyword](https://github.com/atom/language-csharp/pull/53) -* [atom/language-csharp#54 - Make C# 6's when a keyword](https://github.com/atom/language-csharp/pull/54) - -### [language-gfm](https://github.com/atom/language-gfm) - -v0.84.0...v0.85.0 - -* [atom/language-gfm#140 - Highlight HTML entities inside bold, italic, and strikethrough text](https://github.com/atom/language-gfm/pull/140) - -### [language-html](https://github.com/atom/language-html) - -v0.44.0...v0.44.1 - -* [atom/language-html#108 - Fixes #102 - ng-template highlighting for script tags](https://github.com/atom/language-html/pull/108) - -### [language-json](https://github.com/atom/language-json) - -v0.17.4...v0.17.6 - -* [atom/language-json#42 - Add .jsonld file support](https://github.com/atom/language-json/pull/42) -* [atom/language-json#43 - add composer.lock files](https://github.com/atom/language-json/pull/43) -* [atom/language-json#44 - Add .tern-project and .tern-config to file types](https://github.com/atom/language-json/pull/44) - -### [language-ruby](https://github.com/atom/language-ruby) - -v0.68.0...v0.68.3 - -* [atom/language-ruby#135 - Adds cr (Crystal lang) to fileTypes for Ruby grammar](https://github.com/atom/language-ruby/pull/135) -* [atom/language-ruby#137 - Changes dop and do order priority](https://github.com/atom/language-ruby/pull/137) -* [atom/language-ruby#136 - Fixes for tokenization of Kernel methods ending in ? or !](https://github.com/atom/language-ruby/pull/136) -* [atom/language-ruby#140 - Revert do/dop order change](https://github.com/atom/language-ruby/pull/140) - -### [language-sass](https://github.com/atom/language-sass) - -v0.45.0...v0.46.0 - -* [atom/language-sass#101 - Add individual border-radius properties](https://github.com/atom/language-sass/pull/101) - -### [language-text](https://github.com/atom/language-text) - -v0.7.0...v0.7.1 - -* [atom/language-text#5 - Add travis.yml](https://github.com/atom/language-text/pull/5) -* [atom/language-text#6 - Update legal date to 2016](https://github.com/atom/language-text/pull/6) - -### [language-xml](https://github.com/atom/language-xml) - -v0.34.2...v0.34.4 - -* [atom/language-xml#43 - Fix incorrect highlighting for empty element](https://github.com/atom/language-xml/pull/43) diff --git a/changes3.md b/changes3.md deleted file mode 100644 index 60d70731a..000000000 --- a/changes3.md +++ /dev/null @@ -1,414 +0,0 @@ -### Notable Changes - -* Crash Recovery -* Most Recently Used Tab Switching -* Windows Improvements -* Environment Patching on OS X -* Electron Update - -### [Atom Core](https://github.com/atom/atom) - -v1.6.0-beta8...v1.7.0-beta0 - -* [atom/atom#10747 - Clarify Windows build docs for VS2015 etc.](https://github.com/atom/atom/pull/10747) -* [atom/atom#10743 - Don't cascade on reload](https://github.com/atom/atom/pull/10743) -* [atom/atom#9198 - permit any whole number for tabLength](https://github.com/atom/atom/pull/9198) -* [atom/atom#10758 - Fix status in subdir](https://github.com/atom/atom/pull/10758) -* [atom/atom#10768 - Temporarily disable deserializers & viewProviders metadata fields](https://github.com/atom/atom/pull/10768) -* [atom/atom#10764 - Let packages define deserializers & view providers as main module methods](https://github.com/atom/atom/pull/10764) -* [atom/atom#10778 - Fix minor typo in CONTRIBUTING.md](https://github.com/atom/atom/pull/10778) -* [atom/atom#10789 - Upgrade autocomplete-plus to use new text-buffer API](https://github.com/atom/atom/pull/10789) -* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) -* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797) -* [atom/atom#10792 - Fix TextEditorPresenter spec timeout.](https://github.com/atom/atom/pull/10792) -* [atom/atom#10803 - Fix typo in function call](https://github.com/atom/atom/pull/10803) -* [atom/atom#10828 - Fix another TextEditorPresenter spec race](https://github.com/atom/atom/pull/10828) -* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) -* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827) -* [atom/atom#10838 - Log output for core specs](https://github.com/atom/atom/pull/10838) -* [atom/atom#10818 - Register Atom for file associations in Windows](https://github.com/atom/atom/pull/10818) -* [atom/atom#10605 - Periodically save state and store in indexedDB](https://github.com/atom/atom/pull/10605) -* [atom/atom#9627 - Update to Electron 0.36](https://github.com/atom/atom/pull/9627) -* [atom/atom#10835 - Add TextEditor.prototype.cursorsForScreenRowRange](https://github.com/atom/atom/pull/10835) -* [atom/atom#10795 - Remove unused Core Team Project Management labels](https://github.com/atom/atom/pull/10795) -* [atom/atom#10858 - Update grunt-electron-installer to latest version](https://github.com/atom/atom/pull/10858) -* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) -* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846) -* [atom/atom#10873 - Avoid emitting config events while loading packages](https://github.com/atom/atom/pull/10873) -* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) -* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872) -* [atom/atom#10863 - Compare markers instead of ranges in Selection](https://github.com/atom/atom/pull/10863) -* [atom/atom#10874 - Avoid Windows 260-character path limits in script\clean](https://github.com/atom/atom/pull/10874) -* [atom/atom#10861 - Compute line foldability lazily](https://github.com/atom/atom/pull/10861) -* [atom/atom#10843 - Bump packages to use async git](https://github.com/atom/atom/pull/10843) -* [atom/atom#10886 - Update Atom build directory in build instructions](https://github.com/atom/atom/pull/10886) -* [atom/atom#10885 - Cache regexes in LanguageMode.prototype.getRegexForProperty](https://github.com/atom/atom/pull/10885) -* [atom/atom#10888 - Load packages before deserializing state](https://github.com/atom/atom/pull/10888) -* [atom/atom#10870 - Add Issue template and extra version info](https://github.com/atom/atom/pull/10870) -* [atom/atom#10878 - Allow pasting white space when `autoIndentOnPaste` is enabled](https://github.com/atom/atom/pull/10878) -* [atom/atom#10895 - Fix some spec issues](https://github.com/atom/atom/pull/10895) -* [atom/atom#10901 - remove Open Roadmap menu item, fixes #10884](https://github.com/atom/atom/pull/10901) -* [atom/atom#10898 - Pass the notification manager when splitting panes](https://github.com/atom/atom/pull/10898) -* [atom/atom#10927 - Upgrade electron to fix command-backtick bug](https://github.com/atom/atom/pull/10927) -* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) -* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926) -* [atom/atom#10921 - Add support for keybindings with keyup keystrokes](https://github.com/atom/atom/pull/10921) -* [atom/atom#10841 - Add the -a, --add CLI option](https://github.com/atom/atom/pull/10841) -* [atom/atom#10933 - Fix block decorations spec in text editor presenter](https://github.com/atom/atom/pull/10933) -* [atom/atom#10925 - Faster state serialization](https://github.com/atom/atom/pull/10925) -* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) -* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967) -* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) -* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975) -* [atom/atom#10326 - Fix Windows installer path update woes](https://github.com/atom/atom/pull/10326) -* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) -* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959) -* [atom/atom#10984 - [WIP] experiment with circle ci](https://github.com/atom/atom/pull/10984) -* [atom/atom#10737 - Add MRU tab switching functionality](https://github.com/atom/atom/pull/10737) -* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) -* [atom/atom#11001 - onDidTerminatePendingState ➡︎ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001) -* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) -* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972) -* [atom/atom#11006 - Move spec from tabs package](https://github.com/atom/atom/pull/11006) -* [atom/atom#10851 - Registry for TextEditors](https://github.com/atom/atom/pull/10851) -* [atom/atom#11010 - Always strip git+ prefix and .git suffix from package repository URLs](https://github.com/atom/atom/pull/11010) -* [atom/atom#11011 - Autoscroll after consolidating selections](https://github.com/atom/atom/pull/11011) -* [atom/atom#11008 - Add documentation for order key in config.](https://github.com/atom/atom/pull/11008) -* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) -* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009) -* [atom/atom#10675 - Expose application updater lifecycle events to packages](https://github.com/atom/atom/pull/10675) -* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) -* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022) -* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) -* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051) -* [atom/atom#11036 - Skip deleted directories when restoring application windows](https://github.com/atom/atom/pull/11036) -* [atom/atom#11063 - Show tooltip immediately if the tooltip trigger is manual](https://github.com/atom/atom/pull/11063) -* [atom/atom#10511 - Use ELECTRON_RUN_AS_NODE Variable Key](https://github.com/atom/atom/pull/10511) -* [atom/atom#10955 - TextEditor customization](https://github.com/atom/atom/pull/10955) -* [atom/atom#11065 - Default to auto height being true.](https://github.com/atom/atom/pull/11065) -* [atom/atom#11053 - Ensure atom.cmd --wait correctly waits in Windows cmd & powershell](https://github.com/atom/atom/pull/11053) -* [atom/atom#11060 - Serialize MarkerLayers only on quit](https://github.com/atom/atom/pull/11060) -* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) -* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057) -* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) -* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089) -* [atom/atom#11099 - Add zero to hexadecimal numbers below F (16)](https://github.com/atom/atom/pull/11099) -* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) -* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101) -* [atom/atom#11077 - Scroll to cursor on unfold all](https://github.com/atom/atom/pull/11077) -* [atom/atom#11103 - Make cli atom --wait work on Cygwin](https://github.com/atom/atom/pull/11103) -* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115) -* [atom/atom#11111 - Default the options parameter to an empty object](https://github.com/atom/atom/pull/11111) -* [atom/atom#11127 - Bump markdown-preview@v0.158.0](https://github.com/atom/atom/pull/11127) -* [atom/atom#8793 - squirrel-update test on desktop shortcut groups too many assertions](https://github.com/atom/atom/pull/8793) -* [atom/atom#11078 - Add TextEditors to the registry only when opting in](https://github.com/atom/atom/pull/11078) -* [atom/atom#11054 - Patch Environment On OSX And Allow A Different Environment Per Window](https://github.com/atom/atom/pull/11054) -* [atom/atom#11153 - Fix node env](https://github.com/atom/atom/pull/11153) -* [atom/atom#11162 - BufferedProcess: search only new data for new lines rather than entire buffer, take 2](https://github.com/atom/atom/pull/11162) -* [atom/atom#11166 - Note where GitRepositoryAsync deviates from its synchronous predecessor](https://github.com/atom/atom/pull/11166) - -### [one-dark-ui](https://github.com/atom/one-dark-ui) - -v1.1.9...v1.2.0 - -* [atom/one-dark-ui#113 - Specify config schema in package.json](https://github.com/atom/one-dark-ui/pull/113) -* [atom/one-dark-ui#121 - Fix typo in comment for ui-variables.less](https://github.com/atom/one-dark-ui/pull/121) - -### [one-light-ui](https://github.com/atom/one-light-ui) - -v1.1.9...v1.2.0 - -* [atom/one-light-ui#48 - Specify config schema in package.json](https://github.com/atom/one-light-ui/pull/48) - -### [about](https://github.com/atom/about) - -v1.3.0...v1.4.1 - -* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) -* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6) -* [atom/about#13 - Specify deserializer method in package.json, the new way](https://github.com/atom/about/pull/13) -* [atom/about#12 - Show update information on the about page](https://github.com/atom/about/pull/12) -* [atom/about#15 - Move away from deprecated Electron require syntax](https://github.com/atom/about/pull/15) - -### [archive-view](https://github.com/atom/archive-view) - -v0.61.0...v0.61.1 - -* [atom/archive-view#32 - Specify deserializer in package.json](https://github.com/atom/archive-view/pull/32) - -### [autocomplete-plus](https://github.com/atom/autocomplete-plus) - -v2.25.0...v2.29.1 - -* [atom/autocomplete-plus#612 - bugfix: auto indentation after suggestion confirm](https://github.com/atom/autocomplete-plus/pull/612) -* [atom/autocomplete-plus#641 - Stop flickering when adjusting margins](https://github.com/atom/autocomplete-plus/pull/641) -* [atom/autocomplete-plus#637 - Move config schema to package.json](https://github.com/atom/autocomplete-plus/pull/637) -* [atom/autocomplete-plus#659 - Batch autocompletion show/hide](https://github.com/atom/autocomplete-plus/pull/659) -* [atom/autocomplete-plus#675 - :art: Clean up formatting of fileBlacklist setting description](https://github.com/atom/autocomplete-plus/pull/675) -* [atom/autocomplete-plus#672 - Redesign SymbolStore and SymbolProvider](https://github.com/atom/autocomplete-plus/pull/672) -* [atom/autocomplete-plus#667 - Add unicode support for \w regexps](https://github.com/atom/autocomplete-plus/pull/667) -* [atom/autocomplete-plus#681 - Fix maximum call stack size exceeded error](https://github.com/atom/autocomplete-plus/pull/681) - -### [autosave](https://github.com/atom/autosave) - -v0.23.0...v0.23.1 - -* [atom/autosave#56 - Move config schema to package.json](https://github.com/atom/autosave/pull/56) - -### [bracket-matcher](https://github.com/atom/bracket-matcher) - -v0.79.0...v0.81.0 - -* [atom/bracket-matcher#196 - Fix spelling in settings](https://github.com/atom/bracket-matcher/pull/196) -* [atom/bracket-matcher#197 - Move config schema to package.json](https://github.com/atom/bracket-matcher/pull/197) -* [atom/bracket-matcher#212 - Make updating matches faster for multi-cursor editing](https://github.com/atom/bracket-matcher/pull/212) -* [atom/bracket-matcher#219 - Clean up view subscriptions when editor is destroyed](https://github.com/atom/bracket-matcher/pull/219) -* [atom/bracket-matcher#221 - Enable bracket matching for elixir](https://github.com/atom/bracket-matcher/pull/221) - -### [deprecation-cop](https://github.com/atom/deprecation-cop) - -v0.54.0...v0.54.1 - -* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) -* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65) -* [atom/deprecation-cop#67 - Specify deserializer method in package.json](https://github.com/atom/deprecation-cop/pull/67) - -### [fuzzy-finder](https://github.com/atom/fuzzy-finder) - -v0.94.0...v1.0.3 - -* [atom/fuzzy-finder#160 - Move config schema to package.json](https://github.com/atom/fuzzy-finder/pull/160) -* [atom/fuzzy-finder#167 - Async git](https://github.com/atom/fuzzy-finder/pull/167) -* [atom/fuzzy-finder#174 - Fix spec race](https://github.com/atom/fuzzy-finder/pull/174) -* [atom/fuzzy-finder#178 - Handle symlink project paths](https://github.com/atom/fuzzy-finder/pull/178) -* [atom/fuzzy-finder#180 - Return project paths correctly if last-opened path is not in project](https://github.com/atom/fuzzy-finder/pull/180) - -### [git-diff](https://github.com/atom/git-diff) - -v0.57.0...v1.0.1 - -* [atom/git-diff#81 - Move config schema to package.json](https://github.com/atom/git-diff/pull/81) -* [atom/git-diff#82 - Async git](https://github.com/atom/git-diff/pull/82) -* [atom/git-diff#95 - Catch errors from new files.](https://github.com/atom/git-diff/pull/95) - -### [grammar-selector](https://github.com/atom/grammar-selector) - -v0.48.0...v0.48.1 - -* [atom/grammar-selector#25 - Add description for config setting](https://github.com/atom/grammar-selector/pull/25) -* [atom/grammar-selector#29 - Move config schema to package.json](https://github.com/atom/grammar-selector/pull/29) - -### [image-view](https://github.com/atom/image-view) - -v0.56.0...v0.57.0 - -* [atom/image-view#40 - Zoom to fit](https://github.com/atom/image-view/pull/40) - -### [incompatible-packages](https://github.com/atom/incompatible-packages) - -v0.25.0...v0.25.1 - -* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) -* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11) -* [atom/incompatible-packages#12 - Specify deserializer method in package.json](https://github.com/atom/incompatible-packages/pull/12) - -### [keybinding-resolver](https://github.com/atom/keybinding-resolver) - -v0.33.0...v0.35.0 - -* [atom/keybinding-resolver#23 - Update coffeelint support](https://github.com/atom/keybinding-resolver/pull/23) -* [atom/keybinding-resolver#37 - Show keyup events that match a binding](https://github.com/atom/keybinding-resolver/pull/37) - -### [line-ending-selector](https://github.com/atom/line-ending-selector) - -v0.3.0...v0.3.1 - -* [atom/line-ending-selector#17 - Move config schema to package.json](https://github.com/atom/line-ending-selector/pull/17) - -### [link](https://github.com/atom/link) - -v0.31.0...v0.31.1 - -* [atom/link#14 - Move away from deprecated Electron require syntax](https://github.com/atom/link/pull/14) - -### [markdown-preview](https://github.com/atom/markdown-preview) - -v0.157.2...v0.158.0 - -* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) -* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349) -* [atom/markdown-preview#367 - Use new package.json fields to allow deferred loading](https://github.com/atom/markdown-preview/pull/367) -* [atom/markdown-preview#335 - Use GitHub style when "Save as HTML"](https://github.com/atom/markdown-preview/pull/335) - -### [notifications](https://github.com/atom/notifications) - -v0.62.1...v0.63.1 - -* [atom/notifications#105 - Move config schema to package.json](https://github.com/atom/notifications/pull/105) -* [atom/notifications#111 - Use https://git.io insead of http](https://github.com/atom/notifications/pull/111) -* [atom/notifications#113 - replace ATOM_HOME in issue title with generic placeholder](https://github.com/atom/notifications/pull/113) -* [atom/notifications#114 - Use bit.ly instead of git.io.](https://github.com/atom/notifications/pull/114) -* [atom/notifications#115 - URL shortening, take 2](https://github.com/atom/notifications/pull/115) - -### [open-on-github](https://github.com/atom/open-on-github) - -v0.41.0...v1.0.1 - -* [atom/open-on-github#59 - Move config schema to package.json](https://github.com/atom/open-on-github/pull/59) -* [atom/open-on-github#60 - Async git](https://github.com/atom/open-on-github/pull/60) -* [atom/open-on-github#66 - Move away from deprecated Electron require syntax](https://github.com/atom/open-on-github/pull/66) - -### [package-generator](https://github.com/atom/package-generator) - -v0.41.0...v1.0.0 - -* [atom/package-generator#37 - Move config schema to package.json](https://github.com/atom/package-generator/pull/37) -* [atom/package-generator#36 - Support JS package generation](https://github.com/atom/package-generator/pull/36) - -### [settings-view](https://github.com/atom/settings-view) - -v0.232.3...v0.235.0 - -* [atom/settings-view#731 - Specify deserializer in package.json](https://github.com/atom/settings-view/pull/731) -* [atom/settings-view#749 - Move away from deprecated Electron require syntax](https://github.com/atom/settings-view/pull/749) -* [atom/settings-view#750 - Another require fix for remote](https://github.com/atom/settings-view/pull/750) -* [atom/settings-view#743 - Display and manage Git-based packages](https://github.com/atom/settings-view/pull/743) -* [atom/settings-view#748 - Add defaults on focus](https://github.com/atom/settings-view/pull/748) -* [atom/settings-view#736 - Add collapsable section for option groups](https://github.com/atom/settings-view/pull/736) - -### [spell-check](https://github.com/atom/spell-check) - -v0.65.0...v0.67.0 - -* [atom/spell-check#103 - Update README.md](https://github.com/atom/spell-check/pull/103) -* [atom/spell-check#33 - Add feature: toggle on/off](https://github.com/atom/spell-check/pull/33) -* [atom/spell-check#108 - subscriptionsOfCommands -> commandSubscription](https://github.com/atom/spell-check/pull/108) -* [atom/spell-check#112 - Move config schema to package.json](https://github.com/atom/spell-check/pull/112) -* [atom/spell-check#114 - updates spellchecker to use system language](https://github.com/atom/spell-check/pull/114) - -### [status-bar](https://github.com/atom/status-bar) - -v0.83.0...v1.2.0 - -* [atom/status-bar#121 - Move config schema to package.json](https://github.com/atom/status-bar/pull/121) -* [atom/status-bar#114 - Async git](https://github.com/atom/status-bar/pull/114) -* [atom/status-bar#122 - Make updating info faster for multi-cursor edits](https://github.com/atom/status-bar/pull/122) -* [atom/status-bar#129 - Hide diff stats for new files](https://github.com/atom/status-bar/pull/129) -* [atom/status-bar#131 - Fix error with no active item](https://github.com/atom/status-bar/pull/131) -* [atom/status-bar#133 - Move to the footer](https://github.com/atom/status-bar/pull/133) - -### [styleguide](https://github.com/atom/styleguide) - -v0.45.1...v0.45.2 - -* [atom/styleguide#34 - Specify deserializer in package.json](https://github.com/atom/styleguide/pull/34) - -### [symbols-view](https://github.com/atom/symbols-view) - -v0.110.1...v0.112.0 - -* [atom/symbols-view#147 - Add support for ES2015 static methods](https://github.com/atom/symbols-view/pull/147) -* [atom/symbols-view#151 - Specify config schema in package.json](https://github.com/atom/symbols-view/pull/151) -* [atom/symbols-view#157 - Add es7 async functions to ctags](https://github.com/atom/symbols-view/pull/157) - -### [tabs](https://github.com/atom/tabs) - -v0.91.3...v0.92.0 - -* [atom/tabs#134 - Add "open in new window" option to tabs context menu](https://github.com/atom/tabs/pull/134) - -### [timecop](https://github.com/atom/timecop) - -v0.33.0...v0.33.1 - -* [atom/timecop#15 - Specify deserializer in package.json](https://github.com/atom/timecop/pull/15) - -### [tree-view](https://github.com/atom/tree-view) - -v0.201.5...v0.203.2 - -* [atom/tree-view#754 - Add option to auto-reveal tree view entries when they become the active pane item](https://github.com/atom/tree-view/pull/754) -* [atom/tree-view#755 - Add `focusOnReveal` option](https://github.com/atom/tree-view/pull/755) -* [atom/tree-view#695 - Make 'Move in trash' more verbose on failure, add a note for Linux](https://github.com/atom/tree-view/pull/695) -* [atom/tree-view#769 - Move away from deprecated Electron require syntax](https://github.com/atom/tree-view/pull/769) -* [atom/tree-view#768 - Fix exception when double clicking opened file after activation](https://github.com/atom/tree-view/pull/768) - -### [welcome](https://github.com/atom/welcome) - -v0.33.0...v0.34.0 - -* [atom/welcome#45 - Move config schema to package.json](https://github.com/atom/welcome/pull/45) -* [atom/welcome#47 - Change menu names for different platforms](https://github.com/atom/welcome/pull/47) - -### [whitespace](https://github.com/atom/whitespace) - -v0.32.1...v0.32.2 - -* [atom/whitespace#107 - Move config schema to package.json](https://github.com/atom/whitespace/pull/107) - -### [language-clojure](https://github.com/atom/language-clojure) - -v0.19.1...v0.20.0 - -* [atom/language-clojure#39 - Fix tokenization of sexp and map nested at beginning of another sexp](https://github.com/atom/language-clojure/pull/39) - -### [language-coffee-script](https://github.com/atom/language-coffee-script) - -v0.46.0...v0.46.1 - -* [atom/language-coffee-script#85 - Check for word boundaries when attempting to auto-indent](https://github.com/atom/language-coffee-script/pull/85) - -### [language-csharp](https://github.com/atom/language-csharp) - -v0.11.0...v0.12.0 - -* [atom/language-csharp#53 - Make nameof a keyword](https://github.com/atom/language-csharp/pull/53) -* [atom/language-csharp#54 - Make C# 6's when a keyword](https://github.com/atom/language-csharp/pull/54) - -### [language-gfm](https://github.com/atom/language-gfm) - -v0.84.0...v0.85.0 - -* [atom/language-gfm#140 - Highlight HTML entities inside bold, italic, and strikethrough text](https://github.com/atom/language-gfm/pull/140) - -### [language-html](https://github.com/atom/language-html) - -v0.44.0...v0.44.1 - -* [atom/language-html#108 - Fixes #102 - ng-template highlighting for script tags](https://github.com/atom/language-html/pull/108) - -### [language-json](https://github.com/atom/language-json) - -v0.17.4...v0.17.6 - -* [atom/language-json#42 - Add .jsonld file support](https://github.com/atom/language-json/pull/42) -* [atom/language-json#43 - add composer.lock files](https://github.com/atom/language-json/pull/43) -* [atom/language-json#44 - Add .tern-project and .tern-config to file types](https://github.com/atom/language-json/pull/44) - -### [language-ruby](https://github.com/atom/language-ruby) - -v0.68.0...v0.68.3 - -* [atom/language-ruby#135 - Adds cr (Crystal lang) to fileTypes for Ruby grammar](https://github.com/atom/language-ruby/pull/135) -* [atom/language-ruby#137 - Changes dop and do order priority](https://github.com/atom/language-ruby/pull/137) -* [atom/language-ruby#136 - Fixes for tokenization of Kernel methods ending in ? or !](https://github.com/atom/language-ruby/pull/136) -* [atom/language-ruby#140 - Revert do/dop order change](https://github.com/atom/language-ruby/pull/140) - -### [language-sass](https://github.com/atom/language-sass) - -v0.45.0...v0.46.0 - -* [atom/language-sass#101 - Add individual border-radius properties](https://github.com/atom/language-sass/pull/101) - -### [language-text](https://github.com/atom/language-text) - -v0.7.0...v0.7.1 - -* [atom/language-text#5 - Add travis.yml](https://github.com/atom/language-text/pull/5) -* [atom/language-text#6 - Update legal date to 2016](https://github.com/atom/language-text/pull/6) - -### [language-xml](https://github.com/atom/language-xml) - -v0.34.2...v0.34.4 - -* [atom/language-xml#43 - Fix incorrect highlighting for empty element](https://github.com/atom/language-xml/pull/43) diff --git a/fsck.txt b/fsck.txt deleted file mode 100644 index 2b4444696..000000000 --- a/fsck.txt +++ /dev/null @@ -1,84 +0,0 @@ -dangling blob 8e1e50c470eb9e341f51dd728c371ec9e6ba967f -dangling blob 312880903e5988a36556c71047cfab48f7cabb0a -dangling commit d14e40a5f4e51d329bf51eed9c5ac405cef8a4e7 -dangling blob ed4f3083f21ee505b90e49bc719126b3a0ca8717 -dangling commit 1981b88bcacc6a68408a7f21c840ebe50a3f76a1 -dangling commit b490508111afcabff3afd35b877f6afa0dd9ed57 -dangling commit 629c78769aa70249e6aceaed24ca5ed02a2b24e2 -dangling blob 3db2f0aa0e9ffeda9f614085d0b55ad3669439f8 -dangling commit 34f8200a8eecf014d43defaf8c6dd4e50e99d2ee -dangling commit 5d1009b9be44874de85d5cea8bfa8692fb1c9e93 -dangling commit 9b1e51e67ebc5de354858b555eb9b4e4c92bd4dd -dangling commit 4b8039b1d3f06b0f4e0f00ca195748ee8c1e32ed -dangling blob 7ca269d19d59fa66955e17e0861eb45652d1ba2d -dangling blob c8a8a9065ef35c949d666f7e4d7f743218ec6bc7 -dangling blob 9cb1c9364187f4a7665f1c7b5dee3c3fbd8f1c99 -dangling commit eec8e92d898d645a6ce442ae7c35ec9584396c58 -dangling blob dcc9712690f1c859158aebc40a56fbf27e833d76 -dangling blob 1fe2e195f16e0d750d8d995b87b8035a44b381d2 -dangling blob 50e29981374b4dfe0c4262a4cd73aea35ca76315 -dangling blob 8ce7099a661bb3a8f4918ecb57c0279b2bbc5830 -dangling commit 08e8d1fe6d81c1ef46bee56003c93b267bae2bd8 -dangling commit 07f9710adffbd72b6142892662135540826304f4 -dangling blob 52f9e94a0f8773639c2b934c0f6dc1480b857d84 -dangling commit e813da3e669e6ff94efa7ece2b0ff72781b4989d -dangling commit 0b30da3c7e93250e5b4ad07cf70a1d6477f14f1c -dangling commit 5d5c9a487e098214b4f956c20b6f6a07aec44954 -dangling commit c5916ad2075a90dc188e612c369affdf1dc0bc23 -dangling commit fe9efa90b53d85c6ee8a7d455f61cab0f1495bb4 -dangling blob 0e9f6a422bd61e3ac86b1317d6b12356328b6d66 -dangling commit 86d8bade0a8e08537f2c6a5f278bc426e3136310 -dangling commit 44fb9a4521e7f05cfb80fcd7057fdf75a9cd57f0 -dangling blob 0efdb238e664cf22a41e19fa327ab5582fba88f9 -dangling commit 5d0aabf92aa8606b08619ee7fc3654f14aa68bad -dangling commit 2d19dbc0fc42216b8892e261201cc53a378b5d7e -dangling commit 952263ff6ad07751137586a10b7766d292d1d249 -dangling commit 6d266b46d74b6acab92a3c8787973b46936d9fee -dangling commit 8346a391ecc5c8cbccecf1da359f3b975173dcf4 -dangling commit 0554dbd09d5d199382f612e9587e9044135e1266 -dangling commit 0f667bdaa3156942835a7f55bca7d116f02bc678 -dangling blob e27e1b3bbda2e7c75cfae7715ece1adec8b7b044 -dangling blob 9b9bbba7c0ef471ef195119db8f3bc2a903c5d5e -dangling commit 4fa8734a6537b8265064e31be40e1635996a543f -dangling blob 97b793cd3612ec045881b27477927cfc2a4a2083 -dangling blob 5ceaabe3ccb8c6b2c4ffde8dacb506601431ddbb -dangling commit eb13c4a2b1ee9854a238463ecc99d27dda8641d5 -dangling commit 14421ccec537f5b034d35bd3a6578c848532d06d -dangling commit 295d1c1d8df1ebf9c8477686d5a294135c9a413c -dangling commit 4e96d4ca9770282c120e6ab909f101fb7604999f -dangling commit e6b82450a1065c2be1313376be900014f98fb340 -dangling blob 4fc1849c928074155f28caa53b06ad61ad5b140e -dangling commit f7fe343d0a2eb0016b8fdad61512921dabd188db -dangling commit 0107a55520447e6b24ce224f5c2269c6e9e09f5b -dangling commit 2f2395435ea382bdf2aaa6f8a9d313bf337dbf96 -dangling commit 7c2ca56b3b5702e3a59c85540bd6c278415071ce -dangling commit 2d59bdd296fc06664c84ff6aeb98af3346b7b1fb -dangling blob 3c6a0514c057cd275aeb9df47f7ebbc3da1bcd1f -dangling blob b08cdddd620140a4bf79f6af455ce11979ecf2c2 -dangling commit a38e850b7648a7cef9d57725a27e298bc7d03cd4 -dangling blob b6af9d9e202c61bda1ac21b66f5d576805c617f6 -dangling commit 40c3bd9d3e7e23e1d6032180b37d5e49d16c0d5c -dangling commit 34d42d33ccd9cfec6c0aacbf145f4ef37353db98 -dangling commit 1ffdbd581d994dc633c1344747b4da809c400a08 -dangling blob 490d76d4f5acb1b44d7840bc8a3c7bda62d11d07 -dangling commit b72a56ec43568db6d299c1eba54726a6e3cc1c97 -dangling commit 693c0657285beff0d4aaca0641375283c5a56c74 -dangling blob c66026146ba927fc352451448472982845a3727e -dangling blob 1671d6b83241b80fa4ba87ac8a3644e8dd9dbb23 -dangling blob 6175d60e2dd97a0a67321ca2eeccf567b6c2d988 -dangling commit 9a9deedebdea0ae0b731791ecc08caea0623fa50 -dangling blob d0aa062f7df257a3120025cbbba8aa6b0b31d1bb -dangling blob 28b82ef47e6226d52364a2a675af3145987d0710 -dangling commit 43ea466643b314b20fe374b64dbd7a47816b962a -dangling blob 52ebb6f16e8b667cd321dea15461e0d8eb690ad8 -dangling blob 7bf4fec5c7b11c2dbd64556c3422cd4e838e6690 -dangling blob 45f506658f41781d33ec9b975a73c75199ef6757 -dangling blob ee27c707653877b4f644aecce296e68c23438d0f -dangling commit a357b773b0601eb14cdc921233fd50bb1c3e3286 -dangling commit cd598fcd5927deb5ad8443614c8bd6383ff3a765 -dangling commit 8960cfeed612451e272e9da34ac831c81b7b324c -dangling commit 3e6def8d1b7eac9fa9b3053d8824440770d01ecf -dangling commit f0782fb3b7b108201648ddc895e61cee26a2070d -dangling commit a87a2781ff62ef0810740dba02d70669dc1fa315 -dangling blob 3a7e57e783324bf9b95cf66502675f450c4fb6d0 -dangling blob 1ae10fac3e2c076e3053305ec2785a63a04101d2 From 07822b975a2096f9c28d6282b29da27a1b08ad39 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Wed, 13 Apr 2016 20:34:28 -0700 Subject: [PATCH 119/139] :arrow_up: open-on-github --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59a0302c0..e2a809872 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "markdown-preview": "0.158.0", "metrics": "0.53.1", "notifications": "0.63.1", - "open-on-github": "1.0.1", + "open-on-github": "1.1.0", "package-generator": "1.0.0", "settings-view": "0.235.1", "snippets": "1.0.2", From e230841b57f13607ec6f38d8576b2ddf3dfa7315 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Wed, 13 Apr 2016 20:46:48 -0700 Subject: [PATCH 120/139] :arrow_up: tree-view --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2a809872..4d43459ba 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "symbols-view": "0.112.0", "tabs": "0.92.1", "timecop": "0.33.1", - "tree-view": "0.205.0", + "tree-view": "0.206.0", "update-package-dependencies": "0.10.0", "welcome": "0.34.0", "whitespace": "0.32.2", From 4adf23a5956e55ab113631f6652fda25438d032f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Apr 2016 11:24:01 +0200 Subject: [PATCH 121/139] Unconditionally report deprecations on every test environment --- build/tasks/spec-task.coffee | 1 - spec/jasmine-test-runner.coffee | 12 +++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/build/tasks/spec-task.coffee b/build/tasks/spec-task.coffee index 40b7ad5ce..2e319a19c 100644 --- a/build/tasks/spec-task.coffee +++ b/build/tasks/spec-task.coffee @@ -18,7 +18,6 @@ module.exports = (grunt) -> packageSpecQueue = null logDeprecations = (label, {stderr}={}) -> - return unless process.env.JANKY_SHA1 or process.env.CI stderr ?= '' deprecatedStart = stderr.indexOf('Calls to deprecated functions') return if deprecatedStart is -1 diff --git a/spec/jasmine-test-runner.coffee b/spec/jasmine-test-runner.coffee index 5b5d4e225..dd8386f5d 100644 --- a/spec/jasmine-test-runner.coffee +++ b/spec/jasmine-test-runner.coffee @@ -1,3 +1,4 @@ +Grim = require 'grim' _ = require 'underscore-plus' fs = require 'fs-plus' path = require 'path' @@ -96,13 +97,10 @@ buildTerminalReporter = (logFile, resolveWithExitCode) -> log(str) onComplete: (runner) -> fs.closeSync(logStream) if logStream? - if process.env.JANKY_SHA1 or process.env.CI - grim = require 'grim' - - if grim.getDeprecationsLength() > 0 - grim.logDeprecations() - resolveWithExitCode(1) - return + if Grim.getDeprecationsLength() > 0 + Grim.logDeprecations() + resolveWithExitCode(1) + return if runner.results().failedCount > 0 resolveWithExitCode(1) From 303bb8c74e5274fcc2585acd53ca0d0df9459d95 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Apr 2016 11:24:59 +0200 Subject: [PATCH 122/139] Remove this commit if it works on travis --- spec/fake-spec.coffee | 3 +++ spec/jasmine-test-runner.coffee | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 spec/fake-spec.coffee diff --git a/spec/fake-spec.coffee b/spec/fake-spec.coffee new file mode 100644 index 000000000..c14cdbb94 --- /dev/null +++ b/spec/fake-spec.coffee @@ -0,0 +1,3 @@ +fdescribe "remove this", -> + it "remove me", -> + require("grim").deprecate("foo") diff --git a/spec/jasmine-test-runner.coffee b/spec/jasmine-test-runner.coffee index dd8386f5d..fd0187298 100644 --- a/spec/jasmine-test-runner.coffee +++ b/spec/jasmine-test-runner.coffee @@ -25,7 +25,7 @@ module.exports = ({logFile, headless, testPaths, buildAtomEnvironment}) -> }) require './spec-helper' - disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI + # disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI requireSpecs(testPath) for testPath in testPaths setSpecType('user') From 61d8c6852c1577a439f87f57f87ddfad32052424 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Apr 2016 15:07:50 +0200 Subject: [PATCH 123/139] Remove non-Mac run-specs code and use ELECTRON_ENABLE_LOGGING=true * Remove Windows/Linux run-specs code. There is little value in keeping those code paths, given that we don't run specs on those platforms; if we ever need it again, we can restore it from the git history. * Use ELECTRON_ENABLE_LOGGING=true. This allows us to capture the output of calls to `console.warn` and `console.log`, which are useful to log out Grim deprecations. * Remove `logDeprecations` in build/spec-task.coffee. This method used to format the output captured on stderr to strip out "[Console]" noise from deprecations. This code path was not running anymore because we started using stdio: 'inherit' in #10838, which prevents stderr output to be captured. This doesn't seem a huge deal, so long as those deprecations get logged to screen. --- build/tasks/spec-task.coffee | 121 ++++++----------------------------- 1 file changed, 21 insertions(+), 100 deletions(-) diff --git a/build/tasks/spec-task.coffee b/build/tasks/spec-task.coffee index 2e319a19c..b806ffcb7 100644 --- a/build/tasks/spec-task.coffee +++ b/build/tasks/spec-task.coffee @@ -5,40 +5,14 @@ temp = require('temp').track() _ = require 'underscore-plus' async = require 'async' -# TODO: This should really be parallel on every platform, however: -# - On Windows, our fixtures step on each others toes. -if process.platform is 'win32' - concurrency = 1 -else - concurrency = 2 - module.exports = (grunt) -> {isAtomPackage, spawn} = require('./task-helpers')(grunt) packageSpecQueue = null - logDeprecations = (label, {stderr}={}) -> - stderr ?= '' - deprecatedStart = stderr.indexOf('Calls to deprecated functions') - return if deprecatedStart is -1 - - grunt.log.error(label) - stderr = stderr.substring(deprecatedStart) - stderr = stderr.replace(/^\s*\[[^\]]+\]\s+/gm, '') - stderr = stderr.replace(/source: .*$/gm, '') - stderr = stderr.replace(/^"/gm, '') - stderr = stderr.replace(/",\s*$/gm, '') - grunt.log.error(stderr) - getAppPath = -> contentsDir = grunt.config.get('atom.contentsDir') - switch process.platform - when 'darwin' - path.join(contentsDir, 'MacOS', 'Atom') - when 'linux' - path.join(contentsDir, 'atom') - when 'win32' - path.join(contentsDir, 'atom.exe') + path.join(contentsDir, 'MacOS', 'Atom') runPackageSpecs = (callback) -> failedPackages = [] @@ -46,34 +20,17 @@ module.exports = (grunt) -> resourcePath = process.cwd() appPath = getAppPath() - # Ensure application is executable on Linux - fs.chmodSync(appPath, '755') if process.platform is 'linux' - packageSpecQueue = async.queue (packagePath, callback) -> - if process.platform in ['darwin', 'linux'] - options = - cmd: appPath - args: ['--test', "--resource-path=#{resourcePath}", path.join(packagePath, 'spec')] - opts: - cwd: packagePath - env: _.extend({}, process.env, ATOM_PATH: rootDir) - else if process.platform is 'win32' - options = - cmd: process.env.comspec - args: ['/c', appPath, '--test', "--resource-path=#{resourcePath}", "--log-file=ci.log", path.join(packagePath, 'spec')] - opts: - cwd: packagePath - env: _.extend({}, process.env, ATOM_PATH: rootDir) + options = + cmd: appPath + args: ['--test', "--resource-path=#{resourcePath}", path.join(packagePath, 'spec')] + opts: + cwd: packagePath + env: _.extend({}, process.env, ELECTRON_ENABLE_LOGGING: true, ATOM_PATH: rootDir) grunt.log.ok "Launching #{path.basename(packagePath)} specs." - spawn options, (error, results, code) -> - if process.platform is 'win32' - if error - process.stderr.write(fs.readFileSync(path.join(packagePath, 'ci.log'))) - fs.unlinkSync(path.join(packagePath, 'ci.log')) - + spawn options, (error) -> failedPackages.push path.basename(packagePath) if error - logDeprecations("#{path.basename(packagePath)} Specs", results) callback() modulesDirectory = path.resolve('node_modules') @@ -83,71 +40,38 @@ module.exports = (grunt) -> continue unless isAtomPackage(packagePath) packageSpecQueue.push(packagePath) - packageSpecQueue.concurrency = Math.max(1, concurrency - 1) + packageSpecQueue.concurrency = 1 packageSpecQueue.drain = -> callback(null, failedPackages) - runCoreSpecs = (callback, logOutput = false) -> + runCoreSpecs = (callback) -> appPath = getAppPath() resourcePath = process.cwd() coreSpecsPath = path.resolve('spec') - if process.platform in ['darwin', 'linux'] - options = - cmd: appPath - args: ['--test', "--resource-path=#{resourcePath}", coreSpecsPath, "--user-data-dir=#{temp.mkdirSync('atom-user-data-dir')}"] - opts: - env: _.extend({}, process.env, - ATOM_INTEGRATION_TESTS_ENABLED: true - ) - - else if process.platform is 'win32' - options = - cmd: process.env.comspec - args: ['/c', appPath, '--test', "--resource-path=#{resourcePath}", '--log-file=ci.log', coreSpecsPath] - opts: - env: _.extend({}, process.env, - ATOM_INTEGRATION_TESTS_ENABLED: true - ) - - if logOutput - options.opts.stdio = 'inherit' + options = + cmd: appPath + args: ['--test', "--resource-path=#{resourcePath}", coreSpecsPath, "--user-data-dir=#{temp.mkdirSync('atom-user-data-dir')}"] + opts: + env: _.extend({}, process.env, {ATOM_INTEGRATION_TESTS_ENABLED: true, ELECTRON_ENABLE_LOGGING: true}) + stdio: 'inherit' grunt.log.ok "Launching core specs." - spawn options, (error, results, code) -> - if process.platform is 'win32' - process.stderr.write(fs.readFileSync('ci.log')) if error - fs.unlinkSync('ci.log') - else - # TODO: Restore concurrency on Windows - packageSpecQueue?.concurrency = concurrency - logDeprecations('Core Specs', results) - + spawn options, (error, results) -> callback(null, error) grunt.registerTask 'run-specs', 'Run the specs', -> done = @async() startTime = Date.now() - method = - if concurrency is 1 - async.series - else - async.parallel - - # If we're just running the core specs then we won't have any output to - # indicate the tests actually *are* running. This upsets Travis: - # https://github.com/atom/atom/issues/10837. So pass the test output - # through. - runCoreSpecsWithLogging = (callback) -> runCoreSpecs(callback, true) specs = if process.env.ATOM_SPECS_TASK is 'packages' [runPackageSpecs] else if process.env.ATOM_SPECS_TASK is 'core' - [runCoreSpecsWithLogging] + [runCoreSpecs] else [runCoreSpecs, runPackageSpecs] - method specs, (error, results) -> + async.series specs, (error, results) -> failedPackages = [] coreSpecFailed = null @@ -159,13 +83,10 @@ module.exports = (grunt) -> [coreSpecFailed, failedPackages] = results elapsedTime = Math.round((Date.now() - startTime) / 100) / 10 - grunt.log.ok("Total spec time: #{elapsedTime}s using #{concurrency} cores") + grunt.log.ok("Total spec time: #{elapsedTime}s") failures = failedPackages failures.push "atom core" if coreSpecFailed grunt.log.error("[Error]".red + " #{failures.join(', ')} spec(s) failed") if failures.length > 0 - if process.platform is 'win32' and process.env.JANKY_SHA1 - done() - else - done(not coreSpecFailed and failedPackages.length is 0) + done(not coreSpecFailed and failedPackages.length is 0) From 147fed31234c6ed74d7f12aa6c5f3fc73dcd1a25 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Apr 2016 15:46:50 +0200 Subject: [PATCH 124/139] Revert "Remove this commit if it works on travis" This reverts commit 303bb8c74e5274fcc2585acd53ca0d0df9459d95. --- spec/fake-spec.coffee | 3 --- spec/jasmine-test-runner.coffee | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 spec/fake-spec.coffee diff --git a/spec/fake-spec.coffee b/spec/fake-spec.coffee deleted file mode 100644 index c14cdbb94..000000000 --- a/spec/fake-spec.coffee +++ /dev/null @@ -1,3 +0,0 @@ -fdescribe "remove this", -> - it "remove me", -> - require("grim").deprecate("foo") diff --git a/spec/jasmine-test-runner.coffee b/spec/jasmine-test-runner.coffee index fd0187298..dd8386f5d 100644 --- a/spec/jasmine-test-runner.coffee +++ b/spec/jasmine-test-runner.coffee @@ -25,7 +25,7 @@ module.exports = ({logFile, headless, testPaths, buildAtomEnvironment}) -> }) require './spec-helper' - # disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI + disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI requireSpecs(testPath) for testPath in testPaths setSpecType('user') From 740e371e75b29f5aa777a084f979c8e344109303 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 14 Apr 2016 16:04:30 +0200 Subject: [PATCH 125/139] Put back multi-platform specs --- build/tasks/spec-task.coffee | 91 ++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 19 deletions(-) diff --git a/build/tasks/spec-task.coffee b/build/tasks/spec-task.coffee index b806ffcb7..c1067231c 100644 --- a/build/tasks/spec-task.coffee +++ b/build/tasks/spec-task.coffee @@ -5,6 +5,13 @@ temp = require('temp').track() _ = require 'underscore-plus' async = require 'async' +# TODO: This should really be parallel on every platform, however: +# - On Windows, our fixtures step on each others toes. +if process.platform is 'win32' + concurrency = 1 +else + concurrency = 2 + module.exports = (grunt) -> {isAtomPackage, spawn} = require('./task-helpers')(grunt) @@ -12,7 +19,13 @@ module.exports = (grunt) -> getAppPath = -> contentsDir = grunt.config.get('atom.contentsDir') - path.join(contentsDir, 'MacOS', 'Atom') + switch process.platform + when 'darwin' + path.join(contentsDir, 'MacOS', 'Atom') + when 'linux' + path.join(contentsDir, 'atom') + when 'win32' + path.join(contentsDir, 'atom.exe') runPackageSpecs = (callback) -> failedPackages = [] @@ -20,16 +33,32 @@ module.exports = (grunt) -> resourcePath = process.cwd() appPath = getAppPath() + # Ensure application is executable on Linux + fs.chmodSync(appPath, '755') if process.platform is 'linux' + packageSpecQueue = async.queue (packagePath, callback) -> - options = - cmd: appPath - args: ['--test', "--resource-path=#{resourcePath}", path.join(packagePath, 'spec')] - opts: - cwd: packagePath - env: _.extend({}, process.env, ELECTRON_ENABLE_LOGGING: true, ATOM_PATH: rootDir) + if process.platform in ['darwin', 'linux'] + options = + cmd: appPath + args: ['--test', "--resource-path=#{resourcePath}", path.join(packagePath, 'spec')] + opts: + cwd: packagePath + env: _.extend({}, process.env, ELECTRON_ENABLE_LOGGING: true, ATOM_PATH: rootDir) + else if process.platform is 'win32' + options = + cmd: process.env.comspec + args: ['/c', appPath, '--test', "--resource-path=#{resourcePath}", "--log-file=ci.log", path.join(packagePath, 'spec')] + opts: + cwd: packagePath + env: _.extend({}, process.env, ELECTRON_ENABLE_LOGGING: true, ATOM_PATH: rootDir) grunt.log.ok "Launching #{path.basename(packagePath)} specs." - spawn options, (error) -> + spawn options, (error, results, code) -> + if process.platform is 'win32' + if error + process.stderr.write(fs.readFileSync(path.join(packagePath, 'ci.log'))) + fs.unlinkSync(path.join(packagePath, 'ci.log')) + failedPackages.push path.basename(packagePath) if error callback() @@ -40,7 +69,7 @@ module.exports = (grunt) -> continue unless isAtomPackage(packagePath) packageSpecQueue.push(packagePath) - packageSpecQueue.concurrency = 1 + packageSpecQueue.concurrency = Math.max(1, concurrency - 1) packageSpecQueue.drain = -> callback(null, failedPackages) runCoreSpecs = (callback) -> @@ -48,20 +77,41 @@ module.exports = (grunt) -> resourcePath = process.cwd() coreSpecsPath = path.resolve('spec') - options = - cmd: appPath - args: ['--test', "--resource-path=#{resourcePath}", coreSpecsPath, "--user-data-dir=#{temp.mkdirSync('atom-user-data-dir')}"] - opts: - env: _.extend({}, process.env, {ATOM_INTEGRATION_TESTS_ENABLED: true, ELECTRON_ENABLE_LOGGING: true}) - stdio: 'inherit' + if process.platform in ['darwin', 'linux'] + options = + cmd: appPath + args: ['--test', "--resource-path=#{resourcePath}", coreSpecsPath, "--user-data-dir=#{temp.mkdirSync('atom-user-data-dir')}"] + opts: + env: _.extend({}, process.env, {ELECTRON_ENABLE_LOGGING: true, ATOM_INTEGRATION_TESTS_ENABLED: true}) + stdio: 'inherit' + + else if process.platform is 'win32' + options = + cmd: process.env.comspec + args: ['/c', appPath, '--test', "--resource-path=#{resourcePath}", '--log-file=ci.log', coreSpecsPath] + opts: + env: _.extend({}, process.env, {ELECTRON_ENABLE_LOGGING: true, ATOM_INTEGRATION_TESTS_ENABLED: true}) + stdio: 'inherit' grunt.log.ok "Launching core specs." - spawn options, (error, results) -> + spawn options, (error, results, code) -> + if process.platform is 'win32' + process.stderr.write(fs.readFileSync('ci.log')) if error + fs.unlinkSync('ci.log') + else + # TODO: Restore concurrency on Windows + packageSpecQueue?.concurrency = concurrency + callback(null, error) grunt.registerTask 'run-specs', 'Run the specs', -> done = @async() startTime = Date.now() + method = + if concurrency is 1 + async.series + else + async.parallel specs = if process.env.ATOM_SPECS_TASK is 'packages' @@ -71,7 +121,7 @@ module.exports = (grunt) -> else [runCoreSpecs, runPackageSpecs] - async.series specs, (error, results) -> + method specs, (error, results) -> failedPackages = [] coreSpecFailed = null @@ -83,10 +133,13 @@ module.exports = (grunt) -> [coreSpecFailed, failedPackages] = results elapsedTime = Math.round((Date.now() - startTime) / 100) / 10 - grunt.log.ok("Total spec time: #{elapsedTime}s") + grunt.log.ok("Total spec time: #{elapsedTime}s using #{concurrency} cores") failures = failedPackages failures.push "atom core" if coreSpecFailed grunt.log.error("[Error]".red + " #{failures.join(', ')} spec(s) failed") if failures.length > 0 - done(not coreSpecFailed and failedPackages.length is 0) + if process.platform is 'win32' and process.env.JANKY_SHA1 + done() + else + done(not coreSpecFailed and failedPackages.length is 0) From 04ff6e461108e0488cda1a731d5041b3148d8fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20L=C3=A1zaro=20Gallego?= Date: Thu, 14 Apr 2016 16:14:39 +0200 Subject: [PATCH 126/139] Fixes #4126 for fish-shell --- src/environment-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/environment-helpers.js b/src/environment-helpers.js index e2baeb26b..151796f06 100644 --- a/src/environment-helpers.js +++ b/src/environment-helpers.js @@ -58,7 +58,7 @@ function getFromShell () { function needsPatching (options = { platform: process.platform, env: process.env }) { if (options.platform === 'darwin' && !options.env.PWD) { let shell = getUserShell() - if (shell.endsWith('csh') || shell.endsWith('tcsh')) { + if (shell.endsWith('csh') || shell.endsWith('tcsh') || shell.endsWith('fish')) { return false } return true From c95412b451c332d09513893e3562fe5f0ba5406f Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Thu, 14 Apr 2016 14:39:59 -0700 Subject: [PATCH 127/139] Add ELECTRON_NO_ATTACH_CONSOLE in BufferedNodeProcess (cherry picked from commit 5f0ad9e015a3e36b337182bca152783b9f9f637e) --- src/buffered-node-process.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/src/buffered-node-process.coffee b/src/buffered-node-process.coffee index 3b4916b24..406775277 100644 --- a/src/buffered-node-process.coffee +++ b/src/buffered-node-process.coffee @@ -47,6 +47,7 @@ class BufferedNodeProcess extends BufferedProcess options ?= {} options.env ?= Object.create(process.env) options.env['ELECTRON_RUN_AS_NODE'] = 1 + options.env['ELECTRON_NO_ATTACH_CONSOLE'] = 1 args = args?.slice() ? [] args.unshift(command) From b05ec8f6839fbe3ab0863faa6f777662efb39c49 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Fri, 15 Apr 2016 11:14:47 -0400 Subject: [PATCH 128/139] :arrow_up: exception-reporting@0.38.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d43459ba..62bb8d5f1 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "deprecation-cop": "0.54.1", "dev-live-reload": "0.47.0", "encoding-selector": "0.21.0", - "exception-reporting": "0.38.0", + "exception-reporting": "0.38.1", "fuzzy-finder": "1.0.4", "git-diff": "1.0.1", "find-and-replace": "0.198.0", From 9b8cb237574bcec33101260334175622d5535d61 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Fri, 15 Apr 2016 10:48:35 -0700 Subject: [PATCH 129/139] Preserve the process.env magic for Windows --- src/environment-helpers.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/environment-helpers.js b/src/environment-helpers.js index e2baeb26b..8039e8537 100644 --- a/src/environment-helpers.js +++ b/src/environment-helpers.js @@ -67,9 +67,19 @@ function needsPatching (options = { platform: process.platform, env: process.env return false } +// Fix for #11302 because `process.env` on Windows is a magic object that offers case-insensitive +// environment variable matching. +function cloneEnv (env) { + for (var key in process.env) { + delete process.env[key] + } + + Object.assign(process.env, env) +} + function normalize (options = {}) { if (options && options.env) { - process.env = options.env + cloneEnv(options.env) } if (!options.env) { @@ -85,8 +95,8 @@ function normalize (options = {}) { // in #4126. Retain the original in case someone needs it. let shellEnv = getFromShell() if (shellEnv && shellEnv.PATH) { - process._originalEnv = process.env - process.env = shellEnv + process._originalEnv = Object.assign({}, process.env) + cloneEnv(shellEnv) } } } @@ -96,7 +106,7 @@ function replace (env) { return } - process.env = env + cloneEnv(env) } export default { getFromShell, needsPatching, normalize, replace } From 6d80dfe2280d782ade6ec43c04792fdeb2960624 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Fri, 15 Apr 2016 12:59:57 -0700 Subject: [PATCH 130/139] Make the clone function more generic --- src/environment-helpers.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/environment-helpers.js b/src/environment-helpers.js index 8039e8537..eac2b9c0a 100644 --- a/src/environment-helpers.js +++ b/src/environment-helpers.js @@ -68,18 +68,19 @@ function needsPatching (options = { platform: process.platform, env: process.env } // Fix for #11302 because `process.env` on Windows is a magic object that offers case-insensitive -// environment variable matching. -function cloneEnv (env) { - for (var key in process.env) { - delete process.env[key] +// environment variable matching. By always cloning to `process.env` we prevent breaking the +// underlying functionality. +function clone (to, from) { + for (var key in to) { + delete to[key] } - Object.assign(process.env, env) + Object.assign(to, from) } function normalize (options = {}) { if (options && options.env) { - cloneEnv(options.env) + clone(process.env, options.env) } if (!options.env) { @@ -96,7 +97,7 @@ function normalize (options = {}) { let shellEnv = getFromShell() if (shellEnv && shellEnv.PATH) { process._originalEnv = Object.assign({}, process.env) - cloneEnv(shellEnv) + clone(process.env, shellEnv) } } } @@ -106,7 +107,7 @@ function replace (env) { return } - cloneEnv(env) + clone(process.env, env) } export default { getFromShell, needsPatching, normalize, replace } From 30d4b937571c9e1fdbf46d0d0c71d284e56dc788 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Fri, 15 Apr 2016 19:56:25 -0700 Subject: [PATCH 131/139] :arrow_up: notifications@0.63.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62bb8d5f1..8c0abfbf6 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "link": "0.31.1", "markdown-preview": "0.158.0", "metrics": "0.53.1", - "notifications": "0.63.1", + "notifications": "0.63.2", "open-on-github": "1.1.0", "package-generator": "1.0.0", "settings-view": "0.235.1", From 8ece1ee90929d7635d25bc76ea5f3aca442e977e Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Fri, 15 Apr 2016 20:00:21 -0700 Subject: [PATCH 132/139] :arrow_up: tabs@0.92.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c0abfbf6..a44453cf0 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "status-bar": "1.2.3", "styleguide": "0.45.2", "symbols-view": "0.112.0", - "tabs": "0.92.1", + "tabs": "0.92.2", "timecop": "0.33.1", "tree-view": "0.206.0", "update-package-dependencies": "0.10.0", From e41b9f00fb7dc58299ab83aa111480960ab62ded Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Fri, 15 Apr 2016 21:23:00 -0700 Subject: [PATCH 133/139] Correctly autoindent single newline in Selection#insertText --- spec/selection-spec.coffee | 5 +++++ src/selection.coffee | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/selection-spec.coffee b/spec/selection-spec.coffee index 319e2d438..8830f4188 100644 --- a/spec/selection-spec.coffee +++ b/spec/selection-spec.coffee @@ -91,3 +91,8 @@ describe "Selection", -> expect(buffer.lineForRow(0)).toBe " " expect(buffer.lineForRow(1)).toBe " " expect(buffer.lineForRow(2)).toBe "" + + it "auto-indents if only a newline is inserted", -> + selection.setBufferRange [[2, 0], [3, 0]] + selection.insertText("\n", autoIndent: true) + expect(buffer.lineForRow(2)).toBe " " diff --git a/src/selection.coffee b/src/selection.coffee index e208ea55a..8d93d2fa1 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -378,7 +378,7 @@ class Selection extends Model indentAdjustment = @editor.indentLevelForLine(precedingText) - options.indentBasis @adjustIndent(remainingLines, indentAdjustment) - if options.autoIndent and NonWhitespaceRegExp.test(text) and not NonWhitespaceRegExp.test(precedingText) and remainingLines.length > 0 + if options.autoIndent and (text is '\n' or NonWhitespaceRegExp.test(text)) and not NonWhitespaceRegExp.test(precedingText) and remainingLines.length > 0 autoIndentFirstLine = true firstLine = precedingText + firstInsertedLine desiredIndentLevel = @editor.languageMode.suggestedIndentForLineAtBufferRow(oldBufferRange.start.row, firstLine) From 7160461ebcf8f3638476aeb13f728f4166d0bfa9 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sat, 16 Apr 2016 11:00:46 -0700 Subject: [PATCH 134/139] Copy active item when splitting from TextEditor context menu --- menus/darwin.cson | 8 ++++---- menus/linux.cson | 8 ++++---- menus/win32.cson | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/menus/darwin.cson b/menus/darwin.cson index 53cc4cbc4..bb3ce0acf 100644 --- a/menus/darwin.cson +++ b/menus/darwin.cson @@ -228,10 +228,10 @@ {label: 'Delete', command: 'core:delete'} {label: 'Select All', command: 'core:select-all'} {type: 'separator'} - {label: 'Split Up', command: 'pane:split-up'} - {label: 'Split Down', command: 'pane:split-down'} - {label: 'Split Left', command: 'pane:split-left'} - {label: 'Split Right', command: 'pane:split-right'} + {label: 'Split Up', command: 'pane:split-up-and-copy-active-item'} + {label: 'Split Down', command: 'pane:split-down-and-copy-active-item'} + {label: 'Split Left', command: 'pane:split-left-and-copy-active-item'} + {label: 'Split Right', command: 'pane:split-right-and-copy-active-item'} {label: 'Close Pane', command: 'pane:close'} {type: 'separator'} ] diff --git a/menus/linux.cson b/menus/linux.cson index be11c1430..b84fc8053 100644 --- a/menus/linux.cson +++ b/menus/linux.cson @@ -204,10 +204,10 @@ {label: 'Delete', command: 'core:delete'} {label: 'Select All', command: 'core:select-all'} {type: 'separator'} - {label: 'Split Up', command: 'pane:split-up'} - {label: 'Split Down', command: 'pane:split-down'} - {label: 'Split Left', command: 'pane:split-left'} - {label: 'Split Right', command: 'pane:split-right'} + {label: 'Split Up', command: 'pane:split-up-and-copy-active-item'} + {label: 'Split Down', command: 'pane:split-down-and-copy-active-item'} + {label: 'Split Left', command: 'pane:split-left-and-copy-active-item'} + {label: 'Split Right', command: 'pane:split-right-and-copy-active-item'} {label: 'Close Pane', command: 'pane:close'} {type: 'separator'} ] diff --git a/menus/win32.cson b/menus/win32.cson index 738b52f00..323db5d18 100644 --- a/menus/win32.cson +++ b/menus/win32.cson @@ -207,10 +207,10 @@ {label: 'Delete', command: 'core:delete'} {label: 'Select All', command: 'core:select-all'} {type: 'separator'} - {label: 'Split Up', command: 'pane:split-up'} - {label: 'Split Down', command: 'pane:split-down'} - {label: 'Split Left', command: 'pane:split-left'} - {label: 'Split Right', command: 'pane:split-right'} + {label: 'Split Up', command: 'pane:split-up-and-copy-active-item'} + {label: 'Split Down', command: 'pane:split-down-and-copy-active-item'} + {label: 'Split Left', command: 'pane:split-left-and-copy-active-item'} + {label: 'Split Right', command: 'pane:split-right-and-copy-active-item'} {label: 'Close Pane', command: 'pane:close'} {type: 'separator'} ] From af5cb863de32089ddf9ab9b89f28c61e1ff3653c Mon Sep 17 00:00:00 2001 From: Riley Dallas Date: Mon, 18 Apr 2016 10:12:05 -0500 Subject: [PATCH 135/139] :memo: Update links in keymap.cson comments --- dot-atom/keymap.cson | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dot-atom/keymap.cson b/dot-atom/keymap.cson index 10ad345d4..fd7c4f96e 100644 --- a/dot-atom/keymap.cson +++ b/dot-atom/keymap.cson @@ -18,15 +18,15 @@ # 'ctrl-p': 'core:move-down' # # You can find more information about keymaps in these guides: -# * https://atom.io/docs/latest/using-atom-basic-customization#customizing-key-bindings -# * https://atom.io/docs/latest/behind-atom-keymaps-in-depth +# * http://flight-manual.atom.io/using-atom/sections/basic-customization/#_customizing_keybindings +# * http://flight-manual.atom.io/behind-atom/sections/keymaps-in-depth/ # # If you're having trouble with your keybindings not working, try the # Keybinding Resolver: `Cmd+.` on OS X and `Ctrl+.` on other platforms. See the # Debugging Guide for more information: -# * https://atom.io/docs/latest/hacking-atom-debugging#check-the-keybindings +# * http://flight-manual.atom.io/hacking-atom/sections/debugging/#check-the-keybindings # # This file uses CoffeeScript Object Notation (CSON). # If you are unfamiliar with CSON, you can read more about it in the # Atom Flight Manual: -# https://atom.io/docs/latest/using-atom-basic-customization#cson +# http://flight-manual.atom.io/using-atom/sections/basic-customization/#_cson From b2aad098e118e6d1ba637a6088b1c831e5c0e402 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Sat, 16 Apr 2016 11:14:21 -0700 Subject: [PATCH 136/139] Correctly autoindent \r\n in Selection#insertText --- spec/selection-spec.coffee | 5 +++++ src/selection.coffee | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/spec/selection-spec.coffee b/spec/selection-spec.coffee index 8830f4188..18095d6f8 100644 --- a/spec/selection-spec.coffee +++ b/spec/selection-spec.coffee @@ -96,3 +96,8 @@ describe "Selection", -> selection.setBufferRange [[2, 0], [3, 0]] selection.insertText("\n", autoIndent: true) expect(buffer.lineForRow(2)).toBe " " + + it "auto-indents if only a carriage return + newline is inserted", -> + selection.setBufferRange [[2, 0], [3, 0]] + selection.insertText("\r\n", autoIndent: true) + expect(buffer.lineForRow(2)).toBe " " diff --git a/src/selection.coffee b/src/selection.coffee index 8d93d2fa1..2937baaee 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -378,7 +378,8 @@ class Selection extends Model indentAdjustment = @editor.indentLevelForLine(precedingText) - options.indentBasis @adjustIndent(remainingLines, indentAdjustment) - if options.autoIndent and (text is '\n' or NonWhitespaceRegExp.test(text)) and not NonWhitespaceRegExp.test(precedingText) and remainingLines.length > 0 + textIsAutoIndentable = text is '\n' or text is '\r\n' or NonWhitespaceRegExp.test(text) + if options.autoIndent and textIsAutoIndentable and not NonWhitespaceRegExp.test(precedingText) and remainingLines.length > 0 autoIndentFirstLine = true firstLine = precedingText + firstInsertedLine desiredIndentLevel = @editor.languageMode.suggestedIndentForLineAtBufferRow(oldBufferRange.start.row, firstLine) From 92fd313a6ac5f19a52494139ec0921b6cff88d4c Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 18 Apr 2016 16:29:58 -0400 Subject: [PATCH 137/139] :arrow_up: language-gfm@0.86.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a44453cf0..b4b228009 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "language-coffee-script": "0.46.1", "language-csharp": "0.12.1", "language-css": "0.36.1", - "language-gfm": "0.85.0", + "language-gfm": "0.86.0", "language-git": "0.12.1", "language-go": "0.42.0", "language-html": "0.44.1", From 73f65fc8218bd5f16eabb602fc8228290308004c Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 18 Apr 2016 16:30:43 -0400 Subject: [PATCH 138/139] :arrow_up: language-xml@0.34.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4b228009..ef5835306 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "language-text": "0.7.1", "language-todo": "0.27.0", "language-toml": "0.18.0", - "language-xml": "0.34.4", + "language-xml": "0.34.5", "language-yaml": "0.25.2" }, "private": true, From ee4ca3fd6cd7cee084a9afb8f1e280a165394844 Mon Sep 17 00:00:00 2001 From: Wliu <50Wliu@users.noreply.github.com> Date: Mon, 18 Apr 2016 16:32:20 -0400 Subject: [PATCH 139/139] :arrow_up: language-sql@0.21.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef5835306..128c40e43 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "language-sass": "0.46.0", "language-shellscript": "0.21.1", "language-source": "0.9.0", - "language-sql": "0.20.0", + "language-sql": "0.21.0", "language-text": "0.7.1", "language-todo": "0.27.0", "language-toml": "0.18.0",