capistrano 2.8.0 → 3.19.0

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.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/.docker/Dockerfile +7 -0
  3. data/.docker/ssh_key_rsa +49 -0
  4. data/.docker/ssh_key_rsa.pub +1 -0
  5. data/.docker/ubuntu_setup.sh +23 -0
  6. data/.github/issue_template.md +19 -0
  7. data/.github/pull_request_template.md +22 -0
  8. data/.github/release-drafter.yml +25 -0
  9. data/.github/workflows/ci.yml +80 -0
  10. data/.github/workflows/release-drafter.yml +18 -0
  11. data/.gitignore +23 -8
  12. data/.rubocop.yml +62 -0
  13. data/CHANGELOG.md +1 -0
  14. data/CONTRIBUTING.md +63 -0
  15. data/DEVELOPMENT.md +112 -0
  16. data/Gemfile +42 -9
  17. data/LICENSE.txt +21 -0
  18. data/README.md +221 -0
  19. data/RELEASING.md +17 -0
  20. data/Rakefile +17 -8
  21. data/UPGRADING-3.7.md +86 -0
  22. data/bin/cap +2 -3
  23. data/bin/capify +7 -89
  24. data/capistrano.gemspec +29 -43
  25. data/docker-compose.yml +8 -0
  26. data/features/configuration.feature +28 -0
  27. data/features/deploy.feature +92 -0
  28. data/features/deploy_failure.feature +17 -0
  29. data/features/doctor.feature +11 -0
  30. data/features/installation.feature +21 -0
  31. data/features/sshconnect.feature +11 -0
  32. data/features/stage_failure.feature +9 -0
  33. data/features/step_definitions/assertions.rb +162 -0
  34. data/features/step_definitions/cap_commands.rb +21 -0
  35. data/features/step_definitions/setup.rb +91 -0
  36. data/features/subdirectory.feature +9 -0
  37. data/features/support/docker_gateway.rb +53 -0
  38. data/features/support/env.rb +1 -0
  39. data/features/support/remote_command_helpers.rb +29 -0
  40. data/features/support/remote_ssh_helpers.rb +33 -0
  41. data/lib/Capfile +3 -0
  42. data/lib/capistrano/all.rb +17 -0
  43. data/lib/capistrano/application.rb +153 -0
  44. data/lib/capistrano/configuration/empty_filter.rb +9 -0
  45. data/lib/capistrano/configuration/filter.rb +26 -0
  46. data/lib/capistrano/configuration/host_filter.rb +29 -0
  47. data/lib/capistrano/configuration/null_filter.rb +9 -0
  48. data/lib/capistrano/configuration/plugin_installer.rb +51 -0
  49. data/lib/capistrano/configuration/question.rb +76 -0
  50. data/lib/capistrano/configuration/role_filter.rb +29 -0
  51. data/lib/capistrano/configuration/scm_resolver.rb +149 -0
  52. data/lib/capistrano/configuration/server.rb +137 -0
  53. data/lib/capistrano/configuration/servers.rb +56 -96
  54. data/lib/capistrano/configuration/validated_variables.rb +110 -0
  55. data/lib/capistrano/configuration/variables.rb +79 -94
  56. data/lib/capistrano/configuration.rb +178 -33
  57. data/lib/capistrano/console.rb +1 -0
  58. data/lib/capistrano/defaults.rb +36 -0
  59. data/lib/capistrano/deploy.rb +3 -0
  60. data/lib/capistrano/doctor/environment_doctor.rb +19 -0
  61. data/lib/capistrano/doctor/gems_doctor.rb +45 -0
  62. data/lib/capistrano/doctor/output_helpers.rb +79 -0
  63. data/lib/capistrano/doctor/servers_doctor.rb +105 -0
  64. data/lib/capistrano/doctor/variables_doctor.rb +74 -0
  65. data/lib/capistrano/doctor.rb +6 -0
  66. data/lib/capistrano/dotfile.rb +2 -0
  67. data/lib/capistrano/dsl/env.rb +43 -0
  68. data/lib/capistrano/dsl/paths.rb +89 -0
  69. data/lib/capistrano/dsl/stages.rb +31 -0
  70. data/lib/capistrano/dsl/task_enhancements.rb +61 -0
  71. data/lib/capistrano/dsl.rb +95 -0
  72. data/lib/capistrano/framework.rb +2 -0
  73. data/lib/capistrano/i18n.rb +46 -0
  74. data/lib/capistrano/immutable_task.rb +30 -0
  75. data/lib/capistrano/install.rb +1 -0
  76. data/lib/capistrano/plugin.rb +95 -0
  77. data/lib/capistrano/proc_helpers.rb +13 -0
  78. data/lib/capistrano/scm/git.rb +105 -0
  79. data/lib/capistrano/scm/hg.rb +55 -0
  80. data/lib/capistrano/scm/plugin.rb +13 -0
  81. data/lib/capistrano/scm/svn.rb +56 -0
  82. data/lib/capistrano/scm/tasks/git.rake +84 -0
  83. data/lib/capistrano/scm/tasks/hg.rake +53 -0
  84. data/lib/capistrano/scm/tasks/svn.rake +53 -0
  85. data/lib/capistrano/scm.rb +115 -0
  86. data/lib/capistrano/setup.rb +36 -0
  87. data/lib/capistrano/tasks/console.rake +25 -0
  88. data/lib/capistrano/tasks/deploy.rake +280 -0
  89. data/lib/capistrano/tasks/doctor.rake +24 -0
  90. data/lib/capistrano/tasks/framework.rake +67 -0
  91. data/lib/capistrano/tasks/install.rake +41 -0
  92. data/lib/capistrano/templates/Capfile +38 -0
  93. data/lib/capistrano/templates/deploy.rb.erb +39 -0
  94. data/lib/capistrano/templates/stage.rb.erb +61 -0
  95. data/lib/capistrano/upload_task.rb +9 -0
  96. data/lib/capistrano/version.rb +1 -14
  97. data/lib/capistrano/version_validator.rb +32 -0
  98. data/lib/capistrano.rb +0 -3
  99. data/spec/integration/dsl_spec.rb +632 -0
  100. data/spec/integration_spec_helper.rb +5 -0
  101. data/spec/lib/capistrano/application_spec.rb +60 -0
  102. data/spec/lib/capistrano/configuration/empty_filter_spec.rb +17 -0
  103. data/spec/lib/capistrano/configuration/filter_spec.rb +109 -0
  104. data/spec/lib/capistrano/configuration/host_filter_spec.rb +71 -0
  105. data/spec/lib/capistrano/configuration/null_filter_spec.rb +17 -0
  106. data/spec/lib/capistrano/configuration/plugin_installer_spec.rb +98 -0
  107. data/spec/lib/capistrano/configuration/question_spec.rb +92 -0
  108. data/spec/lib/capistrano/configuration/role_filter_spec.rb +80 -0
  109. data/spec/lib/capistrano/configuration/scm_resolver_spec.rb +56 -0
  110. data/spec/lib/capistrano/configuration/server_spec.rb +309 -0
  111. data/spec/lib/capistrano/configuration/servers_spec.rb +331 -0
  112. data/spec/lib/capistrano/configuration_spec.rb +357 -0
  113. data/spec/lib/capistrano/doctor/environment_doctor_spec.rb +44 -0
  114. data/spec/lib/capistrano/doctor/gems_doctor_spec.rb +67 -0
  115. data/spec/lib/capistrano/doctor/output_helpers_spec.rb +47 -0
  116. data/spec/lib/capistrano/doctor/servers_doctor_spec.rb +86 -0
  117. data/spec/lib/capistrano/doctor/variables_doctor_spec.rb +89 -0
  118. data/spec/lib/capistrano/dsl/paths_spec.rb +228 -0
  119. data/spec/lib/capistrano/dsl/task_enhancements_spec.rb +108 -0
  120. data/spec/lib/capistrano/dsl_spec.rb +125 -0
  121. data/spec/lib/capistrano/immutable_task_spec.rb +31 -0
  122. data/spec/lib/capistrano/plugin_spec.rb +84 -0
  123. data/spec/lib/capistrano/scm/git_spec.rb +194 -0
  124. data/spec/lib/capistrano/scm/hg_spec.rb +109 -0
  125. data/spec/lib/capistrano/scm/svn_spec.rb +137 -0
  126. data/spec/lib/capistrano/scm_spec.rb +103 -0
  127. data/spec/lib/capistrano/upload_task_spec.rb +19 -0
  128. data/spec/lib/capistrano/version_validator_spec.rb +118 -0
  129. data/spec/lib/capistrano_spec.rb +7 -0
  130. data/spec/spec_helper.rb +29 -0
  131. data/spec/support/matchers.rb +5 -0
  132. data/spec/support/tasks/database.rake +11 -0
  133. data/spec/support/tasks/fail.rake +8 -0
  134. data/spec/support/tasks/failed.rake +5 -0
  135. data/spec/support/tasks/plugin.rake +6 -0
  136. data/spec/support/tasks/root.rake +11 -0
  137. data/spec/support/test_app.rb +205 -0
  138. metadata +234 -208
  139. data/.rvmrc +0 -1
  140. data/CHANGELOG +0 -954
  141. data/README.mdown +0 -76
  142. data/lib/capistrano/callback.rb +0 -45
  143. data/lib/capistrano/cli/execute.rb +0 -85
  144. data/lib/capistrano/cli/help.rb +0 -125
  145. data/lib/capistrano/cli/help.txt +0 -81
  146. data/lib/capistrano/cli/options.rb +0 -243
  147. data/lib/capistrano/cli/ui.rb +0 -40
  148. data/lib/capistrano/cli.rb +0 -47
  149. data/lib/capistrano/command.rb +0 -286
  150. data/lib/capistrano/configuration/actions/file_transfer.rb +0 -51
  151. data/lib/capistrano/configuration/actions/inspect.rb +0 -46
  152. data/lib/capistrano/configuration/actions/invocation.rb +0 -298
  153. data/lib/capistrano/configuration/callbacks.rb +0 -148
  154. data/lib/capistrano/configuration/connections.rb +0 -230
  155. data/lib/capistrano/configuration/execution.rb +0 -143
  156. data/lib/capistrano/configuration/loading.rb +0 -197
  157. data/lib/capistrano/configuration/namespaces.rb +0 -197
  158. data/lib/capistrano/configuration/roles.rb +0 -73
  159. data/lib/capistrano/errors.rb +0 -19
  160. data/lib/capistrano/ext/string.rb +0 -5
  161. data/lib/capistrano/extensions.rb +0 -57
  162. data/lib/capistrano/logger.rb +0 -59
  163. data/lib/capistrano/processable.rb +0 -53
  164. data/lib/capistrano/recipes/compat.rb +0 -32
  165. data/lib/capistrano/recipes/deploy/assets.rb +0 -57
  166. data/lib/capistrano/recipes/deploy/dependencies.rb +0 -44
  167. data/lib/capistrano/recipes/deploy/local_dependency.rb +0 -54
  168. data/lib/capistrano/recipes/deploy/remote_dependency.rb +0 -111
  169. data/lib/capistrano/recipes/deploy/scm/accurev.rb +0 -169
  170. data/lib/capistrano/recipes/deploy/scm/base.rb +0 -196
  171. data/lib/capistrano/recipes/deploy/scm/bzr.rb +0 -86
  172. data/lib/capistrano/recipes/deploy/scm/cvs.rb +0 -153
  173. data/lib/capistrano/recipes/deploy/scm/darcs.rb +0 -96
  174. data/lib/capistrano/recipes/deploy/scm/git.rb +0 -282
  175. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +0 -137
  176. data/lib/capistrano/recipes/deploy/scm/none.rb +0 -44
  177. data/lib/capistrano/recipes/deploy/scm/perforce.rb +0 -138
  178. data/lib/capistrano/recipes/deploy/scm/subversion.rb +0 -121
  179. data/lib/capistrano/recipes/deploy/scm.rb +0 -19
  180. data/lib/capistrano/recipes/deploy/strategy/base.rb +0 -88
  181. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +0 -20
  182. data/lib/capistrano/recipes/deploy/strategy/copy.rb +0 -224
  183. data/lib/capistrano/recipes/deploy/strategy/export.rb +0 -20
  184. data/lib/capistrano/recipes/deploy/strategy/remote.rb +0 -52
  185. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +0 -57
  186. data/lib/capistrano/recipes/deploy/strategy.rb +0 -19
  187. data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +0 -53
  188. data/lib/capistrano/recipes/deploy.rb +0 -568
  189. data/lib/capistrano/recipes/standard.rb +0 -37
  190. data/lib/capistrano/recipes/templates/maintenance.rhtml +0 -53
  191. data/lib/capistrano/role.rb +0 -102
  192. data/lib/capistrano/server_definition.rb +0 -56
  193. data/lib/capistrano/shell.rb +0 -260
  194. data/lib/capistrano/ssh.rb +0 -101
  195. data/lib/capistrano/task_definition.rb +0 -75
  196. data/lib/capistrano/transfer.rb +0 -216
  197. data/rvmrc.sample +0 -1
  198. data/test/cli/execute_test.rb +0 -132
  199. data/test/cli/help_test.rb +0 -165
  200. data/test/cli/options_test.rb +0 -329
  201. data/test/cli/ui_test.rb +0 -28
  202. data/test/cli_test.rb +0 -17
  203. data/test/command_test.rb +0 -289
  204. data/test/configuration/actions/file_transfer_test.rb +0 -61
  205. data/test/configuration/actions/inspect_test.rb +0 -65
  206. data/test/configuration/actions/invocation_test.rb +0 -247
  207. data/test/configuration/callbacks_test.rb +0 -220
  208. data/test/configuration/connections_test.rb +0 -420
  209. data/test/configuration/execution_test.rb +0 -175
  210. data/test/configuration/loading_test.rb +0 -132
  211. data/test/configuration/namespace_dsl_test.rb +0 -311
  212. data/test/configuration/roles_test.rb +0 -144
  213. data/test/configuration/servers_test.rb +0 -183
  214. data/test/configuration/variables_test.rb +0 -190
  215. data/test/configuration_test.rb +0 -88
  216. data/test/deploy/local_dependency_test.rb +0 -76
  217. data/test/deploy/remote_dependency_test.rb +0 -135
  218. data/test/deploy/scm/accurev_test.rb +0 -23
  219. data/test/deploy/scm/base_test.rb +0 -55
  220. data/test/deploy/scm/bzr_test.rb +0 -51
  221. data/test/deploy/scm/darcs_test.rb +0 -37
  222. data/test/deploy/scm/git_test.rb +0 -184
  223. data/test/deploy/scm/mercurial_test.rb +0 -134
  224. data/test/deploy/scm/none_test.rb +0 -35
  225. data/test/deploy/scm/subversion_test.rb +0 -32
  226. data/test/deploy/strategy/copy_test.rb +0 -321
  227. data/test/extensions_test.rb +0 -69
  228. data/test/fixtures/cli_integration.rb +0 -5
  229. data/test/fixtures/config.rb +0 -5
  230. data/test/fixtures/custom.rb +0 -3
  231. data/test/logger_test.rb +0 -123
  232. data/test/recipes_test.rb +0 -25
  233. data/test/role_test.rb +0 -11
  234. data/test/server_definition_test.rb +0 -121
  235. data/test/shell_test.rb +0 -90
  236. data/test/ssh_test.rb +0 -113
  237. data/test/task_definition_test.rb +0 -116
  238. data/test/transfer_test.rb +0 -160
  239. data/test/utils.rb +0 -37
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require "capistrano/all"
4
+ require "rspec"
5
+ require "mocha/api"
6
+ require "time"
7
+
8
+ # Requires supporting files with custom matchers and macros, etc,
9
+ # in ./support/ and its subdirectories.
10
+ Dir['#{File.dirname(__FILE__)}/support/**/*.rb'].each { |f| require f }
11
+
12
+ RSpec.configure do |config|
13
+ config.raise_errors_for_deprecations!
14
+ config.mock_framework = :mocha
15
+ config.order = "random"
16
+
17
+ config.around(:example, capture_io: true) do |example|
18
+ begin
19
+ Rake.application.options.trace_output = StringIO.new
20
+ $stdout = StringIO.new
21
+ $stderr = StringIO.new
22
+ example.run
23
+ ensure
24
+ Rake.application.options.trace_output = STDERR
25
+ $stdout = STDOUT
26
+ $stderr = STDERR
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ RSpec::Matchers.define :be_a_symlink_to do |expected|
2
+ match do |actual|
3
+ File.identical?(expected, actual)
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ namespace :deploy do
2
+ namespace :check do
3
+ task linked_files: "config/database.yml"
4
+ end
5
+ end
6
+
7
+ remote_file "config/database.yml" => "/tmp/database.yml", :roles => :all
8
+
9
+ file "/tmp/database.yml" do |t|
10
+ sh "touch #{t.name}"
11
+ end
@@ -0,0 +1,8 @@
1
+ set :fail, proc { raise }
2
+ before "deploy:starting", :fail do
3
+ on roles :all do
4
+ execute :mkdir, "-p", shared_path
5
+ execute :touch, shared_path.join("fail")
6
+ end
7
+ fetch(:fail)
8
+ end
@@ -0,0 +1,5 @@
1
+ after "deploy:failed", :custom_failed do
2
+ on roles :all do
3
+ execute :touch, shared_path.join("failed")
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ # This rake file is used by plugin_spec.rb.
2
+
3
+ task :plugin_test do
4
+ # Example of invoking a helper method provided by the plugin
5
+ hello
6
+ end
@@ -0,0 +1,11 @@
1
+ task :am_i_root do
2
+ on roles(:all) do |host|
3
+ host.user = "root"
4
+ ident = capture :id, "-a"
5
+ info "I am #{ident}"
6
+ end
7
+ on roles(:all) do |_host|
8
+ ident = capture :id, "-a"
9
+ info "I am #{ident}"
10
+ end
11
+ end
@@ -0,0 +1,205 @@
1
+ require "English"
2
+ require "fileutils"
3
+ require "pathname"
4
+ require "open3"
5
+
6
+ module TestApp
7
+ extend self
8
+
9
+ def install
10
+ install_test_app_with(default_config)
11
+ end
12
+
13
+ def default_config
14
+ <<-CONFIG
15
+ set :deploy_to, '#{deploy_to}'
16
+ set :repo_url, 'https://github.com/capistrano/capistrano.git'
17
+ set :branch, 'master'
18
+ set :ssh_options, { keys: '#{File.expand_path('../../.docker/ssh_key_rsa', __dir__)}', auth_methods: ['publickey'] }
19
+ server 'deployer@localhost:2022', roles: %w{web app}
20
+ set :linked_files, #{linked_files}
21
+ set :linked_dirs, #{linked_dirs}
22
+ set :format_options, log_file: nil
23
+ set :local_user, #{current_user.inspect}
24
+ CONFIG
25
+ end
26
+
27
+ def linked_files
28
+ %w{config/database.yml}
29
+ end
30
+
31
+ def linked_file
32
+ shared_path.join(linked_files.first)
33
+ end
34
+
35
+ def linked_dirs
36
+ %w{bin log public/system}
37
+ end
38
+
39
+ def create_test_app
40
+ FileUtils.rm_rf(test_app_path)
41
+ FileUtils.mkdir(test_app_path)
42
+
43
+ File.write(gemfile, <<-GEMFILE.gsub(/^\s+/, ""))
44
+ source "https://rubygems.org"
45
+
46
+ gem "capistrano", path: #{path_to_cap.to_s.inspect}
47
+ gem "ed25519", ">= 1.2", "< 2.0"
48
+ gem "bcrypt_pbkdf", ">= 1.0", "< 2.0"
49
+ GEMFILE
50
+
51
+ Dir.chdir(test_app_path) do
52
+ run "bundle"
53
+ end
54
+ end
55
+
56
+ def install_test_app_with(config)
57
+ create_test_app
58
+ Dir.chdir(test_app_path) do
59
+ run "cap install STAGES=#{stage}"
60
+ end
61
+ write_local_deploy_file(config)
62
+ end
63
+
64
+ def write_local_deploy_file(config)
65
+ File.open(test_stage_path, "w") do |file|
66
+ file.write config
67
+ end
68
+ end
69
+
70
+ def write_local_stage_file(filename, config=nil)
71
+ File.open(test_app_path.join("config/deploy/#{filename}"), "w") do |file|
72
+ file.write(config) if config
73
+ end
74
+ end
75
+
76
+ def append_to_deploy_file(config)
77
+ File.open(test_stage_path, "a") do |file|
78
+ file.write config + "\n"
79
+ end
80
+ end
81
+
82
+ def prepend_to_capfile(config)
83
+ current_capfile = File.read(capfile)
84
+ File.open(capfile, "w") do |file|
85
+ file.write config
86
+ file.write current_capfile
87
+ end
88
+ end
89
+
90
+ def create_shared_directory(path)
91
+ FileUtils.mkdir_p(shared_path.join(path))
92
+ end
93
+
94
+ def create_shared_file(path)
95
+ File.open(shared_path.join(path), "w")
96
+ end
97
+
98
+ def cap(task, subdirectory=nil)
99
+ run "cap #{stage} #{task} --trace", subdirectory
100
+ end
101
+
102
+ def run(command, subdirectory=nil)
103
+ command = "bundle exec #{command}" unless command =~ /^bundle\b/
104
+ dir = subdirectory ? test_app_path.join(subdirectory) : test_app_path
105
+ output, status = Dir.chdir(dir) do
106
+ with_clean_bundler_env { Open3.capture2e(command) }
107
+ end
108
+ [status.success?, output]
109
+ end
110
+
111
+ def stage
112
+ "test"
113
+ end
114
+
115
+ def test_stage_path
116
+ test_app_path.join("config/deploy/test.rb")
117
+ end
118
+
119
+ def test_app_path
120
+ Pathname.new("/tmp/test_app")
121
+ end
122
+
123
+ def deploy_to
124
+ Pathname.new("/home/deployer/var/www/deploy")
125
+ end
126
+
127
+ def shared_path
128
+ deploy_to.join("shared")
129
+ end
130
+
131
+ def current_path
132
+ deploy_to.join("current")
133
+ end
134
+
135
+ def releases_path
136
+ deploy_to.join("releases")
137
+ end
138
+
139
+ def release_path(t=timestamp)
140
+ releases_path.join(t)
141
+ end
142
+
143
+ def timestamp(offset=0)
144
+ (Time.now.utc + offset).strftime("%Y%m%d%H%M%S")
145
+ end
146
+
147
+ def repo_path
148
+ deploy_to.join("repo")
149
+ end
150
+
151
+ def path_to_cap
152
+ File.expand_path(".")
153
+ end
154
+
155
+ def gemfile
156
+ test_app_path.join("Gemfile")
157
+ end
158
+
159
+ def capfile
160
+ test_app_path.join("Capfile")
161
+ end
162
+
163
+ def current_user
164
+ "(GitHub Web Flow) via ShipIt"
165
+ end
166
+
167
+ def task_dir
168
+ test_app_path.join("lib/capistrano/tasks")
169
+ end
170
+
171
+ def copy_task_to_test_app(source)
172
+ FileUtils.cp(source, task_dir)
173
+ end
174
+
175
+ def config_path
176
+ test_app_path.join("config")
177
+ end
178
+
179
+ def move_configuration_to_custom_location(location)
180
+ prepend_to_capfile(
181
+ <<-CONFIG
182
+ set :stage_config_path, "app/config/deploy"
183
+ set :deploy_config_path, "app/config/deploy.rb"
184
+ CONFIG
185
+ )
186
+
187
+ location = test_app_path.join(location)
188
+ FileUtils.mkdir_p(location)
189
+ FileUtils.mv(config_path, location)
190
+ end
191
+
192
+ def git_wrapper_path_glob
193
+ "/tmp/git-ssh-*.sh"
194
+ end
195
+
196
+ def with_clean_bundler_env(&block)
197
+ return yield unless defined?(Bundler)
198
+
199
+ if Bundler.respond_to?(:with_unbundled_env)
200
+ Bundler.with_unbundled_env(&block)
201
+ else
202
+ Bundler.with_clean_env(&block)
203
+ end
204
+ end
205
+ end