From 4b2e23508f0267fdb8d4af002359d6819e980582 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Fri, 8 May 2015 16:02:01 -0700 Subject: [PATCH 01/19] Add autocomplete-plus into core :tada: --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 020fd2f2e..eeaeed69c 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "solarized-dark-syntax": "0.35.0", "solarized-light-syntax": "0.21.0", "archive-view": "0.57.0", - "autocomplete": "0.47.0", + "autocomplete-plus": "2.13.1", "autoflow": "0.23.0", "autosave": "0.20.0", "background-tips": "0.24.0", From da646e635c170fe3eb18903ad8b14d0036eb035e Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Fri, 8 May 2015 16:02:34 -0700 Subject: [PATCH 02/19] Uninstall any intalled version of autocomplete-plus --- src/package-manager.coffee | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 8527188d3..1692d477a 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -303,6 +303,9 @@ class PackageManager # of the first package isn't skewed by being the first to require atom require '../exports/atom' + # TODO: remove after a few atom versions. + @uninstallAutocompletePlus() + packagePaths = @getAvailablePackagePaths() packagePaths = packagePaths.filter (packagePath) => not @isPackageDisabled(path.basename(packagePath)) packagePaths = _.uniq packagePaths, (packagePath) -> path.basename(packagePath) @@ -409,6 +412,18 @@ class PackageManager message = "Failed to load the #{path.basename(packagePath)} package" atom.notifications.addError(message, {stack, detail, dismissable: true}) + # TODO: remove these autocomplete-plus specific helpers after a few versions. + uninstallAutocompletePlus: -> + packageDir = null + devDir = path.join("dev", "packages") + for packageDirPath in @packageDirPaths + packageDir = packageDirPath if not packageDirPath.endsWith(devDir) + + if packageDir? + autocompletePlusPath = path.join(packageDir, 'autocomplete-plus') + fs.isDirectory autocompletePlusPath, (isDir, error) -> + fs.unlink(autocompletePlusPath) if isDir + if Grim.includeDeprecatedAPIs EmitterMixin = require('emissary').Emitter EmitterMixin.includeInto(PackageManager) From 1d9d9f1cf597fc598e22544b0e7a2cc1dd1d5e8b Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 15:24:57 -0700 Subject: [PATCH 03/19] Handle deleting autocomplete-plus when symlink and dir --- src/package-manager.coffee | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 1692d477a..7ee1304c2 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -421,8 +421,10 @@ class PackageManager if packageDir? autocompletePlusPath = path.join(packageDir, 'autocomplete-plus') - fs.isDirectory autocompletePlusPath, (isDir, error) -> - fs.unlink(autocompletePlusPath) if isDir + if fs.isSymbolicLinkSync(autocompletePlusPath) + fs.unlink(autocompletePlusPath) + else if fs.isDirectorySync(autocompletePlusPath) + fs.remove(autocompletePlusPath, ->) if Grim.includeDeprecatedAPIs EmitterMixin = require('emissary').Emitter From 044c2ec37c33621933b9e1e32bdd5db8d68b46a4 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:21:17 -0700 Subject: [PATCH 04/19] Bundle autocomplete-css, html and atom-api --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index eeaeed69c..07cf9ac55 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,9 @@ "solarized-dark-syntax": "0.35.0", "solarized-light-syntax": "0.21.0", "archive-view": "0.57.0", + "autocomplete-atom-api": "0.9.0", + "autocomplete-css": "0.7.2", + "autocomplete-html": "0.7.1", "autocomplete-plus": "2.13.1", "autoflow": "0.23.0", "autosave": "0.20.0", From e7d921bfbc93b6e05c77d766130d64a165e5e83f Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:21:35 -0700 Subject: [PATCH 05/19] Add specs for autocomplete deletion --- spec/package-manager-spec.coffee | 33 ++++++++++++++++++++++++++++++++ spec/spec-helper.coffee | 2 ++ 2 files changed, 35 insertions(+) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 92dc21a13..00b05c102 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -824,3 +824,36 @@ describe "PackageManager", -> expect(atom.config.get('core.themes')).not.toContain packageName expect(atom.config.get('core.themes')).not.toContain packageName expect(atom.config.get('core.disabledPackages')).not.toContain packageName + + describe "deleting non-bundled autocomplete packages", -> + [autocompleteCSSPath, autocompletePlusPath] = [] + fs = require 'fs-plus' + path = require 'path' + + beforeEach -> + fixturePath = path.resolve(__dirname, './fixtures/packages') + autocompleteCSSPath = path.join(fixturePath, 'autocomplete-css') + autocompletePlusPath = path.join(fixturePath, 'autocomplete-plus') + + try + fs.mkdirSync(autocompleteCSSPath) + fs.writeFileSync(path.join(autocompleteCSSPath, 'package.json'), '{}') + fs.symlinkSync(path.join(fixturePath, 'package-with-main'), autocompletePlusPath, 'dir') + catch e + ; + + expect(fs.isDirectorySync(autocompleteCSSPath)).toBe true + expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe true + + jasmine.unspy(atom.packages, 'uninstallAutocompletePlus') + + it "removes the packages", -> + atom.packages.loadPackages() + + waitsFor -> + not fs.isDirectorySync(autocompleteCSSPath) and + not fs.isSymbolicLinkSync(autocompletePlusPath) + + runs -> + expect(fs.isDirectorySync(autocompleteCSSPath)).toBe false + expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe false diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 0112042e2..2e4355a10 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -140,6 +140,8 @@ beforeEach -> spyOn(clipboard, 'writeText').andCallFake (text) -> clipboardContent = text spyOn(clipboard, 'readText').andCallFake -> clipboardContent + spyOn(atom.packages, 'uninstallAutocompletePlus') + addCustomMatchers(this) afterEach -> From b83b9bab074f5628f41513a0f11bf0c1d33be7cb Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:21:51 -0700 Subject: [PATCH 06/19] Handle deleting multiple directories --- src/package-manager.coffee | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 7ee1304c2..60a6f7f20 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -417,14 +417,35 @@ class PackageManager packageDir = null devDir = path.join("dev", "packages") for packageDirPath in @packageDirPaths - packageDir = packageDirPath if not packageDirPath.endsWith(devDir) + if not packageDirPath.endsWith(devDir) + packageDir = packageDirPath + break if packageDir? - autocompletePlusPath = path.join(packageDir, 'autocomplete-plus') - if fs.isSymbolicLinkSync(autocompletePlusPath) - fs.unlink(autocompletePlusPath) - else if fs.isDirectorySync(autocompletePlusPath) - fs.remove(autocompletePlusPath, ->) + dirsToRemove = [ + path.join(packageDir, 'autocomplete-plus') + path.join(packageDir, 'autocomplete-atom-api') + path.join(packageDir, 'autocomplete-css') + path.join(packageDir, 'autocomplete-html') + ] + for dirToRemove in dirsToRemove + @uninstallDirectory(dirToRemove) + return + + uninstallDirectory: (directory) -> + symlinkPromise = new Promise (resolve) -> + fs.isSymbolicLink directory, (isSymLink) -> resolve(isSymLink) + + dirPromise = new Promise (resolve) -> + fs.isDirectory directory, (isDir) -> resolve(isDir) + + Promise.all([symlinkPromise, dirPromise]).then (values) -> + [isSymLink, isDir] = values + console.log directory, isSymLink, isDir + if isSymLink + fs.unlink(directory) + else if isDir + fs.remove(directory, ->) if Grim.includeDeprecatedAPIs EmitterMixin = require('emissary').Emitter From c571e3da0caeb43c2192450af44a502681378394 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:25:23 -0700 Subject: [PATCH 07/19] Remove log line --- src/package-manager.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 60a6f7f20..32e55aecd 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -441,7 +441,6 @@ class PackageManager Promise.all([symlinkPromise, dirPromise]).then (values) -> [isSymLink, isDir] = values - console.log directory, isSymLink, isDir if isSymLink fs.unlink(directory) else if isDir From 3b03ef5a0b63d42732d0bd043c2d73bcbd3a4f6c Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:36:09 -0700 Subject: [PATCH 08/19] :arrow_up: autocomplete-plus@2.14.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07cf9ac55..9972dca62 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "autocomplete-atom-api": "0.9.0", "autocomplete-css": "0.7.2", "autocomplete-html": "0.7.1", - "autocomplete-plus": "2.13.1", + "autocomplete-plus": "2.14.0", "autoflow": "0.23.0", "autosave": "0.20.0", "background-tips": "0.24.0", From dd45a6f3abda2bd7cb453b465d654daf9c835b6c Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:42:17 -0700 Subject: [PATCH 09/19] No parens around fn --- src/package-manager.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 32e55aecd..192c1484e 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -444,7 +444,7 @@ class PackageManager if isSymLink fs.unlink(directory) else if isDir - fs.remove(directory, ->) + fs.remove directory, -> if Grim.includeDeprecatedAPIs EmitterMixin = require('emissary').Emitter From b0c9a93420886d8fcd3dc13995d83e475efe4ab6 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 16:54:14 -0700 Subject: [PATCH 10/19] Fix another lint error --- spec/package-manager-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 00b05c102..89e97f219 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -840,7 +840,7 @@ describe "PackageManager", -> fs.writeFileSync(path.join(autocompleteCSSPath, 'package.json'), '{}') fs.symlinkSync(path.join(fixturePath, 'package-with-main'), autocompletePlusPath, 'dir') catch e - ; + undefined expect(fs.isDirectorySync(autocompleteCSSPath)).toBe true expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe true From 95ba6d5fa99f0c11c56c2d7ebf25b4ba1d7b1c67 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 18:47:42 -0700 Subject: [PATCH 11/19] Bundle autocomplete-snippets --- package.json | 1 + src/package-manager.coffee | 1 + 2 files changed, 2 insertions(+) diff --git a/package.json b/package.json index 9972dca62..dd8c2fff6 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "autocomplete-css": "0.7.2", "autocomplete-html": "0.7.1", "autocomplete-plus": "2.14.0", + "autocomplete-snippets": "1.6.1", "autoflow": "0.23.0", "autosave": "0.20.0", "background-tips": "0.24.0", diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 192c1484e..75005fe11 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -427,6 +427,7 @@ class PackageManager path.join(packageDir, 'autocomplete-atom-api') path.join(packageDir, 'autocomplete-css') path.join(packageDir, 'autocomplete-html') + path.join(packageDir, 'autocomplete-snippets') ] for dirToRemove in dirsToRemove @uninstallDirectory(dirToRemove) From a99d9bf24b936624f878d07e805261f12308e62b Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 11 May 2015 18:48:00 -0700 Subject: [PATCH 12/19] :arrow_up: autocomplete-plus@2.14.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dd8c2fff6..c3c76d599 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "autocomplete-atom-api": "0.9.0", "autocomplete-css": "0.7.2", "autocomplete-html": "0.7.1", - "autocomplete-plus": "2.14.0", + "autocomplete-plus": "2.14.1", "autocomplete-snippets": "1.6.1", "autoflow": "0.23.0", "autosave": "0.20.0", From 326255e6ef98cb02fd629d75a04e1618a182b94d Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 12 May 2015 09:57:46 -0700 Subject: [PATCH 13/19] Add callback to unlink --- src/package-manager.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 75005fe11..7789d7590 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -443,7 +443,7 @@ class PackageManager Promise.all([symlinkPromise, dirPromise]).then (values) -> [isSymLink, isDir] = values if isSymLink - fs.unlink(directory) + fs.unlink directory, -> else if isDir fs.remove directory, -> From ef224e39dba2e44ce7ce00154cd1b7eb01fb072a Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 12 May 2015 09:57:50 -0700 Subject: [PATCH 14/19] Remove catch --- spec/package-manager-spec.coffee | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 89e97f219..1cd961936 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -839,8 +839,6 @@ describe "PackageManager", -> fs.mkdirSync(autocompleteCSSPath) fs.writeFileSync(path.join(autocompleteCSSPath, 'package.json'), '{}') fs.symlinkSync(path.join(fixturePath, 'package-with-main'), autocompletePlusPath, 'dir') - catch e - undefined expect(fs.isDirectorySync(autocompleteCSSPath)).toBe true expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe true From 4a2c3e90ba332beb37ed32266181e52cdd9dc4ab Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 12 May 2015 10:24:29 -0700 Subject: [PATCH 15/19] Bundle autocomplete-emojis --- package.json | 1 + src/package-manager.coffee | 1 + 2 files changed, 2 insertions(+) diff --git a/package.json b/package.json index c3c76d599..4261d4f29 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "archive-view": "0.57.0", "autocomplete-atom-api": "0.9.0", "autocomplete-css": "0.7.2", + "autocomplete-emojis": "2.2.2", "autocomplete-html": "0.7.1", "autocomplete-plus": "2.14.1", "autocomplete-snippets": "1.6.1", diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 7789d7590..1262aa59e 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -427,6 +427,7 @@ class PackageManager path.join(packageDir, 'autocomplete-atom-api') path.join(packageDir, 'autocomplete-css') path.join(packageDir, 'autocomplete-html') + path.join(packageDir, 'autocomplete-emojis') path.join(packageDir, 'autocomplete-snippets') ] for dirToRemove in dirsToRemove From 400fb0cf6d0b2a73aaa1a88f8253d47d8386096f Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Tue, 12 May 2015 16:00:48 -0700 Subject: [PATCH 16/19] :arrow_up: autocomplete-plus@2.14.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4261d4f29..a92f48caf 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "autocomplete-css": "0.7.2", "autocomplete-emojis": "2.2.2", "autocomplete-html": "0.7.1", - "autocomplete-plus": "2.14.1", + "autocomplete-plus": "2.14.2", "autocomplete-snippets": "1.6.1", "autoflow": "0.23.0", "autosave": "0.20.0", From d72376aac0bc560983bc489972d7ada420242136 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 13 May 2015 09:16:53 -0700 Subject: [PATCH 17/19] :arrow_up: autocomplete-plus@2.15.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a92f48caf..b03c372e7 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "autocomplete-css": "0.7.2", "autocomplete-emojis": "2.2.2", "autocomplete-html": "0.7.1", - "autocomplete-plus": "2.14.2", + "autocomplete-plus": "2.15.0", "autocomplete-snippets": "1.6.1", "autoflow": "0.23.0", "autosave": "0.20.0", From 1abca560cd62c27d555f4268891b054433984085 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 13 May 2015 11:26:56 -0700 Subject: [PATCH 18/19] :arrow_up: autocomplete-plus@2.15.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b03c372e7..3614b5f26 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "autocomplete-css": "0.7.2", "autocomplete-emojis": "2.2.2", "autocomplete-html": "0.7.1", - "autocomplete-plus": "2.15.0", + "autocomplete-plus": "2.15.1", "autocomplete-snippets": "1.6.1", "autoflow": "0.23.0", "autosave": "0.20.0", From a937dc2fd4c87c06f7fbf25244564c07905b580a Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Wed, 13 May 2015 11:30:35 -0700 Subject: [PATCH 19/19] Dont remove symlinked autocomplete-plus packages --- spec/package-manager-spec.coffee | 9 ++++++--- src/package-manager.coffee | 4 +--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 1cd961936..1244ab984 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -845,13 +845,16 @@ describe "PackageManager", -> jasmine.unspy(atom.packages, 'uninstallAutocompletePlus') + afterEach -> + try + fs.unlink autocompletePlusPath, -> + it "removes the packages", -> atom.packages.loadPackages() waitsFor -> - not fs.isDirectorySync(autocompleteCSSPath) and - not fs.isSymbolicLinkSync(autocompletePlusPath) + not fs.isDirectorySync(autocompleteCSSPath) runs -> expect(fs.isDirectorySync(autocompleteCSSPath)).toBe false - expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe false + expect(fs.isSymbolicLinkSync(autocompletePlusPath)).toBe true diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 1262aa59e..606f72eda 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -443,9 +443,7 @@ class PackageManager Promise.all([symlinkPromise, dirPromise]).then (values) -> [isSymLink, isDir] = values - if isSymLink - fs.unlink directory, -> - else if isDir + if not isSymLink and isDir fs.remove directory, -> if Grim.includeDeprecatedAPIs