11'use strict' ;
2- var fs = require ( 'fs' )
3- , path = require ( 'path' )
4- , walker = require ( 'walker' ) ;
2+ const fs = require ( 'fs' )
3+ , path = require ( 'path' )
4+ , walker = require ( 'walker' )
5+ , async = require ( 'async' ) ;
56
67let packageCache = { } ;
8+ const cache = { } ;
79
810function packageWalk ( directory , symlinks , findMessages ) {
911 var noSubDirs = new Set ( ) ;
@@ -91,7 +93,7 @@ function packageWalk(directory, symlinks, findMessages) {
9193
9294function findPackageInDirectory ( directory , packageName , callback ) {
9395 var found = false ;
94- return walk ( directory )
96+ return packageWalk ( directory )
9597 . on ( 'package' , function ( name , dir ) {
9698 if ( name === packageName ) {
9799 this . emit ( 'stop' ) ;
@@ -191,11 +193,20 @@ function findPackagesInDirectoryChain(directories) {
191193// See http://ros.org/doc/api/rospkg/html/rospack.html
192194// packages = {};
193195exports . findPackage = function ( packageName , callback ) {
196+ var directory = cache [ packageName . toLowerCase ( ) ] ;
197+ if ( directory ) {
198+ callback ( null , directory ) ;
199+ return ;
200+ }
194201 var rosRoot = process . env . ROS_ROOT ;
195- var packagePath = process . env . ROS_PACKAGE_PATH ;
196- var rosPackagePaths = packagePath . split ( ':' ) ;
202+ var packagePath = process . env . ROS_PACKAGE_PATH
203+ var rosPackagePaths = packagePath . split ( ':' )
197204 var directories = [ rosRoot ] . concat ( rosPackagePaths ) ;
198- return findPackageInDirectoryChain ( directories , packageName , callback ) ;
205+ return findPackageInDirectoryChain ( directories , packageName ,
206+ function ( err , directory ) {
207+ cache [ packageName . toLowerCase ( ) ] = directory ;
208+ callback ( err , directory ) ;
209+ } ) ;
199210} ;
200211
201212exports . findMessagePackages = function ( ) {
@@ -211,7 +222,7 @@ exports.getPackageCache = function() {
211222function forEachPackageInDirectory ( directory , list , onEnd ) {
212223 fs . access ( directory , fs . R_OK , ( err ) => {
213224 if ( ! err ) {
214- walk ( directory )
225+ packageWalk ( directory )
215226 . on ( 'package' , function ( name , dir ) {
216227 list . push ( dir ) ;
217228 } )
@@ -235,7 +246,7 @@ exports.getAllPackages = function(done) {
235246 } , function ( err , directories ) {
236247 directories . forEach ( function ( directory ) {
237248 var packageName = path . basename ( directory ) ;
238- cache [ packageName ] = directory ;
249+ cache [ packageName . toLowerCase ( ) ] = directory ;
239250 } ) ;
240251 done ( err , directories ) ;
241252 } ) ;
0 commit comments