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,68 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe R10K::Module::MetadataFile do
4
-
5
- let(:path) { double 'pathname' }
6
-
7
- subject(:metadata_file) { described_class.new(path) }
8
-
9
- describe "determining if the metadata file exists" do
10
- it "doesn't exist if the given path isn't a file" do
11
- allow(path).to receive(:file?).and_return false
12
- expect(metadata_file).to_not be_exist
13
- end
14
-
15
- it "doesn't exist if the given path is an unreadable file" do
16
- allow(path).to receive(:file?).and_return true
17
- allow(path).to receive(:readable?).and_return false
18
-
19
- expect(metadata_file).to_not be_exist
20
- end
21
-
22
- it "exists if the given path exists and is readable" do
23
- allow(path).to receive(:file?).and_return true
24
- allow(path).to receive(:readable?).and_return true
25
-
26
- expect(metadata_file).to be_exist
27
- end
28
- end
29
-
30
- describe "parsing a metadata file" do
31
- let(:fixture_path) do
32
- fixture_path = Pathname.new(File.expand_path('spec/fixtures/module/forge/eight_hundred/metadata.json', PROJECT_ROOT))
33
- end
34
-
35
- before do
36
- a_metadata_file = R10K::Module::MetadataFile.new(fixture_path)
37
- @metadata = a_metadata_file.read
38
- end
39
-
40
- it "extracts the module name" do
41
- expect(@metadata.name).to eq 'eight_hundred'
42
- end
43
-
44
- it "extracts the full module name" do
45
- expect(@metadata.full_module_name).to eq 'branan-eight_hundred'
46
- end
47
-
48
- it "extracts the module author" do
49
- expect(@metadata.author).to eq 'Branan Purvine-Riley'
50
- end
51
-
52
- it "extracts the module version" do
53
- expect(@metadata.version).to eq '8.0.0'
54
- end
55
- end
56
-
57
- describe "parsing an invalid metadata file" do
58
- let(:fixture_path) do
59
- fixture_path = Pathname.new(File.expand_path('spec/fixtures/module/forge/bad_module/metadata.json', PROJECT_ROOT))
60
- end
61
-
62
- it "raises an error" do
63
- a_metadata_file = R10K::Module::MetadataFile.new(fixture_path)
64
- expect {a_metadata_file.read}.to raise_error(R10K::Error, "Could not read metadata.json")
65
- end
66
- end
67
-
68
- end
@@ -1,208 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'r10k/module/svn'
4
-
5
- describe R10K::Module::SVN do
6
-
7
- include_context 'fail on execution'
8
-
9
- describe "statically determined version support" do
10
- it 'is unsupported by svn backed modules' do
11
- static_version = described_class.statically_defined_version('branan/eight_hundred', { svn: 'my/remote', revision: '123adf' })
12
- expect(static_version).to eq(nil)
13
- end
14
- end
15
-
16
- describe "determining it implements a Puppetfile mod" do
17
- it "implements mods with the :svn hash key" do
18
- implements = described_class.implement?('r10k-fixture-repo', :svn => 'https://github.com/adrienthebo/r10k-fixture-repo')
19
- expect(implements).to eq true
20
- end
21
- end
22
-
23
- describe "path variables" do
24
- it "uses the module name as the name" do
25
- svn = described_class.new('foo', '/moduledir', :rev => 'r10')
26
- expect(svn.name).to eq 'foo'
27
- expect(svn.owner).to be_nil
28
- expect(svn.dirname).to eq '/moduledir'
29
- expect(svn.path).to eq Pathname.new('/moduledir/foo')
30
- end
31
-
32
- it "does not include the owner in the path" do
33
- svn = described_class.new('bar/foo', '/moduledir', :rev => 'r10')
34
- expect(svn.name).to eq 'foo'
35
- expect(svn.owner).to eq 'bar'
36
- expect(svn.dirname).to eq '/moduledir'
37
- expect(svn.path).to eq Pathname.new('/moduledir/foo')
38
- end
39
- end
40
-
41
-
42
- describe "instantiating based on Puppetfile configuration" do
43
- it "can specify a revision with the :rev key" do
44
- svn = described_class.new('foo', '/moduledir', :rev => 'r10')
45
- expect(svn.expected_revision).to eq 'r10'
46
- end
47
-
48
- it "can specify a revision with the :revision key" do
49
- svn = described_class.new('foo', '/moduledir', :revision => 'r10')
50
- expect(svn.expected_revision).to eq 'r10'
51
- end
52
- end
53
-
54
- describe "properties" do
55
- subject { described_class.new('foo', '/moduledir', :svn => 'https://github.com/adrienthebo/r10k-fixture-repo', :rev => 123) }
56
-
57
- it "sets the module type to :svn" do
58
- expect(subject.properties).to include(:type => :svn)
59
- end
60
-
61
- it "sets the expected version" do
62
- expect(subject.properties).to include(:expected => 123)
63
- end
64
-
65
- it "sets the actual version to the revision when the revision is available" do
66
- expect(subject.working_dir).to receive(:revision).and_return(12)
67
- expect(subject.properties).to include(:actual => 12)
68
- end
69
-
70
- it "sets the actual version (unresolvable) when the revision is unavailable" do
71
- expect(subject.working_dir).to receive(:revision).and_raise(ArgumentError)
72
- expect(subject.properties).to include(:actual => "(unresolvable)")
73
- end
74
- end
75
-
76
- describe "determining the status" do
77
- subject { described_class.new('foo', '/moduledir', :svn => 'https://github.com/adrienthebo/r10k-fixture-repo', :rev => 123) }
78
-
79
- let(:working_dir) { double 'working_dir' }
80
-
81
- before do
82
- allow(R10K::SVN::WorkingDir).to receive(:new).and_return working_dir
83
- end
84
-
85
- it "is :absent if the module directory is absent" do
86
- allow(subject).to receive(:exist?).and_return false
87
-
88
- expect(subject.status).to eq :absent
89
- end
90
-
91
- it "is :mismatched if the directory is present but not an SVN repo" do
92
- allow(subject).to receive(:exist?).and_return true
93
-
94
- allow(working_dir).to receive(:is_svn?).and_return false
95
-
96
- expect(subject.status).to eq :mismatched
97
- end
98
-
99
- it "is mismatched when the wrong SVN URL is checked out" do
100
- allow(subject).to receive(:exist?).and_return true
101
-
102
- allow(working_dir).to receive(:is_svn?).and_return true
103
- allow(working_dir).to receive(:url).and_return 'svn://nope/trunk'
104
-
105
- expect(subject.status).to eq :mismatched
106
- end
107
-
108
- it "is :outdated when the expected rev doesn't match the actual rev" do
109
- allow(subject).to receive(:exist?).and_return true
110
-
111
- allow(working_dir).to receive(:is_svn?).and_return true
112
- allow(working_dir).to receive(:url).and_return 'https://github.com/adrienthebo/r10k-fixture-repo'
113
- allow(working_dir).to receive(:revision).and_return 99
114
-
115
- expect(subject.status).to eq :outdated
116
- end
117
-
118
- it "is :insync if all other conditions are satisfied" do
119
- allow(subject).to receive(:exist?).and_return true
120
-
121
- allow(working_dir).to receive(:is_svn?).and_return true
122
- allow(working_dir).to receive(:url).and_return 'https://github.com/adrienthebo/r10k-fixture-repo'
123
- allow(working_dir).to receive(:revision).and_return 123
124
-
125
- expect(subject.status).to eq :insync
126
- end
127
- end
128
-
129
- describe 'the default spec dir' do
130
- let(:module_org) { "coolorg" }
131
- let(:module_name) { "coolmod" }
132
- let(:title) { "#{module_org}-#{module_name}" }
133
- let(:dirname) { Pathname.new(Dir.mktmpdir) }
134
- let(:spec_path) { dirname + module_name + 'spec' }
135
- subject { described_class.new(title, dirname, {}) }
136
-
137
- it 'is kept by default' do
138
- FileUtils.mkdir_p(spec_path)
139
- expect(subject).to receive(:status).and_return(:absent)
140
- expect(subject).to receive(:install).and_return(nil)
141
- subject.sync
142
- expect(Dir.exist?(spec_path)).to eq true
143
- end
144
- end
145
-
146
- describe "synchronizing" do
147
-
148
- subject { described_class.new('foo', '/moduledir', :svn => 'https://github.com/adrienthebo/r10k-fixture-repo', :rev => 123) }
149
-
150
- before do
151
- allow(File).to receive(:directory?).with('/moduledir').and_return true
152
- end
153
-
154
- describe "and the state is :absent" do
155
- before { allow(subject).to receive(:status).and_return :absent }
156
-
157
- it "installs the SVN module" do
158
- expect(subject).to receive(:install)
159
- expect(subject.sync).to be true
160
- end
161
- end
162
-
163
- describe "and the state is :mismatched" do
164
- before { allow(subject).to receive(:status).and_return :mismatched }
165
-
166
- it "reinstalls the module" do
167
- expect(subject).to receive(:reinstall)
168
-
169
- expect(subject.sync).to be true
170
- end
171
-
172
- it "removes the existing directory" do
173
- expect(subject.path).to receive(:rmtree)
174
- allow(subject).to receive(:install)
175
-
176
- expect(subject.sync).to be true
177
- end
178
- end
179
-
180
- describe "and the state is :outdated" do
181
- before { allow(subject).to receive(:status).and_return :outdated }
182
-
183
- it "upgrades the repository" do
184
- expect(subject).to receive(:update)
185
-
186
- expect(subject.sync).to be true
187
- end
188
- end
189
-
190
- describe "and the state is :insync" do
191
- before { allow(subject).to receive(:status).and_return :insync }
192
-
193
- it "doesn't change anything" do
194
- expect(subject).to receive(:install).never
195
- expect(subject).to receive(:reinstall).never
196
- expect(subject).to receive(:update).never
197
-
198
- expect(subject.sync).to be false
199
- end
200
- end
201
-
202
- it 'and `should_sync?` is false' do
203
- # modules do not sync if they are not requested
204
- mod = described_class.new('my_mod', '/path/to/mod', { overrides: { modules: { requested_modules: ['other_mod'] } } })
205
- expect(mod.sync).to be false
206
- end
207
- end
208
- end
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
- require 'r10k/module'
3
- require 'fileutils'
4
-
5
- describe R10K::Module::Tarball do
6
- include_context 'Tarball'
7
-
8
- let(:base_params) { { type: 'tarball', source: fixture_tarball, version: fixture_checksum } }
9
-
10
- subject do
11
- described_class.new(
12
- 'fixture-tarball',
13
- moduledir,
14
- base_params,
15
- )
16
- end
17
-
18
- describe "setting the owner and name" do
19
- describe "with a title of 'fixture-tarball'" do
20
- it "sets the owner to 'fixture'" do
21
- expect(subject.owner).to eq 'fixture'
22
- end
23
-
24
- it "sets the name to 'tarball'" do
25
- expect(subject.name).to eq 'tarball'
26
- end
27
-
28
- it "sets the path to the given moduledir + modname" do
29
- expect(subject.path.to_s).to eq(File.join(moduledir, 'tarball'))
30
- end
31
- end
32
- end
33
-
34
- describe "properties" do
35
- it "sets the module type to :tarball" do
36
- expect(subject.properties).to include(type: :tarball)
37
- end
38
-
39
- it "sets the version" do
40
- expect(subject.properties).to include(expected: fixture_checksum)
41
- end
42
- end
43
-
44
- describe 'syncing the module' do
45
- it 'defaults to keeping the spec dir' do
46
- subject.sync
47
- expect(Dir.exist?(File.join(moduledir, 'tarball', 'spec'))).to be(true)
48
- end
49
- end
50
-
51
- describe "determining the status" do
52
- it "delegates to R10K::Tarball" do
53
- expect(subject).to receive(:tarball).twice.and_return instance_double('R10K::Tarball', cache_valid?: true, insync?: true)
54
- expect(subject).to receive(:path).twice.and_return instance_double('Pathname', exist?: true)
55
-
56
- expect(subject.status).to eq(:insync)
57
- end
58
- end
59
-
60
- describe "option parsing" do
61
- describe "version" do
62
- context "when no version is given" do
63
- subject { described_class.new('fixture-tarball', moduledir, base_params.reject { |k| k.eql?(:version) }) }
64
- it "does not require a version" do
65
- expect(subject).to be_kind_of(described_class)
66
- end
67
- end
68
- end
69
- end
70
- end