mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			1489 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			1489 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
RSpec.describe "the lockfile format" do
 | 
						|
  include Bundler::GemHelpers
 | 
						|
 | 
						|
  it "generates a simple lockfile for a single source, gem" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "updates the lockfile's bundler version if current ver. is newer" do
 | 
						|
    lockfile <<-L
 | 
						|
      GIT
 | 
						|
        remote: git://github.com/nex3/haml.git
 | 
						|
        revision: 8a2271f
 | 
						|
        specs:
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        omg!
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         1.8.2
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not update the lockfile's bundler version if nothing changed during bundle install" do
 | 
						|
    version = "#{Bundler::VERSION.split(".").first}.0.0.a"
 | 
						|
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{version}
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{version}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "updates the lockfile's bundler version if not present" do
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
 | 
						|
      gem "rack", "> 0"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack (> 0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "warns if the current is older than lockfile's bundler version" do
 | 
						|
    current_version = Bundler::VERSION
 | 
						|
    newer_minor = bump_minor(current_version)
 | 
						|
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{newer_minor}
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    pre_flag = prerelease?(newer_minor) ? " --pre" : ""
 | 
						|
    warning_message = "the running version of Bundler (#{current_version}) is older " \
 | 
						|
                      "than the version that created the lockfile (#{newer_minor}). " \
 | 
						|
                      "We suggest you to upgrade to the version that created the " \
 | 
						|
                      "lockfile by running `gem install bundler:#{newer_minor}#{pre_flag}`."
 | 
						|
    expect(err).to include warning_message
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{newer_minor}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "warns when updating bundler major version" do
 | 
						|
    current_version = Bundler::VERSION
 | 
						|
    older_major = previous_major(current_version)
 | 
						|
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{older_major}
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    expect(err).to include(
 | 
						|
      "Warning: the lockfile is being updated to Bundler " \
 | 
						|
      "#{current_version.split(".").first}, after which you will be unable to return to Bundler #{older_major.split(".").first}."
 | 
						|
    )
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{current_version}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a simple lockfile for a single source, gem with dependencies" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack-obama"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a simple lockfile for a single source, gem with a version requirement" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack-obama", ">= 1.0"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama (>= 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a lockfile without credentials for a configured source", :bundler => "< 3" do
 | 
						|
    bundle "config set http://localgemserver.test/ user:pass"
 | 
						|
 | 
						|
    install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
 | 
						|
      source "http://localgemserver.test/" do
 | 
						|
 | 
						|
      end
 | 
						|
 | 
						|
      source "http://user:pass@othergemserver.test/" do
 | 
						|
        gem "rack-obama", ">= 1.0"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: http://localgemserver.test/
 | 
						|
        remote: http://user:pass@othergemserver.test/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama (>= 1.0)!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a lockfile without credentials for a configured source", :bundler => "3" do
 | 
						|
    bundle "config set http://localgemserver.test/ user:pass"
 | 
						|
 | 
						|
    install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
 | 
						|
      source "http://localgemserver.test/" do
 | 
						|
 | 
						|
      end
 | 
						|
 | 
						|
      source "http://user:pass@othergemserver.test/" do
 | 
						|
        gem "rack-obama", ">= 1.0"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: http://localgemserver.test/
 | 
						|
        specs:
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: http://user:pass@othergemserver.test/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama (>= 1.0)!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates lockfiles with multiple requirements" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "net-sftp"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          net-sftp (1.1.1)
 | 
						|
            net-ssh (>= 1.0.0, < 1.99.0)
 | 
						|
          net-ssh (1.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        net-sftp
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
 | 
						|
    expect(the_bundle).to include_gems "net-sftp 1.1.1", "net-ssh 1.0.0"
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a simple lockfile for a single pinned source, gem with a version requirement", :bundler => "< 3" do
 | 
						|
    git = build_git "foo"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gem "foo", :git => "#{lib_path("foo-1.0")}"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        revision: #{git.ref_for("master")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a simple lockfile for a single pinned source, gem with a version requirement" do
 | 
						|
    git = build_git "foo"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gem "foo", :git => "#{lib_path("foo-1.0")}"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        revision: #{git.ref_for("master")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not asplode when a platform specific dependency is present and the Gemfile has not been resolved on that platform" do
 | 
						|
    build_lib "omg", :path => lib_path("omg")
 | 
						|
 | 
						|
    gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      platforms :#{not_local_tag} do
 | 
						|
        gem "omg", :path => "#{lib_path("omg")}"
 | 
						|
      end
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile <<-L
 | 
						|
      GIT
 | 
						|
        remote: git://github.com/nex3/haml.git
 | 
						|
        revision: 8a2271f
 | 
						|
        specs:
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}//
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{not_local}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        omg!
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    L
 | 
						|
 | 
						|
    bundle! "install"
 | 
						|
    expect(the_bundle).to include_gems "rack 1.0.0"
 | 
						|
  end
 | 
						|
 | 
						|
  it "serializes global git sources" do
 | 
						|
    git = build_git "foo"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      git "#{lib_path("foo-1.0")}" do
 | 
						|
        gem "foo"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        revision: #{git.ref_for("master")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a lockfile with a ref for a single pinned source, git gem with a branch requirement" do
 | 
						|
    git = build_git "foo"
 | 
						|
    update_git "foo", :branch => "omg"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gem "foo", :git => "#{lib_path("foo-1.0")}", :branch => "omg"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        revision: #{git.ref_for("omg")}
 | 
						|
        branch: omg
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "generates a lockfile with a ref for a single pinned source, git gem with a tag requirement" do
 | 
						|
    git = build_git "foo"
 | 
						|
    update_git "foo", :tag => "omg"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gem "foo", :git => "#{lib_path("foo-1.0")}", :tag => "omg"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        revision: #{git.ref_for("omg")}
 | 
						|
        tag: omg
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "serializes pinned path sources to the lockfile" do
 | 
						|
    build_lib "foo"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gem "foo", :path => "#{lib_path("foo-1.0")}"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "serializes pinned path sources to the lockfile even when packaging" do
 | 
						|
    build_lib "foo"
 | 
						|
 | 
						|
    install_gemfile! <<-G
 | 
						|
      gem "foo", :path => "#{lib_path("foo-1.0")}"
 | 
						|
    G
 | 
						|
 | 
						|
    bundle "config set cache_all true"
 | 
						|
    bundle! :cache
 | 
						|
    bundle! :install, :local => true
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "sorts serialized sources by type" do
 | 
						|
    build_lib "foo"
 | 
						|
    bar = build_git "bar"
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
      gem "foo", :path => "#{lib_path("foo-1.0")}"
 | 
						|
      gem "bar", :git => "#{lib_path("bar-1.0")}"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("bar-1.0")}
 | 
						|
        revision: #{bar.ref_for("master")}
 | 
						|
        specs:
 | 
						|
          bar (1.0)
 | 
						|
 | 
						|
      PATH
 | 
						|
        remote: #{lib_path("foo-1.0")}
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        bar!
 | 
						|
        foo!
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "lists gems alphabetically" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "thin"
 | 
						|
      gem "actionpack"
 | 
						|
      gem "rack-obama"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          actionpack (2.3.2)
 | 
						|
            activesupport (= 2.3.2)
 | 
						|
          activesupport (2.3.2)
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
          thin (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        actionpack
 | 
						|
        rack-obama
 | 
						|
        thin
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "orders dependencies' dependencies in alphabetical order" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rails"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          actionmailer (2.3.2)
 | 
						|
            activesupport (= 2.3.2)
 | 
						|
          actionpack (2.3.2)
 | 
						|
            activesupport (= 2.3.2)
 | 
						|
          activerecord (2.3.2)
 | 
						|
            activesupport (= 2.3.2)
 | 
						|
          activeresource (2.3.2)
 | 
						|
            activesupport (= 2.3.2)
 | 
						|
          activesupport (2.3.2)
 | 
						|
          rails (2.3.2)
 | 
						|
            actionmailer (= 2.3.2)
 | 
						|
            actionpack (= 2.3.2)
 | 
						|
            activerecord (= 2.3.2)
 | 
						|
            activeresource (= 2.3.2)
 | 
						|
            rake (= 12.3.2)
 | 
						|
          rake (12.3.2)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rails
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "orders dependencies by version" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem 'double_deps'
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          double_deps (1.0)
 | 
						|
            net-ssh
 | 
						|
            net-ssh (>= 1.0.0)
 | 
						|
          net-ssh (1.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        double_deps
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add the :require option to the lockfile" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack-obama", ">= 1.0", :require => "rack/obama"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama (>= 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add the :group option to the lockfile" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack-obama", ">= 1.0", :group => :test
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
          rack-obama (1.0)
 | 
						|
            rack
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack-obama (>= 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "stores relative paths when the path is provided in a relative fashion and in Gemfile dir" do
 | 
						|
    build_lib "foo", :path => bundled_app("foo")
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      path "foo" do
 | 
						|
        gem "foo"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: foo
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "stores relative paths when the path is provided in a relative fashion and is above Gemfile dir" do
 | 
						|
    build_lib "foo", :path => bundled_app(File.join("..", "foo"))
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      path "../foo" do
 | 
						|
        gem "foo"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: ../foo
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "stores relative paths when the path is provided in an absolute fashion but is relative" do
 | 
						|
    build_lib "foo", :path => bundled_app("foo")
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      path File.expand_path("../foo", __FILE__) do
 | 
						|
        gem "foo"
 | 
						|
      end
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: foo
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "stores relative paths when the path is provided for gemspec" do
 | 
						|
    build_lib("foo", :path => tmp.join("foo"))
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      gemspec :path => "../foo"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      PATH
 | 
						|
        remote: ../foo
 | 
						|
        specs:
 | 
						|
          foo (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        foo!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "keeps existing platforms in the lockfile", :bundler => "< 3" do
 | 
						|
    lockfile <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
        #{generic_local_platform}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "keeps existing platforms in the lockfile", :bundler => "3" do
 | 
						|
    lockfile <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
        #{generic_local_platform}
 | 
						|
        #{specific_local_platform}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "persists the spec's platform to the lockfile", :bundler => "< 3" do
 | 
						|
    build_repo2 do
 | 
						|
      build_gem "platform_specific", "1.0" do |s|
 | 
						|
        s.platform = Gem::Platform.new("universal-java-16")
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    simulate_platform "universal-java-16"
 | 
						|
 | 
						|
    install_gemfile! <<-G
 | 
						|
      source "#{file_uri_for(gem_repo2)}"
 | 
						|
      gem "platform_specific"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo2)}/
 | 
						|
        specs:
 | 
						|
          platform_specific (1.0-java)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        platform_specific
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "persists the spec's platform and specific platform to the lockfile", :bundler => "3" do
 | 
						|
    build_repo2 do
 | 
						|
      build_gem "platform_specific", "1.0" do |s|
 | 
						|
        s.platform = Gem::Platform.new("universal-java-16")
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    simulate_platform "universal-java-16"
 | 
						|
 | 
						|
    install_gemfile! <<-G
 | 
						|
      source "#{file_uri_for(gem_repo2)}"
 | 
						|
      gem "platform_specific"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo2)}/
 | 
						|
        specs:
 | 
						|
          platform_specific (1.0-java)
 | 
						|
          platform_specific (1.0-universal-java-16)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        java
 | 
						|
        universal-java-16
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        platform_specific
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add duplicate gems" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack"
 | 
						|
      gem "activesupport"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          activesupport (2.3.5)
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        activesupport
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add duplicate dependencies" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack"
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add duplicate dependencies with versions" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack", "1.0"
 | 
						|
      gem "rack", "1.0"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack (= 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add duplicate dependencies in different groups" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack", "1.0", :group => :one
 | 
						|
      gem "rack", "1.0", :group => :two
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (1.0.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack (= 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "raises if two different versions are used" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack", "1.0"
 | 
						|
      gem "rack", "1.1"
 | 
						|
    G
 | 
						|
 | 
						|
    expect(bundled_app("Gemfile.lock")).not_to exist
 | 
						|
    expect(err).to include "rack (= 1.0) and rack (= 1.1)"
 | 
						|
  end
 | 
						|
 | 
						|
  it "raises if two different sources are used" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack"
 | 
						|
      gem "rack", :git => "git://hubz.com"
 | 
						|
    G
 | 
						|
 | 
						|
    expect(bundled_app("Gemfile.lock")).not_to exist
 | 
						|
    expect(err).to include "rack (>= 0) should come from an unspecified source and git://hubz.com (at master)"
 | 
						|
  end
 | 
						|
 | 
						|
  it "works correctly with multiple version dependencies" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack", "> 0.9", "< 1.0"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (0.9.1)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack (> 0.9, < 1.0)
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  it "captures the Ruby version in the lockfile" do
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      ruby '#{RUBY_VERSION}'
 | 
						|
      gem "rack", "> 0.9", "< 1.0"
 | 
						|
    G
 | 
						|
 | 
						|
    lockfile_should_be <<-G
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack (0.9.1)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack (> 0.9, < 1.0)
 | 
						|
 | 
						|
      RUBY VERSION
 | 
						|
         ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    G
 | 
						|
  end
 | 
						|
 | 
						|
  # Some versions of the Bundler 1.1 RC series introduced corrupted
 | 
						|
  # lockfiles. There were two major problems:
 | 
						|
  #
 | 
						|
  # * multiple copies of the same GIT section appeared in the lockfile
 | 
						|
  # * when this happened, those sections got multiple copies of gems
 | 
						|
  #   in those sections.
 | 
						|
  it "fixes corrupted lockfiles" do
 | 
						|
    build_git "omg", :path => lib_path("omg")
 | 
						|
    revision = revision_for(lib_path("omg"))
 | 
						|
 | 
						|
    gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "omg", :git => "#{lib_path("omg")}", :branch => 'master'
 | 
						|
    G
 | 
						|
 | 
						|
    bundle! :install, forgotten_command_line_options(:path => "vendor")
 | 
						|
    expect(the_bundle).to include_gems "omg 1.0"
 | 
						|
 | 
						|
    # Create a Gemfile.lock that has duplicate GIT sections
 | 
						|
    lockfile <<-L
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("omg")}
 | 
						|
        revision: #{revision}
 | 
						|
        branch: master
 | 
						|
        specs:
 | 
						|
          omg (1.0)
 | 
						|
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("omg")}
 | 
						|
        revision: #{revision}
 | 
						|
        branch: master
 | 
						|
        specs:
 | 
						|
          omg (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        omg!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    L
 | 
						|
 | 
						|
    FileUtils.rm_rf(bundled_app("vendor"))
 | 
						|
    bundle "install"
 | 
						|
    expect(the_bundle).to include_gems "omg 1.0"
 | 
						|
 | 
						|
    # Confirm that duplicate specs do not appear
 | 
						|
    lockfile_should_be(<<-L)
 | 
						|
      GIT
 | 
						|
        remote: #{lib_path("omg")}
 | 
						|
        revision: #{revision}
 | 
						|
        branch: master
 | 
						|
        specs:
 | 
						|
          omg (1.0)
 | 
						|
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        omg!
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    L
 | 
						|
  end
 | 
						|
 | 
						|
  it "raises a helpful error message when the lockfile is missing deps" do
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}/
 | 
						|
        specs:
 | 
						|
          rack_middleware (1.0)
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack_middleware
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile <<-G
 | 
						|
      source "#{file_uri_for(gem_repo1)}"
 | 
						|
      gem "rack_middleware"
 | 
						|
    G
 | 
						|
 | 
						|
    expect(err).to include("Downloading rack_middleware-1.0 revealed dependencies not in the API or the lockfile (#{Gem::Dependency.new("rack", "= 0.9.1")}).").
 | 
						|
      and include("Either installing with `--full-index` or running `bundle update rack_middleware` should fix the problem.")
 | 
						|
  end
 | 
						|
 | 
						|
  describe "a line ending" do
 | 
						|
    def set_lockfile_mtime_to_known_value
 | 
						|
      time = Time.local(2000, 1, 1, 0, 0, 0)
 | 
						|
      File.utime(time, time, bundled_app("Gemfile.lock"))
 | 
						|
    end
 | 
						|
    before(:each) do
 | 
						|
      build_repo2
 | 
						|
 | 
						|
      install_gemfile <<-G
 | 
						|
        source "#{file_uri_for(gem_repo2)}"
 | 
						|
        gem "rack"
 | 
						|
      G
 | 
						|
      set_lockfile_mtime_to_known_value
 | 
						|
    end
 | 
						|
 | 
						|
    it "generates Gemfile.lock with \\n line endings" do
 | 
						|
      expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n")
 | 
						|
      expect(the_bundle).to include_gems "rack 1.0"
 | 
						|
    end
 | 
						|
 | 
						|
    context "during updates" do
 | 
						|
      it "preserves Gemfile.lock \\n line endings" do
 | 
						|
        update_repo2
 | 
						|
 | 
						|
        expect { bundle "update", :all => true }.to change { File.mtime(bundled_app("Gemfile.lock")) }
 | 
						|
        expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n")
 | 
						|
        expect(the_bundle).to include_gems "rack 1.2"
 | 
						|
      end
 | 
						|
 | 
						|
      it "preserves Gemfile.lock \\n\\r line endings" do
 | 
						|
        update_repo2
 | 
						|
        win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n")
 | 
						|
        File.open(bundled_app("Gemfile.lock"), "wb") {|f| f.puts(win_lock) }
 | 
						|
        set_lockfile_mtime_to_known_value
 | 
						|
 | 
						|
        expect { bundle "update", :all => true }.to change { File.mtime(bundled_app("Gemfile.lock")) }
 | 
						|
        expect(File.read(bundled_app("Gemfile.lock"))).to match("\r\n")
 | 
						|
        expect(the_bundle).to include_gems "rack 1.2"
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context "when nothing changes" do
 | 
						|
      it "preserves Gemfile.lock \\n line endings" do
 | 
						|
        expect do
 | 
						|
          ruby <<-RUBY
 | 
						|
                   require 'bundler'
 | 
						|
                   Bundler.setup
 | 
						|
                 RUBY
 | 
						|
        end.not_to change { File.mtime(bundled_app("Gemfile.lock")) }
 | 
						|
      end
 | 
						|
 | 
						|
      it "preserves Gemfile.lock \\n\\r line endings" do
 | 
						|
        win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n")
 | 
						|
        File.open(bundled_app("Gemfile.lock"), "wb") {|f| f.puts(win_lock) }
 | 
						|
        set_lockfile_mtime_to_known_value
 | 
						|
 | 
						|
        expect do
 | 
						|
          ruby <<-RUBY
 | 
						|
                   require 'bundler'
 | 
						|
                   Bundler.setup
 | 
						|
                 RUBY
 | 
						|
        end.not_to change { File.mtime(bundled_app("Gemfile.lock")) }
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  it "refuses to install if Gemfile.lock contains conflict markers" do
 | 
						|
    lockfile <<-L
 | 
						|
      GEM
 | 
						|
        remote: #{file_uri_for(gem_repo1)}//
 | 
						|
        specs:
 | 
						|
      <<<<<<<
 | 
						|
          rack (1.0.0)
 | 
						|
      =======
 | 
						|
          rack (1.0.1)
 | 
						|
      >>>>>>>
 | 
						|
 | 
						|
      PLATFORMS
 | 
						|
        #{lockfile_platforms}
 | 
						|
 | 
						|
      DEPENDENCIES
 | 
						|
        rack
 | 
						|
 | 
						|
      BUNDLED WITH
 | 
						|
         #{Bundler::VERSION}
 | 
						|
    L
 | 
						|
 | 
						|
    install_gemfile(<<-G)
 | 
						|
      source "#{file_uri_for(gem_repo1)}/"
 | 
						|
      gem "rack"
 | 
						|
    G
 | 
						|
 | 
						|
    expect(err).to match(/your Gemfile.lock contains merge conflicts/i)
 | 
						|
    expect(err).to match(/git checkout HEAD -- Gemfile.lock/i)
 | 
						|
  end
 | 
						|
 | 
						|
private
 | 
						|
 | 
						|
  def prerelease?(version)
 | 
						|
    Gem::Version.new(version).prerelease?
 | 
						|
  end
 | 
						|
 | 
						|
  def previous_major(version)
 | 
						|
    version.split(".").map.with_index {|v, i| i == 0 ? v.to_i - 1 : v }.join(".")
 | 
						|
  end
 | 
						|
 | 
						|
  def bump_minor(version)
 | 
						|
    bump(version, 1)
 | 
						|
  end
 | 
						|
 | 
						|
  def bump(version, segment)
 | 
						|
    version.split(".").map.with_index {|v, i| i == segment ? v.to_i + 1 : v }.join(".")
 | 
						|
  end
 | 
						|
end
 |