@@ -12,7 +12,7 @@ var exec = require('child_process').exec;
1212var Addon = require ( "./addon" ) ;
1313
1414function setup ( options , imports , register , app ) {
15- var logger = imports . logger . namespace ( "addons" , true ) ;
15+ var logger = imports . logger . namespace ( "addons" , false ) ;
1616 var server = imports . server ;
1717 var events = imports . events ;
1818 var hooks = imports . hooks ;
@@ -38,8 +38,15 @@ function setup(options, imports, register, app) {
3838 } ;
3939
4040 // Load addons list from a directory return as a map name -> addon
41- var loadAddonsInfos = function ( addonsRoot ) {
41+ var loadAddonsInfos = function ( addonsRoot , options ) {
42+ // Diretcory to explore
4243 addonsRoot = addonsRoot || configAddonsPath ;
44+
45+ // Options
46+ options = _ . defaults ( { } , options || { } , {
47+ ignoreError : false
48+ } ) ;
49+
4350 return Q . nfcall ( fs . readdir , addonsRoot ) . then ( function ( dirs ) {
4451 return _ . reduce ( dirs , function ( previous , dir ) {
4552 return previous . then ( function ( addons ) {
@@ -51,6 +58,25 @@ function setup(options, imports, register, app) {
5158 addon . infos . default = isDefaultAddon ( addon ) ;
5259 addons [ addon . infos . name ] = addon ;
5360 return Q ( addons ) ;
61+ } , function ( err ) {
62+ logger . error ( "error" , err ) ;
63+ if ( options . ignoreError ) {
64+ // When ignoring error
65+ // it will check that the addon is not a symlink
66+ // and unlink invalid ones
67+ logger . error ( "ignore invalid addon" , addonPath ) ;
68+ return addon . isSymlink ( ) . then ( function ( symlink ) {
69+ if ( symlink ) {
70+ logger . error ( "unlink invalid addon:" , addon . root ) ;
71+ return addon . unlink ( ) ;
72+ }
73+ } ) . then ( function ( ) {
74+ return Q ( addons ) ;
75+ } , function ( ) {
76+ return Q ( addons ) ;
77+ } ) ;
78+ }
79+ return Q . reject ( err ) ;
5480 } ) ;
5581 } ) ;
5682 } , Q ( { } ) ) ;
@@ -171,7 +197,9 @@ function setup(options, imports, register, app) {
171197 // Prepare defaults addons
172198 return copyDefaultsAddons ( ) . then ( function ( ) {
173199 // Load collection of addons
174- return loadAddonsInfos ( ) ;
200+ return loadAddonsInfos ( null , {
201+ ignoreError : true
202+ } ) ;
175203 } ) . then ( runAddonsOperation ( function ( addon ) {
176204 // Install node dependencies
177205 return addon . installDependencies ( ) ;
0 commit comments