bundler_package_git 1.1.pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +22 -0
- data/.rvmrc +1 -0
- data/CHANGELOG.md +659 -0
- data/ISSUES.md +47 -0
- data/LICENSE +23 -0
- data/README.md +29 -0
- data/Rakefile +167 -0
- data/UPGRADING.md +103 -0
- data/bin/bundle +22 -0
- data/bundler.gemspec +30 -0
- data/lib/bundler.rb +283 -0
- data/lib/bundler/capistrano.rb +11 -0
- data/lib/bundler/cli.rb +490 -0
- data/lib/bundler/definition.rb +429 -0
- data/lib/bundler/dependency.rb +130 -0
- data/lib/bundler/deployment.rb +53 -0
- data/lib/bundler/dsl.rb +243 -0
- data/lib/bundler/environment.rb +47 -0
- data/lib/bundler/fetcher.rb +101 -0
- data/lib/bundler/gem_helper.rb +146 -0
- data/lib/bundler/graph.rb +130 -0
- data/lib/bundler/index.rb +131 -0
- data/lib/bundler/installer.rb +117 -0
- data/lib/bundler/lazy_specification.rb +71 -0
- data/lib/bundler/lockfile_parser.rb +108 -0
- data/lib/bundler/remote_specification.rb +57 -0
- data/lib/bundler/resolver.rb +470 -0
- data/lib/bundler/rubygems_ext.rb +226 -0
- data/lib/bundler/runtime.rb +201 -0
- data/lib/bundler/settings.rb +117 -0
- data/lib/bundler/setup.rb +16 -0
- data/lib/bundler/shared_helpers.rb +167 -0
- data/lib/bundler/source.rb +675 -0
- data/lib/bundler/spec_set.rb +134 -0
- data/lib/bundler/templates/Executable +16 -0
- data/lib/bundler/templates/Gemfile +4 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
- data/lib/bundler/templates/newgem/Rakefile.tt +2 -0
- data/lib/bundler/templates/newgem/bin/newgem.tt +3 -0
- data/lib/bundler/templates/newgem/gitignore.tt +4 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +21 -0
- data/lib/bundler/ui.rb +73 -0
- data/lib/bundler/vendor/net/http/faster.rb +27 -0
- data/lib/bundler/vendor/net/http/persistent.rb +464 -0
- data/lib/bundler/vendor/thor.rb +319 -0
- data/lib/bundler/vendor/thor/actions.rb +297 -0
- data/lib/bundler/vendor/thor/actions/create_file.rb +105 -0
- data/lib/bundler/vendor/thor/actions/directory.rb +93 -0
- data/lib/bundler/vendor/thor/actions/empty_directory.rb +134 -0
- data/lib/bundler/vendor/thor/actions/file_manipulation.rb +229 -0
- data/lib/bundler/vendor/thor/actions/inject_into_file.rb +104 -0
- data/lib/bundler/vendor/thor/base.rb +556 -0
- data/lib/bundler/vendor/thor/core_ext/file_binary_read.rb +9 -0
- data/lib/bundler/vendor/thor/core_ext/hash_with_indifferent_access.rb +75 -0
- data/lib/bundler/vendor/thor/core_ext/ordered_hash.rb +100 -0
- data/lib/bundler/vendor/thor/error.rb +30 -0
- data/lib/bundler/vendor/thor/invocation.rb +168 -0
- data/lib/bundler/vendor/thor/parser.rb +4 -0
- data/lib/bundler/vendor/thor/parser/argument.rb +67 -0
- data/lib/bundler/vendor/thor/parser/arguments.rb +161 -0
- data/lib/bundler/vendor/thor/parser/option.rb +120 -0
- data/lib/bundler/vendor/thor/parser/options.rb +174 -0
- data/lib/bundler/vendor/thor/shell.rb +88 -0
- data/lib/bundler/vendor/thor/shell/basic.rb +275 -0
- data/lib/bundler/vendor/thor/shell/color.rb +108 -0
- data/lib/bundler/vendor/thor/shell/html.rb +121 -0
- data/lib/bundler/vendor/thor/task.rb +114 -0
- data/lib/bundler/vendor/thor/util.rb +229 -0
- data/lib/bundler/vendor/thor/version.rb +3 -0
- data/lib/bundler/version.rb +6 -0
- data/lib/bundler/vlad.rb +9 -0
- data/man/bundle-config.ronn +90 -0
- data/man/bundle-exec.ronn +111 -0
- data/man/bundle-install.ronn +314 -0
- data/man/bundle-package.ronn +59 -0
- data/man/bundle-update.ronn +176 -0
- data/man/bundle.ronn +80 -0
- data/man/gemfile.5.ronn +279 -0
- data/man/index.txt +6 -0
- data/spec/cache/gems_spec.rb +219 -0
- data/spec/cache/git_spec.rb +9 -0
- data/spec/cache/path_spec.rb +27 -0
- data/spec/cache/platform_spec.rb +57 -0
- data/spec/install/deploy_spec.rb +197 -0
- data/spec/install/deprecated_spec.rb +37 -0
- data/spec/install/gems/c_ext_spec.rb +48 -0
- data/spec/install/gems/dependency_api_spec.rb +85 -0
- data/spec/install/gems/env_spec.rb +107 -0
- data/spec/install/gems/flex_spec.rb +313 -0
- data/spec/install/gems/groups_spec.rb +245 -0
- data/spec/install/gems/packed_spec.rb +84 -0
- data/spec/install/gems/platform_spec.rb +208 -0
- data/spec/install/gems/resolving_spec.rb +72 -0
- data/spec/install/gems/simple_case_spec.rb +715 -0
- data/spec/install/gems/standalone_spec.rb +162 -0
- data/spec/install/gems/sudo_spec.rb +73 -0
- data/spec/install/gems/win32_spec.rb +26 -0
- data/spec/install/gemspec_spec.rb +108 -0
- data/spec/install/git_spec.rb +571 -0
- data/spec/install/invalid_spec.rb +17 -0
- data/spec/install/path_spec.rb +353 -0
- data/spec/install/upgrade_spec.rb +26 -0
- data/spec/lock/git_spec.rb +35 -0
- data/spec/lock/lockfile_spec.rb +683 -0
- data/spec/other/check_spec.rb +221 -0
- data/spec/other/clean_spec.rb +202 -0
- data/spec/other/config_spec.rb +40 -0
- data/spec/other/console_spec.rb +54 -0
- data/spec/other/exec_spec.rb +241 -0
- data/spec/other/ext_spec.rb +16 -0
- data/spec/other/gem_helper_spec.rb +128 -0
- data/spec/other/help_spec.rb +38 -0
- data/spec/other/init_spec.rb +40 -0
- data/spec/other/newgem_spec.rb +24 -0
- data/spec/other/open_spec.rb +35 -0
- data/spec/other/show_spec.rb +82 -0
- data/spec/pack/gems_spec.rb +54 -0
- data/spec/quality_spec.rb +58 -0
- data/spec/resolver/basic_spec.rb +20 -0
- data/spec/resolver/platform_spec.rb +82 -0
- data/spec/runtime/executable_spec.rb +110 -0
- data/spec/runtime/load_spec.rb +107 -0
- data/spec/runtime/platform_spec.rb +90 -0
- data/spec/runtime/require_spec.rb +231 -0
- data/spec/runtime/setup_spec.rb +688 -0
- data/spec/runtime/with_clean_env_spec.rb +15 -0
- data/spec/spec_helper.rb +85 -0
- data/spec/support/artifice/endpoint.rb +50 -0
- data/spec/support/artifice/endpoint_fallback.rb +22 -0
- data/spec/support/artifice/endpoint_marshal_fail.rb +11 -0
- data/spec/support/artifice/endpoint_redirect.rb +11 -0
- data/spec/support/builders.rb +574 -0
- data/spec/support/fakeweb/rack-1.0.0.marshal +2 -0
- data/spec/support/fakeweb/windows.rb +23 -0
- data/spec/support/helpers.rb +246 -0
- data/spec/support/indexes.rb +112 -0
- data/spec/support/matchers.rb +89 -0
- data/spec/support/path.rb +73 -0
- data/spec/support/platforms.rb +53 -0
- data/spec/support/ruby_ext.rb +20 -0
- data/spec/support/rubygems_ext.rb +35 -0
- data/spec/support/rubygems_hax/platform.rb +11 -0
- data/spec/support/sudo.rb +21 -0
- data/spec/update/gems_spec.rb +121 -0
- data/spec/update/git_spec.rb +196 -0
- data/spec/update/source_spec.rb +51 -0
- metadata +294 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Bundler.load" do
|
|
4
|
+
before :each do
|
|
5
|
+
system_gems "rack-1.0.0"
|
|
6
|
+
# clear memoized method results
|
|
7
|
+
# TODO: Don't reset internal ivars
|
|
8
|
+
Bundler.instance_eval do
|
|
9
|
+
@load = nil
|
|
10
|
+
@runtime = nil
|
|
11
|
+
@definition = nil
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "with a gemfile" do
|
|
16
|
+
before(:each) do
|
|
17
|
+
gemfile <<-G
|
|
18
|
+
source "file://#{gem_repo1}"
|
|
19
|
+
gem "rack"
|
|
20
|
+
G
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "provides a list of the env dependencies" do
|
|
24
|
+
Bundler.load.dependencies.should have_dep("rack", ">= 0")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "provides a list of the resolved gems" do
|
|
28
|
+
Bundler.load.gems.should have_gem("rack-1.0.0", "bundler-#{Bundler::VERSION}")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "ignores blank BUNDLE_GEMFILEs" do
|
|
32
|
+
lambda {
|
|
33
|
+
ENV['BUNDLE_GEMFILE'] = ""
|
|
34
|
+
Bundler.load
|
|
35
|
+
}.should_not raise_error(Bundler::GemfileNotFound)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "without a gemfile" do
|
|
41
|
+
it "raises an exception if the default gemfile is not found" do
|
|
42
|
+
lambda {
|
|
43
|
+
Bundler.load
|
|
44
|
+
}.should raise_error(Bundler::GemfileNotFound, /could not locate gemfile/i)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "raises an exception if a specified gemfile is not found" do
|
|
48
|
+
lambda {
|
|
49
|
+
ENV['BUNDLE_GEMFILE'] = "omg.rb"
|
|
50
|
+
Bundler.load
|
|
51
|
+
}.should raise_error(Bundler::GemfileNotFound, /omg\.rb/)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "does not find a Gemfile above the testing directory" do
|
|
55
|
+
bundler_gemfile = tmp.join("../Gemfile")
|
|
56
|
+
unless File.exists?(bundler_gemfile)
|
|
57
|
+
FileUtils.touch(bundler_gemfile)
|
|
58
|
+
@remove_bundler_gemfile = true
|
|
59
|
+
end
|
|
60
|
+
begin
|
|
61
|
+
lambda { Bundler.load }.should raise_error(Bundler::GemfileNotFound)
|
|
62
|
+
ensure
|
|
63
|
+
bundler_gemfile.rmtree if @remove_bundler_gemfile
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "when called twice" do
|
|
70
|
+
it "doesn't try to load the runtime twice" do
|
|
71
|
+
system_gems "rack-1.0.0", "activesupport-2.3.5"
|
|
72
|
+
gemfile <<-G
|
|
73
|
+
gem "rack"
|
|
74
|
+
gem "activesupport", :group => :test
|
|
75
|
+
G
|
|
76
|
+
|
|
77
|
+
ruby <<-RUBY
|
|
78
|
+
require "bundler"
|
|
79
|
+
Bundler.setup :default
|
|
80
|
+
Bundler.require :default
|
|
81
|
+
puts RACK
|
|
82
|
+
begin
|
|
83
|
+
require "activesupport"
|
|
84
|
+
rescue LoadError
|
|
85
|
+
puts "no activesupport"
|
|
86
|
+
end
|
|
87
|
+
RUBY
|
|
88
|
+
|
|
89
|
+
out.split("\n").should == ["1.0.0", "no activesupport"]
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe "not hurting brittle rubygems" do
|
|
94
|
+
it "does not inject #source into the generated YAML of the gem specs" do
|
|
95
|
+
system_gems "activerecord-2.3.2", "activesupport-2.3.2"
|
|
96
|
+
gemfile <<-G
|
|
97
|
+
gem "activerecord"
|
|
98
|
+
G
|
|
99
|
+
|
|
100
|
+
Bundler.load.specs.each do |spec|
|
|
101
|
+
spec.to_yaml.should_not =~ /^\s+source:/
|
|
102
|
+
spec.to_yaml.should_not =~ /^\s+groups:/
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Bundler.setup with multi platform stuff" do
|
|
4
|
+
it "raises a friendly error when gems are missing locally" do
|
|
5
|
+
gemfile <<-G
|
|
6
|
+
source "file://#{gem_repo1}"
|
|
7
|
+
gem "rack"
|
|
8
|
+
G
|
|
9
|
+
|
|
10
|
+
lockfile <<-G
|
|
11
|
+
GEM
|
|
12
|
+
remote: file:#{gem_repo1}/
|
|
13
|
+
specs:
|
|
14
|
+
rack (1.0)
|
|
15
|
+
|
|
16
|
+
PLATFORMS
|
|
17
|
+
#{local_tag}
|
|
18
|
+
|
|
19
|
+
DEPENDENCIES
|
|
20
|
+
rack
|
|
21
|
+
G
|
|
22
|
+
|
|
23
|
+
ruby <<-R
|
|
24
|
+
begin
|
|
25
|
+
require 'bundler'
|
|
26
|
+
Bundler.setup
|
|
27
|
+
rescue Bundler::GemNotFound => e
|
|
28
|
+
puts "WIN"
|
|
29
|
+
end
|
|
30
|
+
R
|
|
31
|
+
|
|
32
|
+
out.should == "WIN"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "will resolve correctly on the current platform when the lockfile was targetted for a different one" do
|
|
36
|
+
lockfile <<-G
|
|
37
|
+
GEM
|
|
38
|
+
remote: file:#{gem_repo1}/
|
|
39
|
+
specs:
|
|
40
|
+
nokogiri (1.4.2-java)
|
|
41
|
+
weakling (= 0.0.3)
|
|
42
|
+
weakling (0.0.3)
|
|
43
|
+
|
|
44
|
+
PLATFORMS
|
|
45
|
+
java
|
|
46
|
+
|
|
47
|
+
DEPENDENCIES
|
|
48
|
+
nokogiri
|
|
49
|
+
G
|
|
50
|
+
|
|
51
|
+
system_gems "nokogiri-1.4.2"
|
|
52
|
+
|
|
53
|
+
simulate_platform "x86-darwin-10"
|
|
54
|
+
gemfile <<-G
|
|
55
|
+
source "file://#{gem_repo1}"
|
|
56
|
+
gem "nokogiri"
|
|
57
|
+
G
|
|
58
|
+
|
|
59
|
+
should_be_installed "nokogiri 1.4.2"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "will add the resolve for the current platform" do
|
|
63
|
+
lockfile <<-G
|
|
64
|
+
GEM
|
|
65
|
+
remote: file:#{gem_repo1}/
|
|
66
|
+
specs:
|
|
67
|
+
nokogiri (1.4.2-java)
|
|
68
|
+
weakling (= 0.0.3)
|
|
69
|
+
weakling (0.0.3)
|
|
70
|
+
|
|
71
|
+
PLATFORMS
|
|
72
|
+
java
|
|
73
|
+
|
|
74
|
+
DEPENDENCIES
|
|
75
|
+
nokogiri
|
|
76
|
+
G
|
|
77
|
+
|
|
78
|
+
system_gems "nokogiri-1.4.2", "platform_specific-1.0-x86-darwin-100"
|
|
79
|
+
|
|
80
|
+
simulate_platform "x86-darwin-100"
|
|
81
|
+
|
|
82
|
+
gemfile <<-G
|
|
83
|
+
source "file://#{gem_repo1}"
|
|
84
|
+
gem "nokogiri"
|
|
85
|
+
gem "platform_specific"
|
|
86
|
+
G
|
|
87
|
+
|
|
88
|
+
should_be_installed "nokogiri 1.4.2", "platform_specific 1.0 x86-darwin-100"
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Bundler.require" do
|
|
4
|
+
before :each do
|
|
5
|
+
build_lib "one", "1.0.0" do |s|
|
|
6
|
+
s.write "lib/baz.rb", "puts 'baz'"
|
|
7
|
+
s.write "lib/qux.rb", "puts 'qux'"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
build_lib "two", "1.0.0" do |s|
|
|
11
|
+
s.write "lib/two.rb", "puts 'two'"
|
|
12
|
+
s.add_dependency "three", "= 1.0.0"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
build_lib "three", "1.0.0" do |s|
|
|
16
|
+
s.write "lib/three.rb", "puts 'three'"
|
|
17
|
+
s.add_dependency "seven", "= 1.0.0"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
build_lib "four", "1.0.0" do |s|
|
|
21
|
+
s.write "lib/four.rb", "puts 'four'"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
build_lib "five", "1.0.0", :no_default => true do |s|
|
|
25
|
+
s.write "lib/mofive.rb", "puts 'five'"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
build_lib "six", "1.0.0" do |s|
|
|
29
|
+
s.write "lib/six.rb", "puts 'six'"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
build_lib "seven", "1.0.0" do |s|
|
|
33
|
+
s.write "lib/seven.rb", "puts 'seven'"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
gemfile <<-G
|
|
37
|
+
path "#{lib_path}"
|
|
38
|
+
gem "one", :group => :bar, :require => %w(baz qux)
|
|
39
|
+
gem "two"
|
|
40
|
+
gem "three", :group => :not
|
|
41
|
+
gem "four", :require => false
|
|
42
|
+
gem "five"
|
|
43
|
+
gem "six", :group => "string"
|
|
44
|
+
gem "seven", :group => :not
|
|
45
|
+
G
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "requires the gems" do
|
|
49
|
+
# default group
|
|
50
|
+
run "Bundler.require"
|
|
51
|
+
check out.should == "two"
|
|
52
|
+
|
|
53
|
+
# specific group
|
|
54
|
+
run "Bundler.require(:bar)"
|
|
55
|
+
check out.should == "baz\nqux"
|
|
56
|
+
|
|
57
|
+
# default and specific group
|
|
58
|
+
run "Bundler.require(:default, :bar)"
|
|
59
|
+
check out.should == "baz\nqux\ntwo"
|
|
60
|
+
|
|
61
|
+
# specific group given as a string
|
|
62
|
+
run "Bundler.require('bar')"
|
|
63
|
+
check out.should == "baz\nqux"
|
|
64
|
+
|
|
65
|
+
# specific group declared as a string
|
|
66
|
+
run "Bundler.require(:string)"
|
|
67
|
+
check out.should == "six"
|
|
68
|
+
|
|
69
|
+
# required in resolver order instead of gemfile order
|
|
70
|
+
run("Bundler.require(:not)")
|
|
71
|
+
out.split("\n").sort.should == ['seven', 'three']
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "allows requiring gems with non standard names explicitly" do
|
|
75
|
+
run "Bundler.require ; require 'mofive'"
|
|
76
|
+
out.should == "two\nfive"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "raises an exception if a require is specified but the file does not exist" do
|
|
80
|
+
gemfile <<-G
|
|
81
|
+
path "#{lib_path}"
|
|
82
|
+
gem "two", :require => 'fail'
|
|
83
|
+
G
|
|
84
|
+
|
|
85
|
+
run <<-R
|
|
86
|
+
begin
|
|
87
|
+
Bundler.require
|
|
88
|
+
rescue LoadError => e
|
|
89
|
+
puts e.message
|
|
90
|
+
end
|
|
91
|
+
R
|
|
92
|
+
out.should == 'no such file to load -- fail'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe "using bundle exec" do
|
|
96
|
+
it "requires the locked gems" do
|
|
97
|
+
bundle "exec ruby -e 'Bundler.require'"
|
|
98
|
+
check out.should == "two"
|
|
99
|
+
|
|
100
|
+
bundle "exec ruby -e 'Bundler.require(:bar)'"
|
|
101
|
+
check out.should == "baz\nqux"
|
|
102
|
+
|
|
103
|
+
bundle "exec ruby -e 'Bundler.require(:default, :bar)'"
|
|
104
|
+
out.should == "baz\nqux\ntwo"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "order" do
|
|
109
|
+
before(:each) do
|
|
110
|
+
build_lib "one", "1.0.0" do |s|
|
|
111
|
+
s.write "lib/one.rb", <<-ONE
|
|
112
|
+
if defined?(Two)
|
|
113
|
+
Two.two
|
|
114
|
+
else
|
|
115
|
+
puts "two_not_loaded"
|
|
116
|
+
end
|
|
117
|
+
puts 'one'
|
|
118
|
+
ONE
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
build_lib "two", "1.0.0" do |s|
|
|
122
|
+
s.write "lib/two.rb", <<-TWO
|
|
123
|
+
module Two
|
|
124
|
+
def self.two
|
|
125
|
+
puts 'module_two'
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
puts 'two'
|
|
129
|
+
TWO
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "works when the gems are in the Gemfile in the correct order" do
|
|
134
|
+
gemfile <<-G
|
|
135
|
+
path "#{lib_path}"
|
|
136
|
+
gem "two"
|
|
137
|
+
gem "one"
|
|
138
|
+
G
|
|
139
|
+
|
|
140
|
+
run "Bundler.require"
|
|
141
|
+
check out.should == "two\nmodule_two\none"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe "a gem with different requires for different envs" do
|
|
145
|
+
before(:each) do
|
|
146
|
+
build_gem "multi_gem", :to_system => true do |s|
|
|
147
|
+
s.write "lib/one.rb", "puts 'ONE'"
|
|
148
|
+
s.write "lib/two.rb", "puts 'TWO'"
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
install_gemfile <<-G
|
|
152
|
+
gem "multi_gem", :require => "one", :group => :one
|
|
153
|
+
gem "multi_gem", :require => "two", :group => :two
|
|
154
|
+
G
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "requires both with Bundler.require(both)" do
|
|
158
|
+
run "Bundler.require(:one, :two)"
|
|
159
|
+
out.should == "ONE\nTWO"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "requires one with Bundler.require(:one)" do
|
|
163
|
+
run "Bundler.require(:one)"
|
|
164
|
+
out.should == "ONE"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "requires :two with Bundler.require(:two)" do
|
|
168
|
+
run "Bundler.require(:two)"
|
|
169
|
+
out.should == "TWO"
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "fails when the gems are in the Gemfile in the wrong order" do
|
|
174
|
+
gemfile <<-G
|
|
175
|
+
path "#{lib_path}"
|
|
176
|
+
gem "one"
|
|
177
|
+
gem "two"
|
|
178
|
+
G
|
|
179
|
+
|
|
180
|
+
run "Bundler.require"
|
|
181
|
+
check out.should == "two_not_loaded\none\ntwo"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe "with busted gems" do
|
|
185
|
+
it "should be busted" do
|
|
186
|
+
build_gem "busted_require", :to_system => true do |s|
|
|
187
|
+
s.write "lib/busted_require.rb", "require 'no_such_file_omg'"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
install_gemfile <<-G
|
|
191
|
+
gem "busted_require"
|
|
192
|
+
G
|
|
193
|
+
|
|
194
|
+
run "Bundler.require", :expect_err => true
|
|
195
|
+
err.should include("no such file to load -- no_such_file_omg")
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
describe "Bundler.require with platform specific dependencies" do
|
|
202
|
+
it "does not require the gems that are pinned to other platforms" do
|
|
203
|
+
install_gemfile <<-G
|
|
204
|
+
source "file://#{gem_repo1}"
|
|
205
|
+
|
|
206
|
+
platforms :#{not_local_tag} do
|
|
207
|
+
gem "fail", :require => "omgomg"
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
gem "rack", "1.0.0"
|
|
211
|
+
G
|
|
212
|
+
|
|
213
|
+
run "Bundler.require", :expect_err => true
|
|
214
|
+
err.should be_empty
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "requires gems pinned to multiple platforms, including the current one" do
|
|
218
|
+
install_gemfile <<-G
|
|
219
|
+
source "file://#{gem_repo1}"
|
|
220
|
+
|
|
221
|
+
platforms :#{not_local_tag}, :#{local_tag} do
|
|
222
|
+
gem "rack", :require => "rack"
|
|
223
|
+
end
|
|
224
|
+
G
|
|
225
|
+
|
|
226
|
+
run "Bundler.require; puts RACK", :expect_err => true
|
|
227
|
+
|
|
228
|
+
check out.should == "1.0.0"
|
|
229
|
+
err.should be_empty
|
|
230
|
+
end
|
|
231
|
+
end
|
|
@@ -0,0 +1,688 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "Bundler.setup" do
|
|
4
|
+
describe "with no arguments" do
|
|
5
|
+
it "makes all groups available" do
|
|
6
|
+
install_gemfile <<-G
|
|
7
|
+
source "file://#{gem_repo1}"
|
|
8
|
+
gem "rack", :group => :test
|
|
9
|
+
G
|
|
10
|
+
|
|
11
|
+
ruby <<-RUBY
|
|
12
|
+
require 'rubygems'
|
|
13
|
+
require 'bundler'
|
|
14
|
+
Bundler.setup
|
|
15
|
+
|
|
16
|
+
require 'rack'
|
|
17
|
+
puts RACK
|
|
18
|
+
RUBY
|
|
19
|
+
err.should == ""
|
|
20
|
+
out.should == "1.0.0"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "when called with groups" do
|
|
25
|
+
before(:each) do
|
|
26
|
+
install_gemfile <<-G
|
|
27
|
+
source "file://#{gem_repo1}"
|
|
28
|
+
gem "rack", :group => :test
|
|
29
|
+
G
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "doesn't make all groups available" do
|
|
33
|
+
ruby <<-RUBY
|
|
34
|
+
require 'rubygems'
|
|
35
|
+
require 'bundler'
|
|
36
|
+
Bundler.setup(:default)
|
|
37
|
+
|
|
38
|
+
begin
|
|
39
|
+
require 'rack'
|
|
40
|
+
rescue LoadError
|
|
41
|
+
puts "WIN"
|
|
42
|
+
end
|
|
43
|
+
RUBY
|
|
44
|
+
err.should == ""
|
|
45
|
+
out.should == "WIN"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "leaves all groups available if they were already" do
|
|
49
|
+
ruby <<-RUBY
|
|
50
|
+
require 'rubygems'
|
|
51
|
+
require 'bundler'
|
|
52
|
+
Bundler.setup
|
|
53
|
+
Bundler.setup(:default)
|
|
54
|
+
|
|
55
|
+
require 'rack'
|
|
56
|
+
puts RACK
|
|
57
|
+
RUBY
|
|
58
|
+
err.should == ""
|
|
59
|
+
out.should == "1.0.0"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "raises if the Gemfile was not yet installed" do
|
|
64
|
+
gemfile <<-G
|
|
65
|
+
source "file://#{gem_repo1}"
|
|
66
|
+
gem "rack"
|
|
67
|
+
G
|
|
68
|
+
|
|
69
|
+
ruby <<-R
|
|
70
|
+
require 'rubygems'
|
|
71
|
+
require 'bundler'
|
|
72
|
+
|
|
73
|
+
begin
|
|
74
|
+
Bundler.setup
|
|
75
|
+
puts "FAIL"
|
|
76
|
+
rescue Bundler::GemNotFound
|
|
77
|
+
puts "WIN"
|
|
78
|
+
end
|
|
79
|
+
R
|
|
80
|
+
|
|
81
|
+
out.should == "WIN"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "doesn't create a Gemfile.lock if the setup fails" do
|
|
85
|
+
gemfile <<-G
|
|
86
|
+
source "file://#{gem_repo1}"
|
|
87
|
+
gem "rack"
|
|
88
|
+
G
|
|
89
|
+
|
|
90
|
+
ruby <<-R, :expect_err => true
|
|
91
|
+
require 'rubygems'
|
|
92
|
+
require 'bundler'
|
|
93
|
+
|
|
94
|
+
Bundler.setup
|
|
95
|
+
R
|
|
96
|
+
|
|
97
|
+
bundled_app("Gemfile.lock").should_not exist
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "doesn't change the Gemfile.lock if the setup fails" do
|
|
101
|
+
install_gemfile <<-G
|
|
102
|
+
source "file://#{gem_repo1}"
|
|
103
|
+
gem "rack"
|
|
104
|
+
G
|
|
105
|
+
|
|
106
|
+
lockfile = File.read(bundled_app("Gemfile.lock"))
|
|
107
|
+
|
|
108
|
+
gemfile <<-G
|
|
109
|
+
source "file://#{gem_repo1}"
|
|
110
|
+
gem "rack"
|
|
111
|
+
gem "nosuchgem", "10.0"
|
|
112
|
+
G
|
|
113
|
+
|
|
114
|
+
ruby <<-R, :expect_err => true
|
|
115
|
+
require 'rubygems'
|
|
116
|
+
require 'bundler'
|
|
117
|
+
|
|
118
|
+
Bundler.setup
|
|
119
|
+
R
|
|
120
|
+
|
|
121
|
+
File.read(bundled_app("Gemfile.lock")).should == lockfile
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "makes a Gemfile.lock if setup succeeds" do
|
|
125
|
+
install_gemfile <<-G
|
|
126
|
+
source "file://#{gem_repo1}"
|
|
127
|
+
gem "rack"
|
|
128
|
+
G
|
|
129
|
+
|
|
130
|
+
File.read(bundled_app("Gemfile.lock"))
|
|
131
|
+
|
|
132
|
+
FileUtils.rm(bundled_app("Gemfile.lock"))
|
|
133
|
+
|
|
134
|
+
run "1"
|
|
135
|
+
bundled_app("Gemfile.lock").should exist
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "uses BUNDLE_GEMFILE to locate the gemfile if present" do
|
|
139
|
+
gemfile <<-G
|
|
140
|
+
source "file://#{gem_repo1}"
|
|
141
|
+
gem "rack"
|
|
142
|
+
G
|
|
143
|
+
|
|
144
|
+
gemfile bundled_app('4realz'), <<-G
|
|
145
|
+
source "file://#{gem_repo1}"
|
|
146
|
+
gem "activesupport", "2.3.5"
|
|
147
|
+
G
|
|
148
|
+
|
|
149
|
+
ENV['BUNDLE_GEMFILE'] = bundled_app('4realz').to_s
|
|
150
|
+
bundle :install
|
|
151
|
+
|
|
152
|
+
should_be_installed "activesupport 2.3.5"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "prioritizes gems in BUNDLE_PATH over gems in GEM_HOME" do
|
|
156
|
+
ENV['BUNDLE_PATH'] = bundled_app('.bundle').to_s
|
|
157
|
+
install_gemfile <<-G
|
|
158
|
+
source "file://#{gem_repo1}"
|
|
159
|
+
gem "rack", "1.0.0"
|
|
160
|
+
G
|
|
161
|
+
|
|
162
|
+
build_gem "rack", "1.0", :to_system => true do |s|
|
|
163
|
+
s.write "lib/rack.rb", "RACK = 'FAIL'"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
should_be_installed "rack 1.0.0"
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
describe "crippling rubygems" do
|
|
170
|
+
describe "by replacing #gem" do
|
|
171
|
+
before :each do
|
|
172
|
+
install_gemfile <<-G
|
|
173
|
+
source "file://#{gem_repo1}"
|
|
174
|
+
gem "rack", "0.9.1"
|
|
175
|
+
G
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "replaces #gem but raises when the gem is missing" do
|
|
179
|
+
run <<-R
|
|
180
|
+
begin
|
|
181
|
+
gem "activesupport"
|
|
182
|
+
puts "FAIL"
|
|
183
|
+
rescue LoadError
|
|
184
|
+
puts "WIN"
|
|
185
|
+
end
|
|
186
|
+
R
|
|
187
|
+
|
|
188
|
+
out.should == "WIN"
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "version_requirement is now deprecated in rubygems 1.4.0+ when gem is missing" do
|
|
192
|
+
run <<-R, :expect_err => true
|
|
193
|
+
begin
|
|
194
|
+
gem "activesupport"
|
|
195
|
+
puts "FAIL"
|
|
196
|
+
rescue LoadError
|
|
197
|
+
puts "WIN"
|
|
198
|
+
end
|
|
199
|
+
R
|
|
200
|
+
|
|
201
|
+
err.should be_empty
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "replaces #gem but raises when the version is wrong" do
|
|
205
|
+
run <<-R
|
|
206
|
+
begin
|
|
207
|
+
gem "rack", "1.0.0"
|
|
208
|
+
puts "FAIL"
|
|
209
|
+
rescue LoadError
|
|
210
|
+
puts "WIN"
|
|
211
|
+
end
|
|
212
|
+
R
|
|
213
|
+
|
|
214
|
+
out.should == "WIN"
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "version_requirement is now deprecated in rubygesm 1.4.0+ when the version is wrong" do
|
|
218
|
+
run <<-R, :expect_err => true
|
|
219
|
+
begin
|
|
220
|
+
gem "rack", "1.0.0"
|
|
221
|
+
puts "FAIL"
|
|
222
|
+
rescue LoadError
|
|
223
|
+
puts "WIN"
|
|
224
|
+
end
|
|
225
|
+
R
|
|
226
|
+
|
|
227
|
+
err.should be_empty
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
describe "by hiding system gems" do
|
|
232
|
+
before :each do
|
|
233
|
+
system_gems "activesupport-2.3.5"
|
|
234
|
+
install_gemfile <<-G
|
|
235
|
+
source "file://#{gem_repo1}"
|
|
236
|
+
gem "yard"
|
|
237
|
+
G
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "removes system gems from Gem.source_index" do
|
|
241
|
+
run "require 'yard'"
|
|
242
|
+
out.should == "bundler-#{Bundler::VERSION}\nyard-1.0"
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
context "when the ruby stdlib is a substring of Gem.path" do
|
|
246
|
+
it "does not reject the stdlib from $LOAD_PATH" do
|
|
247
|
+
substring = "/" + $LOAD_PATH.find{|p| p =~ /vendor_ruby/ }.split("/")[2]
|
|
248
|
+
run "puts 'worked!'", :env => {"GEM_PATH" => substring}
|
|
249
|
+
out.should == "worked!"
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
describe "with paths" do
|
|
256
|
+
it "activates the gems in the path source" do
|
|
257
|
+
system_gems "rack-1.0.0"
|
|
258
|
+
|
|
259
|
+
build_lib "rack", "1.0.0" do |s|
|
|
260
|
+
s.write "lib/rack.rb", "puts 'WIN'"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
gemfile <<-G
|
|
264
|
+
path "#{lib_path('rack-1.0.0')}"
|
|
265
|
+
source "file://#{gem_repo1}"
|
|
266
|
+
gem "rack"
|
|
267
|
+
G
|
|
268
|
+
|
|
269
|
+
run "require 'rack'"
|
|
270
|
+
out.should == "WIN"
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
describe "with git" do
|
|
275
|
+
before do
|
|
276
|
+
build_git "rack", "1.0.0"
|
|
277
|
+
|
|
278
|
+
gemfile <<-G
|
|
279
|
+
gem "rack", :git => "#{lib_path('rack-1.0.0')}"
|
|
280
|
+
G
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "provides a useful exception when the git repo is not checked out yet" do
|
|
284
|
+
run "1", :expect_err => true
|
|
285
|
+
err.should include("#{lib_path('rack-1.0.0')} (at master) is not checked out. Please run `bundle install`")
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
it "does not hit the git binary if the lockfile is available and up to date" do
|
|
289
|
+
bundle "install"
|
|
290
|
+
|
|
291
|
+
break_git!
|
|
292
|
+
|
|
293
|
+
ruby <<-R
|
|
294
|
+
require 'rubygems'
|
|
295
|
+
require 'bundler'
|
|
296
|
+
|
|
297
|
+
begin
|
|
298
|
+
Bundler.setup
|
|
299
|
+
puts "WIN"
|
|
300
|
+
rescue Exception => e
|
|
301
|
+
puts "FAIL"
|
|
302
|
+
end
|
|
303
|
+
R
|
|
304
|
+
|
|
305
|
+
out.should == "WIN"
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
it "provides a good exception if the lockfile is unavailable" do
|
|
309
|
+
bundle "install"
|
|
310
|
+
|
|
311
|
+
FileUtils.rm(bundled_app("Gemfile.lock"))
|
|
312
|
+
|
|
313
|
+
break_git!
|
|
314
|
+
|
|
315
|
+
ruby <<-R
|
|
316
|
+
require "rubygems"
|
|
317
|
+
require "bundler"
|
|
318
|
+
|
|
319
|
+
begin
|
|
320
|
+
Bundler.setup
|
|
321
|
+
puts "FAIL"
|
|
322
|
+
rescue Bundler::GitError => e
|
|
323
|
+
puts e.message
|
|
324
|
+
end
|
|
325
|
+
R
|
|
326
|
+
|
|
327
|
+
run "puts 'FAIL'", :expect_err => true
|
|
328
|
+
|
|
329
|
+
err.should_not include "This is not the git you are looking for"
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
it "works even when the cache directory has been deleted" do
|
|
333
|
+
bundle "install --path vendor/bundle"
|
|
334
|
+
FileUtils.rm_rf vendored_gems('cache')
|
|
335
|
+
should_be_installed "rack 1.0.0"
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
it "does not randomly change the path when specifying --path and the bundle directory becomes read only" do
|
|
339
|
+
begin
|
|
340
|
+
bundle "install --path vendor/bundle"
|
|
341
|
+
|
|
342
|
+
Dir["**/*"].each do |f|
|
|
343
|
+
File.directory?(f) ?
|
|
344
|
+
File.chmod(0555, f) :
|
|
345
|
+
File.chmod(0444, f)
|
|
346
|
+
end
|
|
347
|
+
should_be_installed "rack 1.0.0"
|
|
348
|
+
ensure
|
|
349
|
+
Dir["**/*"].each do |f|
|
|
350
|
+
File.directory?(f) ?
|
|
351
|
+
File.chmod(0755, f) :
|
|
352
|
+
File.chmod(0644, f)
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
describe "when excluding groups" do
|
|
359
|
+
it "doesn't change the resolve if --without is used" do
|
|
360
|
+
install_gemfile <<-G, :without => :rails
|
|
361
|
+
source "file://#{gem_repo1}"
|
|
362
|
+
gem "activesupport"
|
|
363
|
+
|
|
364
|
+
group :rails do
|
|
365
|
+
gem "rails", "2.3.2"
|
|
366
|
+
end
|
|
367
|
+
G
|
|
368
|
+
|
|
369
|
+
install_gems "activesupport-2.3.5"
|
|
370
|
+
|
|
371
|
+
should_be_installed "activesupport 2.3.2", :groups => :default
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it "remembers --without and does not bail on bare Bundler.setup" do
|
|
375
|
+
install_gemfile <<-G, :without => :rails
|
|
376
|
+
source "file://#{gem_repo1}"
|
|
377
|
+
gem "activesupport"
|
|
378
|
+
|
|
379
|
+
group :rails do
|
|
380
|
+
gem "rails", "2.3.2"
|
|
381
|
+
end
|
|
382
|
+
G
|
|
383
|
+
|
|
384
|
+
install_gems "activesupport-2.3.5"
|
|
385
|
+
|
|
386
|
+
should_be_installed "activesupport 2.3.2"
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
it "remembers --without and does not include groups passed to Bundler.setup" do
|
|
390
|
+
install_gemfile <<-G, :without => :rails
|
|
391
|
+
source "file://#{gem_repo1}"
|
|
392
|
+
gem "activesupport"
|
|
393
|
+
|
|
394
|
+
group :rack do
|
|
395
|
+
gem "rack"
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
group :rails do
|
|
399
|
+
gem "rails", "2.3.2"
|
|
400
|
+
end
|
|
401
|
+
G
|
|
402
|
+
|
|
403
|
+
should_not_be_installed "activesupport 2.3.2", :groups => :rack
|
|
404
|
+
should_be_installed "rack 1.0.0", :groups => :rack
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
# Unfortunately, gem_prelude does not record the information about
|
|
409
|
+
# activated gems, so this test cannot work on 1.9 :(
|
|
410
|
+
if RUBY_VERSION < "1.9"
|
|
411
|
+
describe "preactivated gems" do
|
|
412
|
+
it "raises an exception if a pre activated gem conflicts with the bundle" do
|
|
413
|
+
system_gems "thin-1.0", "rack-1.0.0"
|
|
414
|
+
build_gem "thin", "1.1", :to_system => true do |s|
|
|
415
|
+
s.add_dependency "rack"
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
gemfile <<-G
|
|
419
|
+
gem "thin", "1.0"
|
|
420
|
+
G
|
|
421
|
+
|
|
422
|
+
ruby <<-R
|
|
423
|
+
require 'rubygems'
|
|
424
|
+
gem "thin"
|
|
425
|
+
require 'bundler'
|
|
426
|
+
begin
|
|
427
|
+
Bundler.setup
|
|
428
|
+
puts "FAIL"
|
|
429
|
+
rescue Gem::LoadError => e
|
|
430
|
+
puts e.message
|
|
431
|
+
end
|
|
432
|
+
R
|
|
433
|
+
|
|
434
|
+
out.should == "You have already activated thin 1.1, but your Gemfile requires thin 1.0. Consider using bundle exec."
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
it "version_requirement is now deprecated in rubygems 1.4.0+" do
|
|
438
|
+
system_gems "thin-1.0", "rack-1.0.0"
|
|
439
|
+
build_gem "thin", "1.1", :to_system => true do |s|
|
|
440
|
+
s.add_dependency "rack"
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
gemfile <<-G
|
|
444
|
+
gem "thin", "1.0"
|
|
445
|
+
G
|
|
446
|
+
|
|
447
|
+
ruby <<-R, :expect_err => true
|
|
448
|
+
require 'rubygems'
|
|
449
|
+
gem "thin"
|
|
450
|
+
require 'bundler'
|
|
451
|
+
begin
|
|
452
|
+
Bundler.setup
|
|
453
|
+
puts "FAIL"
|
|
454
|
+
rescue Gem::LoadError => e
|
|
455
|
+
puts e.message
|
|
456
|
+
end
|
|
457
|
+
R
|
|
458
|
+
|
|
459
|
+
err.should be_empty
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
# Rubygems returns loaded_from as a string
|
|
465
|
+
it "has loaded_from as a string on all specs" do
|
|
466
|
+
build_git "foo"
|
|
467
|
+
build_git "no-gemspec", :gemspec => false
|
|
468
|
+
|
|
469
|
+
install_gemfile <<-G
|
|
470
|
+
source "file://#{gem_repo1}"
|
|
471
|
+
gem "rack"
|
|
472
|
+
gem "foo", :git => "#{lib_path('foo-1.0')}"
|
|
473
|
+
gem "no-gemspec", "1.0", :git => "#{lib_path('no-gemspec-1.0')}"
|
|
474
|
+
G
|
|
475
|
+
|
|
476
|
+
run <<-R
|
|
477
|
+
Gem.loaded_specs.each do |n, s|
|
|
478
|
+
puts "FAIL" unless String === s.loaded_from
|
|
479
|
+
end
|
|
480
|
+
R
|
|
481
|
+
|
|
482
|
+
out.should be_empty
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
it "ignores empty gem paths" do
|
|
486
|
+
install_gemfile <<-G
|
|
487
|
+
source "file://#{gem_repo1}"
|
|
488
|
+
gem "rack"
|
|
489
|
+
G
|
|
490
|
+
|
|
491
|
+
ENV["GEM_HOME"] = ""
|
|
492
|
+
bundle %{exec ruby -e "require 'set'"}
|
|
493
|
+
|
|
494
|
+
err.should be_empty
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
it "should prepend gemspec require paths to $LOAD_PATH in order" do
|
|
498
|
+
update_repo2 do
|
|
499
|
+
build_gem("requirepaths") do |s|
|
|
500
|
+
s.write("lib/rq.rb", "puts 'yay'")
|
|
501
|
+
s.write("src/rq.rb", "puts 'nooo'")
|
|
502
|
+
s.require_paths = ["lib", "src"]
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
install_gemfile <<-G
|
|
507
|
+
source "file://#{gem_repo2}"
|
|
508
|
+
gem "requirepaths", :require => nil
|
|
509
|
+
G
|
|
510
|
+
|
|
511
|
+
run "require 'rq'"
|
|
512
|
+
out.should == "yay"
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
it "ignores Gem.refresh" do
|
|
516
|
+
system_gems "rack-1.0.0"
|
|
517
|
+
|
|
518
|
+
install_gemfile <<-G
|
|
519
|
+
source "file://#{gem_repo1}"
|
|
520
|
+
gem "activesupport"
|
|
521
|
+
G
|
|
522
|
+
|
|
523
|
+
run <<-R
|
|
524
|
+
Gem.refresh
|
|
525
|
+
puts Gem.source_index.find_name("rack").inspect
|
|
526
|
+
R
|
|
527
|
+
|
|
528
|
+
out.should == "[]"
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
describe "with git gems that don't have gemspecs" do
|
|
532
|
+
before :each do
|
|
533
|
+
build_git "no-gemspec", :gemspec => false
|
|
534
|
+
|
|
535
|
+
install_gemfile <<-G
|
|
536
|
+
gem "no-gemspec", "1.0", :git => "#{lib_path('no-gemspec-1.0')}"
|
|
537
|
+
G
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
it "loads the library via a virtual spec" do
|
|
541
|
+
run <<-R
|
|
542
|
+
require 'no-gemspec'
|
|
543
|
+
puts NOGEMSPEC
|
|
544
|
+
R
|
|
545
|
+
|
|
546
|
+
out.should == "1.0"
|
|
547
|
+
end
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
describe "with bundled and system gems" do
|
|
551
|
+
before :each do
|
|
552
|
+
system_gems "rack-1.0.0"
|
|
553
|
+
|
|
554
|
+
install_gemfile <<-G
|
|
555
|
+
source "file://#{gem_repo1}"
|
|
556
|
+
|
|
557
|
+
gem "activesupport", "2.3.5"
|
|
558
|
+
G
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
it "does not pull in system gems" do
|
|
562
|
+
run <<-R
|
|
563
|
+
require 'rubygems'
|
|
564
|
+
|
|
565
|
+
begin;
|
|
566
|
+
require 'rack'
|
|
567
|
+
rescue LoadError
|
|
568
|
+
puts 'WIN'
|
|
569
|
+
end
|
|
570
|
+
R
|
|
571
|
+
|
|
572
|
+
out.should == "WIN"
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
it "provides a gem method" do
|
|
576
|
+
run <<-R
|
|
577
|
+
gem 'activesupport'
|
|
578
|
+
require 'activesupport'
|
|
579
|
+
puts ACTIVESUPPORT
|
|
580
|
+
R
|
|
581
|
+
|
|
582
|
+
out.should == "2.3.5"
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
it "raises an exception if gem is used to invoke a system gem not in the bundle" do
|
|
586
|
+
run <<-R
|
|
587
|
+
begin
|
|
588
|
+
gem 'rack'
|
|
589
|
+
rescue LoadError => e
|
|
590
|
+
puts e.message
|
|
591
|
+
end
|
|
592
|
+
R
|
|
593
|
+
|
|
594
|
+
out.should == "rack is not part of the bundle. Add it to Gemfile."
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
it "sets GEM_HOME appropriately" do
|
|
598
|
+
run "puts ENV['GEM_HOME']"
|
|
599
|
+
out.should == default_bundle_path.to_s
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
describe "with system gems in the bundle" do
|
|
604
|
+
before :each do
|
|
605
|
+
system_gems "rack-1.0.0"
|
|
606
|
+
|
|
607
|
+
install_gemfile <<-G
|
|
608
|
+
source "file://#{gem_repo1}"
|
|
609
|
+
gem "rack", "1.0.0"
|
|
610
|
+
gem "activesupport", "2.3.5"
|
|
611
|
+
G
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
it "sets GEM_PATH appropriately" do
|
|
615
|
+
run "puts Gem.path"
|
|
616
|
+
paths = out.split("\n")
|
|
617
|
+
paths.should include(system_gem_path.to_s)
|
|
618
|
+
paths.should include(default_bundle_path.to_s)
|
|
619
|
+
end
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
describe "with a gemspec that requires other files" do
|
|
623
|
+
before :each do
|
|
624
|
+
build_git "bar", :gemspec => false do |s|
|
|
625
|
+
s.write "lib/bar/version.rb", %{BAR_VERSION = '1.0'}
|
|
626
|
+
s.write "bar.gemspec", <<-G
|
|
627
|
+
lib = File.expand_path('../lib/', __FILE__)
|
|
628
|
+
$:.unshift lib unless $:.include?(lib)
|
|
629
|
+
require 'bar/version'
|
|
630
|
+
|
|
631
|
+
Gem::Specification.new do |s|
|
|
632
|
+
s.name = 'bar'
|
|
633
|
+
s.version = BAR_VERSION
|
|
634
|
+
s.summary = 'Bar'
|
|
635
|
+
s.files = Dir["lib/**/*.rb"]
|
|
636
|
+
end
|
|
637
|
+
G
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
gemfile <<-G
|
|
641
|
+
gem "bar", :git => "#{lib_path('bar-1.0')}"
|
|
642
|
+
G
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
it "evals each gemspec in the context of its parent directory" do
|
|
646
|
+
bundle :install
|
|
647
|
+
run "require 'bar'; puts BAR"
|
|
648
|
+
out.should == "1.0"
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
it "error intelligently if the gemspec has a LoadError" do
|
|
652
|
+
update_git "bar", :gemspec => false do |s|
|
|
653
|
+
s.write "bar.gemspec", "require 'foobarbaz'"
|
|
654
|
+
end
|
|
655
|
+
bundle :install
|
|
656
|
+
out.should include("was a LoadError while evaluating bar.gemspec")
|
|
657
|
+
out.should include("foobarbaz")
|
|
658
|
+
out.should include("bar.gemspec:1")
|
|
659
|
+
out.should include("try to require a relative path") if RUBY_VERSION >= "1.9.0"
|
|
660
|
+
end
|
|
661
|
+
|
|
662
|
+
it "evals each gemspec with a binding from the top level" do
|
|
663
|
+
bundle "install"
|
|
664
|
+
|
|
665
|
+
ruby <<-RUBY
|
|
666
|
+
require 'bundler'
|
|
667
|
+
def Bundler.require(path)
|
|
668
|
+
raise "LOSE"
|
|
669
|
+
end
|
|
670
|
+
Bundler.load
|
|
671
|
+
RUBY
|
|
672
|
+
|
|
673
|
+
err.should == ""
|
|
674
|
+
out.should == ""
|
|
675
|
+
end
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
describe "when Bundler is bundled" do
|
|
679
|
+
it "doesn't blow up" do
|
|
680
|
+
install_gemfile <<-G
|
|
681
|
+
gem "bundler", :path => "#{File.expand_path("..", lib)}"
|
|
682
|
+
G
|
|
683
|
+
|
|
684
|
+
bundle %|exec ruby -e "require 'bundler'; Bundler.setup"|
|
|
685
|
+
err.should be_empty
|
|
686
|
+
end
|
|
687
|
+
end
|
|
688
|
+
end
|