mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	rubygems 2.7.x depends bundler-1.15.x. This is preparation for
  rubygems and bundler migration.
  * lib/bundler.rb, lib/bundler/*: files of bundler-1.15.4
  * spec/bundler/*: rspec examples of bundler-1.15.4. I applied patches.
    * https://github.com/bundler/bundler/pull/6007
    * Exclude not working examples on ruby repository.
    * Fake ruby interpriter instead of installed ruby.
  * Makefile.in: Added test task named `test-bundler`. This task is only
    working macOS/linux yet. I'm going to support Windows environment later.
  * tool/sync_default_gems.rb: Added sync task for bundler.
  [Feature #12733][ruby-core:77172]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59779 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
	
			
		
			
				
	
	
		
			365 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
	
		
			9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
module Spec
 | 
						|
  module Indexes
 | 
						|
    def dep(name, reqs = nil)
 | 
						|
      @deps ||= []
 | 
						|
      @deps << Bundler::Dependency.new(name, reqs)
 | 
						|
    end
 | 
						|
 | 
						|
    def platform(*args)
 | 
						|
      @platforms ||= []
 | 
						|
      @platforms.concat args.map {|p| Gem::Platform.new(p) }
 | 
						|
    end
 | 
						|
 | 
						|
    alias_method :platforms, :platform
 | 
						|
 | 
						|
    def resolve(args = [])
 | 
						|
      @platforms ||= ["ruby"]
 | 
						|
      deps = []
 | 
						|
      @deps.each do |d|
 | 
						|
        @platforms.each do |p|
 | 
						|
          deps << Bundler::DepProxy.new(d, p)
 | 
						|
        end
 | 
						|
      end
 | 
						|
      Bundler::Resolver.resolve(deps, @index, *args)
 | 
						|
    end
 | 
						|
 | 
						|
    def should_resolve_as(specs)
 | 
						|
      got = resolve
 | 
						|
      got = got.map(&:full_name).sort
 | 
						|
      expect(got).to eq(specs.sort)
 | 
						|
    end
 | 
						|
 | 
						|
    def should_resolve_and_include(specs, args = [])
 | 
						|
      got = resolve(args)
 | 
						|
      got = got.map(&:full_name).sort
 | 
						|
      specs.each do |s|
 | 
						|
        expect(got).to include(s)
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def should_conflict_on(names)
 | 
						|
      got = resolve
 | 
						|
      flunk "The resolve succeeded with: #{got.map(&:full_name).sort.inspect}"
 | 
						|
    rescue Bundler::VersionConflict => e
 | 
						|
      expect(Array(names).sort).to eq(e.conflicts.sort)
 | 
						|
    end
 | 
						|
 | 
						|
    def gem(*args, &blk)
 | 
						|
      build_spec(*args, &blk).first
 | 
						|
    end
 | 
						|
 | 
						|
    def locked(*args)
 | 
						|
      Bundler::SpecSet.new(args.map do |name, version|
 | 
						|
        gem(name, version)
 | 
						|
      end)
 | 
						|
    end
 | 
						|
 | 
						|
    def should_conservative_resolve_and_include(opts, unlock, specs)
 | 
						|
      # empty unlock means unlock all
 | 
						|
      opts = Array(opts)
 | 
						|
      search = Bundler::GemVersionPromoter.new(@locked, unlock).tap do |s|
 | 
						|
        s.level = opts.first
 | 
						|
        s.strict = opts.include?(:strict)
 | 
						|
      end
 | 
						|
      should_resolve_and_include specs, [{}, @base, search]
 | 
						|
    end
 | 
						|
 | 
						|
    def an_awesome_index
 | 
						|
      build_index do
 | 
						|
        gem "rack", %w(0.8 0.9 0.9.1 0.9.2 1.0 1.1)
 | 
						|
        gem "rack-mount", %w(0.4 0.5 0.5.1 0.5.2 0.6)
 | 
						|
 | 
						|
        # --- Rails
 | 
						|
        versions "1.2.3 2.2.3 2.3.5 3.0.0.beta 3.0.0.beta1" do |version|
 | 
						|
          gem "activesupport", version
 | 
						|
          gem "actionpack", version do
 | 
						|
            dep "activesupport", version
 | 
						|
            if version >= v("3.0.0.beta")
 | 
						|
              dep "rack", "~> 1.1"
 | 
						|
              dep "rack-mount", ">= 0.5"
 | 
						|
            elsif version > v("2.3")   then dep "rack", "~> 1.0.0"
 | 
						|
            elsif version > v("2.0.0") then dep "rack", "~> 0.9.0"
 | 
						|
            end
 | 
						|
          end
 | 
						|
          gem "activerecord", version do
 | 
						|
            dep "activesupport", version
 | 
						|
            dep "arel", ">= 0.2" if version >= v("3.0.0.beta")
 | 
						|
          end
 | 
						|
          gem "actionmailer", version do
 | 
						|
            dep "activesupport", version
 | 
						|
            dep "actionmailer",  version
 | 
						|
          end
 | 
						|
          if version < v("3.0.0.beta")
 | 
						|
            gem "railties", version do
 | 
						|
              dep "activerecord",  version
 | 
						|
              dep "actionpack",    version
 | 
						|
              dep "actionmailer",  version
 | 
						|
              dep "activesupport", version
 | 
						|
            end
 | 
						|
          else
 | 
						|
            gem "railties", version
 | 
						|
            gem "rails", version do
 | 
						|
              dep "activerecord",  version
 | 
						|
              dep "actionpack",    version
 | 
						|
              dep "actionmailer",  version
 | 
						|
              dep "activesupport", version
 | 
						|
              dep "railties",      version
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        versions "1.0 1.2 1.2.1 1.2.2 1.3 1.3.0.1 1.3.5 1.4.0 1.4.2 1.4.2.1" do |version|
 | 
						|
          platforms "ruby java mswin32 mingw32 x64-mingw32" do |platform|
 | 
						|
            next if version == v("1.4.2.1") && platform != pl("x86-mswin32")
 | 
						|
            next if version == v("1.4.2") && platform == pl("x86-mswin32")
 | 
						|
            gem "nokogiri", version, platform do
 | 
						|
              dep "weakling", ">= 0.0.3" if platform =~ pl("java")
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        versions "0.0.1 0.0.2 0.0.3" do |version|
 | 
						|
          gem "weakling", version
 | 
						|
        end
 | 
						|
 | 
						|
        # --- Rails related
 | 
						|
        versions "1.2.3 2.2.3 2.3.5" do |version|
 | 
						|
          gem "activemerchant", version do
 | 
						|
            dep "activesupport", ">= #{version}"
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    # Builder 3.1.4 will activate first, but if all
 | 
						|
    # goes well, it should resolve to 3.0.4
 | 
						|
    def a_conflict_index
 | 
						|
      build_index do
 | 
						|
        gem "builder", %w(3.0.4 3.1.4)
 | 
						|
        gem("grape", "0.2.6") do
 | 
						|
          dep "builder", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        versions "3.2.8 3.2.9 3.2.10 3.2.11" do |version|
 | 
						|
          gem("activemodel", version) do
 | 
						|
            dep "builder", "~> 3.0.0"
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        gem("my_app", "1.0.0") do
 | 
						|
          dep "activemodel", ">= 0"
 | 
						|
          dep "grape", ">= 0"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def a_complex_conflict_index
 | 
						|
      build_index do
 | 
						|
        gem("a", %w(1.0.2 1.1.4 1.2.0 1.4.0)) do
 | 
						|
          dep "d", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("d", %w(1.3.0 1.4.1)) do
 | 
						|
          dep "x", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem "d", "0.9.8"
 | 
						|
 | 
						|
        gem("b", "0.3.4") do
 | 
						|
          dep "a", ">= 1.5.0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("b", "0.3.5") do
 | 
						|
          dep "a", ">= 1.2"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("b", "0.3.3") do
 | 
						|
          dep "a", "> 1.0"
 | 
						|
        end
 | 
						|
 | 
						|
        versions "3.2 3.3" do |version|
 | 
						|
          gem("c", version) do
 | 
						|
            dep "a", "~> 1.0"
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        gem("my_app", "1.3.0") do
 | 
						|
          dep "c", ">= 4.0"
 | 
						|
          dep "b", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("my_app", "1.2.0") do
 | 
						|
          dep "c", "~> 3.3.0"
 | 
						|
          dep "b", "0.3.4"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("my_app", "1.1.0") do
 | 
						|
          dep "c", "~> 3.2.0"
 | 
						|
          dep "b", "0.3.5"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def index_with_conflict_on_child
 | 
						|
      build_index do
 | 
						|
        gem "json", %w(1.6.5 1.7.7 1.8.0)
 | 
						|
 | 
						|
        gem("chef", "10.26") do
 | 
						|
          dep "json", [">= 1.4.4", "<= 1.7.7"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem("berkshelf", "2.0.7") do
 | 
						|
          dep "json", ">= 1.7.7"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("chef_app", "1.0.0") do
 | 
						|
          dep "berkshelf", "~> 2.0"
 | 
						|
          dep "chef", "~> 10.26"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    # Issue #3459
 | 
						|
    def a_complicated_index
 | 
						|
      build_index do
 | 
						|
        gem "foo", %w(3.0.0 3.0.5) do
 | 
						|
          dep "qux", ["~> 3.1"]
 | 
						|
          dep "baz", ["< 9.0", ">= 5.0"]
 | 
						|
          dep "bar", ["~> 1.0"]
 | 
						|
          dep "grault", ["~> 3.1"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "foo", "1.2.1" do
 | 
						|
          dep "baz", ["~> 4.2"]
 | 
						|
          dep "bar", ["~> 1.0"]
 | 
						|
          dep "qux", ["~> 3.1"]
 | 
						|
          dep "grault", ["~> 2.0"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "bar", "1.0.5" do
 | 
						|
          dep "grault", ["~> 3.1"]
 | 
						|
          dep "baz", ["< 9", ">= 4.2"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "bar", "1.0.3" do
 | 
						|
          dep "baz", ["< 9", ">= 4.2"]
 | 
						|
          dep "grault", ["~> 2.0"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "baz", "8.2.10" do
 | 
						|
          dep "grault", ["~> 3.0"]
 | 
						|
          dep "garply", [">= 0.5.1", "~> 0.5"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "baz", "5.0.2" do
 | 
						|
          dep "grault", ["~> 2.0"]
 | 
						|
          dep "garply", [">= 0.3.1"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "baz", "4.2.0" do
 | 
						|
          dep "grault", ["~> 2.0"]
 | 
						|
          dep "garply", [">= 0.3.1"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "grault", %w(2.6.3 3.1.1)
 | 
						|
 | 
						|
        gem "garply", "0.5.1" do
 | 
						|
          dep "waldo", ["~> 0.1.3"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "waldo", "0.1.5" do
 | 
						|
          dep "plugh", ["~> 0.6.0"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "plugh", %w(0.6.3 0.6.11 0.7.0)
 | 
						|
 | 
						|
        gem "qux", "3.2.21" do
 | 
						|
          dep "plugh", [">= 0.6.4", "~> 0.6"]
 | 
						|
          dep "corge", ["~> 1.0"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem "corge", "1.10.1"
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def a_unresovable_child_index
 | 
						|
      build_index do
 | 
						|
        gem "json", %w(1.8.0)
 | 
						|
 | 
						|
        gem("chef", "10.26") do
 | 
						|
          dep "json", [">= 1.4.4", "<= 1.7.7"]
 | 
						|
        end
 | 
						|
 | 
						|
        gem("berkshelf", "2.0.7") do
 | 
						|
          dep "json", ">= 1.7.7"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("chef_app_error", "1.0.0") do
 | 
						|
          dep "berkshelf", "~> 2.0"
 | 
						|
          dep "chef", "~> 10.26"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def a_index_with_root_conflict_on_child
 | 
						|
      build_index do
 | 
						|
        gem "builder", %w(2.1.2 3.0.1 3.1.3)
 | 
						|
        gem "i18n", %w(0.4.1 0.4.2)
 | 
						|
 | 
						|
        gem "activesupport", %w(3.0.0 3.0.1 3.0.5 3.1.7)
 | 
						|
 | 
						|
        gem("activemodel", "3.0.5") do
 | 
						|
          dep "activesupport", "= 3.0.5"
 | 
						|
          dep "builder", "~> 2.1.2"
 | 
						|
          dep "i18n", "~> 0.4"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("activemodel", "3.0.0") do
 | 
						|
          dep "activesupport", "= 3.0.0"
 | 
						|
          dep "builder", "~> 2.1.2"
 | 
						|
          dep "i18n", "~> 0.4.1"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("activemodel", "3.1.3") do
 | 
						|
          dep "activesupport", "= 3.1.3"
 | 
						|
          dep "builder", "~> 2.1.2"
 | 
						|
          dep "i18n", "~> 0.5"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("activerecord", "3.0.0") do
 | 
						|
          dep "activesupport", "= 3.0.0"
 | 
						|
          dep "activemodel", "= 3.0.0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("activerecord", "3.0.5") do
 | 
						|
          dep "activesupport", "= 3.0.5"
 | 
						|
          dep "activemodel", "= 3.0.5"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("activerecord", "3.0.9") do
 | 
						|
          dep "activesupport", "= 3.1.5"
 | 
						|
          dep "activemodel", "= 3.1.5"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def a_circular_index
 | 
						|
      build_index do
 | 
						|
        gem "rack", "1.0.1"
 | 
						|
        gem("foo", "0.2.6") do
 | 
						|
          dep "bar", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("bar", "1.0.0") do
 | 
						|
          dep "foo", ">= 0"
 | 
						|
        end
 | 
						|
 | 
						|
        gem("circular_app", "1.0.0") do
 | 
						|
          dep "foo", ">= 0"
 | 
						|
          dep "bar", ">= 0"
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |