bundler 1.7.15 → 1.8.0.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -14
  3. data/.rspec +1 -0
  4. data/.travis.yml +22 -15
  5. data/CHANGELOG.md +43 -13
  6. data/CODE_OF_CONDUCT.md +40 -0
  7. data/CONTRIBUTING.md +14 -12
  8. data/DEVELOPMENT.md +4 -2
  9. data/ISSUES.md +1 -1
  10. data/README.md +10 -14
  11. data/Rakefile +10 -10
  12. data/bin/bundle +1 -1
  13. data/bundler.gemspec +5 -4
  14. data/lib/bundler.rb +22 -3
  15. data/lib/bundler/anonymizable_uri.rb +24 -8
  16. data/lib/bundler/cli.rb +103 -66
  17. data/lib/bundler/cli/cache.rb +1 -0
  18. data/lib/bundler/cli/clean.rb +11 -4
  19. data/lib/bundler/cli/common.rb +2 -0
  20. data/lib/bundler/cli/console.rb +22 -26
  21. data/lib/bundler/cli/exec.rb +29 -22
  22. data/lib/bundler/cli/gem.rb +125 -37
  23. data/lib/bundler/cli/install.rb +22 -9
  24. data/lib/bundler/cli/outdated.rb +1 -1
  25. data/lib/bundler/cli/package.rb +8 -1
  26. data/lib/bundler/cli/show.rb +29 -3
  27. data/lib/bundler/cli/update.rb +2 -2
  28. data/lib/bundler/cli/viz.rb +1 -1
  29. data/lib/bundler/definition.rb +14 -22
  30. data/lib/bundler/dependency.rb +8 -1
  31. data/lib/bundler/dsl.rb +17 -4
  32. data/lib/bundler/endpoint_specification.rb +1 -1
  33. data/lib/bundler/env.rb +44 -25
  34. data/lib/bundler/fetcher.rb +33 -25
  35. data/lib/bundler/friendly_errors.rb +38 -5
  36. data/lib/bundler/gem_helper.rb +16 -10
  37. data/lib/bundler/gem_helpers.rb +1 -0
  38. data/lib/bundler/graph.rb +4 -1
  39. data/lib/bundler/index.rb +15 -25
  40. data/lib/bundler/installer.rb +6 -6
  41. data/lib/bundler/lockfile_parser.rb +7 -7
  42. data/lib/bundler/resolver.rb +2 -1
  43. data/lib/bundler/ruby_version.rb +1 -1
  44. data/lib/bundler/rubygems_ext.rb +1 -0
  45. data/lib/bundler/rubygems_integration.rb +1 -1
  46. data/lib/bundler/runtime.rb +22 -40
  47. data/lib/bundler/settings.rb +14 -5
  48. data/lib/bundler/setup.rb +2 -1
  49. data/lib/bundler/shared_helpers.rb +56 -4
  50. data/lib/bundler/source.rb +8 -9
  51. data/lib/bundler/source/git.rb +5 -1
  52. data/lib/bundler/source/git/git_proxy.rb +4 -0
  53. data/lib/bundler/source/path.rb +8 -11
  54. data/lib/bundler/source/path/installer.rb +0 -2
  55. data/lib/bundler/source/rubygems.rb +58 -72
  56. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +13 -0
  57. data/lib/bundler/templates/newgem/LICENSE.txt.tt +17 -18
  58. data/lib/bundler/templates/newgem/README.md.tt +9 -1
  59. data/lib/bundler/templates/newgem/Rakefile.tt +2 -0
  60. data/lib/bundler/templates/newgem/bin/console.tt +14 -0
  61. data/lib/bundler/templates/newgem/bin/setup.tt +7 -0
  62. data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  63. data/lib/bundler/templates/newgem/gitignore.tt +2 -0
  64. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +1 -1
  65. data/lib/bundler/templates/newgem/newgem.gemspec.tt +17 -13
  66. data/lib/bundler/templates/newgem/test/test_newgem.rb.tt +1 -1
  67. data/lib/bundler/ui/shell.rb +1 -1
  68. data/lib/bundler/version.rb +1 -1
  69. data/lib/bundler/worker.rb +73 -0
  70. data/man/bundle-config.ronn +17 -15
  71. data/man/bundle-install.ronn +102 -93
  72. data/man/bundle-update.ronn +39 -30
  73. data/man/bundle.ronn +6 -0
  74. data/man/gemfile.5.ronn +74 -13
  75. metadata +10 -231
  76. data/lib/bundler/parallel_workers.rb +0 -18
  77. data/lib/bundler/parallel_workers/thread_worker.rb +0 -30
  78. data/lib/bundler/parallel_workers/unix_worker.rb +0 -101
  79. data/lib/bundler/parallel_workers/worker.rb +0 -69
  80. data/lib/bundler/templates/newgem/bin/newgem.tt +0 -3
  81. data/spec/bundler/anonymizable_uri_spec.rb +0 -32
  82. data/spec/bundler/bundler_spec.rb +0 -72
  83. data/spec/bundler/cli_spec.rb +0 -16
  84. data/spec/bundler/definition_spec.rb +0 -22
  85. data/spec/bundler/dsl_spec.rb +0 -82
  86. data/spec/bundler/friendly_errors_spec.rb +0 -13
  87. data/spec/bundler/gem_helper_spec.rb +0 -226
  88. data/spec/bundler/psyched_yaml_spec.rb +0 -8
  89. data/spec/bundler/retry_spec.rb +0 -59
  90. data/spec/bundler/settings_spec.rb +0 -13
  91. data/spec/bundler/source/rubygems_spec.rb +0 -25
  92. data/spec/bundler/source_list_spec.rb +0 -361
  93. data/spec/cache/gems_spec.rb +0 -284
  94. data/spec/cache/git_spec.rb +0 -188
  95. data/spec/cache/path_spec.rb +0 -121
  96. data/spec/cache/platform_spec.rb +0 -57
  97. data/spec/commands/binstubs_spec.rb +0 -219
  98. data/spec/commands/check_spec.rb +0 -278
  99. data/spec/commands/clean_spec.rb +0 -592
  100. data/spec/commands/config_spec.rb +0 -263
  101. data/spec/commands/console_spec.rb +0 -76
  102. data/spec/commands/exec_spec.rb +0 -309
  103. data/spec/commands/help_spec.rb +0 -39
  104. data/spec/commands/init_spec.rb +0 -39
  105. data/spec/commands/inject_spec.rb +0 -78
  106. data/spec/commands/licenses_spec.rb +0 -18
  107. data/spec/commands/newgem_spec.rb +0 -428
  108. data/spec/commands/open_spec.rb +0 -68
  109. data/spec/commands/outdated_spec.rb +0 -156
  110. data/spec/commands/package_spec.rb +0 -114
  111. data/spec/commands/show_spec.rb +0 -125
  112. data/spec/install/binstubs_spec.rb +0 -24
  113. data/spec/install/bundler_spec.rb +0 -146
  114. data/spec/install/deploy_spec.rb +0 -250
  115. data/spec/install/gemfile/gemspec_spec.rb +0 -170
  116. data/spec/install/gemfile/git_spec.rb +0 -967
  117. data/spec/install/gemfile/path_spec.rb +0 -500
  118. data/spec/install/gemfile_spec.rb +0 -44
  119. data/spec/install/gems/c_ext_spec.rb +0 -48
  120. data/spec/install/gems/dependency_api_spec.rb +0 -652
  121. data/spec/install/gems/env_spec.rb +0 -107
  122. data/spec/install/gems/flex_spec.rb +0 -314
  123. data/spec/install/gems/groups_spec.rb +0 -308
  124. data/spec/install/gems/mirror_spec.rb +0 -39
  125. data/spec/install/gems/platform_spec.rb +0 -195
  126. data/spec/install/gems/post_install_spec.rb +0 -121
  127. data/spec/install/gems/resolving_spec.rb +0 -124
  128. data/spec/install/gems/simple_case_spec.rb +0 -377
  129. data/spec/install/gems/sources_spec.rb +0 -386
  130. data/spec/install/gems/standalone_spec.rb +0 -260
  131. data/spec/install/gems/sudo_spec.rb +0 -136
  132. data/spec/install/gems/win32_spec.rb +0 -26
  133. data/spec/install/gemspecs_spec.rb +0 -50
  134. data/spec/install/path_spec.rb +0 -150
  135. data/spec/install/post_bundle_message_spec.rb +0 -142
  136. data/spec/install/prereleases_spec.rb +0 -43
  137. data/spec/install/security_policy_spec.rb +0 -77
  138. data/spec/install/upgrade_spec.rb +0 -26
  139. data/spec/lock/git_spec.rb +0 -34
  140. data/spec/lock/lockfile_spec.rb +0 -924
  141. data/spec/other/bundle_ruby_spec.rb +0 -142
  142. data/spec/other/cli_dispatch_spec.rb +0 -21
  143. data/spec/other/ext_spec.rb +0 -60
  144. data/spec/other/platform_spec.rb +0 -1285
  145. data/spec/other/ssl_cert_spec.rb +0 -23
  146. data/spec/quality_spec.rb +0 -88
  147. data/spec/realworld/dependency_api_spec.rb +0 -60
  148. data/spec/realworld/edgecases_spec.rb +0 -212
  149. data/spec/realworld/parallel_spec.rb +0 -71
  150. data/spec/resolver/basic_spec.rb +0 -66
  151. data/spec/resolver/platform_spec.rb +0 -88
  152. data/spec/runtime/executable_spec.rb +0 -149
  153. data/spec/runtime/load_spec.rb +0 -107
  154. data/spec/runtime/platform_spec.rb +0 -90
  155. data/spec/runtime/require_spec.rb +0 -332
  156. data/spec/runtime/setup_spec.rb +0 -853
  157. data/spec/runtime/with_clean_env_spec.rb +0 -91
  158. data/spec/spec_helper.rb +0 -123
  159. data/spec/support/artifice/endopint_marshal_fail_basic_authentication.rb +0 -13
  160. data/spec/support/artifice/endpoint.rb +0 -71
  161. data/spec/support/artifice/endpoint_500.rb +0 -37
  162. data/spec/support/artifice/endpoint_api_forbidden.rb +0 -11
  163. data/spec/support/artifice/endpoint_api_missing.rb +0 -16
  164. data/spec/support/artifice/endpoint_basic_authentication.rb +0 -13
  165. data/spec/support/artifice/endpoint_creds_diff_host.rb +0 -38
  166. data/spec/support/artifice/endpoint_extra.rb +0 -31
  167. data/spec/support/artifice/endpoint_extra_api.rb +0 -32
  168. data/spec/support/artifice/endpoint_extra_missing.rb +0 -15
  169. data/spec/support/artifice/endpoint_fallback.rb +0 -17
  170. data/spec/support/artifice/endpoint_host_redirect.rb +0 -15
  171. data/spec/support/artifice/endpoint_marshal_fail.rb +0 -11
  172. data/spec/support/artifice/endpoint_redirect.rb +0 -15
  173. data/spec/support/artifice/endpoint_strict_basic_authentication.rb +0 -18
  174. data/spec/support/artifice/endpoint_timeout.rb +0 -13
  175. data/spec/support/builders.rb +0 -693
  176. data/spec/support/fakeweb/rack-1.0.0.marshal +0 -2
  177. data/spec/support/fakeweb/windows.rb +0 -23
  178. data/spec/support/hax.rb +0 -22
  179. data/spec/support/helpers.rb +0 -361
  180. data/spec/support/indexes.rb +0 -280
  181. data/spec/support/matchers.rb +0 -77
  182. data/spec/support/path.rb +0 -85
  183. data/spec/support/permissions.rb +0 -10
  184. data/spec/support/platforms.rb +0 -94
  185. data/spec/support/ruby_ext.rb +0 -20
  186. data/spec/support/rubygems_ext.rb +0 -39
  187. data/spec/support/streams.rb +0 -13
  188. data/spec/support/sudo.rb +0 -16
  189. data/spec/update/gems_spec.rb +0 -201
  190. data/spec/update/git_spec.rb +0 -283
  191. data/spec/update/path_spec.rb +0 -18
