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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +17 -0
- data/.github/workflows/docker.yml +9 -4
- data/.github/workflows/release.yml +3 -2
- data/.github/workflows/rspec_tests.yml +8 -10
- data/CHANGELOG.mkd +100 -0
- data/CODEOWNERS +1 -2
- data/Gemfile +2 -2
- data/README.mkd +18 -19
- data/doc/common-patterns.mkd +1 -2
- data/doc/dynamic-environments/configuration.mkd +91 -12
- data/doc/dynamic-environments/usage.mkd +4 -0
- data/doc/dynamic-environments/workflow-guide.mkd +3 -3
- data/doc/faq.mkd +1 -1
- data/doc/puppetfile.mkd +9 -3
- data/integration/Gemfile +3 -4
- data/integration/Rakefile +58 -23
- data/integration/files/pre-suite/git_config.pp.erb +1 -1
- data/integration/pre-suite/00_pe_install.rb +3 -0
- data/integration/pre-suite/10_git_config.rb +1 -3
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
- data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
- data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
- data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
- data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
- data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
- data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
- data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
- data/integration/tests/git_source/git_source_git.rb +1 -4
- data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
- data/integration/tests/git_source/git_source_submodule.rb +1 -1
- data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
- data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
- data/integration/tests/purging/default_purging.rb +0 -3
- data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
- data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
- data/lib/r10k/action/deploy/environment.rb +2 -19
- data/lib/r10k/action/deploy/module.rb +1 -0
- data/lib/r10k/action/puppetfile/check.rb +7 -0
- data/lib/r10k/action/puppetfile/install.rb +3 -1
- data/lib/r10k/cli/deploy.rb +15 -1
- data/lib/r10k/cli/puppetfile.rb +1 -0
- data/lib/r10k/content_synchronizer.rb +7 -2
- data/lib/r10k/environment/with_modules.rb +24 -1
- data/lib/r10k/environment.rb +0 -1
- data/lib/r10k/git/rugged/bare_repository.rb +5 -4
- data/lib/r10k/git/rugged/thin_repository.rb +7 -0
- data/lib/r10k/git/rugged/working_repository.rb +13 -7
- data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
- data/lib/r10k/git/shellgit/working_repository.rb +5 -4
- data/lib/r10k/git/stateful_repository.rb +4 -4
- data/lib/r10k/module/base.rb +3 -3
- data/lib/r10k/module/git.rb +19 -5
- data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
- data/lib/r10k/module_loader/puppetfile.rb +22 -14
- data/lib/r10k/puppetfile.rb +1 -1
- data/lib/r10k/settings/container.rb +1 -0
- data/lib/r10k/settings.rb +6 -7
- data/lib/r10k/tarball.rb +1 -1
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +34 -82
- data/r10k.gemspec +8 -18
- metadata +40 -213
- data/.github/workflows/stale.yml +0 -21
- data/.travis.yml +0 -42
- data/docker/.gitignore +0 -1
- data/docker/.rspec +0 -4
- data/docker/Gemfile +0 -11
- data/docker/Makefile +0 -92
- data/docker/README.md +0 -28
- data/docker/docker-compose.yml +0 -18
- data/docker/r10k/Dockerfile +0 -68
- data/docker/r10k/adduser.sh +0 -13
- data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
- data/docker/r10k/docker-entrypoint.sh +0 -10
- data/docker/r10k/release.Dockerfile +0 -55
- data/docker/spec/dockerfile_spec.rb +0 -37
- data/docker/spec/fixtures/Puppetfile +0 -2
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
- data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
- data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
- data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
- data/lib/r10k/environment/bare.rb +0 -13
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
- data/spec/fixtures/tarball/tarball.tar.gz +0 -0
- data/spec/fixtures/unit/action/r10k.yaml +0 -5
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
- data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
- data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
- data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
- data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
- data/spec/integration/git/rugged/cache_spec.rb +0 -33
- data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
- data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
- data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
- data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
- data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
- data/spec/integration/git/stateful_repository_spec.rb +0 -159
- data/spec/integration/util/purageable_spec.rb +0 -41
- data/spec/matchers/exit_with.rb +0 -28
- data/spec/matchers/match_realpath.rb +0 -18
- data/spec/r10k-mocks/mock_config.rb +0 -33
- data/spec/r10k-mocks/mock_env.rb +0 -18
- data/spec/r10k-mocks/mock_source.rb +0 -17
- data/spec/r10k-mocks.rb +0 -3
- data/spec/shared-contexts/git-fixtures.rb +0 -55
- data/spec/shared-contexts/tarball.rb +0 -32
- data/spec/shared-examples/deploy-actions.rb +0 -69
- data/spec/shared-examples/git/bare_repository.rb +0 -132
- data/spec/shared-examples/git/thin_repository.rb +0 -26
- data/spec/shared-examples/git/working_repository.rb +0 -207
- data/spec/shared-examples/git-repository.rb +0 -38
- data/spec/shared-examples/puppetfile-action.rb +0 -39
- data/spec/shared-examples/settings/ancestry.rb +0 -44
- data/spec/shared-examples/subprocess-runner.rb +0 -89
- data/spec/spec_helper.rb +0 -41
- data/spec/unit/action/cri_runner_spec.rb +0 -72
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
- data/spec/unit/action/deploy/display_spec.rb +0 -61
- data/spec/unit/action/deploy/environment_spec.rb +0 -640
- data/spec/unit/action/deploy/module_spec.rb +0 -476
- data/spec/unit/action/puppetfile/check_spec.rb +0 -53
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
- data/spec/unit/action/puppetfile/install_spec.rb +0 -112
- data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
- data/spec/unit/action/runner_spec.rb +0 -407
- data/spec/unit/action/visitor_spec.rb +0 -39
- data/spec/unit/cli_spec.rb +0 -9
- data/spec/unit/deployment/config_spec.rb +0 -33
- data/spec/unit/deployment_spec.rb +0 -162
- data/spec/unit/environment/bare_spec.rb +0 -13
- data/spec/unit/environment/base_spec.rb +0 -122
- data/spec/unit/environment/git_spec.rb +0 -114
- data/spec/unit/environment/name_spec.rb +0 -181
- data/spec/unit/environment/plain_spec.rb +0 -8
- data/spec/unit/environment/svn_spec.rb +0 -146
- data/spec/unit/environment/tarball_spec.rb +0 -45
- data/spec/unit/environment/with_modules_spec.rb +0 -75
- data/spec/unit/errors/formatting_spec.rb +0 -84
- data/spec/unit/feature_spec.rb +0 -50
- data/spec/unit/forge/module_release_spec.rb +0 -213
- data/spec/unit/git/alternates_spec.rb +0 -116
- data/spec/unit/git/cache_spec.rb +0 -66
- data/spec/unit/git/rugged/cache_spec.rb +0 -48
- data/spec/unit/git/rugged/credentials_spec.rb +0 -215
- data/spec/unit/git/shellgit/cache_spec.rb +0 -27
- data/spec/unit/git/stateful_repository_spec.rb +0 -45
- data/spec/unit/git_spec.rb +0 -102
- data/spec/unit/initializers_spec.rb +0 -68
- data/spec/unit/instance_cache_spec.rb +0 -78
- data/spec/unit/keyed_factory_spec.rb +0 -51
- data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
- data/spec/unit/logging_spec.rb +0 -68
- data/spec/unit/module/base_spec.rb +0 -118
- data/spec/unit/module/forge_spec.rb +0 -271
- data/spec/unit/module/git_spec.rb +0 -387
- data/spec/unit/module/metadata_file_spec.rb +0 -68
- data/spec/unit/module/svn_spec.rb +0 -208
- data/spec/unit/module/tarball_spec.rb +0 -70
- data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
- data/spec/unit/module_spec.rb +0 -114
- data/spec/unit/puppetfile_spec.rb +0 -304
- data/spec/unit/settings/collection_spec.rb +0 -123
- data/spec/unit/settings/container_spec.rb +0 -92
- data/spec/unit/settings/definition_spec.rb +0 -79
- data/spec/unit/settings/enum_definition_spec.rb +0 -20
- data/spec/unit/settings/inheritance_spec.rb +0 -38
- data/spec/unit/settings/list_spec.rb +0 -88
- data/spec/unit/settings/loader_spec.rb +0 -110
- data/spec/unit/settings/uri_definition_spec.rb +0 -23
- data/spec/unit/settings_spec.rb +0 -303
- data/spec/unit/source/base_spec.rb +0 -31
- data/spec/unit/source/exec_spec.rb +0 -81
- data/spec/unit/source/git_spec.rb +0 -233
- data/spec/unit/source/hash_spec.rb +0 -54
- data/spec/unit/source/svn_spec.rb +0 -196
- data/spec/unit/source/yaml_spec.rb +0 -42
- data/spec/unit/source_spec.rb +0 -10
- data/spec/unit/svn/remote_spec.rb +0 -21
- data/spec/unit/svn/working_dir_spec.rb +0 -56
- data/spec/unit/tarball_spec.rb +0 -57
- data/spec/unit/util/attempt_spec.rb +0 -82
- data/spec/unit/util/cacheable_spec.rb +0 -23
- data/spec/unit/util/commands_spec.rb +0 -61
- data/spec/unit/util/downloader_spec.rb +0 -98
- data/spec/unit/util/exec_env_spec.rb +0 -56
- data/spec/unit/util/purgeable_spec.rb +0 -267
- data/spec/unit/util/setopts_spec.rb +0 -83
- data/spec/unit/util/subprocess/result_spec.rb +0 -36
- data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
- data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
- data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
- data/spec/unit/util/subprocess_spec.rb +0 -65
- data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,116 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'stringio'
|
3
|
-
require 'r10k/git'
|
4
|
-
|
5
|
-
describe R10K::Git::Alternates do
|
6
|
-
subject { described_class.new(Pathname.new("/some/nonexistent/path/.git")) }
|
7
|
-
|
8
|
-
it "interacts with the alternates file in the given git repository" do
|
9
|
-
expect(subject.file.to_s).to eq("/some/nonexistent/path/.git/objects/info/alternates")
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "reading alternate object entries" do
|
13
|
-
it "reads the alternates file and splits on lines" do
|
14
|
-
expect(subject.file).to receive(:file?).and_return true
|
15
|
-
expect(subject.file).to receive(:readlines).and_return([
|
16
|
-
"/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n",
|
17
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n",
|
18
|
-
])
|
19
|
-
|
20
|
-
expect(subject.read).to eq([
|
21
|
-
"/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
22
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
23
|
-
])
|
24
|
-
end
|
25
|
-
|
26
|
-
it "returns an empty array when the file is not present" do
|
27
|
-
expect(subject.file).to receive(:file?).and_return false
|
28
|
-
expect(subject.file).to receive(:readlines).never
|
29
|
-
expect(subject.to_a).to eq([])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "determining if an entry is already present" do
|
34
|
-
before do
|
35
|
-
allow(subject).to receive(:to_a).and_return([
|
36
|
-
"/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
37
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
38
|
-
])
|
39
|
-
end
|
40
|
-
|
41
|
-
it "is true if the element is in the array of read entries" do
|
42
|
-
expect(subject).to include("/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")
|
43
|
-
end
|
44
|
-
|
45
|
-
it "is false if the element is not in the array of read entries" do
|
46
|
-
expect(subject).to_not include("/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
describe "writing alternate entries" do
|
52
|
-
describe "and the git objects/info directory does not exist" do
|
53
|
-
it "raises an error when the parent directory does not exist" do
|
54
|
-
expect {
|
55
|
-
subject.write(["/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
56
|
-
}.to raise_error(R10K::Git::GitError,"Cannot write /some/nonexistent/path/.git/objects/info/alternates; parent directory does not exist")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "and the git objects/info directory exists" do
|
61
|
-
let(:io) { StringIO.new }
|
62
|
-
|
63
|
-
before do
|
64
|
-
expect(subject.file).to receive(:open).with('w').and_yield(io)
|
65
|
-
expect(subject.file).to receive_message_chain(:parent, :directory?).and_return true
|
66
|
-
end
|
67
|
-
|
68
|
-
it "creates the alternates file with the new entry when not present" do
|
69
|
-
subject.write(["/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
70
|
-
expect(io.string).to eq("/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n")
|
71
|
-
end
|
72
|
-
|
73
|
-
it "rewrites the file with all alternate entries" do
|
74
|
-
subject.write(["/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
75
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
76
|
-
"/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
77
|
-
|
78
|
-
expect(io.string).to eq(<<-EOD)
|
79
|
-
/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
|
80
|
-
/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
|
81
|
-
/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
|
82
|
-
EOD
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe "appending a new alternate object entry" do
|
87
|
-
it "re-writes the file with the new entry concatenated to the file" do
|
88
|
-
expect(subject).to receive(:to_a).and_return(["/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
89
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
90
|
-
|
91
|
-
expect(subject).to receive(:write).with(["/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
92
|
-
"/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
93
|
-
"/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
94
|
-
|
95
|
-
subject.add("/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "conditionally appending a new alternate object entry" do
|
101
|
-
before do
|
102
|
-
expect(subject).to receive(:read).and_return(%w[/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git])
|
103
|
-
end
|
104
|
-
|
105
|
-
it "adds the entry and returns true when the entry doesn't exist" do
|
106
|
-
expect(subject).to receive(:write).with(["/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
|
107
|
-
"/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"])
|
108
|
-
expect(subject.add?("/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")).to eq true
|
109
|
-
end
|
110
|
-
|
111
|
-
it "doesn't modify the file and returns false when the entry exists" do
|
112
|
-
expect(subject).to_not receive(:write)
|
113
|
-
expect(subject.add?("/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")).to eq false
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
data/spec/unit/git/cache_spec.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/git/cache'
|
3
|
-
|
4
|
-
describe R10K::Git::Cache do
|
5
|
-
|
6
|
-
describe 'the default cache_root' do
|
7
|
-
it 'is in the right location in linux', unless: R10K::Util::Platform.windows? do
|
8
|
-
expect(described_class.defaults[:cache_root]).to match(/\.r10k\/git/)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'is in the right location for windows', if: R10K::Util::Platform.windows? do
|
12
|
-
expect(described_class.defaults[:cache_root]).to match(/[^.]r10k\/git/)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
let(:subclass) do
|
17
|
-
Class.new(described_class) do
|
18
|
-
def self.bare_repository
|
19
|
-
Class.new { def initialize(*args) end }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:remote) { 'git://some/git/remote' }
|
25
|
-
subject { subclass.new(remote) }
|
26
|
-
|
27
|
-
describe "updating the cache" do
|
28
|
-
it "only updates the cache once" do
|
29
|
-
expect(subject).to receive(:sync!).exactly(1).times
|
30
|
-
subject.sync
|
31
|
-
subject.sync
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "methods on the repository" do
|
36
|
-
def expect_delegation(method)
|
37
|
-
expect(subject.repo).to receive(method)
|
38
|
-
subject.send(method)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "delegates #git_dir" do
|
42
|
-
expect_delegation(:git_dir)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "delegates #objects_dir" do
|
46
|
-
expect_delegation(:objects_dir)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "delegates #branches" do
|
50
|
-
expect_delegation(:branches)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "delegates #tags" do
|
54
|
-
expect_delegation(:tags)
|
55
|
-
end
|
56
|
-
|
57
|
-
it "delegates #exist?" do
|
58
|
-
expect_delegation(:exist?)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "aliases #cached? to #exist?" do
|
62
|
-
expect(subject.repo).to receive(:exist?)
|
63
|
-
subject.cached?
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe R10K::Git::Rugged::Cache, :unless => R10K::Util::Platform.jruby? do
|
4
|
-
before(:all) do
|
5
|
-
require 'r10k/git/rugged/cache'
|
6
|
-
end
|
7
|
-
|
8
|
-
subject(:cache) { described_class.new('git://some/git/remote') }
|
9
|
-
|
10
|
-
it "wraps a Rugged::BareRepository instance" do
|
11
|
-
expect(cache.repo).to be_a_kind_of R10K::Git::Rugged::BareRepository
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "settings" do
|
15
|
-
before do
|
16
|
-
R10K::Git::Cache.settings[:cache_root] = '/some/path'
|
17
|
-
described_class.settings.reset!
|
18
|
-
end
|
19
|
-
|
20
|
-
after do
|
21
|
-
R10K::Git::Cache.settings.reset!
|
22
|
-
described_class.settings.reset!
|
23
|
-
end
|
24
|
-
|
25
|
-
it "falls back to the parent class settings" do
|
26
|
-
expect(described_class.settings[:cache_root]).to eq '/some/path'
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "remote url updates" do
|
31
|
-
before do
|
32
|
-
allow(subject.repo).to receive(:exist?).and_return true
|
33
|
-
allow(subject.repo).to receive(:fetch)
|
34
|
-
allow(subject.repo).to receive(:remotes).and_return({ 'origin' => 'git://some/git/remote' })
|
35
|
-
end
|
36
|
-
|
37
|
-
it "does not update the URLs if they match" do
|
38
|
-
expect(subject.repo).to_not receive(:update_remote)
|
39
|
-
subject.sync!
|
40
|
-
end
|
41
|
-
|
42
|
-
it "updates the remote URL if they do not match" do
|
43
|
-
allow(subject.repo).to receive(:remotes).and_return({ 'origin' => 'foo'})
|
44
|
-
expect(subject.repo).to receive(:update_remote)
|
45
|
-
subject.sync!
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,215 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe R10K::Git::Rugged::Credentials, :unless => R10K::Util::Platform.jruby? || R10K::Util::Platform.windows? do
|
4
|
-
before(:all) do
|
5
|
-
require 'r10k/git/rugged/credentials'
|
6
|
-
require 'rugged/credentials'
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:repo) { R10K::Git::Rugged::BareRepository.new("/some/nonexistent/path", "repo.git") }
|
10
|
-
|
11
|
-
subject { described_class.new(repo) }
|
12
|
-
|
13
|
-
after(:each) { R10K::Git.settings.reset! }
|
14
|
-
|
15
|
-
describe "determining the username" do
|
16
|
-
before { R10K::Git.settings[:username] = "moderns" }
|
17
|
-
after { R10K::Git.settings.reset! }
|
18
|
-
|
19
|
-
it "prefers a username from the URL" do
|
20
|
-
user = subject.get_git_username("https://tessier-ashpool.freeside/repo.git", "ashpool")
|
21
|
-
expect(user).to eq "ashpool"
|
22
|
-
end
|
23
|
-
|
24
|
-
it "uses the username from the Git config when specified" do
|
25
|
-
user = subject.get_git_username("https://tessier-ashpool.freeside/repo.git", nil)
|
26
|
-
expect(user).to eq "moderns"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "falls back to the current user" do
|
30
|
-
R10K::Git.settings.reset!
|
31
|
-
expect(Etc).to receive(:getlogin).and_return("finn")
|
32
|
-
user = subject.get_git_username("https://tessier-ashpool.freeside/repo.git", nil)
|
33
|
-
expect(user).to eq "finn"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "generating ssh key credentials" do
|
38
|
-
after(:each) { R10K::Git.settings.reset! }
|
39
|
-
|
40
|
-
it "prefers a per-repository SSH private key" do
|
41
|
-
allow(File).to receive(:readable?).with("/etc/puppetlabs/r10k/ssh/tessier-ashpool-id_rsa").and_return true
|
42
|
-
R10K::Git.settings[:private_key] = "/etc/puppetlabs/r10k/ssh/id_rsa"
|
43
|
-
R10K::Git.settings[:repositories] = [{ remote: "ssh://git@tessier-ashpool.freeside/repo.git",
|
44
|
-
private_key: "/etc/puppetlabs/r10k/ssh/tessier-ashpool-id_rsa"}]
|
45
|
-
creds = subject.get_ssh_key_credentials("ssh://git@tessier-ashpool.freeside/repo.git", nil)
|
46
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::SshKey)
|
47
|
-
expect(creds.instance_variable_get(:@privatekey)).to eq("/etc/puppetlabs/r10k/ssh/tessier-ashpool-id_rsa")
|
48
|
-
end
|
49
|
-
|
50
|
-
it "falls back to the global SSH private key" do
|
51
|
-
allow(File).to receive(:readable?).with("/etc/puppetlabs/r10k/ssh/id_rsa").and_return true
|
52
|
-
R10K::Git.settings[:private_key] = "/etc/puppetlabs/r10k/ssh/id_rsa"
|
53
|
-
creds = subject.get_ssh_key_credentials("ssh://git@tessier-ashpool.freeside/repo.git", nil)
|
54
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::SshKey)
|
55
|
-
expect(creds.instance_variable_get(:@privatekey)).to eq("/etc/puppetlabs/r10k/ssh/id_rsa")
|
56
|
-
end
|
57
|
-
|
58
|
-
it "raises an error if no key has been set" do
|
59
|
-
R10K::Git.settings[:private_key] = nil
|
60
|
-
expect {
|
61
|
-
subject.get_ssh_key_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
62
|
-
}.to raise_error(R10K::Git::GitError, /no private key was given/)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "raises an error if the private key is unreadable" do
|
66
|
-
R10K::Git.settings[:private_key] = "/some/nonexistent/.ssh/key"
|
67
|
-
expect(File).to receive(:readable?).with("/some/nonexistent/.ssh/key").and_return false
|
68
|
-
expect {
|
69
|
-
subject.get_ssh_key_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
70
|
-
}.to raise_error(R10K::Git::GitError, /Unable to use SSH key auth for.*is missing or unreadable/)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "generates the rugged sshkey credential type" do
|
74
|
-
allow(File).to receive(:readable?).with("/etc/puppetlabs/r10k/ssh/id_rsa").and_return true
|
75
|
-
R10K::Git.settings[:private_key] = "/etc/puppetlabs/r10k/ssh/id_rsa"
|
76
|
-
creds = subject.get_ssh_key_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
77
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::SshKey)
|
78
|
-
expect(creds.instance_variable_get(:@privatekey)).to eq("/etc/puppetlabs/r10k/ssh/id_rsa")
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "generating github app tokens" do
|
83
|
-
it 'errors if app id has invalid characters' do
|
84
|
-
expect { subject.github_app_token("123A567890", "fake", "300")
|
85
|
-
}.to raise_error(R10K::Git::GitError, /App id contains invalid characters/)
|
86
|
-
end
|
87
|
-
it 'errors if app ttl has invalid characters' do
|
88
|
-
expect { subject.github_app_token("123456", "fake", "abc")
|
89
|
-
}.to raise_error(R10K::Git::GitError, /Github App token ttl contains/)
|
90
|
-
end
|
91
|
-
it 'errors if private file does not exist' do
|
92
|
-
R10K::Git.settings[:github_app_key] = "/missing/token/file"
|
93
|
-
expect(File).to receive(:readable?).with(R10K::Git.settings[:github_app_key]).and_return false
|
94
|
-
expect {
|
95
|
-
subject.github_app_token("123456", R10K::Git.settings[:github_app_key], "300")
|
96
|
-
}.to raise_error(R10K::Git::GitError, /App key is missing or unreadable/)
|
97
|
-
end
|
98
|
-
it 'errors if file is not a valid SSL key' do
|
99
|
-
token_file = Tempfile.new('token')
|
100
|
-
token_file.write('my_token')
|
101
|
-
token_file.close
|
102
|
-
R10K::Git.settings[:github_app_key] = token_file.path
|
103
|
-
expect(File).to receive(:readable?).with(token_file.path).and_return true
|
104
|
-
expect {
|
105
|
-
subject.github_app_token("123456", R10K::Git.settings[:github_app_key], "300")
|
106
|
-
}.to raise_error(R10K::Git::GitError, /App key is not a valid SSL key/)
|
107
|
-
token_file.unlink
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe "generating token credentials" do
|
112
|
-
it 'errors if token file does not exist' do
|
113
|
-
R10K::Git.settings[:oauth_token] = "/missing/token/file"
|
114
|
-
expect(File).to receive(:readable?).with("/missing/token/file").and_return false
|
115
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
116
|
-
expect {
|
117
|
-
subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
118
|
-
}.to raise_error(R10K::Git::GitError, /cannot load OAuth token/)
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'errors if the token on stdin is not a valid OAuth token' do
|
122
|
-
allow($stdin).to receive(:read).and_return("<bad>token")
|
123
|
-
R10K::Git.settings[:oauth_token] = "-"
|
124
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
125
|
-
expect {
|
126
|
-
subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
127
|
-
}.to raise_error(R10K::Git::GitError, /invalid characters/)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'errors if the token in the file is not a valid OAuth token' do
|
131
|
-
token_file = Tempfile.new('token')
|
132
|
-
token_file.write('my bad \ntoken')
|
133
|
-
token_file.close
|
134
|
-
R10K::Git.settings[:oauth_token] = token_file.path
|
135
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
136
|
-
expect {
|
137
|
-
subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
138
|
-
}.to raise_error(R10K::Git::GitError, /invalid characters/)
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'prefers per-repo token file' do
|
142
|
-
token_file = Tempfile.new('token')
|
143
|
-
token_file.write('my_token')
|
144
|
-
token_file.close
|
145
|
-
R10K::Git.settings[:oauth_token] = "/do/not/use"
|
146
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git",
|
147
|
-
oauth_token: token_file.path }]
|
148
|
-
creds = subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
149
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::UserPassword)
|
150
|
-
expect(creds.instance_variable_get(:@password)).to eq("my_token")
|
151
|
-
expect(creds.instance_variable_get(:@username)).to eq("x-oauth-token")
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'uses the token from a file as a password' do
|
155
|
-
token_file = Tempfile.new('token')
|
156
|
-
token_file.write('my_token')
|
157
|
-
token_file.close
|
158
|
-
R10K::Git.settings[:oauth_token] = token_file.path
|
159
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
160
|
-
creds = subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
161
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::UserPassword)
|
162
|
-
expect(creds.instance_variable_get(:@password)).to eq("my_token")
|
163
|
-
expect(creds.instance_variable_get(:@username)).to eq("x-oauth-token")
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'uses the token from stdin as a password' do
|
167
|
-
allow($stdin).to receive(:read).and_return("my_token")
|
168
|
-
R10K::Git.settings[:oauth_token] = '-'
|
169
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
170
|
-
creds = subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
171
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::UserPassword)
|
172
|
-
expect(creds.instance_variable_get(:@password)).to eq("my_token")
|
173
|
-
expect(creds.instance_variable_get(:@username)).to eq("x-oauth-token")
|
174
|
-
end
|
175
|
-
|
176
|
-
it 'only reads the token in once' do
|
177
|
-
expect($stdin).to receive(:read).and_return("my_token").once
|
178
|
-
R10K::Git.settings[:oauth_token] = '-'
|
179
|
-
R10K::Git.settings[:repositories] = [{remote: "https://tessier-ashpool.freeside/repo.git"}]
|
180
|
-
creds = subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
181
|
-
expect(creds.instance_variable_get(:@password)).to eq("my_token")
|
182
|
-
creds = subject.get_plaintext_credentials("https://tessier-ashpool.freeside/repo.git", nil)
|
183
|
-
expect(creds.instance_variable_get(:@password)).to eq("my_token")
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
describe "generating default credentials" do
|
188
|
-
it "generates the rugged default credential type" do
|
189
|
-
creds = subject.get_default_credentials("https://azurediamond:hunter2@tessier-ashpool.freeside/repo.git", "azurediamond")
|
190
|
-
expect(creds).to be_a_kind_of(Rugged::Credentials::Default)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
describe "generating credentials" do
|
195
|
-
it "creates ssh key credentials for the sshkey allowed type" do
|
196
|
-
allow(File).to receive(:readable?).with("/etc/puppetlabs/r10k/ssh/id_rsa").and_return true
|
197
|
-
R10K::Git.settings[:private_key] = "/etc/puppetlabs/r10k/ssh/id_rsa"
|
198
|
-
expect(subject.call("https://tessier-ashpool.freeside/repo.git", nil, [:ssh_key])).to be_a_kind_of(Rugged::Credentials::SshKey)
|
199
|
-
end
|
200
|
-
|
201
|
-
it "creates user/password credentials for the default allowed type" do
|
202
|
-
expect(subject.call("https://tessier-ashpool.freeside/repo.git", nil, [:plaintext])).to be_a_kind_of(Rugged::Credentials::UserPassword)
|
203
|
-
end
|
204
|
-
|
205
|
-
it "creates default credentials when no other types are allowed" do
|
206
|
-
expect(subject.call("https://tessier-ashpool.freeside/repo.git", nil, [])).to be_a_kind_of(Rugged::Credentials::Default)
|
207
|
-
end
|
208
|
-
|
209
|
-
it "refuses to generate credentials more than 50 times" do
|
210
|
-
(1..50).each { subject.call("https://tessier-ashpool.freeside/repo.git", nil, [:plaintext]) }
|
211
|
-
|
212
|
-
expect { subject.call("https://tessier-ashpool.freeside/repo.git", nil, [:plaintext]) }.to raise_error(R10K::Git::GitError, /authentication failed/i)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/git/shellgit/cache'
|
3
|
-
|
4
|
-
describe R10K::Git::ShellGit::Cache do
|
5
|
-
|
6
|
-
subject { described_class.new('git://some/git/remote') }
|
7
|
-
|
8
|
-
it "wraps a ShellGit::BareRepository instance" do
|
9
|
-
expect(subject.repo).to be_a_kind_of R10K::Git::ShellGit::BareRepository
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "settings" do
|
13
|
-
before do
|
14
|
-
R10K::Git::Cache.settings[:cache_root] = '/some/path'
|
15
|
-
described_class.settings.reset!
|
16
|
-
end
|
17
|
-
|
18
|
-
after do
|
19
|
-
R10K::Git::Cache.settings.reset!
|
20
|
-
described_class.settings.reset!
|
21
|
-
end
|
22
|
-
|
23
|
-
it "falls back to the parent class settings" do
|
24
|
-
expect(described_class.settings[:cache_root]).to eq '/some/path'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/git'
|
3
|
-
require 'r10k/git/stateful_repository'
|
4
|
-
|
5
|
-
describe R10K::Git::StatefulRepository do
|
6
|
-
|
7
|
-
let(:remote) { 'git://some.site/some-repo.git' }
|
8
|
-
let(:ref) { '0.9.x' }
|
9
|
-
|
10
|
-
subject { described_class.new(remote, '/some/nonexistent/basedir', 'some-dirname') }
|
11
|
-
|
12
|
-
describe "determining if the cache needs to be synced" do
|
13
|
-
let(:cache) { double('cache') }
|
14
|
-
|
15
|
-
before { expect(R10K::Git.cache).to receive(:generate).with(remote).and_return(cache) }
|
16
|
-
|
17
|
-
it "is true if the cache is absent" do
|
18
|
-
expect(cache).to receive(:exist?).and_return false
|
19
|
-
expect(subject.sync_cache?(ref)).to eq true
|
20
|
-
end
|
21
|
-
|
22
|
-
it "is true if the ref is HEAD" do
|
23
|
-
expect(cache).to receive(:exist?).and_return true
|
24
|
-
expect(subject.sync_cache?('HEAD')).to eq true
|
25
|
-
end
|
26
|
-
|
27
|
-
it "is true if the ref is unresolvable" do
|
28
|
-
expect(cache).to receive(:exist?).and_return true
|
29
|
-
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:unknown)
|
30
|
-
expect(subject.sync_cache?(ref)).to eq true
|
31
|
-
end
|
32
|
-
|
33
|
-
it "is true if the ref is not a tag or commit" do
|
34
|
-
expect(cache).to receive(:exist?).and_return true
|
35
|
-
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:branch)
|
36
|
-
expect(subject.sync_cache?(ref)).to eq true
|
37
|
-
end
|
38
|
-
|
39
|
-
it "is false otherwise" do
|
40
|
-
expect(cache).to receive(:exist?).and_return true
|
41
|
-
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:tag)
|
42
|
-
expect(subject.sync_cache?(ref)).to eq false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/spec/unit/git_spec.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/git'
|
3
|
-
|
4
|
-
describe R10K::Git do
|
5
|
-
before { described_class.reset! }
|
6
|
-
after { described_class.reset! }
|
7
|
-
|
8
|
-
describe 'selecting the default provider' do
|
9
|
-
it 'returns shellgit when the git executable is present' do
|
10
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return true
|
11
|
-
expect(described_class.default_name).to eq :shellgit
|
12
|
-
end
|
13
|
-
|
14
|
-
context 'under c-based rubies with rugged available', :unless => R10K::Util::Platform.jruby? || R10K::Util::Platform.windows? do
|
15
|
-
it 'returns rugged when the git executable is absent and the rugged library is present' do
|
16
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return false
|
17
|
-
expect(R10K::Features).to receive(:available?).with(:rugged).and_return true
|
18
|
-
expect(described_class.default_name).to eq :rugged
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'raises an error when the git executable and rugged library are absent' do
|
23
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return false
|
24
|
-
expect(R10K::Features).to receive(:available?).with(:rugged).and_return false
|
25
|
-
expect {
|
26
|
-
described_class.default_name
|
27
|
-
}.to raise_error(R10K::Error, 'No Git providers are functional.')
|
28
|
-
end
|
29
|
-
|
30
|
-
it "goes into an error state if an invalid provider was set" do
|
31
|
-
begin
|
32
|
-
described_class.provider = :nope
|
33
|
-
rescue R10K::Error
|
34
|
-
end
|
35
|
-
|
36
|
-
expect {
|
37
|
-
described_class.provider
|
38
|
-
}.to raise_error(R10K::Error, "No Git provider set.")
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe 'explicitly setting the provider' do
|
43
|
-
it "raises an error if the provider doesn't exist" do
|
44
|
-
expect {
|
45
|
-
described_class.provider = :nope
|
46
|
-
}.to raise_error(R10K::Error, "No Git provider named 'nope'.")
|
47
|
-
end
|
48
|
-
|
49
|
-
it "raises an error if the provider isn't functional" do
|
50
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return false
|
51
|
-
expect {
|
52
|
-
described_class.provider = :shellgit
|
53
|
-
}.to raise_error(R10K::Error, "Git provider 'shellgit' is not functional.")
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'under c-based rubies with rugged available', :unless => R10K::Util::Platform.jruby? || R10K::Util::Platform.windows? do
|
57
|
-
it "sets the current provider if the provider exists and is functional" do
|
58
|
-
expect(R10K::Features).to receive(:available?).with(:rugged).and_return true
|
59
|
-
described_class.provider = :rugged
|
60
|
-
expect(described_class.provider).to eq(R10K::Git::Rugged)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'under jruby', :if => R10K::Util::Platform.jruby? do
|
65
|
-
it "sets the current provider if the provider exists and is functional" do
|
66
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return true
|
67
|
-
described_class.provider = :shellgit
|
68
|
-
expect(described_class.provider).to eq(R10K::Git::ShellGit)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "retrieving the current provider" do
|
74
|
-
context 'under c-based rubies', :unless => R10K::Util::Platform.jruby? || R10K::Util::Platform.windows? do
|
75
|
-
it "uses the default if a provider has not been set" do
|
76
|
-
expect(described_class).to receive(:default_name).and_return :rugged
|
77
|
-
expect(described_class.provider).to eq(R10K::Git::Rugged)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "uses an explicitly set provider" do
|
81
|
-
expect(R10K::Features).to receive(:available?).with(:rugged).and_return true
|
82
|
-
described_class.provider = :rugged
|
83
|
-
expect(described_class).to_not receive(:default)
|
84
|
-
expect(described_class.provider).to eq R10K::Git::Rugged
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context 'under jruby', :if => R10K::Util::Platform.jruby? do
|
89
|
-
it "uses the default if a provider has not been set" do
|
90
|
-
expect(described_class).to receive(:default_name).and_return :shellgit
|
91
|
-
expect(described_class.provider).to eq(R10K::Git::ShellGit)
|
92
|
-
end
|
93
|
-
|
94
|
-
it "uses an explicitly set provider" do
|
95
|
-
expect(R10K::Features).to receive(:available?).with(:shellgit).and_return true
|
96
|
-
described_class.provider = :shellgit
|
97
|
-
expect(described_class).to_not receive(:default)
|
98
|
-
expect(described_class.provider).to eq R10K::Git::ShellGit
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|