def search(gem_pattern, platform_or_requirement = false)
    requirement = nil
    only_platform = false # FIX: WTF is this?!?

    # TODO - Remove support and warning for legacy arguments after 2008/11
    unless Gem::Dependency === gem_pattern
      warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated, use #find_name"
    end

    case gem_pattern
    when Regexp then
      requirement = platform_or_requirement || Gem::Requirement.default
    when Gem::Dependency then
      only_platform = platform_or_requirement
      requirement = gem_pattern.requirement

      gem_pattern = if Regexp === gem_pattern.name then
                      gem_pattern.name
                    elsif gem_pattern.name.empty? then
                      //
                    else
                      /^#{Regexp.escape gem_pattern.name}$/
                    end
    else
      requirement = platform_or_requirement || Gem::Requirement.default
      gem_pattern = /#{gem_pattern}/i
    end

    unless Gem::Requirement === requirement then
      requirement = Gem::Requirement.create requirement
    end

    specs = @gems.values.select do |spec|
      spec.name =~ gem_pattern and
        requirement.satisfied_by? spec.version
    end

    if only_platform then
      specs = specs.select do |spec|
        Gem::Platform.match spec.platform
      end
    end

    specs.sort_by { |s| s.sort_obj }
  end
#
Search for a gem by Gem::Dependency +gem_pattern+.  If +only_platform+
is true, only gems matching Gem::Platform.local will be returned.  An
Array of matching Gem::Specification objects is returned.

For backwards compatibility, a String or Regexp pattern may be passed as
+gem_pattern+, and a Gem::Requirement for +platform_only+.  This
behavior is deprecated and will be removed.