r10k 3.14.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +17 -0
  3. data/.github/workflows/docker.yml +9 -4
  4. data/.github/workflows/release.yml +3 -2
  5. data/.github/workflows/rspec_tests.yml +8 -10
  6. data/CHANGELOG.mkd +100 -0
  7. data/CODEOWNERS +1 -2
  8. data/Gemfile +2 -2
  9. data/README.mkd +18 -19
  10. data/doc/common-patterns.mkd +1 -2
  11. data/doc/dynamic-environments/configuration.mkd +91 -12
  12. data/doc/dynamic-environments/usage.mkd +4 -0
  13. data/doc/dynamic-environments/workflow-guide.mkd +3 -3
  14. data/doc/faq.mkd +1 -1
  15. data/doc/puppetfile.mkd +9 -3
  16. data/integration/Gemfile +3 -4
  17. data/integration/Rakefile +58 -23
  18. data/integration/files/pre-suite/git_config.pp.erb +1 -1
  19. data/integration/pre-suite/00_pe_install.rb +3 -0
  20. data/integration/pre-suite/10_git_config.rb +1 -3
  21. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
  22. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
  23. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
  24. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
  25. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
  26. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
  27. data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
  28. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
  29. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
  30. data/integration/tests/git_source/git_source_git.rb +1 -4
  31. data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
  32. data/integration/tests/git_source/git_source_submodule.rb +1 -1
  33. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
  34. data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
  35. data/integration/tests/purging/default_purging.rb +0 -3
  36. data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
  37. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
  38. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
  39. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
  41. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
  42. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
  43. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
  44. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
  45. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
  46. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
  47. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
  48. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
  49. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
  50. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
  51. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
  52. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
  53. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
  54. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
  55. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
  56. data/lib/r10k/action/deploy/environment.rb +2 -19
  57. data/lib/r10k/action/deploy/module.rb +1 -0
  58. data/lib/r10k/action/puppetfile/check.rb +7 -0
  59. data/lib/r10k/action/puppetfile/install.rb +3 -1
  60. data/lib/r10k/cli/deploy.rb +15 -1
  61. data/lib/r10k/cli/puppetfile.rb +1 -0
  62. data/lib/r10k/content_synchronizer.rb +7 -2
  63. data/lib/r10k/environment/with_modules.rb +24 -1
  64. data/lib/r10k/environment.rb +0 -1
  65. data/lib/r10k/git/rugged/bare_repository.rb +5 -4
  66. data/lib/r10k/git/rugged/thin_repository.rb +7 -0
  67. data/lib/r10k/git/rugged/working_repository.rb +13 -7
  68. data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
  69. data/lib/r10k/git/shellgit/working_repository.rb +5 -4
  70. data/lib/r10k/git/stateful_repository.rb +4 -4
  71. data/lib/r10k/module/base.rb +3 -3
  72. data/lib/r10k/module/git.rb +19 -5
  73. data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
  74. data/lib/r10k/module_loader/puppetfile.rb +22 -14
  75. data/lib/r10k/puppetfile.rb +1 -1
  76. data/lib/r10k/settings/container.rb +1 -0
  77. data/lib/r10k/settings.rb +6 -7
  78. data/lib/r10k/tarball.rb +1 -1
  79. data/lib/r10k/version.rb +1 -1
  80. data/locales/r10k.pot +34 -82
  81. data/r10k.gemspec +8 -18
  82. metadata +40 -213
  83. data/.github/workflows/stale.yml +0 -21
  84. data/.travis.yml +0 -42
  85. data/docker/.gitignore +0 -1
  86. data/docker/.rspec +0 -4
  87. data/docker/Gemfile +0 -11
  88. data/docker/Makefile +0 -92
  89. data/docker/README.md +0 -28
  90. data/docker/docker-compose.yml +0 -18
  91. data/docker/r10k/Dockerfile +0 -68
  92. data/docker/r10k/adduser.sh +0 -13
  93. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
  94. data/docker/r10k/docker-entrypoint.sh +0 -10
  95. data/docker/r10k/release.Dockerfile +0 -55
  96. data/docker/spec/dockerfile_spec.rb +0 -37
  97. data/docker/spec/fixtures/Puppetfile +0 -2
  98. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
  99. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
  100. data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
  102. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
  103. data/lib/r10k/environment/bare.rb +0 -13
  104. data/spec/fixtures/empty/.empty +0 -0
  105. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  106. data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
  107. data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
  108. data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
  109. data/spec/fixtures/tarball/tarball.tar.gz +0 -0
  110. data/spec/fixtures/unit/action/r10k.yaml +0 -5
  111. data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
  112. data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
  113. data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
  114. data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
  115. data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
  116. data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
  117. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
  118. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
  119. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
  120. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
  121. data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
  122. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
  123. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
  124. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
  125. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
  126. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
  127. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
  128. data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
  129. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  130. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
  131. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
  132. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  133. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  134. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
  135. data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
  136. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  137. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
  138. data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
  139. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  140. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  141. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
  142. data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
  143. data/spec/integration/git/rugged/cache_spec.rb +0 -33
  144. data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
  145. data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
  146. data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
  147. data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
  148. data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
  149. data/spec/integration/git/stateful_repository_spec.rb +0 -159
  150. data/spec/integration/util/purageable_spec.rb +0 -41
  151. data/spec/matchers/exit_with.rb +0 -28
  152. data/spec/matchers/match_realpath.rb +0 -18
  153. data/spec/r10k-mocks/mock_config.rb +0 -33
  154. data/spec/r10k-mocks/mock_env.rb +0 -18
  155. data/spec/r10k-mocks/mock_source.rb +0 -17
  156. data/spec/r10k-mocks.rb +0 -3
  157. data/spec/shared-contexts/git-fixtures.rb +0 -55
  158. data/spec/shared-contexts/tarball.rb +0 -32
  159. data/spec/shared-examples/deploy-actions.rb +0 -69
  160. data/spec/shared-examples/git/bare_repository.rb +0 -132
  161. data/spec/shared-examples/git/thin_repository.rb +0 -26
  162. data/spec/shared-examples/git/working_repository.rb +0 -207
  163. data/spec/shared-examples/git-repository.rb +0 -38
  164. data/spec/shared-examples/puppetfile-action.rb +0 -39
  165. data/spec/shared-examples/settings/ancestry.rb +0 -44
  166. data/spec/shared-examples/subprocess-runner.rb +0 -89
  167. data/spec/spec_helper.rb +0 -41
  168. data/spec/unit/action/cri_runner_spec.rb +0 -72
  169. data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
  170. data/spec/unit/action/deploy/display_spec.rb +0 -61
  171. data/spec/unit/action/deploy/environment_spec.rb +0 -640
  172. data/spec/unit/action/deploy/module_spec.rb +0 -476
  173. data/spec/unit/action/puppetfile/check_spec.rb +0 -53
  174. data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
  175. data/spec/unit/action/puppetfile/install_spec.rb +0 -112
  176. data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
  177. data/spec/unit/action/runner_spec.rb +0 -407
  178. data/spec/unit/action/visitor_spec.rb +0 -39
  179. data/spec/unit/cli_spec.rb +0 -9
  180. data/spec/unit/deployment/config_spec.rb +0 -33
  181. data/spec/unit/deployment_spec.rb +0 -162
  182. data/spec/unit/environment/bare_spec.rb +0 -13
  183. data/spec/unit/environment/base_spec.rb +0 -122
  184. data/spec/unit/environment/git_spec.rb +0 -114
  185. data/spec/unit/environment/name_spec.rb +0 -181
  186. data/spec/unit/environment/plain_spec.rb +0 -8
  187. data/spec/unit/environment/svn_spec.rb +0 -146
  188. data/spec/unit/environment/tarball_spec.rb +0 -45
  189. data/spec/unit/environment/with_modules_spec.rb +0 -75
  190. data/spec/unit/errors/formatting_spec.rb +0 -84
  191. data/spec/unit/feature_spec.rb +0 -50
  192. data/spec/unit/forge/module_release_spec.rb +0 -213
  193. data/spec/unit/git/alternates_spec.rb +0 -116
  194. data/spec/unit/git/cache_spec.rb +0 -66
  195. data/spec/unit/git/rugged/cache_spec.rb +0 -48
  196. data/spec/unit/git/rugged/credentials_spec.rb +0 -215
  197. data/spec/unit/git/shellgit/cache_spec.rb +0 -27
  198. data/spec/unit/git/stateful_repository_spec.rb +0 -45
  199. data/spec/unit/git_spec.rb +0 -102
  200. data/spec/unit/initializers_spec.rb +0 -68
  201. data/spec/unit/instance_cache_spec.rb +0 -78
  202. data/spec/unit/keyed_factory_spec.rb +0 -51
  203. data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
  204. data/spec/unit/logging_spec.rb +0 -68
  205. data/spec/unit/module/base_spec.rb +0 -118
  206. data/spec/unit/module/forge_spec.rb +0 -271
  207. data/spec/unit/module/git_spec.rb +0 -387
  208. data/spec/unit/module/metadata_file_spec.rb +0 -68
  209. data/spec/unit/module/svn_spec.rb +0 -208
  210. data/spec/unit/module/tarball_spec.rb +0 -70
  211. data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
  212. data/spec/unit/module_spec.rb +0 -114
  213. data/spec/unit/puppetfile_spec.rb +0 -304
  214. data/spec/unit/settings/collection_spec.rb +0 -123
  215. data/spec/unit/settings/container_spec.rb +0 -92
  216. data/spec/unit/settings/definition_spec.rb +0 -79
  217. data/spec/unit/settings/enum_definition_spec.rb +0 -20
  218. data/spec/unit/settings/inheritance_spec.rb +0 -38
  219. data/spec/unit/settings/list_spec.rb +0 -88
  220. data/spec/unit/settings/loader_spec.rb +0 -110
  221. data/spec/unit/settings/uri_definition_spec.rb +0 -23
  222. data/spec/unit/settings_spec.rb +0 -303
  223. data/spec/unit/source/base_spec.rb +0 -31
  224. data/spec/unit/source/exec_spec.rb +0 -81
  225. data/spec/unit/source/git_spec.rb +0 -233
  226. data/spec/unit/source/hash_spec.rb +0 -54
  227. data/spec/unit/source/svn_spec.rb +0 -196
  228. data/spec/unit/source/yaml_spec.rb +0 -42
  229. data/spec/unit/source_spec.rb +0 -10
  230. data/spec/unit/svn/remote_spec.rb +0 -21
  231. data/spec/unit/svn/working_dir_spec.rb +0 -56
  232. data/spec/unit/tarball_spec.rb +0 -57
  233. data/spec/unit/util/attempt_spec.rb +0 -82
  234. data/spec/unit/util/cacheable_spec.rb +0 -23
  235. data/spec/unit/util/commands_spec.rb +0 -61
  236. data/spec/unit/util/downloader_spec.rb +0 -98
  237. data/spec/unit/util/exec_env_spec.rb +0 -56
  238. data/spec/unit/util/purgeable_spec.rb +0 -267
  239. data/spec/unit/util/setopts_spec.rb +0 -83
  240. data/spec/unit/util/subprocess/result_spec.rb +0 -36
  241. data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
  242. data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
  243. data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
  244. data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
  245. data/spec/unit/util/subprocess_spec.rb +0 -65
  246. data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess'
