bundler-prehistoric 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +100 -0
  5. data/CHANGELOG.md +1640 -0
  6. data/CONTRIBUTING.md +32 -0
  7. data/DEVELOPMENT.md +117 -0
  8. data/Gemfile +3 -0
  9. data/ISSUES.md +96 -0
  10. data/LICENSE.md +23 -0
  11. data/README.md +46 -0
  12. data/Rakefile +256 -0
  13. data/UPGRADING.md +103 -0
  14. data/bin/bundle +21 -0
  15. data/bin/bundle_ruby +56 -0
  16. data/bin/bundler +21 -0
  17. data/bundler.gemspec +33 -0
  18. data/lib/bundler.rb +442 -0
  19. data/lib/bundler/backports/time.rb +7 -0
  20. data/lib/bundler/capistrano.rb +16 -0
  21. data/lib/bundler/cli.rb +395 -0
  22. data/lib/bundler/cli/binstubs.rb +38 -0
  23. data/lib/bundler/cli/cache.rb +34 -0
  24. data/lib/bundler/cli/check.rb +35 -0
  25. data/lib/bundler/cli/clean.rb +19 -0
  26. data/lib/bundler/cli/common.rb +54 -0
  27. data/lib/bundler/cli/config.rb +84 -0
  28. data/lib/bundler/cli/console.rb +39 -0
  29. data/lib/bundler/cli/exec.rb +37 -0
  30. data/lib/bundler/cli/gem.rb +101 -0
  31. data/lib/bundler/cli/init.rb +33 -0
  32. data/lib/bundler/cli/inject.rb +33 -0
  33. data/lib/bundler/cli/install.rb +133 -0
  34. data/lib/bundler/cli/open.rb +23 -0
  35. data/lib/bundler/cli/outdated.rb +80 -0
  36. data/lib/bundler/cli/package.rb +36 -0
  37. data/lib/bundler/cli/platform.rb +43 -0
  38. data/lib/bundler/cli/show.rb +48 -0
  39. data/lib/bundler/cli/update.rb +73 -0
  40. data/lib/bundler/cli/viz.rb +27 -0
  41. data/lib/bundler/constants.rb +5 -0
  42. data/lib/bundler/current_ruby.rb +155 -0
  43. data/lib/bundler/definition.rb +604 -0
  44. data/lib/bundler/dep_proxy.rb +43 -0
  45. data/lib/bundler/dependency.rb +106 -0
  46. data/lib/bundler/deployment.rb +59 -0
  47. data/lib/bundler/deprecate.rb +15 -0
  48. data/lib/bundler/dsl.rb +305 -0
  49. data/lib/bundler/endpoint_specification.rb +76 -0
  50. data/lib/bundler/env.rb +56 -0
  51. data/lib/bundler/environment.rb +42 -0
  52. data/lib/bundler/fetcher.rb +396 -0
  53. data/lib/bundler/friendly_errors.rb +42 -0
  54. data/lib/bundler/gem_helper.rb +169 -0
  55. data/lib/bundler/gem_helpers.rb +25 -0
  56. data/lib/bundler/gem_installer.rb +9 -0
  57. data/lib/bundler/gem_path_manipulation.rb +8 -0
  58. data/lib/bundler/gem_tasks.rb +2 -0
  59. data/lib/bundler/graph.rb +169 -0
  60. data/lib/bundler/index.rb +184 -0
  61. data/lib/bundler/injector.rb +64 -0
  62. data/lib/bundler/installer.rb +332 -0
  63. data/lib/bundler/lazy_specification.rb +83 -0
  64. data/lib/bundler/lockfile_parser.rb +146 -0
  65. data/lib/bundler/match_platform.rb +13 -0
  66. data/lib/bundler/parallel_workers.rb +18 -0
  67. data/lib/bundler/parallel_workers/thread_worker.rb +30 -0
  68. data/lib/bundler/parallel_workers/unix_worker.rb +101 -0
  69. data/lib/bundler/parallel_workers/worker.rb +69 -0
  70. data/lib/bundler/psyched_yaml.rb +26 -0
  71. data/lib/bundler/remote_specification.rb +57 -0
  72. data/lib/bundler/resolver.rb +534 -0
  73. data/lib/bundler/retry.rb +60 -0
  74. data/lib/bundler/ruby_dsl.rb +11 -0
  75. data/lib/bundler/ruby_version.rb +117 -0
  76. data/lib/bundler/rubygems_ext.rb +171 -0
  77. data/lib/bundler/rubygems_integration.rb +578 -0
  78. data/lib/bundler/runtime.rb +310 -0
  79. data/lib/bundler/settings.rb +176 -0
  80. data/lib/bundler/setup.rb +23 -0
  81. data/lib/bundler/shared_helpers.rb +110 -0
  82. data/lib/bundler/similarity_detector.rb +63 -0
  83. data/lib/bundler/source.rb +29 -0
  84. data/lib/bundler/source/git.rb +289 -0
  85. data/lib/bundler/source/git/git_proxy.rb +158 -0
  86. data/lib/bundler/source/path.rb +225 -0
  87. data/lib/bundler/source/path/installer.rb +38 -0
  88. data/lib/bundler/source/rubygems.rb +334 -0
  89. data/lib/bundler/source/svn.rb +260 -0
  90. data/lib/bundler/source/svn/svn_proxy.rb +110 -0
  91. data/lib/bundler/spec_set.rb +154 -0
  92. data/lib/bundler/ssl_certs/.document +1 -0
  93. data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +14 -0
  94. data/lib/bundler/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +23 -0
  95. data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +28 -0
  96. data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +20 -0
  97. data/lib/bundler/ssl_certs/certificate_manager.rb +41 -0
  98. data/lib/bundler/templates/Executable +16 -0
  99. data/lib/bundler/templates/Executable.standalone +12 -0
  100. data/lib/bundler/templates/Gemfile +4 -0
  101. data/lib/bundler/templates/newgem/.travis.yml.tt +3 -0
  102. data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
  103. data/lib/bundler/templates/newgem/LICENSE.txt.tt +22 -0
  104. data/lib/bundler/templates/newgem/README.md.tt +31 -0
  105. data/lib/bundler/templates/newgem/Rakefile.tt +26 -0
  106. data/lib/bundler/templates/newgem/bin/newgem.tt +3 -0
  107. data/lib/bundler/templates/newgem/consolerc.tt +3 -0
  108. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +3 -0
  109. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  110. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  111. data/lib/bundler/templates/newgem/gitignore.tt +16 -0
  112. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +12 -0
  113. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
  114. data/lib/bundler/templates/newgem/newgem.gemspec.tt +38 -0
  115. data/lib/bundler/templates/newgem/rspec.tt +2 -0
  116. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  117. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
  118. data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +4 -0
  119. data/lib/bundler/templates/newgem/test/test_newgem.rb.tt +11 -0
  120. data/lib/bundler/ui.rb +7 -0
  121. data/lib/bundler/ui/rg_proxy.rb +21 -0
  122. data/lib/bundler/ui/shell.rb +98 -0
  123. data/lib/bundler/ui/silent.rb +44 -0
  124. data/lib/bundler/vendor/.document +0 -0
  125. data/lib/bundler/vendor/net/http/faster.rb +26 -0
  126. data/lib/bundler/vendor/net/http/persistent.rb +1230 -0
  127. data/lib/bundler/vendor/net/http/persistent/ssl_reuse.rb +128 -0
  128. data/lib/bundler/vendor/thor.rb +480 -0
  129. data/lib/bundler/vendor/thor/actions.rb +319 -0
  130. data/lib/bundler/vendor/thor/actions/create_file.rb +103 -0
  131. data/lib/bundler/vendor/thor/actions/create_link.rb +59 -0
  132. data/lib/bundler/vendor/thor/actions/directory.rb +118 -0
  133. data/lib/bundler/vendor/thor/actions/empty_directory.rb +135 -0
  134. data/lib/bundler/vendor/thor/actions/file_manipulation.rb +316 -0
  135. data/lib/bundler/vendor/thor/actions/inject_into_file.rb +107 -0
  136. data/lib/bundler/vendor/thor/base.rb +656 -0
  137. data/lib/bundler/vendor/thor/command.rb +133 -0
  138. data/lib/bundler/vendor/thor/core_ext/hash_with_indifferent_access.rb +77 -0
  139. data/lib/bundler/vendor/thor/core_ext/io_binary_read.rb +10 -0
  140. data/lib/bundler/vendor/thor/core_ext/ordered_hash.rb +98 -0
  141. data/lib/bundler/vendor/thor/error.rb +32 -0
  142. data/lib/bundler/vendor/thor/group.rb +281 -0
  143. data/lib/bundler/vendor/thor/invocation.rb +173 -0
  144. data/lib/bundler/vendor/thor/line_editor.rb +17 -0
  145. data/lib/bundler/vendor/thor/line_editor/basic.rb +35 -0
  146. data/lib/bundler/vendor/thor/line_editor/readline.rb +88 -0
  147. data/lib/bundler/vendor/thor/parser.rb +4 -0
  148. data/lib/bundler/vendor/thor/parser/argument.rb +73 -0
  149. data/lib/bundler/vendor/thor/parser/arguments.rb +175 -0
  150. data/lib/bundler/vendor/thor/parser/option.rb +121 -0
  151. data/lib/bundler/vendor/thor/parser/options.rb +218 -0
  152. data/lib/bundler/vendor/thor/rake_compat.rb +71 -0
  153. data/lib/bundler/vendor/thor/runner.rb +322 -0
  154. data/lib/bundler/vendor/thor/shell.rb +81 -0
  155. data/lib/bundler/vendor/thor/shell/basic.rb +420 -0
  156. data/lib/bundler/vendor/thor/shell/color.rb +149 -0
  157. data/lib/bundler/vendor/thor/shell/html.rb +126 -0
  158. data/lib/bundler/vendor/thor/util.rb +267 -0
  159. data/lib/bundler/vendor/thor/version.rb +3 -0
  160. data/lib/bundler/vendored_persistent.rb +3 -0
  161. data/lib/bundler/vendored_thor.rb +8 -0
  162. data/lib/bundler/version.rb +6 -0
  163. data/lib/bundler/vlad.rb +11 -0
  164. data/man/bundle-config.ronn +155 -0
  165. data/man/bundle-exec.ronn +136 -0
  166. data/man/bundle-install.ronn +372 -0
  167. data/man/bundle-package.ronn +59 -0
  168. data/man/bundle-platform.ronn +42 -0
  169. data/man/bundle-update.ronn +179 -0
  170. data/man/bundle.ronn +92 -0
  171. data/man/gemfile.5.ronn +369 -0
  172. data/man/index.txt +7 -0
  173. data/spec/bundler/bundler_spec.rb +74 -0
  174. data/spec/bundler/cli_spec.rb +16 -0
  175. data/spec/bundler/definition_spec.rb +21 -0
  176. data/spec/bundler/dsl_spec.rb +108 -0
  177. data/spec/bundler/friendly_errors_spec.rb +13 -0
  178. data/spec/bundler/gem_helper_spec.rb +225 -0
  179. data/spec/bundler/psyched_yaml_spec.rb +8 -0
  180. data/spec/bundler/retry_spec.rb +59 -0
  181. data/spec/bundler/settings_spec.rb +13 -0
  182. data/spec/bundler/source_spec.rb +25 -0
  183. data/spec/cache/gems_spec.rb +316 -0
  184. data/spec/cache/git_spec.rb +188 -0
  185. data/spec/cache/path_spec.rb +121 -0
  186. data/spec/cache/platform_spec.rb +53 -0
  187. data/spec/cache/svn_spec.rb +82 -0
  188. data/spec/commands/binstubs_spec.rb +246 -0
  189. data/spec/commands/check_spec.rb +278 -0
  190. data/spec/commands/clean_spec.rb +652 -0
  191. data/spec/commands/config_spec.rb +227 -0
  192. data/spec/commands/console_spec.rb +102 -0
  193. data/spec/commands/exec_spec.rb +367 -0
  194. data/spec/commands/help_spec.rb +39 -0
  195. data/spec/commands/init_spec.rb +39 -0
  196. data/spec/commands/inject_spec.rb +78 -0
  197. data/spec/commands/licenses_spec.rb +31 -0
  198. data/spec/commands/newgem_spec.rb +451 -0
  199. data/spec/commands/open_spec.rb +80 -0
  200. data/spec/commands/outdated_spec.rb +168 -0
  201. data/spec/commands/package_spec.rb +128 -0
  202. data/spec/commands/show_spec.rb +152 -0
  203. data/spec/install/binstubs_spec.rb +24 -0
  204. data/spec/install/bundler_spec.rb +146 -0
  205. data/spec/install/deploy_spec.rb +237 -0
  206. data/spec/install/gemfile/gemspec_spec.rb +170 -0
  207. data/spec/install/gemfile/git_spec.rb +967 -0
  208. data/spec/install/gemfile/path_spec.rb +480 -0
  209. data/spec/install/gemfile/svn_spec.rb +582 -0
  210. data/spec/install/gemfile_spec.rb +44 -0
  211. data/spec/install/gems/c_ext_spec.rb +48 -0
  212. data/spec/install/gems/dependency_api_spec.rb +580 -0
  213. data/spec/install/gems/env_spec.rb +107 -0
  214. data/spec/install/gems/flex_spec.rb +314 -0
  215. data/spec/install/gems/groups_spec.rb +308 -0
  216. data/spec/install/gems/mirror_spec.rb +39 -0
  217. data/spec/install/gems/platform_spec.rb +221 -0
  218. data/spec/install/gems/post_install_spec.rb +121 -0
  219. data/spec/install/gems/resolving_spec.rb +124 -0
  220. data/spec/install/gems/simple_case_spec.rb +386 -0
  221. data/spec/install/gems/standalone_spec.rb +260 -0
  222. data/spec/install/gems/sudo_spec.rb +136 -0
  223. data/spec/install/gems/win32_spec.rb +26 -0
  224. data/spec/install/gemspecs_spec.rb +50 -0
  225. data/spec/install/path_spec.rb +150 -0
  226. data/spec/install/post_bundle_message_spec.rb +142 -0
  227. data/spec/install/prereleases_spec.rb +43 -0
  228. data/spec/install/security_policy_spec.rb +77 -0
  229. data/spec/install/upgrade_spec.rb +26 -0
  230. data/spec/lock/git_spec.rb +34 -0
  231. data/spec/lock/lockfile_spec.rb +912 -0
  232. data/spec/lock/svn_spec.rb +35 -0
  233. data/spec/other/bundle_ruby_spec.rb +142 -0
  234. data/spec/other/cli_dispatch_spec.rb +21 -0
  235. data/spec/other/ext_spec.rb +60 -0
  236. data/spec/other/platform_spec.rb +1285 -0
  237. data/spec/other/ssl_cert_spec.rb +10 -0
  238. data/spec/quality_spec.rb +88 -0
  239. data/spec/realworld/dependency_api_spec.rb +60 -0
  240. data/spec/realworld/edgecases_spec.rb +177 -0
  241. data/spec/realworld/parallel_spec.rb +69 -0
  242. data/spec/resolver/basic_spec.rb +66 -0
  243. data/spec/resolver/platform_spec.rb +88 -0
  244. data/spec/runtime/executable_spec.rb +149 -0
  245. data/spec/runtime/load_spec.rb +107 -0
  246. data/spec/runtime/platform_spec.rb +90 -0
  247. data/spec/runtime/require_spec.rb +332 -0
  248. data/spec/runtime/setup_spec.rb +856 -0
  249. data/spec/runtime/with_clean_env_spec.rb +91 -0
  250. data/spec/spec_helper.rb +114 -0
  251. data/spec/support/artifice/endopint_marshal_fail_basic_authentication.rb +13 -0
  252. data/spec/support/artifice/endpoint.rb +71 -0
  253. data/spec/support/artifice/endpoint_500.rb +37 -0
  254. data/spec/support/artifice/endpoint_api_missing.rb +16 -0
  255. data/spec/support/artifice/endpoint_basic_authentication.rb +13 -0
  256. data/spec/support/artifice/endpoint_creds_diff_host.rb +38 -0
  257. data/spec/support/artifice/endpoint_extra.rb +31 -0
  258. data/spec/support/artifice/endpoint_extra_missing.rb +15 -0
  259. data/spec/support/artifice/endpoint_fallback.rb +17 -0
  260. data/spec/support/artifice/endpoint_host_redirect.rb +15 -0
  261. data/spec/support/artifice/endpoint_marshal_fail.rb +11 -0
  262. data/spec/support/artifice/endpoint_redirect.rb +15 -0
  263. data/spec/support/artifice/endpoint_strict_basic_authentication.rb +18 -0
  264. data/spec/support/artifice/endpoint_timeout.rb +13 -0
  265. data/spec/support/builders.rb +748 -0
  266. data/spec/support/fakeweb/rack-1.0.0.marshal +2 -0
  267. data/spec/support/fakeweb/windows.rb +23 -0
  268. data/spec/support/hax.rb +22 -0
  269. data/spec/support/helpers.rb +348 -0
  270. data/spec/support/indexes.rb +280 -0
  271. data/spec/support/less_than_proc.rb +14 -0
  272. data/spec/support/matchers.rb +77 -0
  273. data/spec/support/path.rb +81 -0
  274. data/spec/support/permissions.rb +10 -0
  275. data/spec/support/platforms.rb +94 -0
  276. data/spec/support/ruby_ext.rb +20 -0
  277. data/spec/support/rubygems_ext.rb +39 -0
  278. data/spec/support/streams.rb +13 -0
  279. data/spec/support/sudo.rb +16 -0
  280. data/spec/update/gems_spec.rb +201 -0
  281. data/spec/update/git_spec.rb +236 -0
  282. data/spec/update/source_spec.rb +63 -0
  283. data/spec/update/svn_spec.rb +100 -0
  284. metadata +486 -0
@@ -0,0 +1,967 @@
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