From 187c88a990ce9b20e9bb522d5fbc53994d9f8822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Ara=C3=B1a=20Cruz?= Date: Wed, 24 Jun 2015 18:52:32 +0100 Subject: [PATCH] Honor 'project status url' and --source option. Fixes #1321. --- commands/pm/download.pm.inc | 5 ++-- commands/pm/pm.drush.inc | 29 ++++++++++++++++++--- commands/pm/updatestatus.pm.inc | 10 +++---- lib/Drush/UpdateService/StatusInfoDrush.php | 6 ++--- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/commands/pm/download.pm.inc b/commands/pm/download.pm.inc index 5e22d6df19..b9bcead71a 100644 --- a/commands/pm/download.pm.inc +++ b/commands/pm/download.pm.inc @@ -89,7 +89,7 @@ function drush_pm_download() { } // Pick cli options. - $source = drush_get_option('source', ReleaseInfo::DEFAULT_URL); + $status_url = drush_get_option('source', ReleaseInfo::DEFAULT_URL); $restrict_to = drush_get_option('dev', ''); $select = drush_get_option('select', 'auto'); $all = drush_get_option('all', FALSE); @@ -105,8 +105,7 @@ function drush_pm_download() { // Get release history for each request and download the project. foreach ($requests as $request) { - $request = pm_parse_request($request); - $request['status url'] = $source; + $request = pm_parse_request($request, $status_url, $projects); $version = isset($projects[$request['name']]) ? $projects[$request['name']]['version'] : NULL; $release = $release_info->selectReleaseBasedOnStrategy($request, $restrict_to, $select, $all, $version); if ($release == FALSE) { diff --git a/commands/pm/pm.drush.inc b/commands/pm/pm.drush.inc index 98a791bd53..dc0f71941e 100644 --- a/commands/pm/pm.drush.inc +++ b/commands/pm/pm.drush.inc @@ -1221,14 +1221,16 @@ function drush_pm_releases() { $filter = ''; } + $status_url = drush_get_option('source'); + $rows = array(); $releases_info = array(); foreach ($requests as $request) { - $request = pm_parse_request($request); + $request = pm_parse_request($request, $status_url, $projects); $project_name = $request['name']; $project_release_info = $release_info->get($request); if ($project_release_info) { - $version = isset($projects[$request['name']]) ? $projects[$request['name']]['version'] : NULL; + $version = isset($projects[$project_name]) ? $projects[$project_name]['version'] : NULL; $releases = $project_release_info->filterReleases($filter, $version); foreach ($releases as $key => $release) { $rows[$key] = array( @@ -1257,13 +1259,24 @@ function drush_pm_releases() { function drush_pm_releasenotes() { $release_info = drush_get_engine('release_info'); + // Obtain requests. if (!$requests = pm_parse_arguments(func_get_args(), FALSE)) { $requests = array('drupal'); } + // Get installed projects. + if (drush_get_context('DRUSH_BOOTSTRAP_PHASE') >= DRUSH_BOOTSTRAP_DRUPAL_FULL) { + $projects = drush_get_projects(); + } + else { + $projects = array(); + } + + $status_url = drush_get_option('source'); + $output = ''; foreach($requests as $request) { - $request = pm_parse_request($request); + $request = pm_parse_request($request, $status_url, $projects); $project_release_info = $release_info->get($request); if ($project_release_info) { $version = empty($request['version']) ? NULL : $request['version']; @@ -1599,7 +1612,7 @@ function pm_parse_version($version, $is_core = FALSE) { * @return array * Array with all parts of the request info. */ -function pm_parse_request($request_string) { +function pm_parse_request($request_string, $status_url = NULL, &$projects = array()) { $request = array(); // Split $request_string in project name and version. Note that hyphens (-) @@ -1625,6 +1638,14 @@ function pm_parse_request($request_string) { 'name' => $project, ) + pm_parse_version($version, $is_core); + // Set the status url if provided or available in project's info file. + if ($status_url) { + $request['status url'] = $status_url; + } + elseif (!empty($projects[$project]['status url'])) { + $request['status url'] = $projects[$project]['status url']; + } + return $request; } diff --git a/commands/pm/updatestatus.pm.inc b/commands/pm/updatestatus.pm.inc index fcce96e5ab..535d4dc141 100644 --- a/commands/pm/updatestatus.pm.inc +++ b/commands/pm/updatestatus.pm.inc @@ -15,17 +15,17 @@ function drush_pm_updatestatus() { // Get specific requests. $args = pm_parse_arguments(func_get_args(), FALSE); + // Get installed extensions and projects. + $extensions = drush_get_extensions(); + $projects = drush_get_projects($extensions); + // Parse out project name and version. $requests = array(); foreach ($args as $request) { - $request = pm_parse_request($request); + $request = pm_parse_request($request, NULL, $projects); $requests[$request['name']] = $request; } - // Get installed extensions and projects. - $extensions = drush_get_extensions(); - $projects = drush_get_projects($extensions); - // Get the engine instance. $update_status = drush_get_engine('update_status'); diff --git a/lib/Drush/UpdateService/StatusInfoDrush.php b/lib/Drush/UpdateService/StatusInfoDrush.php index d10fbf1ff1..4e67af9142 100644 --- a/lib/Drush/UpdateService/StatusInfoDrush.php +++ b/lib/Drush/UpdateService/StatusInfoDrush.php @@ -27,7 +27,7 @@ function lastCheck() { // Iterate all projects and get the time of the older release info. $projects = drush_get_projects(); foreach ($projects as $project_name => $project) { - $request = pm_parse_request($project_name); + $request = pm_parse_request($project_name, NULL, $projects); $url = Project::buildFetchUrl($request); $cache_file = drush_download_file_name($url); if (file_exists($cache_file)) { @@ -48,7 +48,7 @@ function refresh() { // Clear all caches for the available projects. $projects = drush_get_projects(); foreach ($projects as $project_name => $project) { - $request = pm_parse_request($project_name); + $request = pm_parse_request($project_name, NULL, $projects); $release_info->clearCached($request); } } @@ -88,7 +88,7 @@ private function getAvailableReleases($projects) { continue; } drush_log(dt('Checking available update data for !project.', array('!project' => $project['label'])), 'ok'); - $request = pm_parse_request($project_name); + $request = pm_parse_request($project_name, NULL, $project_name); $project_release_info = $release_info->get($request); if ($project_release_info) { $available[$project_name] = $project_release_info;