3
-
4
- describe R10K::Util::Subprocess::Result do
5
- describe "formatting" do
6
- it "includes the exit code" do
7
- result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
8
- expect(result.format).to match(%r[Exit code: 42])
9
- end
10
-
11
- describe "stdout" do
12
- it "is omitted when empty" do
13
- result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
14
- expect(result.format).to_not match(%r[Stdout])
15
- end
16
- it "is included when non-empty" do
17
- result = described_class.new(%w[/usr/bin/gti --zoom], 'stuff here', '', 42)
18
- expect(result.format).to match(%r[Stdout:])
19
- expect(result.format).to match(%r[stuff here])
20
- end
21
- end
22
-
23
- describe "stderr" do
24
- it "is omitted when empty" do
25
- result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
26
- expect(result.format).to_not match(%r[Stderr])
27
- end
28
-
29
- it "is included when non-empty" do
30
- result = described_class.new(%w[/usr/bin/gti --zoom], '', 'other stuff', 42)
31
- expect(result.format).to match(%r[Stderr:])
32
- expect(result.format).to match(%r[other stuff])
33
- end
34
- end
35
- end
36
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess/runner'
3
-
4
- describe R10K::Util::Subprocess::Runner::POSIX, :if => R10K::Util::Platform.posix? do
5
- fixture_root = File.expand_path('spec/fixtures/unit/util/subprocess/runner', PROJECT_ROOT)
6
- it_behaves_like 'a subprocess runner', fixture_root
7
- end
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess/runner/pump'
3
-
4
- describe R10K::Util::Subprocess::Runner::Pump do
5
-
6
- let(:pair) { IO.pipe }
7
- let(:r) { pair.first }
8
- let(:w) { pair.last }
9
-
10
- after do
11
- pair.each { |io| io.close unless io.closed? }
12
- end
13
-
14
- subject { described_class.new(r) }
15
-
16
- it "returns an empty string if nothing has been read" do
17
- expect(subject.string).to eq('')
18
- end
19
-
20
- describe "reading all data in the stream" do
21
- it "reads data until the stream reaches EOF" do
22
- subject.start
23
- w << "hello"
24
- w << " "
25
- w << "world!"
26
- w.close
27
- subject.wait
28
- expect(subject.string).to eq("hello world!")
29
- end
30
- end
31
-
32
- describe "halting" do
33
- it "does not read any more information read off the pipe" do
34
- subject.min_delay = 0.01
35
- subject.start
36
- w << "hello"
37
-
38
- # This should ensure that we yield to the pumping thread. If this test
39
- # sporadically fails then we may need to increase the timeout.
40
- sleep 0.1
41
- subject.halt!
42
- w << " world!"
43
-
44
- expect(subject.string).to eq("hello")
45
- end
46
- end
47
-
48
- describe "backing off" do
49
- it "does not back off more than the max delay time" do
50
- max_delay = subject.min_delay * 2
51
- subject.max_delay = max_delay
52
- subject.start
53
- sleep max_delay * 2
54
-
55
- Timeout.timeout(max_delay * 1.5) do
56
- subject.halt!
57
- end
58
-
59
- end
60
- end
61
-
62
- # Linux 2.6.11+ has a maximum pipe capacity of 64 KiB, and writing to the
63
- # pipe when the pipe is at capacity will block. To make sure the pump is
64
- # actively removing contents from the pipe we need to attempt to fill up
65
- # the entire pipe.
66
- #
67
- # See man pipe(7)
68
- it "does not block if more than 64 kilobytes are fed into the pipe" do
69
- # The maximum pipe buffer size is 2 ** 16 bytes, so that's the minimum
70
- # amount of data needed to cause further writes to block. We then double
71
- # this value to make sure that we are continuously emptying the pipe.
72
- pipe_buffer_size = 2 ** 17
73
- blob = "buffalo!" * pipe_buffer_size
74
- subject.start
75
- Timeout.timeout(60) { w << blob }
76
- w.close
77
- subject.wait
78
- end
79
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess/runner'
3
-
4
- describe R10K::Util::Subprocess::Runner::Windows, :if => R10K::Util::Platform.windows? do
5
- fixture_root = File.expand_path('spec/fixtures/unit/util/subprocess/runner', PROJECT_ROOT)
6
- it_behaves_like 'a subprocess runner', fixture_root
7
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess'
3
-
4
- describe R10K::Util::Subprocess::SubprocessError do
5
- let(:result) do
6
- R10K::Util::Subprocess::Result.new(%w[/usr/bin/gti --zoom], "zooming on stdout", "zooming on stderr", 42)
7
- end
8
-
9
- describe "formatting the message" do
10
- subject(:message) { described_class.new("Execution failed", :result => result).message }
11
-
12
- it "includes the exception message and formatted result" do
13
- expect(message).to eq(
14
- [
15
- "Execution failed:",
16
- "Command: /usr/bin/gti --zoom",
17
- "Stdout:",
18
- "zooming on stdout",
19
- "Stderr:",
20
- "zooming on stderr",
21
- "Exit code: 42",
22
- ].join("\n")
23
- )
24
- end
25
- end
26
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/subprocess'
3
-
4
- describe R10K::Util::Subprocess do
5
-
6
- describe "selecting the runner implementation" do
7
- it "uses the windows implementation on Windows platforms" do
8
- expect(R10K::Util::Platform).to receive(:windows?).and_return true
9
- expect(described_class.runner).to eq R10K::Util::Subprocess::Runner::Windows
10
- end
11
-
12
- it "uses the posix implementation when not on windows" do
13
- expect(R10K::Util::Platform).to receive(:windows?).and_return true
14
- expect(described_class.runner).to eq R10K::Util::Subprocess::Runner::Windows
15
- end
16
- end
17
-
18
- describe "running commands" do
19
- subject { described_class.new(['/bin/echo', 'hello', 'world']) }
20
-
21
- let(:runner) do
22
- double('R10K::Util::Subprocess::Runner').tap do |i|
23
- allow(i).to receive(:run).and_return(result)
24
- end
25
- end
26
-
27
- let(:result) { double('R10K::Util::Subprocess::Result').as_null_object }
28
-
29
- before do
30
- allow(described_class).to receive(:runner).and_return(double(:new => runner))
31
- end
32
-
33
- it "copies the cwd to the runner if a cwd is given" do
34
- expect(runner).to receive(:cwd=).with('/tmp')
35
- subject.cwd = '/tmp'
36
- subject.execute
37
- end
38
-
39
- it "returns the result from the execution" do
40
- expect(subject.execute).to eq result
41
- end
42
-
43
- describe "when the command returned with a non-zero exit status" do
44
- before do
45
- allow(runner).to receive(:crashed?).and_return true
46
- end
47
-
48
- it "raises an exception if raise_on_fail is true" do
49
- subject.raise_on_fail = true
50
-
51
- allow(result).to receive(:exit_code).and_return(255)
52
- allow(result).to receive(:stderr).and_return('Command not found')
53
-
54
- expect {
55
- subject.execute
56
- }.to raise_error(R10K::Util::Subprocess::SubprocessError, /Command exited with non-zero exit code/)
57
- end
58
-
59
- it "doesn't raise an exception if raise_on_fail is false" do
60
- subject.raise_on_fail = false
61
- expect { subject.execute }.to_not raise_error
62
- end
63
- end
64
- end
65
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/util/symbolize_keys'
3
-
4
- describe R10K::Util::SymbolizeKeys do
5
- it "deletes all keys that are strings" do
6
- hash = {'foo' => 'bar', :baz => 'quux'}
7
- described_class.symbolize_keys!(hash)
8
- expect(hash).to_not have_key('foo')
9
- end
10
-
11
- it "replaces the deleted keys with interned strings" do
12
- hash = {'foo' => 'bar', :baz => 'quux'}
13
-
14
- described_class.symbolize_keys!(hash)
15
- expect(hash[:foo]).to eq 'bar'
16
- end
17
-
18
- it "raises an error if there is an existing symbol for a given string key" do
19
- hash = {'foo' => 'bar', :foo => 'quux'}
20
-
21
- expect {
22
- described_class.symbolize_keys!(hash)
23
- }.to raise_error(TypeError, /An existing interned key/)
24
- end
25
-
26
- it "does not modify existing symbol entries" do
27
- hash = {'foo' => 'bar', :baz => 'quux'}
28
-
29
- described_class.symbolize_keys!(hash)
30
- expect(hash[:baz]).to eq 'quux'
31
- end
32
-
33
- it "does not modify keys that are not strings or symbols" do
34
- key = %w[foo]
35
- hash = {key => 'bar', :baz => 'quux'}
36
- described_class.symbolize_keys!(hash)
37
- expect(hash[key]).to eq 'bar'
38
- end
39
-
40
- context "when symbolizing recursively" do
41
- it "can recursively symbolize keys in nested hash values" do
42
- hash = {'foo' => {'bar' => 'baz'}}
43
- described_class.symbolize_keys!(hash, true)
44
- expect(hash).to eq({:foo => {:bar => 'baz'}})
45
- end
46
-
47
- it "recurses into hash values that had symbol keys" do
48
- hash = {:foo => {'bar' => {'baz' => 'quux'}}}
49
- described_class.symbolize_keys!(hash, true)
50
- expect(hash).to eq({:foo => {:bar => {:baz => 'quux'}}})
51
- end
52
-
53
- it "recurses into array values whose items are hashes" do
54
- hash = {'foo' => [ {'item1_key' => 'val'}, {'item2_key' => 'val'} ]}
55
-
56
- described_class.symbolize_keys!(hash, true)
57
- expect(hash).to eq({:foo => [ {:item1_key => 'val'}, {:item2_key => 'val'} ]})
58
- end
59
-
60
- it "ignores nested array items that are not hashes" do
61
- hash = {'foo' => [ {'item1_key' => 'val'}, 'banana' ]}
62
-
63
- described_class.symbolize_keys!(hash, true)
64
- expect(hash).to eq({:foo => [ {:item1_key => 'val'}, 'banana' ]})
65
- end
66
- end
67
- end