284 lines
7.3 KiB
Ruby
284 lines
7.3 KiB
Ruby
|
require "spec_helper"
|
||
|
|
||
|
describe "bundle update" do
|
||
|
describe "git sources" do
|
||
|
it "floats on a branch when :branch is used" do
|
||
|
build_git "foo", "1.0"
|
||
|
update_git "foo", :branch => "omg"
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('foo-1.0')}", :branch => "omg" do
|
||
|
gem 'foo'
|
||
|
end
|
||
|
G
|
||
|
|
||
|
update_git "foo", :branch => "omg" do |s|
|
||
|
s.write "lib/foo.rb", "FOO = '1.1'"
|
||
|
end
|
||
|
|
||
|
bundle "update"
|
||
|
|
||
|
should_be_installed "foo 1.1"
|
||
|
end
|
||
|
|
||
|
it "updates correctly when you have like craziness" do
|
||
|
build_lib "activesupport", "3.0", :path => lib_path("rails/activesupport")
|
||
|
build_git "rails", "3.0", :path => lib_path("rails") do |s|
|
||
|
s.add_dependency "activesupport", "= 3.0"
|
||
|
end
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "rails", :git => "#{lib_path('rails')}"
|
||
|
G
|
||
|
|
||
|
bundle "update rails"
|
||
|
expect(out).to include("Using activesupport 3.0 from #{lib_path('rails')} (at master)")
|
||
|
should_be_installed "rails 3.0", "activesupport 3.0"
|
||
|
end
|
||
|
|
||
|
it "floats on a branch when :branch is used and the source is specified in the update" do
|
||
|
build_git "foo", "1.0", :path => lib_path("foo")
|
||
|
update_git "foo", :branch => "omg", :path => lib_path("foo")
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('foo')}", :branch => "omg" do
|
||
|
gem 'foo'
|
||
|
end
|
||
|
G
|
||
|
|
||
|
update_git "foo", :branch => "omg", :path => lib_path("foo") do |s|
|
||
|
s.write "lib/foo.rb", "FOO = '1.1'"
|
||
|
end
|
||
|
|
||
|
bundle "update --source foo"
|
||
|
|
||
|
should_be_installed "foo 1.1"
|
||
|
end
|
||
|
|
||
|
it "floats on master when updating all gems that are pinned to the source even if you have child dependencies" do
|
||
|
build_git "foo", :path => lib_path('foo')
|
||
|
build_gem "bar", :to_system => true do |s|
|
||
|
s.add_dependency "foo"
|
||
|
end
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "foo", :git => "#{lib_path('foo')}"
|
||
|
gem "bar"
|
||
|
G
|
||
|
|
||
|
update_git "foo", :path => lib_path('foo') do |s|
|
||
|
s.write "lib/foo.rb", "FOO = '1.1'"
|
||
|
end
|
||
|
|
||
|
bundle "update foo"
|
||
|
|
||
|
should_be_installed "foo 1.1"
|
||
|
end
|
||
|
|
||
|
it "notices when you change the repo url in the Gemfile" do
|
||
|
build_git "foo", :path => lib_path("foo_one")
|
||
|
build_git "foo", :path => lib_path("foo_two")
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "foo", "1.0", :git => "#{lib_path('foo_one')}"
|
||
|
G
|
||
|
|
||
|
FileUtils.rm_rf lib_path("foo_one")
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "foo", "1.0", :git => "#{lib_path('foo_two')}"
|
||
|
G
|
||
|
|
||
|
expect(err).to be_empty
|
||
|
expect(out).to include("Fetching #{lib_path}/foo_two")
|
||
|
expect(out).to include("Your bundle is complete!")
|
||
|
end
|
||
|
|
||
|
|
||
|
it "fetches tags from the remote" do
|
||
|
build_git "foo"
|
||
|
@remote = build_git("bar", :bare => true)
|
||
|
update_git "foo", :remote => @remote.path
|
||
|
update_git "foo", :push => "master"
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem 'foo', :git => "#{@remote.path}"
|
||
|
G
|
||
|
|
||
|
# Create a new tag on the remote that needs fetching
|
||
|
update_git "foo", :tag => "fubar"
|
||
|
update_git "foo", :push => "fubar"
|
||
|
|
||
|
gemfile <<-G
|
||
|
gem 'foo', :git => "#{@remote.path}", :tag => "fubar"
|
||
|
G
|
||
|
|
||
|
bundle "update", :exitstatus => true
|
||
|
expect(exitstatus).to eq(0)
|
||
|
end
|
||
|
|
||
|
describe "with submodules" do
|
||
|
before :each do
|
||
|
build_gem "submodule", :to_system => true do |s|
|
||
|
s.write "lib/submodule.rb", "puts 'GEM'"
|
||
|
end
|
||
|
|
||
|
build_git "submodule", "1.0" do |s|
|
||
|
s.write "lib/submodule.rb", "puts 'GIT'"
|
||
|
end
|
||
|
|
||
|
build_git "has_submodule", "1.0" do |s|
|
||
|
s.add_dependency "submodule"
|
||
|
end
|
||
|
|
||
|
Dir.chdir(lib_path('has_submodule-1.0')) do
|
||
|
`git submodule add #{lib_path('submodule-1.0')} submodule-1.0`
|
||
|
`git commit -m "submodulator"`
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "it unlocks the source when submodules are added to a git source" do
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('has_submodule-1.0')}" do
|
||
|
gem "has_submodule"
|
||
|
end
|
||
|
G
|
||
|
|
||
|
run "require 'submodule'"
|
||
|
expect(out).to eq('GEM')
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('has_submodule-1.0')}", :submodules => true do
|
||
|
gem "has_submodule"
|
||
|
end
|
||
|
G
|
||
|
|
||
|
run "require 'submodule'"
|
||
|
expect(out).to eq('GIT')
|
||
|
end
|
||
|
|
||
|
it "it unlocks the source when submodules are removed from git source" do
|
||
|
pending "This would require actually removing the submodule from the clone"
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('has_submodule-1.0')}", :submodules => true do
|
||
|
gem "has_submodule"
|
||
|
end
|
||
|
G
|
||
|
|
||
|
run "require 'submodule'"
|
||
|
expect(out).to eq('GIT')
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
git "#{lib_path('has_submodule-1.0')}" do
|
||
|
gem "has_submodule"
|
||
|
end
|
||
|
G
|
||
|
|
||
|
run "require 'submodule'"
|
||
|
expect(out).to eq('GEM')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "errors with a message when the .git repo is gone" do
|
||
|
build_git "foo", "1.0"
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "foo", :git => "#{lib_path('foo-1.0')}"
|
||
|
G
|
||
|
|
||
|
lib_path("foo-1.0").join(".git").rmtree
|
||
|
|
||
|
bundle :update, :expect_err => true
|
||
|
expect(out).to include(lib_path("foo-1.0").to_s)
|
||
|
end
|
||
|
|
||
|
it "should not explode on invalid revision on update of gem by name" do
|
||
|
build_git "rack", "0.8"
|
||
|
|
||
|
build_git "rack", "0.8", :path => lib_path('local-rack') do |s|
|
||
|
s.write "lib/rack.rb", "puts :LOCAL"
|
||
|
end
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
source "file://#{gem_repo1}"
|
||
|
gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
|
||
|
G
|
||
|
|
||
|
bundle %|config local.rack #{lib_path('local-rack')}|
|
||
|
bundle "update rack"
|
||
|
expect(out).to include("Your bundle is updated!")
|
||
|
end
|
||
|
|
||
|
it "shows the previous version of the gem" do
|
||
|
build_git "rails", "3.0", :path => lib_path("rails")
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
gem "rails", :git => "#{lib_path('rails')}"
|
||
|
G
|
||
|
|
||
|
lockfile <<-G
|
||
|
GIT
|
||
|
remote: #{lib_path("rails")}
|
||
|
specs:
|
||
|
rails (2.3.2)
|
||
|
|
||
|
PLATFORMS
|
||
|
#{generic(Gem::Platform.local)}
|
||
|
|
||
|
DEPENDENCIES
|
||
|
rails!
|
||
|
G
|
||
|
|
||
|
bundle "update"
|
||
|
expect(out).to include("Using rails 3.0 (was 2.3.2) from #{lib_path('rails')} (at master)")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe "with --source flag" do
|
||
|
before :each do
|
||
|
build_repo2
|
||
|
@git = build_git "foo", :path => lib_path("foo") do |s|
|
||
|
s.executables = "foobar"
|
||
|
end
|
||
|
|
||
|
install_gemfile <<-G
|
||
|
source "file://#{gem_repo2}"
|
||
|
git "#{lib_path('foo')}" do
|
||
|
gem 'foo'
|
||
|
end
|
||
|
gem 'rack'
|
||
|
G
|
||
|
end
|
||
|
|
||
|
it "updates the source" do
|
||
|
update_git "foo", :path => @git.path
|
||
|
|
||
|
bundle "update --source foo"
|
||
|
|
||
|
in_app_root do
|
||
|
run <<-RUBY
|
||
|
require 'foo'
|
||
|
puts "WIN" if defined?(FOO_PREV_REF)
|
||
|
RUBY
|
||
|
|
||
|
expect(out).to eq("WIN")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "unlocks gems that were originally pulled in by the source" do
|
||
|
update_git "foo", "2.0", :path => @git.path
|
||
|
|
||
|
bundle "update --source foo"
|
||
|
should_be_installed "foo 2.0"
|
||
|
end
|
||
|
|
||
|
it "leaves all other gems frozen" do
|
||
|
update_repo2
|
||
|
update_git "foo", :path => @git.path
|
||
|
|
||
|
bundle "update --source foo"
|
||
|
should_be_installed "rack 1.0"
|
||
|
end
|
||
|
end
|
||
|
end
|