? includes/table.inc
Index: commands/pm/pm.drush.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drush/commands/pm/pm.drush.inc,v
retrieving revision 1.136
diff -u -p -r1.136 pm.drush.inc
--- commands/pm/pm.drush.inc	20 Nov 2010 19:49:17 -0000	1.136
+++ commands/pm/pm.drush.inc	21 Nov 2010 04:03:30 -0000
@@ -375,7 +375,7 @@ function drush_pm_list() {
  * Command callback. Enable one or more projects.
  */
 function drush_pm_enable() {
-  $args = func_get_args();
+  $args = _convert_csv_to_array(func_get_args());
 
   $project_info = drush_get_projects();
 
@@ -477,7 +477,7 @@ function drush_pm_enable() {
  * Command callback. Disable one or more projects.
  */
 function drush_pm_disable() {
-  $args = func_get_args();
+  $args = _convert_csv_to_array(func_get_args());
 
   $project_info = drush_get_projects();
 
@@ -620,7 +620,7 @@ function drush_pm_classify_projects(&$pr
  * Command callback. Show detailed info for one or more projects.
  */
 function drush_pm_info() {
-  $args = func_get_args();
+  $args = _convert_csv_to_array(func_get_args());
 
   $project_info = drush_pm_get_projects();
   _drush_pm_expand_projects($args, $project_info);
@@ -782,7 +782,7 @@ function _drush_pm_expand_projects(&$pro
  * // TODO: Use drupal_execute on system_modules_uninstall_confirm_form so that input is validated.
  */
 function drush_pm_uninstall() {
-  $modules = func_get_args();
+  $modules = _convert_csv_to_array(func_get_args());
 
   drush_include_engine('drupal', 'environment');
   $module_info = drush_get_modules();
@@ -898,7 +898,7 @@ function _pm_get_project_path($data, $lo
  * Command callback. Show available releases for given project(s).
  */
 function drush_pm_releases() {
-  if (!$requests = func_get_args()) {
+  if (!$requests = _convert_csv_to_array(func_get_args())) {
     $requests = array('drupal');
   }
 
@@ -1022,7 +1022,7 @@ function _drush_pm_get_releases($project
  * Command callback. Show release notes for given project(s).
  */
 function drush_pm_releasenotes() {
-  if (!$requests = func_get_args()) {
+  if (!$requests = _convert_csv_to_array(func_get_args())) {
     $requests = array('drupal');
   }
 
@@ -1229,7 +1229,7 @@ function drush_pm_update() {
   drush_set_context('DRUSH_PM_UPDATE_ALL', TRUE);
 
   // Call pm-updatecode.  updatedb will be called in the post-update process.
-  $args = func_get_args();
+  $args = _convert_csv_to_array(func_get_args());
   array_unshift($args, 'pm-updatecode');
   call_user_func_array('drush_invoke', $args);
 
@@ -1680,7 +1680,7 @@ function drush_pm_download() {
   $package_handler = drush_get_option('package-handler', 'wget');
   drush_include_engine('package_handler', $package_handler);
 
-  if (!$requests = func_get_args()) {
+  if (!$requests = _convert_csv_to_array(func_get_args())) {
     $requests = array('drupal');
   }
 
Index: commands/pm/updatecode.pm.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drush/commands/pm/updatecode.pm.inc,v
retrieving revision 1.18
diff -u -p -r1.18 updatecode.pm.inc
--- commands/pm/updatecode.pm.inc	20 Nov 2010 20:43:08 -0000	1.18
+++ commands/pm/updatecode.pm.inc	21 Nov 2010 04:03:30 -0000
@@ -19,7 +19,7 @@ function drush_pm_updatecode() {
   $locked_list = drush_pm_update_lock($projects, drush_get_option_list('lock'), drush_get_option_list('unlock'), drush_get_option('lock-message'));
 
   // Get specific requests
-  $requests = func_get_args();
+  $requests = _convert_csv_to_array(func_get_args());
 
   // Parse out project name and version
   $requests = pm_parse_project_version($requests);
Index: includes/drush.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drush/includes/drush.inc,v
retrieving revision 1.149
diff -u -p -r1.149 drush.inc
--- includes/drush.inc	20 Nov 2010 20:45:01 -0000	1.149
+++ includes/drush.inc	21 Nov 2010 04:03:31 -0000
@@ -696,6 +696,27 @@ function dt($string, $args = array()) {
 }
 
 /**
+ * Convert a csv string, or an array of items which
+ * may contain csv strings, into an array of items.
+ *
+ * @param $args
+ *   A simple csv string; e.g. 'a,b,c'
+ *   or a simple list of items; e.g. array('a','b','c')
+ *   or some combination; e.g. array('a,b','c') or array('a,','b,','c,')
+ *   
+ * @returns array
+ *   A simple list of items (e.g. array('a','b','c')
+ */
+function _convert_csv_to_array($args) {
+  //
+  // Step 1: implode(',',$args) converts from, say, array('a,','b,','c,') to 'a,,b,,c,'
+  // Step 2: explode(',', ...) converts to array('a','','b','','c','')
+  // Step 3: array_filter(...) removes the empty items
+  //
+  return array_filter(explode(',', is_array($args) ? implode(',',$args) : $args));
+}
+
+/**
  * Get the available global options. Used by help command.
  *
  * @return
