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,55 +0,0 @@
1
- require 'archive/tar/minitar'
2
- require 'tmpdir'
3
-
4
- shared_context "Git integration" do
5
-
6
- # Use tmpdir for cached git repositories
7
-
8
- before(:all) do
9
- @old_cache_root = R10K::Git::Cache.settings[:cache_root]
10
- R10K::Git::Cache.settings[:cache_root] = Dir.mktmpdir
11
- end
12
-
13
- after(:all) do
14
- FileUtils.remove_entry_secure(R10K::Git::Cache.settings[:cache_root])
15
- R10K::Git::Cache.settings[:cache_root] = @old_cache_root
16
- end
17
-
18
- # Create a mutable path for remote repositories
19
-
20
- def fixture_path
21
- File.join(PROJECT_ROOT, 'spec', 'fixtures', 'integration', 'git')
22
- end
23
-
24
- def remote_path
25
- @remote_path
26
- end
27
-
28
- def populate_remote_path
29
- Archive::Tar::Minitar.unpack(File.join(fixture_path, 'puppet-boolean-bare.tar'), remote_path)
30
- end
31
-
32
- def clear_remote_path
33
- FileUtils.remove_entry_secure(remote_path)
34
- end
35
-
36
- before(:all) do
37
- @remote_path = Dir.mktmpdir
38
- populate_remote_path
39
- end
40
-
41
- after(:all) do
42
- clear_remote_path
43
- @remote_path = nil
44
- end
45
-
46
- let(:remote) { Pathname.new(File.join(remote_path, 'puppet-boolean.git')).realpath.to_s }
47
-
48
- # Create a temp path for the git basedir and clean it up when finished
49
-
50
- let(:basedir) { Dir.mktmpdir }
51
-
52
- after do
53
- FileUtils.remove_entry_secure(basedir)
54
- end
55
- end
@@ -1,32 +0,0 @@
1
- require 'tmpdir'
2
- require 'fileutils'
3
-
4
- shared_context "Tarball" do
5
- # Suggested subject:
6
- #
7
- # subject { described_class.new('fixture-tarball', fixture_tarball, checksum: fixture_checksum) }
8
- #
9
- let(:fixture_tarball) do
10
- File.expand_path('spec/fixtures/tarball/tarball.tar.gz', PROJECT_ROOT)
11
- end
12
-
13
- let(:fixture_checksum) { '292e692ad18faabd4f9b21037d51f0185e04b69f82c522a54af91fb5b88c2d3b' }
14
-
15
- # Use tmpdir for cached tarballs
16
- let(:tmpdir) { Dir.mktmpdir }
17
-
18
- # `moduledir` and `cache_root` are available for examples to use in creating
19
- # their subjects
20
- let(:moduledir) { File.join(tmpdir, 'modules').tap { |path| Dir.mkdir(path) } }
21
- let(:cache_root) { File.join(tmpdir, 'cache').tap { |path| Dir.mkdir(path) } }
22
-
23
- around(:each) do |example|
24
- if subject.is_a?(R10K::Tarball)
25
- subject.settings[:cache_root] = cache_root
26
- elsif subject.respond_to?(:tarball) && subject.tarball.is_a?(R10K::Tarball)
27
- subject.tarball.settings[:cache_root] = cache_root
28
- end
29
- example.run
30
- FileUtils.remove_entry_secure(tmpdir)
31
- end
32
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'r10k/deployment'
4
-
5
- shared_examples_for "a deploy action that requires a config file" do
6
- let(:config) do
7
- R10K::Deployment::MockConfig.new(
8
- :sources => {
9
- :control => {
10
- :type => :mock,
11
- :basedir => '/some/nonexistent/path/control',
12
- :environments => %w[first second third],
13
- },
14
- :hiera => {
15
- :type => :mock,
16
- :basedir => '/some/nonexistent/path/hiera',
17
- :environments => %w[fourth fifth sixth],
18
- }
19
- }
20
- )
21
- end
22
-
23
- let(:deployment) { R10K::Deployment.new(config) }
24
-
25
- before do
26
- allow(R10K::Deployment).to receive(:new).and_return(deployment)
27
- end
28
-
29
- it "exits when no config file was provided or found" do
30
- subject.instance_variable_set(:@config, nil)
31
- expect {
32
- subject.call
33
- }.to exit_with(8)
34
- end
35
- end
36
-
37
- shared_examples_for "a deploy action that can be write locked" do
38
-
39
- let(:config) do
40
- R10K::Deployment::MockConfig.new(
41
- :sources => {
42
- :control => {
43
- :type => :mock,
44
- :basedir => '/some/nonexistent/path/control',
45
- :environments => %w[first second third],
46
- },
47
- :hiera => {
48
- :type => :mock,
49
- :basedir => '/some/nonexistent/path/hiera',
50
- :environments => %w[fourth fifth sixth],
51
- }
52
- }
53
- )
54
- end
55
-
56
- let(:deployment) { R10K::Deployment.new(config) }
57
-
58
- before do
59
- allow(R10K::Deployment).to receive(:new).and_return(deployment)
60
- subject.settings = {deploy: {write_lock: "Disabled, yo"}}
61
- end
62
-
63
- it "exits without running when the write lock is set" do
64
- expect(subject).to_not receive(:visit_deployment)
65
- expect {
66
- subject.call
67
- }.to exit_with(16)
68
- end
69
- end
@@ -1,132 +0,0 @@
1
- RSpec.shared_examples "a git bare repository" do
2
-
3
- describe "checking for the presence of the repo" do
4
- it "exists if the repo is present" do
5
- subject.clone(remote)
6
- expect(subject.exist?).to be_truthy
7
- end
8
-
9
- it "doesn't exist if the repo is not present" do
10
- expect(subject.exist?).to be_falsey
11
- end
12
- end
13
-
14
- describe "cloning the repo" do
15
- it "creates the repo at the expected location" do
16
- subject.clone(remote)
17
- config = File.read(File.join(basedir, dirname, 'config'))
18
- expect(config).to match(remote)
19
- end
20
-
21
- context "without a proxy" do
22
- before(:each) do
23
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return(nil)
24
- end
25
-
26
- it 'does not change proxy ENV' do
27
- expect(ENV).to_not receive(:[]=)
28
- expect(ENV).to_not receive(:update)
29
-
30
- subject.clone(remote)
31
- end
32
- end
33
-
34
- context "with a proxy" do
35
- before(:each) do
36
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return('http://proxy.example.com:3128')
37
- end
38
-
39
- it "manages proxy-related ENV vars" do
40
- # Sets proxy settings.
41
- ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'].each do |var|
42
- expect(ENV).to receive(:[]=).with(var, 'http://proxy.example.com:3128')
43
- end
44
-
45
- # Resets proxy settings when done.
46
- expect(ENV).to receive(:update).with(hash_including('HTTPS_PROXY' => nil))
47
-
48
- subject.clone(remote)
49
- end
50
- end
51
- end
52
-
53
- describe "updating the repo" do
54
- let(:tag_090) { subject.git_dir + 'refs' + 'tags' + '0.9.0' }
55
- let(:packed_refs) { subject.git_dir + 'packed-refs' }
56
-
57
- before do
58
- subject.clone(remote)
59
- tag_090.delete if tag_090.exist?
60
- packed_refs.delete if packed_refs.exist?
61
- end
62
-
63
- it "fetches objects from the remote" do
64
- expect(subject.tags).to_not include('0.9.0')
65
- subject.fetch
66
- expect(subject.tags).to include('0.9.0')
67
- end
68
-
69
- context "without a proxy" do
70
- before(:each) do
71
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return(nil)
72
- end
73
-
74
- it 'does not change proxy ENV' do
75
- expect(ENV).to_not receive(:[]=)
76
- expect(ENV).to_not receive(:update)
77
-
78
- subject.fetch
79
- end
80
- end
81
-
82
- context "with a proxy" do
83
- before(:each) do
84
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return('http://proxy.example.com:3128')
85
- end
86
-
87
- it "manages proxy-related ENV vars" do
88
- # Sets proxy settings.
89
- ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'].each do |var|
90
- expect(ENV).to receive(:[]=).with(var, 'http://proxy.example.com:3128')
91
- end
92
-
93
- # Resets proxy settings when done.
94
- expect(ENV).to receive(:update).with(hash_including('HTTPS_PROXY' => nil))
95
-
96
- subject.fetch
97
- end
98
- end
99
- end
100
-
101
- describe "listing branches" do
102
- before do
103
- subject.clone(remote)
104
- end
105
-
106
- it "lists all branches in alphabetical order" do
107
- expect(subject.branches).to eq(%w[0.9.x master])
108
- end
109
- end
110
-
111
- describe "determining ref type" do
112
- before do
113
- subject.clone(remote)
114
- end
115
-
116
- it "can infer the type of a branch ref" do
117
- expect(subject.ref_type('master')).to eq :branch
118
- end
119
-
120
- it "can infer the type of a tag ref" do
121
- expect(subject.ref_type('1.0.0')).to eq :tag
122
- end
123
-
124
- it "can infer the type of a commit" do
125
- expect(subject.ref_type('3084373e8d181cf2fea5b4ade2690ba22872bd67')).to eq :commit
126
- end
127
-
128
- it "returns :unknown when the type cannot be inferred" do
129
- expect(subject.ref_type('1.2.3')).to eq :unknown
130
- end
131
- end
132
- end
@@ -1,26 +0,0 @@
1
- RSpec.shared_examples "a git thin repository" do
2
- describe "cloning" do
3
- it "creates a working copy of the repo" do
4
- subject.clone(remote)
5
- expect(subject.exist?).to be_truthy
6
- end
7
-
8
- it "sets the remote origin url to the provided url" do
9
- subject.clone(remote)
10
- expect(subject.origin).to eq remote
11
- end
12
-
13
- it "sets the remote cache url to the path to the cache repo" do
14
- subject.clone(remote)
15
- expect(subject.cache).to eq cacherepo.git_dir.to_s
16
- end
17
-
18
- it "adds the cache repo to the alternates file" do
19
- subject.clone(remote)
20
- objectpath = cacherepo.git_dir + 'objects'
21
- alternates = subject.alternates.to_a
22
- expect(alternates.size).to eq 1
23
- expect(alternates[0]).to match_realpath objectpath
24
- end
25
- end
26
- end
@@ -1,207 +0,0 @@
1
- RSpec.shared_examples "a git working repository" do
2
- describe "cloning" do
3
- it "creates a working copy of the repo" do
4
- subject.clone(remote)
5
- expect(subject.exist?).to be_truthy
6
- end
7
-
8
- describe "using the default branch" do
9
- describe "and the remote HEAD is 'master'" do
10
- it "checks out the default branch" do
11
- subject.clone(remote)
12
- expect(subject.head).to eq "157011a4eaa27f1202a9d94335ee4876b26d377e"
13
- end
14
- end
15
-
16
- describe "and the remote HEAD is '0.9.x'" do
17
- before do
18
- File.open(File.join(remote, 'HEAD'), 'w') do |fh|
19
- fh.write('ref: refs/heads/0.9.x')
20
- end
21
- end
22
-
23
- after do
24
- clear_remote_path
25
- populate_remote_path
26
- end
27
-
28
- it "checks out the default branch" do
29
- subject.clone(remote)
30
- expect(subject.head).to eq "3084373e8d181cf2fea5b4ade2690ba22872bd67"
31
- end
32
- end
33
- end
34
-
35
- describe "using an explicit ref" do
36
- it "can check out tags" do
37
- subject.clone(remote, {:ref => '1.0.0'})
38
- expect(subject.head).to eq "14cbb45ae3a5f764320b7e63f1a54a25a1ef6c9c"
39
- end
40
-
41
- it "can check out remote branches" do
42
- subject.clone(remote, {:ref => 'origin/0.9.x'})
43
- expect(subject.head).to eq "3084373e8d181cf2fea5b4ade2690ba22872bd67"
44
- end
45
-
46
- it "can check out commits" do
47
- subject.clone(remote, {:ref => '14cbb45ae3a5f764320b7e63f1a54a25a1ef6c9c'})
48
- expect(subject.head).to eq "14cbb45ae3a5f764320b7e63f1a54a25a1ef6c9c"
49
- end
50
- end
51
-
52
- describe "with a reference repository" do
53
- it "adds the reference repository to the alternates directory" do
54
- subject.clone(remote, {:reference => remote})
55
- alternates = subject.alternates.to_a
56
- expect(alternates.size).to eq 1
57
- expect(alternates[0]).to match_realpath File.join(remote, 'objects')
58
- end
59
- end
60
-
61
- context "without a proxy" do
62
- before(:each) do
63
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return(nil)
64
- end
65
-
66
- it 'does not change proxy ENV' do
67
- expect(ENV).to_not receive(:[]=)
68
- expect(ENV).to_not receive(:update)
69
-
70
- subject.clone(remote)
71
- end
72
- end
73
-
74
- context "with a proxy" do
75
- before(:each) do
76
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return('http://proxy.example.com:3128')
77
- end
78
-
79
- it "manages proxy-related ENV vars" do
80
- # Sets proxy settings.
81
- ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'].each do |var|
82
- expect(ENV).to receive(:[]=).with(var, 'http://proxy.example.com:3128')
83
- end
84
-
85
- # Resets proxy settings when done.
86
- expect(ENV).to receive(:update).with(hash_including('HTTPS_PROXY' => nil))
87
-
88
- subject.clone(remote)
89
- end
90
- end
91
- end
92
-
93
- describe "updating the repo" do
94
- let(:tag_090) { subject.git_dir + 'refs' + 'tags' + '0.9.0' }
95
- let(:packed_refs) { subject.git_dir + 'packed-refs' }
96
-
97
- before do
98
- subject.clone(remote)
99
- tag_090.delete if tag_090.exist?
100
- packed_refs.delete if packed_refs.exist?
101
- end
102
-
103
- it "fetches objects from the remote" do
104
- expect(subject.tags).to_not include('0.9.0')
105
- subject.fetch
106
- expect(subject.tags).to include('0.9.0')
107
- end
108
-
109
- context "without a proxy" do
110
- before(:each) do
111
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return(nil)
112
- end
113
-
114
- it 'does not change proxy ENV' do
115
- expect(ENV).to_not receive(:[]=)
116
- expect(ENV).to_not receive(:update)
117
-
118
- subject.fetch
119
- end
120
- end
121
-
122
- context "with a proxy" do
123
- before(:each) do
124
- allow(R10K::Git).to receive(:get_proxy_for_remote).with(remote).and_return('http://proxy.example.com:3128')
125
- end
126
-
127
- it "manages proxy-related ENV vars" do
128
- # Sets proxy settings.
129
- ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'].each do |var|
130
- expect(ENV).to receive(:[]=).with(var, 'http://proxy.example.com:3128')
131
- end
132
-
133
- # Resets proxy settings when done.
134
- expect(ENV).to receive(:update).with(hash_including('HTTPS_PROXY' => nil))
135
-
136
- subject.fetch
137
- end
138
- end
139
- end
140
-
141
- describe "listing branches" do
142
- before do
143
- subject.clone(remote)
144
- end
145
-
146
- it "lists the local branches" do
147
- expect(subject.branches).to eq(%w[master])
148
- end
149
- end
150
-
151
- describe "listing the origin" do
152
- it "is nil if the remote is not set" do
153
- expect(subject.origin).to be_nil
154
- end
155
-
156
- it "is the remote URL when set" do
157
- subject.clone(remote)
158
- expect(subject.origin).to eq remote
159
- end
160
- end
161
-
162
- describe "checking out ref" do
163
- before(:each) do
164
- subject.clone(remote)
165
- File.open(File.join(subject.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
166
- end
167
-
168
- context "with force = true" do
169
- it "should revert changes in managed files" do
170
- subject.checkout(subject.head, {:force => true})
171
- expect(File.read(File.join(subject.path, 'README.markdown')).include?('local modifications!')).to eq false
172
- end
173
- end
174
-
175
- context "with force = false" do
176
- it "should not revert changes in managed files" do
177
- subject.checkout(subject.head, {:force => false})
178
- expect(File.read(File.join(subject.path, 'README.markdown')).include?('local modifications!')).to eq true
179
- end
180
- end
181
- end
182
-
183
- describe "checking if worktree is dirty" do
184
- before do
185
- subject.clone(remote)
186
- end
187
-
188
- context "with no local changes" do
189
- it "reports worktree as not dirty" do
190
- expect(subject.dirty?).to be false
191
- end
192
- end
193
-
194
- context "with local changes" do
195
- before(:each) do
196
- File.open(File.join(subject.path, 'README.markdown'), 'a') { |f| f.write('local modifications!') }
197
- end
198
-
199
- it "logs and reports worktree as dirty" do
200
- expect(subject.logger).to receive(:debug).with(/found local modifications in.*README\.markdown/i)
201
- expect(subject.logger).to receive(:debug1)
202
-
203
- expect(subject.dirty?).to be true
204
- end
205
- end
206
- end
207
- end
@@ -1,38 +0,0 @@
1
- shared_examples_for "a git repository" do
2
-
3
- it "does not exist if the repo is not present" do
4
- expect(subject.exist?).to be_falsey
5
- end
6
-
7
- describe "listing tags" do
8
- before do
9
- subject.clone(remote)
10
- end
11
-
12
- it "lists all tags in alphabetical order" do
13
- expect(subject.tags).to eq(%w[0.9.0 0.9.0-rc1 1.0.0 1.0.1])
14
- end
15
- end
16
-
17
- describe "resolving refs" do
18
- before do
19
- subject.clone(remote)
20
- end
21
-
22
- it "can resolve branches" do
23
- expect(subject.resolve('master')).to eq '157011a4eaa27f1202a9d94335ee4876b26d377e'
24
- end
25
-
26
- it "can resolve tags" do
27
- expect(subject.resolve('1.0.0')).to eq '14cbb45ae3a5f764320b7e63f1a54a25a1ef6c9c'
28
- end
29
-
30
- it "can resolve commits" do
31
- expect(subject.resolve('3084373e8d181cf2fea5b4ade2690ba22872bd67')).to eq '3084373e8d181cf2fea5b4ade2690ba22872bd67'
32
- end
33
-
34
- it "returns nil when the object cannot be resolved" do
35
- expect(subject.resolve('1.2.3')).to be_nil
36
- end
37
- end
38
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for "a puppetfile action" do
4
- describe "initializing" do
5
- it "accepts the :root option" do
6
- described_class.new({root: "/some/nonexistent/path"}, [], {})
7
- end
8
-
9
- it "accepts the :puppetfile option" do
10
- described_class.new({puppetfile: "/some/nonexistent/path/Puppetfile"}, [], {})
11
- end
12
-
13
- it "accepts the :moduledir option" do
14
- described_class.new({moduledir: "/some/nonexistent/path/modules"}, [], {})
15
- end
16
-
17
- end
18
- end
19
-
20
- shared_examples_for "a puppetfile install action" do
21
- describe "initializing" do
22
- it "accepts the :root option" do
23
- described_class.new({root: "/some/nonexistent/path"}, [], {})
24
- end
25
-
26
- it "accepts the :puppetfile option" do
27
- described_class.new({puppetfile: "/some/nonexistent/path/Puppetfile"}, [], {})
28
- end
29
-
30
- it "accepts the :moduledir option" do
31
- described_class.new({moduledir: "/some/nonexistent/path/modules"}, [], {})
32
- end
33
-
34
- it "accepts the :force option" do
35
- described_class.new({force: true}, [], {})
36
- end
37
-
38
- end
39
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'r10k/settings/collection'
4
- require 'r10k/settings/list'
5
-
6
- shared_examples_for "a setting with ancestors" do
7
- describe '#parent=' do
8
- it "allows assignment to a collection" do
9
- parent = R10K::Settings::Collection.new(:parent, [])
10
-
11
- subject.parent = parent
12
-
13
- expect(subject.parent).to eq parent
14
- end
15
-
16
- it "allows assignment to a list" do
17
- parent = R10K::Settings::List.new(:parent, [])
18
-
19
- subject.parent = parent
20
-
21
- expect(subject.parent).to eq parent
22
- end
23
-
24
- it "rejects assignment when argument is not a settings collection or list" do
25
- parent = Hash.new
26
-
27
- expect { subject.parent = parent }.to raise_error do |error|
28
- expect(error.message).to match /may only belong to a settings collection or list/i
29
- end
30
- end
31
-
32
- it "rejects re-assignment" do
33
- parent = R10K::Settings::Collection.new(:parent, [])
34
- step_parent = R10K::Settings::Collection.new(:step_parent, [])
35
-
36
- subject.parent = parent
37
-
38
- expect { subject.parent = step_parent }.to raise_error do |error|
39
- expect(error.message).to match /cannot be reassigned.*new parent/i
40
- end
41
- end
42
- end
43
- end
44
-