From 07e8ee35d91e543cc4430901e33fab1b85dcf26b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 21 May 2013 18:20:23 -0700 Subject: [PATCH] Add Atom.getAvailablePackageMetadata() This includes the metadata for all available packages whether or not they are currently loaded. --- spec/app/package-config-panel-spec.coffee | 5 ++--- src/app/atom.coffee | 8 ++++++++ src/app/installed-packages-config-panel.coffee | 9 +-------- src/app/package-config-view.coffee | 2 +- src/app/package.coffee | 7 +++++-- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/spec/app/package-config-panel-spec.coffee b/spec/app/package-config-panel-spec.coffee index 588a3d4b6..fb3d648a7 100644 --- a/spec/app/package-config-panel-spec.coffee +++ b/spec/app/package-config-panel-spec.coffee @@ -24,8 +24,7 @@ describe "PackageConfigPanel", -> ] spyOn(packageManager, 'getAvailable').andCallFake (callback) -> callback(null, packages) - loadedPackages = packages.map (pack) -> {metadata: pack} - spyOn(atom, 'getLoadedPackages').andReturn(loadedPackages) + spyOn(atom, 'getAvailablePackageMetadata').andReturn(packages) configObserver = jasmine.createSpy("configObserver") observeSubscription = config.observe('core.disabledPackages', configObserver) @@ -65,7 +64,7 @@ describe "PackageConfigPanel", -> p2View.enableToggle.find('a').click() expect(configObserver).toHaveBeenCalledWith(['p1', 'p3', 'p2']) - describe "when the enable link is checked", -> + describe "when the enable link is clicked", -> it "removes the package name from the disabled packages array", -> p3View = panel.installed.find("[name='p3']").view() p3View.enableToggle.find('a').click() diff --git a/src/app/atom.coffee b/src/app/atom.coffee index 3dd87727e..f0ece81d4 100644 --- a/src/app/atom.coffee +++ b/src/app/atom.coffee @@ -115,6 +115,14 @@ _.extend atom, getAvailablePackageNames: -> fsUtils.base(path) for path in @getAvailablePackagePaths() + getAvailablePackageMetadata: -> + packages = [] + for packagePath in atom.getAvailablePackagePaths() + name = fsUtils.base(packagePath) + metadata = atom.getLoadedPackage(name)?.metadata ? Package.loadMetadata(path, true) + packages.push(metadata) + packages + loadThemes: -> themeNames = config.get("core.themes") themeNames = [themeNames] unless _.isArray(themeNames) diff --git a/src/app/installed-packages-config-panel.coffee b/src/app/installed-packages-config-panel.coffee index 2537773f0..d9c5607e4 100644 --- a/src/app/installed-packages-config-panel.coffee +++ b/src/app/installed-packages-config-panel.coffee @@ -12,12 +12,5 @@ class InstalledPackagesConfigPanel extends ConfigPanel @div class: 'installed-packages' initialize: -> - for packagePath in atom.getAvailablePackagePaths().sort() - name = path.basename(packagePath) - metadata = atom.getLoadedPackage(name)?.metadata - unless metadata - try - metadata = Package.loadMetadata() - catch e - metadata = {name} + for metadata in _.sortBy(atom.getAvailablePackageMetadata(), 'name') @append(new PackageConfigView(metadata)) diff --git a/src/app/package-config-view.coffee b/src/app/package-config-view.coffee index 9ed4ba99e..870174fc5 100644 --- a/src/app/package-config-view.coffee +++ b/src/app/package-config-view.coffee @@ -102,7 +102,7 @@ class PackageConfigView extends View @updateDefaultAction() - @enableToggle.find('a').on 'click', => @togglePackageEnablement + @enableToggle.find('a').on 'click', => @togglePackageEnablement() @observeConfig 'core.disabledPackages', => @updatePackageState() diff --git a/src/app/package.coffee b/src/app/package.coffee index 2147336c9..ecdd9a5b0 100644 --- a/src/app/package.coffee +++ b/src/app/package.coffee @@ -18,9 +18,12 @@ class Package pack.load(options) pack - @loadMetadata: (path) -> + @loadMetadata: (path, ignoreErrors=false) -> if metadataPath = CSON.resolve(join(path, 'package')) - metadata = CSON.readFileSync(metadataPath) + try + metadata = CSON.readFileSync(metadataPath) + catch e + throw e unless ignoreErrors metadata ?= {} metadata.name = basename(path) metadata