Index: includes/path.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/path.inc,v retrieving revision 1.65 diff -u -p -r1.65 path.inc --- includes/path.inc 16 Jul 2010 02:51:44 -0000 1.65 +++ includes/path.inc 19 Jul 2010 22:28:22 -0000 @@ -74,8 +74,10 @@ function drupal_lookup_path($action, $pa $path_language = $path_language ? $path_language : $language_content->language; if ($action == 'wipe') { - $cache = array(); - $cache['whitelist'] = drupal_path_alias_whitelist_rebuild(); + $cache = array( + 'whitelist' => drupal_path_alias_whitelist_rebuild(), + 'first_call' => TRUE, + ); } elseif ($cache['whitelist'] && $path != '') { if ($action == 'alias') { @@ -127,6 +129,7 @@ function drupal_lookup_path($action, $pa // isn't a path that has this alias elseif ($action == 'source' && !isset($cache['no_source'][$path_language][$path])) { // Look for the value $path within the cached $map + $source = FALSE; if (!isset($cache['map'][$path_language]) || !($source = array_search($path, $cache['map'][$path_language]))) { // Get the most fitting result falling back with alias without language if ($source = db_query("SELECT source FROM {url_alias} WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language DESC, pid DESC", array( @@ -135,7 +138,6 @@ function drupal_lookup_path($action, $pa ':language_none' => LANGUAGE_NONE)) ->fetchField()) { $cache['map'][$path_language][$source] = $path; - return $source; } else { // We can't record anything into $map because we do not have a valid @@ -144,6 +146,7 @@ function drupal_lookup_path($action, $pa $cache['no_source'][$path_language][$path] = TRUE; } } + return $source; } } Index: modules/path/path.test =================================================================== RCS file: /cvs/drupal/drupal/modules/path/path.test,v retrieving revision 1.35 diff -u -p -r1.35 path.test --- modules/path/path.test 26 Mar 2010 12:37:30 -0000 1.35 +++ modules/path/path.test 19 Jul 2010 22:28:22 -0000 @@ -306,6 +306,22 @@ class PathLanguageTestCase extends Drupa $languages = language_list(); $url = url('node/' . $french_node->nid, array('language' => $languages[$french_node->language])); $this->assertTrue(strpos($url, $edit['path[alias]']), t('URL contains the path alias.')); + + // drupal_lookup_path() has an internal static cache. Check to see that + // it has the appropriate contents at this point. + drupal_lookup_path('wipe'); + $french_node_path = drupal_lookup_path('source', $edit['path[alias]'], $french_node->language); + $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path works.')); + // Second call should return the same path. + $french_node_path = drupal_lookup_path('source', $edit['path[alias]'], $french_node->language); + $this->assertEqual($french_node_path, 'node/' . $french_node->nid, t('Normal path is the same.')); + + // Confirm that the alias works. + $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language); + $this->assertEqual($french_node_alias, $edit['path[alias]'], t('Alias works.')); + // Second call should return the same alias. + $french_node_alias = drupal_lookup_path('alias', $edit['path[alias]'], $french_node->language); + $this->assertEqual($french_node_alias, 'node/' . $french_node->nid, t('Alias is the same.')); } }