? 864376-libraries-external-20.patch
? 919632-libraries-info-file-10.patch
? 919632-libraries_info_files-14.patch
? info_file.patch
? libraries_drush_list.patch
? review-me.patch
Index: libraries.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/libraries/libraries.module,v
retrieving revision 1.7
diff -u -p -r1.7 libraries.module
--- libraries.module	9 Oct 2010 22:26:03 -0000	1.7
+++ libraries.module	10 Oct 2010 00:52:24 -0000
@@ -126,35 +126,38 @@ function libraries_get_libraries() {
  *   An array of info files, keyed by library name. The values are the paths of
  *   the files.
  */
-function libraries_info_files() {
-  global $profile;
-  if (!isset($profile)) {
-    $profile = variable_get('install_profile', 'default');
-  }
-  $config = conf_path();
-
-  // Build a list of directories.
-  $directories = module_invoke_all('libraries_info_file_paths');
-  $directories[] = 'libraries';
-  $directories[] = "libraries/$profile/libraries";
-  $directories[] = 'sites/all/libraries';
-  $directories[] = "sites/$config/libraries";
-
-  // Scan for info files.
-  $files = array();
-  foreach ($directories as $dir) {
-    $files += file_scan_directory($dir, '/[a-z[a-z0-9_]+.info/', array(
-      'key' => 'name',
-      'recurse' => FALSE,
-    ));
-  }
+function libraries_scan_info_files() {
+  $files = drupal_static(__FUNCTION__);
+
+  if (!isset($files)) {
+    global $profile;
+    if (!isset($profile)) {
+      $profile = variable_get('install_profile', 'default');
+    }
+    $config = conf_path();
 
-  foreach ($files as &$file) {
-    $file = $file->uri;
+    // Build a list of directories.
+    $directories = module_invoke_all('libraries_info_file_paths');
+    $directories[] = 'libraries';
+    $directories[] = "libraries/$profile/libraries";
+    $directories[] = 'sites/all/libraries';
+    $directories[] = "sites/$config/libraries";
+
+    // Scan for info files.
+    $files = array();
+    foreach ($directories as $dir) {
+      if (file_exists($dir)) {
+        $files = array_merge($files, file_scan_directory($dir, '@[a-z][a-z0-9_]+\.info@', array(
+          'key' => 'name',
+         'recurse' => FALSE,
+        )));
+      }
+    }
   }
 
   return $files;
 }
+
 /**
  * Returns information about registered libraries.
  *
@@ -178,23 +181,17 @@ function libraries_info($library = NULL)
   $libraries = &drupal_static(__FUNCTION__);
 
   if (!isset($libraries)) {
-    $libraries = array();
-    foreach (module_implements('libraries_info') as $module) {
-      foreach (module_invoke($module, 'libraries_info') as $name => $properties) {
-        $properties['module'] = $module;
-        $properties['name'] = $name;
-        $libraries[$name] = $properties;
-      }
-    }
+    $libraries = module_invoke_all('libraries_info');
+
     // Gather information from .info files.
-    foreach (libraries_info_files() as $name => $path) {
-      $file = "$path/$name.info";
-      $libraries[$name] = drupal_parse_info_file($file);
+    foreach (libraries_scan_info_files() as $name => $file) {
+      $path = DRUPAL_ROOT . '/' . $file->uri;
+      $libraries[$name] = drupal_parse_info_file($path);
     }
-
     // Provide defaults.
     foreach ($libraries as $name => &$properties) {
       $properties += array(
+        'name' => $name,
         'title' => $name,
         'vendor url' => '',
         'download url' => '',
Index: tests/libraries.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/libraries/tests/libraries.test,v
retrieving revision 1.5
diff -u -p -r1.5 libraries.test
--- tests/libraries.test	9 Oct 2010 22:26:03 -0000	1.5
+++ tests/libraries.test	10 Oct 2010 00:52:24 -0000
@@ -27,9 +27,10 @@ class LibrariesTestCase extends DrupalWe
    */
   public function testLibraries() {
     // Test a library specified with an .info file gets detected.
-    $library = libraries_info('example');
+    $library = libraries_info('example_info_file');
     $expected = array(
-      'title' => 'example',
+      'name' => 'example_info_file',
+      'title' => 'Example info file',
       'vendor url' => '',
       'download url' => '',
       'path' => '',
Index: tests/example/example_info_file.info
===================================================================
RCS file: tests/example/example_info_file.info
diff -N tests/example/example_info_file.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/example/example_info_file.info	10 Oct 2010 00:52:24 -0000
@@ -0,0 +1,5 @@
+; $Id: example.info,v 1.1 2010/10/09 22:26:03 tstoeckler Exp $
+title = Example info file
+
+; This is an example info file for a library used for testing purposes.
+
