class Gem::Commands::UpdateCommand

def execute

def execute
  if options[:system]
    update_rubygems
    return
  end
  gems_to_update = which_to_update(
    highest_installed_gems,
    options[:args].uniq
  )
  if options[:explain]
    say "Gems to update:"
    gems_to_update.each do |name_tuple|
      say "  #{name_tuple.full_name}"
    end
    return
  end
  say "Updating installed gems"
  updated = update_gems gems_to_update
  installed_names = highest_installed_gems.keys
  updated_names = updated.map(&:name)
  not_updated_names = options[:args].uniq - updated_names
  not_installed_names = not_updated_names - installed_names
  up_to_date_names = not_updated_names - not_installed_names
  if updated.empty?
    say "Nothing to update"
  else
    say "Gems updated: #{updated_names.join(" ")}"
  end
  say "Gems already up-to-date: #{up_to_date_names.join(" ")}" unless up_to_date_names.empty?
  say "Gems not currently installed: #{not_installed_names.join(" ")}" unless not_installed_names.empty?
end