@@ -1,967 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "bundle install with git sources" do
4
- describe "when floating on master" do
5
- before :each do
6
- build_git "foo" do |s|
7
- s.executables = "foobar"
8
- end
9
-
10
- install_gemfile <<-G
11
- source "file://#{gem_repo1}"
12
- git "#{lib_path('foo-1.0')}" do
13
- gem 'foo'
14
- end
15
- G
16
- end
17
-
18
- it "fetches gems" do
19
- should_be_installed("foo 1.0")
20
-
21
- run <<-RUBY
22
- require 'foo'
23
- puts "WIN" unless defined?(FOO_PREV_REF)
24
- RUBY
25
-
26
- expect(out).to eq("WIN")
27
- end
28
-
29
- it "caches the git repo" do
30
- expect(Dir["#{default_bundle_path}/cache/bundler/git/foo-1.0-*"].size).to eq(1)
31
- end
32
-
33
- it "caches the evaluated gemspec" do
34
- git = update_git "foo" do |s|
35
- s.executables = ["foobar"] # we added this the first time, so keep it now
36
- s.files = ["bin/foobar"] # updating git nukes the files list
37
- foospec = s.to_ruby.gsub(/s\.files.*/, 's.files = `git ls-files -z`.split("\x0")')
38
- s.write "foo.gemspec", foospec
39
- end
40
-
41
- bundle "update foo"
42
-
43
- sha = git.ref_for("master", 11)
44
- spec_file = default_bundle_path.join("bundler/gems/foo-1.0-#{sha}/foo.gemspec").to_s
45
- ruby_code = Gem::Specification.load(spec_file).to_ruby
46
- file_code = File.read(spec_file)
47
- expect(file_code).to eq(ruby_code)
48
- end
49
-
50
- it "does not update the git source implicitly" do
51
- update_git "foo"
52
-
53
- in_app_root2 do
54
- install_gemfile bundled_app2("Gemfile"), <<-G
55
- git "#{lib_path('foo-1.0')}" do
56
- gem 'foo'
57
- end
58
- G
59
- end
60
-
61
- in_app_root do
62
- run <<-RUBY
63
- require 'foo'
64
- puts "fail" if defined?(FOO_PREV_REF)
65
- RUBY
66
-
67
- expect(out).to be_empty
68
- end
69
- end
70
-
71
- it "sets up git gem executables on the path" do
72
- pending_jruby_shebang_fix
73
- bundle "exec foobar"
74
- expect(out).to eq("1.0")
75
- end
76
-
77
- it "complains if pinned specs don't exist in the git repo" do
78
- build_git "foo"
79
-
80
- install_gemfile <<-G
81
- gem "foo", "1.1", :git => "#{lib_path('foo-1.0')}"
82
- G
83
-
84
- expect(out).to include("Source contains 'foo' at: 1.0")
85
- end
86
-
87
- it "still works after moving the application directory" do
88
- bundle "install --path vendor/bundle"
89
- FileUtils.mv bundled_app, tmp('bundled_app.bck')
90
-
91
- Dir.chdir tmp('bundled_app.bck')
92
- should_be_installed "foo 1.0"
93
- end
94
-
95
- it "can still install after moving the application directory" do
96
- bundle "install --path vendor/bundle"
97
- FileUtils.mv bundled_app, tmp('bundled_app.bck')
98
-
99
- update_git "foo", "1.1", :path => lib_path("foo-1.0")
100
-
101
- Dir.chdir tmp('bundled_app.bck')
102
- gemfile tmp('bundled_app.bck/Gemfile'), <<-G
103
- source "file://#{gem_repo1}"
104
- git "#{lib_path('foo-1.0')}" do
105
- gem 'foo'
106
- end
107
-
108
- gem "rack", "1.0"
109
- G
110
-
111
- bundle "update foo"
112
-
113
- should_be_installed "foo 1.1", "rack 1.0"
114
- end
115
-
116
- end
117
-
118
- describe "with an empty git block" do
119
- before do
120
- build_git "foo"
121
- gemfile <<-G
122
- source "file://#{gem_repo1}"
123
- gem "rack"
124
-
125
- git "#{lib_path("foo-1.0")}" do
126
- # this page left intentionally blank
127
- end
128
- G
129
- end
130
-
131
- it "does not explode" do
132
- bundle "install"
133
- should_be_installed "rack 1.0"
134
- end
135
- end
136
-
137
- describe "when specifying a revision" do
138
- before(:each) do
139
- build_git "foo"
140
- @revision = revision_for(lib_path("foo-1.0"))
141
- update_git "foo"
142
- end
143
-
144
- it "works" do
145
- install_gemfile <<-G
146
- git "#{lib_path('foo-1.0')}", :ref => "#{@revision}" do
147
- gem "foo"
148
- end
149
- G
150
-
151
- run <<-RUBY
152
- require 'foo'
153
- puts "WIN" unless defined?(FOO_PREV_REF)
154
- RUBY
155
-
156
- expect(out).to eq("WIN")
157
- end
158
-
159
- it "works when the revision is a symbol" do
160
- install_gemfile <<-G
161
- git "#{lib_path('foo-1.0')}", :ref => #{@revision.to_sym.inspect} do
162
- gem "foo"
163
- end
164
- G
165
- expect(err).to eq("")
166
-
167
- run <<-RUBY
168
- require 'foo'
169
- puts "WIN" unless defined?(FOO_PREV_REF)
170
- RUBY
171
-
172
- expect(out).to eq("WIN")
173
- end
174
- end
175
-
176
- describe "when specifying local override" do
177
- it "uses the local repository instead of checking a new one out" do
178
- # We don't generate it because we actually don't need it
179
- # build_git "rack", "0.8"
180
-
181
- build_git "rack", "0.8", :path => lib_path('local-rack') do |s|
182
- s.write "lib/rack.rb", "puts :LOCAL"
183
- end
184
-
185
- gemfile <<-G
186
- source "file://#{gem_repo1}"
187
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
188
- G
189
-
190
- bundle %|config local.rack #{lib_path('local-rack')}|
191
- bundle :install
192
- expect(out).to match(/at #{lib_path('local-rack')}/)
193
-
194
- run "require 'rack'"
195
- expect(out).to eq("LOCAL")
196
- end
197
-
198
- it "chooses the local repository on runtime" do
199
- build_git "rack", "0.8"
200
-
201
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
202
-
203
- update_git "rack", "0.8", :path => lib_path('local-rack') do |s|
204
- s.write "lib/rack.rb", "puts :LOCAL"
205
- end
206
-
207
- install_gemfile <<-G
208
- source "file://#{gem_repo1}"
209
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
210
- G
211
-
212
- bundle %|config local.rack #{lib_path('local-rack')}|
213
- run "require 'rack'"
214
- expect(out).to eq("LOCAL")
215
- end
216
-
217
- it "updates specs on runtime" do
218
- system_gems "nokogiri-1.4.2"
219
-
220
- build_git "rack", "0.8"
221
-
222
- install_gemfile <<-G
223
- source "file://#{gem_repo1}"
224
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
225
- G
226
-
227
- lockfile0 = File.read(bundled_app("Gemfile.lock"))
228
-
229
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
230
- update_git "rack", "0.8", :path => lib_path('local-rack') do |s|
231
- s.add_dependency "nokogiri", "1.4.2"
232
- end
233
-
234
- bundle %|config local.rack #{lib_path('local-rack')}|
235
- run "require 'rack'"
236
-
237
- lockfile1 = File.read(bundled_app("Gemfile.lock"))
238
- expect(lockfile1).not_to eq(lockfile0)
239
- end
240
-
241
- it "updates ref on install" do
242
- build_git "rack", "0.8"
243
-
244
- install_gemfile <<-G
245
- source "file://#{gem_repo1}"
246
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
247
- G
248
-
249
- lockfile0 = File.read(bundled_app("Gemfile.lock"))
250
-
251
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
252
- update_git "rack", "0.8", :path => lib_path('local-rack')
253
-
254
- bundle %|config local.rack #{lib_path('local-rack')}|
255
- bundle :install
256
-
257
- lockfile1 = File.read(bundled_app("Gemfile.lock"))
258
- expect(lockfile1).not_to eq(lockfile0)
259
- end
260
-
261
- it "explodes if given path does not exist on install" do
262
- build_git "rack", "0.8"
263
-
264
- install_gemfile <<-G
265
- source "file://#{gem_repo1}"
266
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
267
- G
268
-
269
- bundle %|config local.rack #{lib_path('local-rack')}|
270
- bundle :install
271
- expect(out).to match(/Cannot use local override for rack-0.8 because #{Regexp.escape(lib_path('local-rack').to_s)} does not exist/)
272
- end
273
-
274
- it "explodes if branch is not given on install" do
275
- build_git "rack", "0.8"
276
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
277
-
278
- install_gemfile <<-G
279
- source "file://#{gem_repo1}"
280
- gem "rack", :git => "#{lib_path('rack-0.8')}"
281
- G
282
-
283
- bundle %|config local.rack #{lib_path('local-rack')}|
284
- bundle :install
285
- expect(out).to match(/cannot use local override/i)
286
- end
287
-
288
- it "does not explode if disable_local_branch_check is given" do
289
- build_git "rack", "0.8"
290
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
291
-
292
- install_gemfile <<-G
293
- source "file://#{gem_repo1}"
294
- gem "rack", :git => "#{lib_path('rack-0.8')}"
295
- G
296
-
297
- bundle %|config local.rack #{lib_path('local-rack')}|
298
- bundle %|config disable_local_branch_check true|
299
- bundle :install
300
- expect(out).to match(/Your bundle is complete!/)
301
- end
302
-
303
- it "explodes on different branches on install" do
304
- build_git "rack", "0.8"
305
-
306
- FileUtils.cp_r("#{lib_path('rack-0.8')}/.", lib_path('local-rack'))
307
-
308
- update_git "rack", "0.8", :path => lib_path('local-rack'), :branch => "another" do |s|
309
- s.write "lib/rack.rb", "puts :LOCAL"
310
- end
311
-
312
- install_gemfile <<-G
313
- source "file://#{gem_repo1}"
314
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
315
- G
316
-
317
- bundle %|config local.rack #{lib_path('local-rack')}|
318
- bundle :install
319
- expect(out).to match(/is using branch another but Gemfile specifies master/)
320
- end
321
-
322
- it "explodes on invalid revision on install" do
323
- build_git "rack", "0.8"
324
-
325
- build_git "rack", "0.8", :path => lib_path('local-rack') do |s|
326
- s.write "lib/rack.rb", "puts :LOCAL"
327
- end
328
-
329
- install_gemfile <<-G
330
- source "file://#{gem_repo1}"
331
- gem "rack", :git => "#{lib_path('rack-0.8')}", :branch => "master"
332
- G
333
-
334
- bundle %|config local.rack #{lib_path('local-rack')}|
335
- bundle :install
336
- expect(out).to match(/The Gemfile lock is pointing to revision \w+/)
337
- end
338
- end
339
-
340
- describe "specified inline" do
341
- # TODO: Figure out how to write this test so that it is not flaky depending
342
- # on the current network situation.
343
- # it "supports private git URLs" do
344
- # gemfile <<-G
345
- # gem "thingy", :git => "git@notthere.fallingsnow.net:somebody/thingy.git"
346
- # G
347
- #
348
- # bundle :install, :expect_err => true
349
- #
350
- # # p out
351
- # # p err
352
- # puts err unless err.empty? # This spec fails randomly every so often
353
- # err.should include("notthere.fallingsnow.net")
354
- # err.should include("ssh")
355
- # end
356
-
357
- it "installs from git even if a newer gem is available elsewhere" do
358
- build_git "rack", "0.8"
359
-
360
- install_gemfile <<-G
361
- source "file://#{gem_repo1}"
362
- gem "rack", :git => "#{lib_path('rack-0.8')}"
363
- G
364
-
365
- should_be_installed "rack 0.8"
366
- end
367
-
368
- it "installs dependencies from git even if a newer gem is available elsewhere" do
369
- system_gems "rack-1.0.0"
370
-
371
- build_lib "rack", "1.0", :path => lib_path('nested/bar') do |s|
372
- s.write "lib/rack.rb", "puts 'WIN OVERRIDE'"
373
- end
374
-
375
- build_git "foo", :path => lib_path('nested') do |s|
376
- s.add_dependency "rack", "= 1.0"
377
- end
378
-
379
- install_gemfile <<-G
380
- source "file://#{gem_repo1}"
381
- gem "foo", :git => "#{lib_path('nested')}"
382
- G
383
-
384
- run "require 'rack'"
385
- expect(out).to eq('WIN OVERRIDE')
386
- end
387
-
388
- it "correctly unlocks when changing to a git source" do
389
- install_gemfile <<-G
390
- source "file://#{gem_repo1}"
391
- gem "rack", "0.9.1"
392
- G
393
-
394
- build_git "rack", :path => lib_path("rack")
395
-
396
- install_gemfile <<-G
397
- source "file://#{gem_repo1}"
398
- gem "rack", "1.0.0", :git => "#{lib_path('rack')}"
399
- G
400
-
401
- should_be_installed "rack 1.0.0"
402
- end
403
-
404
- it "correctly unlocks when changing to a git source without versions" do
405
- install_gemfile <<-G
406
- source "file://#{gem_repo1}"
407
- gem "rack"
408
- G
409
-
410
- build_git "rack", "1.2", :path => lib_path("rack")
411
-
412
- install_gemfile <<-G
413
- source "file://#{gem_repo1}"
414
- gem "rack", :git => "#{lib_path('rack')}"
415
- G
416
-
417
- should_be_installed "rack 1.2"
418
- end
419
- end
420
-
421
- describe "block syntax" do
422
- it "pulls all gems from a git block" do
423
- build_lib "omg", :path => lib_path('hi2u/omg')
424
- build_lib "hi2u", :path => lib_path('hi2u')
425
-
426
- install_gemfile <<-G
427
- path "#{lib_path('hi2u')}" do
428
- gem "omg"
429
- gem "hi2u"
430
- end
431
- G
432
-
433
- should_be_installed "omg 1.0", "hi2u 1.0"
434
- end
435
- end
436
-
437
- it "uses a ref if specified" do
438
- build_git "foo"
439
- @revision = revision_for(lib_path("foo-1.0"))
440
- update_git "foo"
441
-
442
- install_gemfile <<-G
443
- gem "foo", :git => "#{lib_path('foo-1.0')}", :ref => "#{@revision}"
444
- G
445
-
446
- run <<-RUBY
447
- require 'foo'
448
- puts "WIN" unless defined?(FOO_PREV_REF)
449
- RUBY
450
-
451
- expect(out).to eq("WIN")
452
- end
453
-
454
- it "correctly handles cases with invalid gemspecs" do
455
- build_git "foo" do |s|
456
- s.summary = nil
457
- end
458
-
459
- install_gemfile <<-G
460
- source "file://#{gem_repo1}"
461
- gem "foo", :git => "#{lib_path('foo-1.0')}"
462
- gem "rails", "2.3.2"
463
- G
464
-
465
- should_be_installed "foo 1.0"
466
- should_be_installed "rails 2.3.2"
467
- end
468
-
469
- it "runs the gemspec in the context of its parent directory" do
470
- build_lib "bar", :path => lib_path("foo/bar"), :gemspec => false do |s|
471
- s.write lib_path("foo/bar/lib/version.rb"), %{BAR_VERSION = '1.0'}
472
- s.write "bar.gemspec", <<-G
473
- $:.unshift Dir.pwd # For 1.9
474
- require 'lib/version'
475
- Gem::Specification.new do |s|
476
- s.name = 'bar'
477
- s.version = BAR_VERSION
478
- s.summary = 'Bar'
479
- s.files = Dir["lib/**/*.rb"]
480
- end
481
- G
482
- end
483
-
484
- build_git "foo", :path => lib_path("foo") do |s|
485
- s.write "bin/foo", ""
486
- end
487
-
488
- install_gemfile <<-G
489
- source "file://#{gem_repo1}"
490
- gem "bar", :git => "#{lib_path("foo")}"
491
- gem "rails", "2.3.2"
492
- G
493
-
494
- should_be_installed "bar 1.0"
495
- should_be_installed "rails 2.3.2"
496
- end
497
-
498
- it "installs from git even if a rubygems gem is present" do
499
- build_gem "foo", "1.0", :path => lib_path('fake_foo'), :to_system => true do |s|
500
- s.write "lib/foo.rb", "raise 'FAIL'"
501
- end
502
-
503
- build_git "foo", "1.0"
504
-
505
- install_gemfile <<-G
506
- gem "foo", "1.0", :git => "#{lib_path('foo-1.0')}"
507
- G
508
-
509
- should_be_installed "foo 1.0"
510
- end
511
-
512
- it "fakes the gem out if there is no gemspec" do
513
- build_git "foo", :gemspec => false
514
-
515
- install_gemfile <<-G
516
- source "file://#{gem_repo1}"
517
- gem "foo", "1.0", :git => "#{lib_path('foo-1.0')}"
518
- gem "rails", "2.3.2"
519
- G
520
-
521
- should_be_installed("foo 1.0")
522
- should_be_installed("rails 2.3.2")
523
- end
524
-
525
- it "catches git errors and spits out useful output" do
526
- gemfile <<-G
527
- gem "foo", "1.0", :git => "omgomg"
528
- G
529
-
530
- bundle :install, :expect_err => true
531
-
532
- expect(out).to include("Git error:")
533
- expect(err).to include("fatal")
534
- expect(err).to include("omgomg")
535
- end
536
-
537
- it "works when the gem path has spaces in it" do
538
- build_git "foo", :path => lib_path('foo space-1.0')
539
-
540
- install_gemfile <<-G
541
- gem "foo", :git => "#{lib_path('foo space-1.0')}"
542
- G
543
-
544
- should_be_installed "foo 1.0"
545
- end
546
-
547
- it "handles repos that have been force-pushed" do
548
- build_git "forced", "1.0"
549
-
550
- install_gemfile <<-G
551
- git "#{lib_path('forced-1.0')}" do
552
- gem 'forced'
553
- end
554
- G
555
- should_be_installed "forced 1.0"
556
-
557
- update_git "forced" do |s|
558
- s.write "lib/forced.rb", "FORCED = '1.1'"
559
- end
560
-
561
- bundle "update"
562
- should_be_installed "forced 1.1"
563
-
564
- Dir.chdir(lib_path('forced-1.0')) do
565
- `git reset --hard HEAD^`
566
- end
567
-
568
- bundle "update"
569
- should_be_installed "forced 1.0"
570
- end
571
-
572
- it "ignores submodules if :submodule is not passed" do
573
- build_git "submodule", "1.0"
574
- build_git "has_submodule", "1.0" do |s|
575
- s.add_dependency "submodule"
576
- end
577
- Dir.chdir(lib_path('has_submodule-1.0')) do
578
- `git submodule add #{lib_path('submodule-1.0')} submodule-1.0`
579
- `git commit -m "submodulator"`
580
- end
581
-
582
- install_gemfile <<-G, :expect_err => true
583
- git "#{lib_path('has_submodule-1.0')}" do
584
- gem "has_submodule"
585
- end
586
- G
587
- expect(out).to match(/could not find gem 'submodule/i)
588
-
589
- should_not_be_installed "has_submodule 1.0", :expect_err => true
590
- end
591
-
592
- it "handles repos with submodules" do
593
- build_git "submodule", "1.0"
594
- build_git "has_submodule", "1.0" do |s|
595
- s.add_dependency "submodule"
596
- end
597
- Dir.chdir(lib_path('has_submodule-1.0')) do
598
- `git submodule add #{lib_path('submodule-1.0')} submodule-1.0`
599
- `git commit -m "submodulator"`
600
- end
601
-
602
- install_gemfile <<-G
603
- git "#{lib_path('has_submodule-1.0')}", :submodules => true do
604
- gem "has_submodule"
605
- end
606
- G
607
-
608
- should_be_installed "has_submodule 1.0"
609
- end
610
-
611
- it "handles implicit updates when modifying the source info" do
612
- git = build_git "foo"
613
-
614
- install_gemfile <<-G
615
- git "#{lib_path('foo-1.0')}" do
616
- gem "foo"
617
- end
618
- G
619
-
620
- update_git "foo"
621
- update_git "foo"
622
-
623
- install_gemfile <<-G
624
- git "#{lib_path('foo-1.0')}", :ref => "#{git.ref_for('HEAD^')}" do
625
- gem "foo"
626
- end
627
- G
628
-
629
- run <<-RUBY
630
- require 'foo'
631
- puts "WIN" if FOO_PREV_REF == '#{git.ref_for("HEAD^^")}'
632
- RUBY
633
-
634
- expect(out).to eq("WIN")
635
- end
636
-
637
- it "does not to a remote fetch if the revision is cached locally" do
638
- build_git "foo"
639
-
640
- install_gemfile <<-G
641
- gem "foo", :git => "#{lib_path('foo-1.0')}"
642
- G
643
-
644
- FileUtils.rm_rf(lib_path('foo-1.0'))
645
-
646
- bundle "install"
647
- expect(out).not_to match(/updating/i)
648
- end
649
-
650
- it "doesn't blow up if bundle install is run twice in a row" do
651
- build_git "foo"
652
-
653
- gemfile <<-G
654
- gem "foo", :git => "#{lib_path('foo-1.0')}"
655
- G
656
-
657
- bundle "install"
658
- bundle "install", :exitstatus => true
659
- expect(exitstatus).to eq(0)
660
- end
661
-
662
- it "does not duplicate git gem sources" do
663
- build_lib "foo", :path => lib_path('nested/foo')
664
- build_lib "bar", :path => lib_path('nested/bar')
665
-
666
- build_git "foo", :path => lib_path('nested')
667
- build_git "bar", :path => lib_path('nested')
668
-
669
- gemfile <<-G
670
- gem "foo", :git => "#{lib_path('nested')}"
671
- gem "bar", :git => "#{lib_path('nested')}"
672
- G
673
-
674
- bundle "install"
675
- expect(File.read(bundled_app("Gemfile.lock")).scan('GIT').size).to eq(1)
676
- end
677
-
678
- describe "switching sources" do
679
- it "doesn't explode when switching Path to Git sources" do
680
- build_gem "foo", "1.0", :to_system => true do |s|
681
- s.write "lib/foo.rb", "raise 'fail'"
682
- end
683
- build_lib "foo", "1.0", :path => lib_path('bar/foo')
684
- build_git "bar", "1.0", :path => lib_path('bar') do |s|
685
- s.add_dependency 'foo'
686
- end
687
-
688
- install_gemfile <<-G
689
- source "file://#{gem_repo1}"
690
- gem "bar", :path => "#{lib_path('bar')}"
691
- G
692
-
693
- install_gemfile <<-G
694
- source "file://#{gem_repo1}"
695
- gem "bar", :git => "#{lib_path('bar')}"
696
- G
697
-
698
- should_be_installed "foo 1.0", "bar 1.0"
699
- end
700
-
701
- it "doesn't explode when switching Gem to Git source" do
702
- install_gemfile <<-G
703
- source "file://#{gem_repo1}"
704
- gem "rack-obama"
705
- gem "rack", "1.0.0"
706
- G
707
-
708
- build_git "rack", "1.0" do |s|
709
- s.write "lib/new_file.rb", "puts 'USING GIT'"
710
- end
711
-
712
- install_gemfile <<-G
713
- source "file://#{gem_repo1}"
714
- gem "rack-obama"
715
- gem "rack", "1.0.0", :git => "#{lib_path("rack-1.0")}"
716
- G
717
-
718
- run "require 'new_file'"
719
- expect(out).to eq("USING GIT")
720
- end
721
- end
722
-
723
- describe "bundle install after the remote has been updated" do
724
- it "installs" do
725
- build_git "valim"
726
-
727
- install_gemfile <<-G
728
- gem "valim", :git => "file://#{lib_path("valim-1.0")}"
729
- G
730
-
731
- old_revision = revision_for(lib_path("valim-1.0"))
732
- update_git "valim"
733
- new_revision = revision_for(lib_path("valim-1.0"))
734
-
735
- lockfile = File.read(bundled_app("Gemfile.lock"))
736
- File.open(bundled_app("Gemfile.lock"), "w") do |file|
737
- file.puts lockfile.gsub(/revision: #{old_revision}/, "revision: #{new_revision}")
738
- end
739
-
740
- bundle "install"
741
-
742
- run <<-R
743
- require "valim"
744
- puts VALIM_PREV_REF
745
- R
746
-
747
- expect(out).to eq(old_revision)
748
- end
749
- end
750
-
751
- describe "bundle install --deployment with git sources" do
752
- it "works" do
753
- build_git "valim", :path => lib_path('valim')
754
-
755
- install_gemfile <<-G
756
- source "file://#{gem_repo1}"
757
- gem "valim", "= 1.0", :git => "#{lib_path('valim')}"
758
- G
759
-
760
- simulate_new_machine
761
-
762
- bundle "install --deployment", :exitstatus => true
763
- expect(exitstatus).to eq(0)
764
- end
765
- end
766
-
767
- describe "gem install hooks" do
768
- it "runs pre-install hooks" do
769
- build_git "foo"
770
- gemfile <<-G
771
- gem "foo", :git => "#{lib_path('foo-1.0')}"
772
- G
773
-
774
- File.open(lib_path("install_hooks.rb"), "w") do |h|
775
- h.write <<-H
776
- require 'rubygems'
777
- Gem.pre_install_hooks << lambda do |inst|
778
- STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}"
779
- end
780
- H
781
- end
782
-
783
- bundle :install, :expect_err => true,
784
- :requires => [lib_path('install_hooks.rb')]
785
- expect(err).to eq("Ran pre-install hook: foo-1.0")
786
- end
787
-
788
- it "runs post-install hooks" do
789
- build_git "foo"
790
- gemfile <<-G
791
- gem "foo", :git => "#{lib_path('foo-1.0')}"
792
- G
793
-
794
- File.open(lib_path("install_hooks.rb"), "w") do |h|
795
- h.write <<-H
796
- require 'rubygems'
797
- Gem.post_install_hooks << lambda do |inst|
798
- STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}"
799
- end
800
- H
801
- end
802
-
803
- bundle :install, :expect_err => true,
804
- :requires => [lib_path('install_hooks.rb')]
805
- expect(err).to eq("Ran post-install hook: foo-1.0")
806
- end
807
-
808
- it "complains if the install hook fails" do
809
- build_git "foo"
810
- gemfile <<-G
811
- gem "foo", :git => "#{lib_path('foo-1.0')}"
812
- G
813
-
814
- File.open(lib_path("install_hooks.rb"), "w") do |h|
815
- h.write <<-H
816
- require 'rubygems'
817
- Gem.pre_install_hooks << lambda do |inst|
818
- false
819
- end
820
- H
821
- end
822
-
823
- bundle :install, :expect_err => true,
824
- :requires => [lib_path('install_hooks.rb')]
825
- expect(out).to include("failed for foo-1.0")
826
- end
827
- end
828
-
829
- context "with an extension" do
830
- it "installs the extension" do
831
- build_git "foo" do |s|
832
- s.add_dependency "rake"
833
- s.extensions << "Rakefile"
834
- s.write "Rakefile", <<-RUBY
835
- task :default do
836
- path = File.expand_path("../lib", __FILE__)
837
- FileUtils.mkdir_p(path)
838
- File.open("\#{path}/foo.rb", "w") do |f|
839
- f.puts "FOO = 'YES'"
840
- end
841
- end
842
- RUBY
843
- end
844
-
845
- install_gemfile <<-G
846
- source "file://#{gem_repo1}"
847
- gem "foo", :git => "#{lib_path('foo-1.0')}"
848
- G
849
-
850
- run <<-R
851
- require 'foo'
852
- puts FOO
853
- R
854
- expect(out).to eq("YES")
855
- end
856
-
857
- it "does not use old extension after ref changes" do
858
- git_reader = build_git "foo", :no_default => true do |s|
859
- s.extensions = ["ext/extconf.rb"]
860
- s.write "ext/extconf.rb", <<-RUBY
861
- require "mkmf"
862
- create_makefile("foo")
863
- RUBY
864
- s.write "ext/foo.c", "void Init_foo() {}"
865
- end
866
-
867
- 2.times do |i|
868
- Dir.chdir(git_reader.path) do
869
- File.open("ext/foo.c", "w") do |file|
870
- file.write <<-C
871
- #include "ruby.h"
872
- VALUE foo() { return INT2FIX(#{i}); }
873
- void Init_foo() { rb_define_global_function("foo", &foo, 0); }
874
- C
875
- end
876
- `git commit -m 'commit for iteration #{i}' ext/foo.c`
877
- end
878
- git_sha = git_reader.ref_for("HEAD")
879
-
880
- install_gemfile <<-G
881
- source "file://#{gem_repo1}"
882
- gem "foo", :git => "#{lib_path('foo-1.0')}", :ref => "#{git_sha}"
883
- G
884
-
885
- run <<-R
886
- require 'foo'
887
- puts foo
888
- R
889
-
890
- expect(out).to eq(i.to_s)
891
- end
892
- end
893
-
894
- it "does not prompt to gem install if extension fails" do
895
- build_git "foo" do |s|
896
- s.add_dependency "rake"
897
- s.extensions << "Rakefile"
898
- s.write "Rakefile", <<-RUBY
899
- task :default do
900
- raise
901
- end
902
- RUBY
903
- end
904
-
905
- install_gemfile <<-G
906
- source "file://#{gem_repo1}"
907
- gem "foo", :git => "#{lib_path('foo-1.0')}"
908
- G
909
-
910
- expect(out).to include("An error occurred while installing foo (1.0)")
911
- expect(out).not_to include("gem install foo")
912
- end
913
- end
914
-
915
- it "ignores git environment variables" do
916
- build_git "xxxxxx" do |s|
917
- s.executables = "xxxxxxbar"
918
- end
919
-
920
- Bundler::SharedHelpers.with_clean_git_env do
921
- ENV['GIT_DIR'] = 'bar'
922
- ENV['GIT_WORK_TREE'] = 'bar'
923
-
924
- install_gemfile <<-G, :exitstatus => true
925
- source "file://#{gem_repo1}"
926
- git "#{lib_path('xxxxxx-1.0')}" do
927
- gem 'xxxxxx'
928
- end
929
- G
930
-
931
- expect(exitstatus).to eq(0)
932
- expect(ENV['GIT_DIR']).to eq('bar')
933
- expect(ENV['GIT_WORK_TREE']).to eq('bar')
934
- end
935
- end
936
-
937
- describe "without git installed" do
938
- it "prints a better error message" do
939
- build_git "foo"
940
-
941
- install_gemfile <<-G
942
- git "#{lib_path('foo-1.0')}" do
943
- gem 'foo'
944
- end
945
- G
946
-
947
- bundle "update", :env => {"PATH" => ""}
948
- expect(out).to include("You need to install git to be able to use gems from git repositories. For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git")
949
- end
950
-
951
- it "installs a packaged git gem successfully" do
952
- build_git "foo"
953
-
954
- install_gemfile <<-G
955
- git "#{lib_path('foo-1.0')}" do
956
- gem 'foo'
957
- end
958
- G
959
- bundle "package --all"
960
- simulate_new_machine
961
-
962
- bundle "install", :env => {"PATH" => ""}, :exitstatus => true
963
- expect(out).to_not include("You need to install git to be able to use gems from git repositories.")
964
- expect(exitstatus).to be_zero
965
- end
966
- end
967
- end