bundler-maglev- 1.0.21
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/.travis.yml +32 -0
- data/CHANGELOG.md +805 -0
- data/ISSUES.md +62 -0
- data/LICENSE +23 -0
- data/README.md +29 -0
- data/Rakefile +212 -0
- data/UPGRADING.md +103 -0
- data/bin/bundle +22 -0
- data/bundler.gemspec +30 -0
- data/lib/bundler.rb +286 -0
- data/lib/bundler/capistrano.rb +11 -0
- data/lib/bundler/cli.rb +520 -0
- data/lib/bundler/definition.rb +438 -0
- data/lib/bundler/dependency.rb +134 -0
- data/lib/bundler/deployment.rb +58 -0
- data/lib/bundler/dsl.rb +257 -0
- data/lib/bundler/environment.rb +47 -0
- data/lib/bundler/gem_helper.rb +151 -0
- data/lib/bundler/gem_installer.rb +9 -0
- data/lib/bundler/gem_tasks.rb +2 -0
- data/lib/bundler/graph.rb +130 -0
- data/lib/bundler/index.rb +138 -0
- data/lib/bundler/installer.rb +97 -0
- data/lib/bundler/lazy_specification.rb +74 -0
- data/lib/bundler/lockfile_parser.rb +108 -0
- data/lib/bundler/remote_specification.rb +59 -0
- data/lib/bundler/resolver.rb +464 -0
- data/lib/bundler/rubygems_ext.rb +237 -0
- data/lib/bundler/rubygems_integration.rb +349 -0
- data/lib/bundler/runtime.rb +152 -0
- data/lib/bundler/settings.rb +115 -0
- data/lib/bundler/setup.rb +23 -0
- data/lib/bundler/shared_helpers.rb +71 -0
- data/lib/bundler/source.rb +708 -0
- data/lib/bundler/spec_set.rb +135 -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 +1 -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 +9 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +24 -0
- data/lib/bundler/ui.rb +73 -0
- data/lib/bundler/vendor/thor.rb +358 -0
- data/lib/bundler/vendor/thor/actions.rb +314 -0
- data/lib/bundler/vendor/thor/actions/create_file.rb +105 -0
- data/lib/bundler/vendor/thor/actions/create_link.rb +57 -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 +270 -0
- data/lib/bundler/vendor/thor/actions/inject_into_file.rb +109 -0
- data/lib/bundler/vendor/thor/base.rb +576 -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/group.rb +273 -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 +175 -0
- data/lib/bundler/vendor/thor/rake_compat.rb +66 -0
- data/lib/bundler/vendor/thor/runner.rb +309 -0
- data/lib/bundler/vendor/thor/shell.rb +88 -0
- data/lib/bundler/vendor/thor/shell/basic.rb +302 -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 +113 -0
- data/lib/bundler/vendor/thor/util.rb +229 -0
- data/lib/bundler/vendor/thor/version.rb +3 -0
- data/lib/bundler/vendored_thor.rb +7 -0
- data/lib/bundler/version.rb +6 -0
- data/lib/bundler/vlad.rb +11 -0
- data/man/bundle-config.ronn +90 -0
- data/man/bundle-exec.ronn +111 -0
- data/man/bundle-install.ronn +317 -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 +284 -0
- data/man/index.txt +6 -0
- data/spec/bundler/gem_helper_spec.rb +143 -0
- data/spec/cache/gems_spec.rb +230 -0
- data/spec/cache/git_spec.rb +12 -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/env_spec.rb +107 -0
- data/spec/install/gems/flex_spec.rb +313 -0
- data/spec/install/gems/groups_spec.rb +259 -0
- data/spec/install/gems/packed_spec.rb +84 -0
- data/spec/install/gems/platform_spec.rb +192 -0
- data/spec/install/gems/resolving_spec.rb +72 -0
- data/spec/install/gems/simple_case_spec.rb +770 -0
- data/spec/install/gems/sudo_spec.rb +74 -0
- data/spec/install/gems/win32_spec.rb +26 -0
- data/spec/install/gemspec_spec.rb +125 -0
- data/spec/install/git_spec.rb +570 -0
- data/spec/install/invalid_spec.rb +35 -0
- data/spec/install/path_spec.rb +405 -0
- data/spec/install/upgrade_spec.rb +26 -0
- data/spec/lock/git_spec.rb +35 -0
- data/spec/lock/lockfile_spec.rb +739 -0
- data/spec/other/check_spec.rb +221 -0
- data/spec/other/config_spec.rb +40 -0
- data/spec/other/console_spec.rb +54 -0
- data/spec/other/exec_spec.rb +248 -0
- data/spec/other/ext_spec.rb +37 -0
- data/spec/other/help_spec.rb +39 -0
- data/spec/other/init_spec.rb +40 -0
- data/spec/other/newgem_spec.rb +46 -0
- data/spec/other/open_spec.rb +35 -0
- data/spec/other/show_spec.rb +82 -0
- data/spec/quality_spec.rb +62 -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 +730 -0
- data/spec/runtime/with_clean_env_spec.rb +15 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/support/builders.rb +597 -0
- data/spec/support/helpers.rb +239 -0
- data/spec/support/indexes.rb +112 -0
- data/spec/support/matchers.rb +77 -0
- data/spec/support/path.rb +71 -0
- data/spec/support/platforms.rb +53 -0
- data/spec/support/ruby_ext.rb +20 -0
- data/spec/support/rubygems_ext.rb +37 -0
- data/spec/support/rubygems_hax/platform.rb +11 -0
- data/spec/support/sudo.rb +21 -0
- data/spec/update/gems_spec.rb +122 -0
- data/spec/update/git_spec.rb +196 -0
- data/spec/update/source_spec.rb +51 -0
- metadata +296 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "bundle install with gem sources" do
|
4
|
+
describe "install time dependencies" do
|
5
|
+
it "installs gems with implicit rake dependencies" do
|
6
|
+
install_gemfile <<-G
|
7
|
+
source "file://#{gem_repo1}"
|
8
|
+
gem "with_implicit_rake_dep"
|
9
|
+
gem "another_implicit_rake_dep"
|
10
|
+
gem "rake"
|
11
|
+
G
|
12
|
+
|
13
|
+
run <<-R
|
14
|
+
require 'implicit_rake_dep'
|
15
|
+
require 'another_implicit_rake_dep'
|
16
|
+
puts IMPLICIT_RAKE_DEP
|
17
|
+
puts ANOTHER_IMPLICIT_RAKE_DEP
|
18
|
+
R
|
19
|
+
out.should == "YES\nYES"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "installs gems with a dependency with no type" do
|
23
|
+
build_repo2
|
24
|
+
|
25
|
+
path = "#{gem_repo2}/#{Gem::MARSHAL_SPEC_DIR}/actionpack-2.3.2.gemspec.rz"
|
26
|
+
spec = Marshal.load(Gem.inflate(File.read(path)))
|
27
|
+
spec.dependencies.each do |d|
|
28
|
+
d.instance_variable_set(:@type, :fail)
|
29
|
+
end
|
30
|
+
File.open(path, 'w') do |f|
|
31
|
+
f.write Gem.deflate(Marshal.dump(spec))
|
32
|
+
end
|
33
|
+
|
34
|
+
install_gemfile <<-G
|
35
|
+
source "file://#{gem_repo2}"
|
36
|
+
gem "actionpack", "2.3.2"
|
37
|
+
G
|
38
|
+
|
39
|
+
should_be_installed "actionpack 2.3.2", "activesupport 2.3.2"
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "with crazy rubygem plugin stuff" do
|
43
|
+
it "installs plugins" do
|
44
|
+
install_gemfile <<-G
|
45
|
+
source "file://#{gem_repo1}"
|
46
|
+
gem "net_b"
|
47
|
+
G
|
48
|
+
|
49
|
+
should_be_installed "net_b 1.0"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "installs plugins depended on by other plugins" do
|
53
|
+
install_gemfile <<-G
|
54
|
+
source "file://#{gem_repo1}"
|
55
|
+
gem "net_a"
|
56
|
+
G
|
57
|
+
|
58
|
+
should_be_installed "net_a 1.0", "net_b 1.0"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "installs multiple levels of dependencies" do
|
62
|
+
install_gemfile <<-G
|
63
|
+
source "file://#{gem_repo1}"
|
64
|
+
gem "net_c"
|
65
|
+
gem "net_e"
|
66
|
+
G
|
67
|
+
|
68
|
+
should_be_installed "net_a 1.0", "net_b 1.0", "net_c 1.0", "net_d 1.0", "net_e 1.0"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,770 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "bundle install with gem sources" do
|
4
|
+
describe "the simple case" do
|
5
|
+
it "prints output and returns if no dependencies are specified" do
|
6
|
+
gemfile <<-G
|
7
|
+
source "file://#{gem_repo1}"
|
8
|
+
G
|
9
|
+
|
10
|
+
bundle :install
|
11
|
+
out.should =~ /no dependencies/
|
12
|
+
end
|
13
|
+
|
14
|
+
it "does not make a lockfile if the install fails" do
|
15
|
+
install_gemfile <<-G, :expect_err => true
|
16
|
+
raise StandardError, "FAIL"
|
17
|
+
G
|
18
|
+
|
19
|
+
err.should =~ /FAIL \(StandardError\)/
|
20
|
+
bundled_app("Gemfile.lock").should_not exist
|
21
|
+
end
|
22
|
+
|
23
|
+
it "creates a Gemfile.lock" do
|
24
|
+
install_gemfile <<-G
|
25
|
+
source "file://#{gem_repo1}"
|
26
|
+
gem "rack"
|
27
|
+
G
|
28
|
+
|
29
|
+
bundled_app('Gemfile.lock').should exist
|
30
|
+
end
|
31
|
+
|
32
|
+
it "creates lock files based on the Gemfile name" do
|
33
|
+
gemfile bundled_app('OmgFile'), <<-G
|
34
|
+
source "file://#{gem_repo1}"
|
35
|
+
gem "rack", "1.0"
|
36
|
+
G
|
37
|
+
|
38
|
+
bundle 'install --gemfile OmgFile'
|
39
|
+
|
40
|
+
bundled_app("OmgFile.lock").should exist
|
41
|
+
end
|
42
|
+
|
43
|
+
it "doesn't delete the lockfile if one already exists" do
|
44
|
+
install_gemfile <<-G
|
45
|
+
source "file://#{gem_repo1}"
|
46
|
+
gem 'rack'
|
47
|
+
G
|
48
|
+
|
49
|
+
lockfile = File.read(bundled_app("Gemfile.lock"))
|
50
|
+
|
51
|
+
install_gemfile <<-G, :expect_err => true
|
52
|
+
raise StandardError, "FAIL"
|
53
|
+
G
|
54
|
+
|
55
|
+
File.read(bundled_app("Gemfile.lock")).should == lockfile
|
56
|
+
end
|
57
|
+
|
58
|
+
it "does not touch the lockfile if nothing changed" do
|
59
|
+
install_gemfile <<-G
|
60
|
+
source "file://#{gem_repo1}"
|
61
|
+
gem "rack"
|
62
|
+
G
|
63
|
+
|
64
|
+
lambda { run '1' }.should_not change { File.mtime(bundled_app('Gemfile.lock')) }
|
65
|
+
end
|
66
|
+
|
67
|
+
it "fetches gems" do
|
68
|
+
install_gemfile <<-G
|
69
|
+
source "file://#{gem_repo1}"
|
70
|
+
gem 'rack'
|
71
|
+
G
|
72
|
+
|
73
|
+
default_bundle_path("gems/rack-1.0.0").should exist
|
74
|
+
should_be_installed("rack 1.0.0")
|
75
|
+
end
|
76
|
+
|
77
|
+
it "fetches gems when multiple versions are specified" do
|
78
|
+
install_gemfile <<-G
|
79
|
+
source "file://#{gem_repo1}"
|
80
|
+
gem 'rack', "> 0.9", "< 1.0"
|
81
|
+
G
|
82
|
+
|
83
|
+
default_bundle_path("gems/rack-0.9.1").should exist
|
84
|
+
should_be_installed("rack 0.9.1")
|
85
|
+
end
|
86
|
+
|
87
|
+
it "fetches gems when multiple versions are specified take 2" do
|
88
|
+
install_gemfile <<-G
|
89
|
+
source "file://#{gem_repo1}"
|
90
|
+
gem 'rack', "< 1.0", "> 0.9"
|
91
|
+
G
|
92
|
+
|
93
|
+
default_bundle_path("gems/rack-0.9.1").should exist
|
94
|
+
should_be_installed("rack 0.9.1")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "raises an appropriate error when gems are specified using symbols" do
|
98
|
+
status = install_gemfile(<<-G, :exitstatus => true)
|
99
|
+
source "file://#{gem_repo1}"
|
100
|
+
gem :rack
|
101
|
+
G
|
102
|
+
status.should == 4
|
103
|
+
end
|
104
|
+
|
105
|
+
it "pulls in dependencies" do
|
106
|
+
install_gemfile <<-G
|
107
|
+
source "file://#{gem_repo1}"
|
108
|
+
gem "rails"
|
109
|
+
G
|
110
|
+
|
111
|
+
should_be_installed "actionpack 2.3.2", "rails 2.3.2"
|
112
|
+
end
|
113
|
+
|
114
|
+
it "does the right version" do
|
115
|
+
install_gemfile <<-G
|
116
|
+
source "file://#{gem_repo1}"
|
117
|
+
gem "rack", "0.9.1"
|
118
|
+
G
|
119
|
+
|
120
|
+
should_be_installed "rack 0.9.1"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "does not install the development dependency" do
|
124
|
+
install_gemfile <<-G
|
125
|
+
source "file://#{gem_repo1}"
|
126
|
+
gem "with_development_dependency"
|
127
|
+
G
|
128
|
+
|
129
|
+
should_be_installed "with_development_dependency 1.0.0"
|
130
|
+
should_not_be_installed "activesupport 2.3.5"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "resolves correctly" do
|
134
|
+
install_gemfile <<-G
|
135
|
+
source "file://#{gem_repo1}"
|
136
|
+
gem "activemerchant"
|
137
|
+
gem "rails"
|
138
|
+
G
|
139
|
+
|
140
|
+
should_be_installed "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2"
|
141
|
+
end
|
142
|
+
|
143
|
+
it "activates gem correctly according to the resolved gems" do
|
144
|
+
install_gemfile <<-G
|
145
|
+
source "file://#{gem_repo1}"
|
146
|
+
gem "activesupport", "2.3.5"
|
147
|
+
G
|
148
|
+
|
149
|
+
install_gemfile <<-G
|
150
|
+
source "file://#{gem_repo1}"
|
151
|
+
gem "activemerchant"
|
152
|
+
gem "rails"
|
153
|
+
G
|
154
|
+
|
155
|
+
should_be_installed "activemerchant 1.0", "activesupport 2.3.2", "actionpack 2.3.2"
|
156
|
+
end
|
157
|
+
|
158
|
+
it "does not reinstall any gem that is already available locally" do
|
159
|
+
system_gems "activesupport-2.3.2"
|
160
|
+
|
161
|
+
build_repo2 do
|
162
|
+
build_gem "activesupport", "2.3.2" do |s|
|
163
|
+
s.write "lib/activesupport.rb", "ACTIVESUPPORT = 'fail'"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
install_gemfile <<-G
|
168
|
+
source "file://#{gem_repo2}"
|
169
|
+
gem "activerecord", "2.3.2"
|
170
|
+
G
|
171
|
+
|
172
|
+
should_be_installed "activesupport 2.3.2"
|
173
|
+
end
|
174
|
+
|
175
|
+
it "works when the gemfile specifies gems that only exist in the system" do
|
176
|
+
build_gem "foo", :to_system => true
|
177
|
+
install_gemfile <<-G
|
178
|
+
source "file://#{gem_repo1}"
|
179
|
+
gem "rack"
|
180
|
+
gem "foo"
|
181
|
+
G
|
182
|
+
|
183
|
+
should_be_installed "rack 1.0.0", "foo 1.0.0"
|
184
|
+
end
|
185
|
+
|
186
|
+
it "prioritizes local gems over remote gems" do
|
187
|
+
build_gem 'rack', '1.0.0', :to_system => true do |s|
|
188
|
+
s.add_dependency "activesupport", "2.3.5"
|
189
|
+
end
|
190
|
+
|
191
|
+
install_gemfile <<-G
|
192
|
+
source "file://#{gem_repo1}"
|
193
|
+
gem "rack"
|
194
|
+
G
|
195
|
+
|
196
|
+
should_be_installed "rack 1.0.0", "activesupport 2.3.5"
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "with a gem that installs multiple platforms" do
|
200
|
+
it "installs gems for the local platform as first choice" do
|
201
|
+
install_gemfile <<-G
|
202
|
+
source "file://#{gem_repo1}"
|
203
|
+
gem "platform_specific"
|
204
|
+
G
|
205
|
+
|
206
|
+
run "require 'platform_specific' ; puts PLATFORM_SPECIFIC"
|
207
|
+
out.should == "1.0.0 #{Gem::Platform.local}"
|
208
|
+
end
|
209
|
+
|
210
|
+
it "falls back on plain ruby" do
|
211
|
+
simulate_platform "foo-bar-baz"
|
212
|
+
install_gemfile <<-G
|
213
|
+
source "file://#{gem_repo1}"
|
214
|
+
gem "platform_specific"
|
215
|
+
G
|
216
|
+
|
217
|
+
run "require 'platform_specific' ; puts PLATFORM_SPECIFIC"
|
218
|
+
out.should == "1.0.0 RUBY"
|
219
|
+
end
|
220
|
+
|
221
|
+
it "installs gems for java" do
|
222
|
+
simulate_platform "java"
|
223
|
+
install_gemfile <<-G
|
224
|
+
source "file://#{gem_repo1}"
|
225
|
+
gem "platform_specific"
|
226
|
+
G
|
227
|
+
|
228
|
+
run "require 'platform_specific' ; puts PLATFORM_SPECIFIC"
|
229
|
+
out.should == "1.0.0 JAVA"
|
230
|
+
end
|
231
|
+
|
232
|
+
it "installs gems for windows" do
|
233
|
+
simulate_platform mswin
|
234
|
+
|
235
|
+
install_gemfile <<-G
|
236
|
+
source "file://#{gem_repo1}"
|
237
|
+
gem "platform_specific"
|
238
|
+
G
|
239
|
+
|
240
|
+
run "require 'platform_specific' ; puts PLATFORM_SPECIFIC"
|
241
|
+
out.should == "1.0.0 MSWIN"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
describe "doing bundle install foo" do
|
246
|
+
before do
|
247
|
+
gemfile <<-G
|
248
|
+
source "file://#{gem_repo1}"
|
249
|
+
gem "rack"
|
250
|
+
G
|
251
|
+
end
|
252
|
+
|
253
|
+
it "works" do
|
254
|
+
bundle "install --path vendor"
|
255
|
+
should_be_installed "rack 1.0"
|
256
|
+
end
|
257
|
+
|
258
|
+
it "allows running bundle install --system without deleting foo" do
|
259
|
+
bundle "install --path vendor"
|
260
|
+
bundle "install --system"
|
261
|
+
FileUtils.rm_rf(bundled_app("vendor"))
|
262
|
+
should_be_installed "rack 1.0"
|
263
|
+
end
|
264
|
+
|
265
|
+
it "allows running bundle install --system after deleting foo" do
|
266
|
+
bundle "install --path vendor"
|
267
|
+
FileUtils.rm_rf(bundled_app("vendor"))
|
268
|
+
bundle "install --system"
|
269
|
+
should_be_installed "rack 1.0"
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
it "finds gems in multiple sources" do
|
274
|
+
build_repo2
|
275
|
+
update_repo2
|
276
|
+
|
277
|
+
install_gemfile <<-G
|
278
|
+
source "file://#{gem_repo1}"
|
279
|
+
source "file://#{gem_repo2}"
|
280
|
+
|
281
|
+
gem "activesupport", "1.2.3"
|
282
|
+
gem "rack", "1.2"
|
283
|
+
G
|
284
|
+
|
285
|
+
should_be_installed "rack 1.2", "activesupport 1.2.3"
|
286
|
+
end
|
287
|
+
|
288
|
+
it "gives a useful error if no sources are set" do
|
289
|
+
install_gemfile <<-G
|
290
|
+
gem "rack"
|
291
|
+
G
|
292
|
+
|
293
|
+
bundle :install, :expect_err => true
|
294
|
+
out.should =~ /Your Gemfile doesn't have any sources/i
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
describe "when prerelease gems are available" do
|
299
|
+
it "finds prereleases" do
|
300
|
+
install_gemfile <<-G
|
301
|
+
source "file://#{gem_repo1}"
|
302
|
+
gem "not_released"
|
303
|
+
G
|
304
|
+
should_be_installed "not_released 1.0.pre"
|
305
|
+
end
|
306
|
+
|
307
|
+
it "uses regular releases if available" do
|
308
|
+
install_gemfile <<-G
|
309
|
+
source "file://#{gem_repo1}"
|
310
|
+
gem "has_prerelease"
|
311
|
+
G
|
312
|
+
should_be_installed "has_prerelease 1.0"
|
313
|
+
end
|
314
|
+
|
315
|
+
it "uses prereleases if requested" do
|
316
|
+
install_gemfile <<-G
|
317
|
+
source "file://#{gem_repo1}"
|
318
|
+
gem "has_prerelease", "1.1.pre"
|
319
|
+
G
|
320
|
+
should_be_installed "has_prerelease 1.1.pre"
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
describe "when prerelease gems are not available" do
|
325
|
+
it "still works" do
|
326
|
+
build_repo3
|
327
|
+
install_gemfile <<-G
|
328
|
+
source "file://#{gem_repo3}"
|
329
|
+
gem "rack"
|
330
|
+
G
|
331
|
+
|
332
|
+
should_be_installed "rack 1.0"
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
describe "when BUNDLE_PATH or the global path config is set" do
|
337
|
+
before :each do
|
338
|
+
build_lib "rack", "1.0.0", :to_system => true do |s|
|
339
|
+
s.write "lib/rack.rb", "raise 'FAIL'"
|
340
|
+
end
|
341
|
+
|
342
|
+
gemfile <<-G
|
343
|
+
source "file://#{gem_repo1}"
|
344
|
+
gem "rack"
|
345
|
+
G
|
346
|
+
end
|
347
|
+
|
348
|
+
def set_bundle_path(type, location)
|
349
|
+
if type == :env
|
350
|
+
ENV["BUNDLE_PATH"] = location
|
351
|
+
elsif type == :global
|
352
|
+
bundle "config path #{location}", "no-color" => nil
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
[:env, :global].each do |type|
|
357
|
+
it "installs gems to a path if one is specified" do
|
358
|
+
set_bundle_path(type, bundled_app("vendor2").to_s)
|
359
|
+
bundle "install --path vendor/bundle"
|
360
|
+
|
361
|
+
vendored_gems("gems/rack-1.0.0").should be_directory
|
362
|
+
bundled_app("vendor2").should_not be_directory
|
363
|
+
should_be_installed "rack 1.0.0"
|
364
|
+
end
|
365
|
+
|
366
|
+
it "installs gems to BUNDLE_PATH with #{type}" do
|
367
|
+
set_bundle_path(type, bundled_app("vendor").to_s)
|
368
|
+
|
369
|
+
bundle :install
|
370
|
+
|
371
|
+
bundled_app('vendor/gems/rack-1.0.0').should be_directory
|
372
|
+
should_be_installed "rack 1.0.0"
|
373
|
+
end
|
374
|
+
|
375
|
+
it "installs gems to BUNDLE_PATH relative to root when relative" do
|
376
|
+
set_bundle_path(type, "vendor")
|
377
|
+
|
378
|
+
FileUtils.mkdir_p bundled_app('lol')
|
379
|
+
Dir.chdir(bundled_app('lol')) do
|
380
|
+
bundle :install
|
381
|
+
end
|
382
|
+
|
383
|
+
bundled_app('vendor/gems/rack-1.0.0').should be_directory
|
384
|
+
should_be_installed "rack 1.0.0"
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
it "installs gems to BUNDLE_PATH from .bundle/config" do
|
389
|
+
config "BUNDLE_PATH" => bundled_app("vendor/bundle").to_s
|
390
|
+
|
391
|
+
bundle :install
|
392
|
+
|
393
|
+
vendored_gems('gems/rack-1.0.0').should be_directory
|
394
|
+
should_be_installed "rack 1.0.0"
|
395
|
+
end
|
396
|
+
|
397
|
+
it "sets BUNDLE_PATH as the first argument to bundle install" do
|
398
|
+
bundle "install --path ./vendor/bundle"
|
399
|
+
|
400
|
+
vendored_gems('gems/rack-1.0.0').should be_directory
|
401
|
+
should_be_installed "rack 1.0.0"
|
402
|
+
end
|
403
|
+
|
404
|
+
it "disables system gems when passing a path to install" do
|
405
|
+
# This is so that vendored gems can be distributed to others
|
406
|
+
build_gem "rack", "1.1.0", :to_system => true
|
407
|
+
bundle "install --path ./vendor/bundle"
|
408
|
+
|
409
|
+
vendored_gems('gems/rack-1.0.0').should be_directory
|
410
|
+
should_be_installed "rack 1.0.0"
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
describe "when passing in a Gemfile via --gemfile" do
|
415
|
+
it "finds the gemfile" do
|
416
|
+
gemfile bundled_app("NotGemfile"), <<-G
|
417
|
+
source "file://#{gem_repo1}"
|
418
|
+
gem 'rack'
|
419
|
+
G
|
420
|
+
|
421
|
+
bundle :install, :gemfile => bundled_app("NotGemfile")
|
422
|
+
|
423
|
+
ENV['BUNDLE_GEMFILE'] = "NotGemfile"
|
424
|
+
should_be_installed "rack 1.0.0"
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
describe "when requesting a quiet install via --quiet" do
|
429
|
+
it "should be quiet if there are no warnings" do
|
430
|
+
gemfile <<-G
|
431
|
+
source "file://#{gem_repo1}"
|
432
|
+
gem 'rack'
|
433
|
+
G
|
434
|
+
|
435
|
+
bundle :install, :quiet => true
|
436
|
+
out.should == ""
|
437
|
+
end
|
438
|
+
|
439
|
+
it "should still display warnings" do
|
440
|
+
gemfile <<-G
|
441
|
+
gem 'rack'
|
442
|
+
G
|
443
|
+
|
444
|
+
bundle :install, :quiet => true
|
445
|
+
out.should =~ /doesn't have any sources/
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
describe "when disabling system gems" do
|
450
|
+
before :each do
|
451
|
+
build_gem "rack", "1.0.0", :to_system => true do |s|
|
452
|
+
s.write "lib/rack.rb", "puts 'FAIL'"
|
453
|
+
end
|
454
|
+
|
455
|
+
gemfile <<-G
|
456
|
+
source "file://#{gem_repo1}"
|
457
|
+
gem "rack"
|
458
|
+
G
|
459
|
+
end
|
460
|
+
|
461
|
+
it "behaves like bundle install vendor/bundle with --deployment" do
|
462
|
+
bundle "install"
|
463
|
+
bundle "install --deployment"
|
464
|
+
out.should include("It was installed into ./vendor/bundle")
|
465
|
+
should_be_installed "rack 1.0.0"
|
466
|
+
bundled_app("vendor/bundle").should exist
|
467
|
+
end
|
468
|
+
|
469
|
+
it "prints a warning if you try to use --disable-shared-gems" do
|
470
|
+
bundle "install --path vendor --disable-shared-gems"
|
471
|
+
out.should include "The disable-shared-gem option is no longer available"
|
472
|
+
end
|
473
|
+
|
474
|
+
it "handles paths with regex characters in them" do
|
475
|
+
dir = bundled_app("bun++dle")
|
476
|
+
dir.mkpath
|
477
|
+
|
478
|
+
Dir.chdir(dir) do
|
479
|
+
bundle "install --path vendor/bundle"
|
480
|
+
out.should include("installed into ./vendor/bundle")
|
481
|
+
end
|
482
|
+
|
483
|
+
dir.rmtree
|
484
|
+
end
|
485
|
+
|
486
|
+
["install vendor/bundle", "install --path vendor/bundle"].each do |install|
|
487
|
+
if install == "install vendor/bundle"
|
488
|
+
it "displays the deprecation warning for path as an argument to install" do
|
489
|
+
bundle install
|
490
|
+
out.should include("The path argument to `bundle install` is deprecated.")
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
it "does not use available system gems with bundle #{install}" do
|
495
|
+
bundle install
|
496
|
+
should_be_installed "rack 1.0.0"
|
497
|
+
end
|
498
|
+
|
499
|
+
it "prints a warning to let the user know what has happened with bundle #{install}" do
|
500
|
+
bundle install
|
501
|
+
out.should include("It was installed into ./vendor")
|
502
|
+
end
|
503
|
+
|
504
|
+
it "disallows #{install} --system" do
|
505
|
+
bundle "#{install} --system"
|
506
|
+
out.should include("Please choose.")
|
507
|
+
end
|
508
|
+
|
509
|
+
it "remembers to disable system gems after the first time with bundle #{install}" do
|
510
|
+
bundle install
|
511
|
+
FileUtils.rm_rf bundled_app('vendor')
|
512
|
+
bundle "install"
|
513
|
+
|
514
|
+
vendored_gems('gems/rack-1.0.0').should be_directory
|
515
|
+
should_be_installed "rack 1.0.0"
|
516
|
+
end
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
describe "when loading only the default group" do
|
521
|
+
it "should not load all groups" do
|
522
|
+
install_gemfile <<-G
|
523
|
+
source "file://#{gem_repo1}"
|
524
|
+
gem "rack"
|
525
|
+
gem "activesupport", :group => :development
|
526
|
+
G
|
527
|
+
|
528
|
+
ruby <<-R
|
529
|
+
require "bundler"
|
530
|
+
Bundler.setup :default
|
531
|
+
Bundler.require :default
|
532
|
+
puts RACK
|
533
|
+
begin
|
534
|
+
require "activesupport"
|
535
|
+
rescue LoadError
|
536
|
+
puts "no activesupport"
|
537
|
+
end
|
538
|
+
R
|
539
|
+
|
540
|
+
out.should include("1.0")
|
541
|
+
out.should include("no activesupport")
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
describe "when a gem has a YAML gemspec" do
|
546
|
+
before :each do
|
547
|
+
build_repo2 do
|
548
|
+
build_gem "yaml_spec", :gemspec => :yaml
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
it "still installs correctly" do
|
553
|
+
gemfile <<-G
|
554
|
+
source "file://#{gem_repo2}"
|
555
|
+
gem "yaml_spec"
|
556
|
+
G
|
557
|
+
bundle :install
|
558
|
+
err.should be_empty
|
559
|
+
end
|
560
|
+
|
561
|
+
it "still installs correctly when using path" do
|
562
|
+
build_lib 'yaml_spec', :gemspec => :yaml
|
563
|
+
|
564
|
+
install_gemfile <<-G
|
565
|
+
gem 'yaml_spec', :path => "#{lib_path('yaml_spec-1.0')}"
|
566
|
+
G
|
567
|
+
err.should == ""
|
568
|
+
end
|
569
|
+
end
|
570
|
+
|
571
|
+
describe "when the gem has an architecture in its platform" do
|
572
|
+
it "still installs correctly" do
|
573
|
+
simulate_platform mswin
|
574
|
+
|
575
|
+
gemfile <<-G
|
576
|
+
# Set up pretend http gem server with FakeWeb
|
577
|
+
$LOAD_PATH.unshift '#{Dir[base_system_gems.join("gems/fakeweb*/lib")].first}'
|
578
|
+
require 'fakeweb'
|
579
|
+
FakeWeb.allow_net_connect = false
|
580
|
+
files = [ 'specs.4.8.gz',
|
581
|
+
'prerelease_specs.4.8.gz',
|
582
|
+
'quick/Marshal.4.8/rcov-1.0-mswin32.gemspec.rz',
|
583
|
+
'gems/rcov-1.0-mswin32.gem' ]
|
584
|
+
files.each do |file|
|
585
|
+
FakeWeb.register_uri(:get, "http://localgemserver.com/\#{file}",
|
586
|
+
:body => File.read("#{gem_repo1}/\#{file}"))
|
587
|
+
end
|
588
|
+
FakeWeb.register_uri(:get, "http://localgemserver.com/gems/rcov-1.0-x86-mswin32.gem",
|
589
|
+
:status => ["404", "Not Found"])
|
590
|
+
|
591
|
+
# Try to install gem with nil arch
|
592
|
+
source "http://localgemserver.com/"
|
593
|
+
gem "rcov"
|
594
|
+
G
|
595
|
+
bundle :install
|
596
|
+
should_be_installed "rcov 1.0.0"
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
describe "bundler dependencies" do
|
601
|
+
before(:each) do
|
602
|
+
build_repo2 do
|
603
|
+
build_gem "rails", "3.0" do |s|
|
604
|
+
s.add_dependency "bundler", ">= 0.9.0.pre"
|
605
|
+
end
|
606
|
+
build_gem "bundler", "0.9.1"
|
607
|
+
build_gem "bundler", Bundler::VERSION
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
it "are forced to the current bundler version" do
|
612
|
+
install_gemfile <<-G
|
613
|
+
source "file://#{gem_repo2}"
|
614
|
+
gem "rails", "3.0"
|
615
|
+
G
|
616
|
+
|
617
|
+
should_be_installed "bundler #{Bundler::VERSION}"
|
618
|
+
end
|
619
|
+
|
620
|
+
it "are not added if not already present" do
|
621
|
+
install_gemfile <<-G
|
622
|
+
source "file://#{gem_repo1}"
|
623
|
+
gem "rack"
|
624
|
+
G
|
625
|
+
should_not_be_installed "bundler #{Bundler::VERSION}"
|
626
|
+
end
|
627
|
+
|
628
|
+
it "causes a conflict if explicitly requesting a different version" do
|
629
|
+
install_gemfile <<-G
|
630
|
+
source "file://#{gem_repo2}"
|
631
|
+
gem "rails", "3.0"
|
632
|
+
gem "bundler", "0.9.2"
|
633
|
+
G
|
634
|
+
|
635
|
+
nice_error = <<-E.strip.gsub(/^ {8}/, '')
|
636
|
+
Fetching source index for file:#{gem_repo2}/
|
637
|
+
Bundler could not find compatible versions for gem "bundler":
|
638
|
+
In Gemfile:
|
639
|
+
bundler (= 0.9.2) ruby
|
640
|
+
|
641
|
+
Current Bundler version:
|
642
|
+
bundler (#{Bundler::VERSION})
|
643
|
+
E
|
644
|
+
out.should include(nice_error)
|
645
|
+
end
|
646
|
+
|
647
|
+
it "works for gems with multiple versions in its dependencies" do
|
648
|
+
install_gemfile <<-G
|
649
|
+
source "file://#{gem_repo2}"
|
650
|
+
|
651
|
+
gem "multiple_versioned_deps"
|
652
|
+
G
|
653
|
+
|
654
|
+
|
655
|
+
install_gemfile <<-G
|
656
|
+
source "file://#{gem_repo2}"
|
657
|
+
|
658
|
+
gem "multiple_versioned_deps"
|
659
|
+
gem "rack"
|
660
|
+
G
|
661
|
+
|
662
|
+
should_be_installed "multiple_versioned_deps 1.0.0"
|
663
|
+
end
|
664
|
+
|
665
|
+
it "includes bundler in the bundle when it's a child dependency" do
|
666
|
+
install_gemfile <<-G
|
667
|
+
source "file://#{gem_repo2}"
|
668
|
+
gem "rails", "3.0"
|
669
|
+
G
|
670
|
+
|
671
|
+
run "begin; gem 'bundler'; puts 'WIN'; rescue Gem::LoadError; puts 'FAIL'; end"
|
672
|
+
out.should == "WIN"
|
673
|
+
end
|
674
|
+
|
675
|
+
it "allows gem 'bundler' when Bundler is not in the Gemfile or its dependencies" do
|
676
|
+
install_gemfile <<-G
|
677
|
+
source "file://#{gem_repo2}"
|
678
|
+
gem "rack"
|
679
|
+
G
|
680
|
+
|
681
|
+
run "begin; gem 'bundler'; puts 'WIN'; rescue Gem::LoadError => e; puts e.backtrace; end"
|
682
|
+
out.should == "WIN"
|
683
|
+
end
|
684
|
+
|
685
|
+
it "causes a conflict if child dependencies conflict" do
|
686
|
+
install_gemfile <<-G
|
687
|
+
source "file://#{gem_repo2}"
|
688
|
+
gem "activemerchant"
|
689
|
+
gem "rails_fail"
|
690
|
+
G
|
691
|
+
|
692
|
+
nice_error = <<-E.strip.gsub(/^ {8}/, '')
|
693
|
+
Fetching source index for file:#{gem_repo2}/
|
694
|
+
Bundler could not find compatible versions for gem "activesupport":
|
695
|
+
In Gemfile:
|
696
|
+
activemerchant (>= 0) ruby depends on
|
697
|
+
activesupport (>= 2.0.0) ruby
|
698
|
+
|
699
|
+
rails_fail (>= 0) ruby depends on
|
700
|
+
activesupport (1.2.3)
|
701
|
+
E
|
702
|
+
out.should == nice_error
|
703
|
+
end
|
704
|
+
|
705
|
+
it "causes a conflict if a child dependency conflicts with the Gemfile" do
|
706
|
+
install_gemfile <<-G
|
707
|
+
source "file://#{gem_repo2}"
|
708
|
+
gem "rails_fail"
|
709
|
+
gem "activesupport", "2.3.5"
|
710
|
+
G
|
711
|
+
|
712
|
+
nice_error = <<-E.strip.gsub(/^ {8}/, '')
|
713
|
+
Fetching source index for file:#{gem_repo2}/
|
714
|
+
Bundler could not find compatible versions for gem "activesupport":
|
715
|
+
In Gemfile:
|
716
|
+
rails_fail (>= 0) ruby depends on
|
717
|
+
activesupport (= 1.2.3) ruby
|
718
|
+
|
719
|
+
activesupport (2.3.5)
|
720
|
+
E
|
721
|
+
out.should == nice_error
|
722
|
+
end
|
723
|
+
|
724
|
+
it "can install dependencies even if " do
|
725
|
+
install_gemfile <<-G
|
726
|
+
source "file://#{gem_repo2}"
|
727
|
+
gem "rails", "3.0"
|
728
|
+
G
|
729
|
+
|
730
|
+
simulate_bundler_version "10.0.0"
|
731
|
+
#simulate_new_machine
|
732
|
+
|
733
|
+
bundle "check"
|
734
|
+
out.should == "The Gemfile's dependencies are satisfied"
|
735
|
+
end
|
736
|
+
end
|
737
|
+
|
738
|
+
describe "when locked and installed with --without" do
|
739
|
+
before(:each) do
|
740
|
+
build_repo2
|
741
|
+
system_gems "rack-0.9.1" do
|
742
|
+
install_gemfile <<-G, :without => :rack
|
743
|
+
source "file://#{gem_repo2}"
|
744
|
+
gem "rack"
|
745
|
+
|
746
|
+
group :rack do
|
747
|
+
gem "rack_middleware"
|
748
|
+
end
|
749
|
+
G
|
750
|
+
end
|
751
|
+
end
|
752
|
+
|
753
|
+
it "uses the correct versions even if --without was used on the original" do
|
754
|
+
should_be_installed "rack 0.9.1"
|
755
|
+
should_not_be_installed "rack_middleware 1.0"
|
756
|
+
simulate_new_machine
|
757
|
+
|
758
|
+
bundle :install
|
759
|
+
|
760
|
+
should_be_installed "rack 0.9.1"
|
761
|
+
should_be_installed "rack_middleware 1.0"
|
762
|
+
end
|
763
|
+
|
764
|
+
it "does not hit the remote a second time" do
|
765
|
+
FileUtils.rm_rf gem_repo2
|
766
|
+
bundle "install --without rack"
|
767
|
+
err.should be_empty
|
768
|
+
end
|
769
|
+
end
|
770
|
+
end
|