r10k 2.6.9 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +9 -16
- data/CHANGELOG.mkd +23 -36
- data/Gemfile +2 -1
- data/MAINTAINERS +18 -0
- data/README.mkd +1 -5
- data/bin/r10k +2 -2
- data/doc/common-patterns.mkd +2 -2
- data/doc/dynamic-environments/configuration.mkd +1 -2
- data/doc/dynamic-environments/quickstart.mkd +3 -3
- data/doc/dynamic-environments/usage.mkd +0 -12
- data/doc/puppetfile.mkd +0 -18
- data/docker/Gemfile +13 -0
- data/docker/ci/build +72 -0
- data/docker/distelli-manifest.yml +4 -0
- data/docker/r10k/Dockerfile +41 -0
- data/docker/r10k/spec/dockerfile_spec.rb +16 -0
- data/integration/Gemfile +4 -2
- data/integration/Rakefile +3 -2
- data/integration/pre-suite/00_pe_install.rb +0 -1
- data/integration/pre-suite/30_test_utils.rb +17 -0
- data/integration/scripts/README.mkd +86 -0
- data/integration/scripts/setup_r10k_env_centos5.sh +23 -0
- data/integration/scripts/setup_r10k_env_centos6.sh +23 -0
- data/integration/scripts/setup_r10k_env_rhel7.sh +23 -0
- data/integration/scripts/setup_r10k_env_sles11.sh +23 -0
- data/integration/scripts/setup_r10k_env_sles12.sh +23 -0
- data/integration/scripts/setup_r10k_env_ubuntu1004.sh +23 -0
- data/integration/scripts/setup_r10k_env_ubuntu1204.sh +23 -0
- data/integration/scripts/setup_r10k_env_ubuntu1404.sh +23 -0
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +2 -2
- data/integration/tests/basic_functionality/negative/attempt_to_install_peonly_module_without_license.rb +71 -0
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +2 -2
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +2 -2
- data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
- data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
- data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +12 -2
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +1 -8
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +11 -2
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +12 -2
- data/lib/r10k/action/deploy/environment.rb +2 -15
- data/lib/r10k/action/puppetfile/check.rb +1 -1
- data/lib/r10k/action/puppetfile/cri_runner.rb +1 -13
- data/lib/r10k/action/puppetfile/purge.rb +1 -1
- data/lib/r10k/cli/deploy.rb +0 -1
- data/lib/r10k/cli/puppetfile.rb +4 -0
- data/lib/r10k/environment/base.rb +7 -1
- data/lib/r10k/environment/svn.rb +1 -1
- data/lib/r10k/forge/module_release.rb +2 -2
- data/lib/r10k/git/rugged/base_repository.rb +6 -3
- data/lib/r10k/git/rugged/working_repository.rb +10 -1
- data/lib/r10k/git/shellgit/base_repository.rb +27 -8
- data/lib/r10k/git/shellgit/working_repository.rb +20 -6
- data/lib/r10k/git/stateful_repository.rb +0 -1
- data/lib/r10k/module/git.rb +0 -5
- data/lib/r10k/puppetfile.rb +22 -27
- data/lib/r10k/source/base.rb +6 -0
- data/lib/r10k/source/git.rb +2 -2
- data/lib/r10k/source/svn.rb +4 -2
- data/lib/r10k/util/purgeable.rb +4 -2
- data/lib/r10k/util/subprocess/runner/posix.rb +3 -3
- data/lib/r10k/version.rb +1 -4
- data/locales/r10k.pot +23 -19
- data/r10k.gemspec +4 -8
- data/r10k.yaml.example +6 -0
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
- data/spec/shared-examples/git/working_repository.rb +46 -0
- data/spec/unit/action/deploy/environment_spec.rb +0 -63
- data/spec/unit/action/puppetfile/check_spec.rb +24 -9
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +2 -20
- data/spec/unit/action/puppetfile/install_spec.rb +16 -16
- data/spec/unit/action/puppetfile/purge_spec.rb +29 -6
- data/spec/unit/forge/module_release_spec.rb +10 -6
- data/spec/unit/git/stateful_repository_spec.rb +1 -4
- data/spec/unit/puppetfile_spec.rb +43 -36
- metadata +33 -48
- data/.github/pull_request_template.md +0 -4
- data/.github/workflows/release.yml +0 -36
- data/CODEOWNERS +0 -1
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
data/r10k.gemspec
CHANGED
@@ -18,30 +18,26 @@ Gem::Specification.new do |s|
|
|
18
18
|
dynamic environments.
|
19
19
|
DESCRIPTION
|
20
20
|
|
21
|
-
s.required_ruby_version = '>=
|
21
|
+
s.required_ruby_version = '>= 2.0.0'
|
22
22
|
|
23
23
|
s.license = 'Apache-2.0'
|
24
24
|
|
25
25
|
s.add_dependency 'colored', '1.2'
|
26
|
-
s.add_dependency 'cri', '~> 2.
|
26
|
+
s.add_dependency 'cri', '~> 2.8'
|
27
27
|
|
28
28
|
s.add_dependency 'log4r', '1.1.10'
|
29
29
|
s.add_dependency 'multi_json', '~> 1.10'
|
30
30
|
|
31
|
-
s.add_dependency 'puppet_forge', '~> 2.
|
31
|
+
s.add_dependency 'puppet_forge', '~> 2.2.8'
|
32
32
|
|
33
33
|
s.add_dependency 'gettext-setup', '~>0.24'
|
34
|
-
# These two pins narrow what is allowed by gettext-setup,
|
35
|
-
# to preserver compatability with Ruby 2.4
|
36
|
-
s.add_dependency 'fast_gettext', '~> 1.1.0'
|
37
|
-
s.add_dependency 'gettext', ['>= 3.0.2', '< 3.3.0']
|
38
34
|
|
39
35
|
s.add_development_dependency 'rspec', '~> 3.1'
|
40
36
|
|
41
37
|
s.add_development_dependency 'rake'
|
42
38
|
|
43
39
|
s.add_development_dependency 'yard', '~> 0.9.11'
|
44
|
-
s.add_development_dependency 'minitar', '~> 0.
|
40
|
+
s.add_development_dependency 'minitar', '~> 0.6.1'
|
45
41
|
|
46
42
|
s.files = %x[git ls-files].split($/)
|
47
43
|
s.require_path = 'lib'
|
data/r10k.yaml.example
CHANGED
@@ -37,6 +37,12 @@ sources:
|
|
37
37
|
# for more information about the Puppet 'environmentpath' setting.
|
38
38
|
#basedir: '/etc/puppetlabs/puppet/environments'
|
39
39
|
|
40
|
+
# The Puppetfile filename in the repo, defaults to 'Puppetfile'. This
|
41
|
+
# setting can be used, to allow custom Puppetfile names to allow hybrid
|
42
|
+
# use of librarian-puppet (transitive dependency resolution) and r10k
|
43
|
+
# (code management on the server).
|
44
|
+
#puppetfile_name: 'Puppetfile.r10k'
|
45
|
+
|
40
46
|
# One or more sources can be specified; each source is simple another entry
|
41
47
|
# in the sources map.
|
42
48
|
#qa:
|
@@ -0,0 +1,10 @@
|
|
1
|
+
forge "http://forge.puppetlabs.com"
|
2
|
+
|
3
|
+
mod "puppetlabs/stdlib", '4.11.0'
|
4
|
+
mod "puppetlabs/stdlib", '4.12.0'
|
5
|
+
mod "puppetlabs/concat", '2.1.0'
|
6
|
+
mod "otheruser/concat", '2.1.0'
|
7
|
+
|
8
|
+
mod 'apache',
|
9
|
+
:git => 'https://github.com/puppetlabs/puppetlabs-apache',
|
10
|
+
:branch => 'docs_experiment'
|
@@ -0,0 +1 @@
|
|
1
|
+
mod 'branan/eight_hundred', undefined_lookup_function('eight_hundred')
|
@@ -158,4 +158,50 @@ RSpec.shared_examples "a git working repository" do
|
|
158
158
|
expect(subject.origin).to eq remote
|
159
159
|
end
|
160
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
|
161
207
|
end
|
@@ -19,10 +19,6 @@ describe R10K::Action::Deploy::Environment do
|
|
19
19
|
described_class.new({puppetfile: true}, [])
|
20
20
|
end
|
21
21
|
|
22
|
-
it "can accept a default_branch_override option" do
|
23
|
-
described_class.new({:'default-branch-override' => 'default_branch_override_name'}, [])
|
24
|
-
end
|
25
|
-
|
26
22
|
it "can accept a no-force option" do
|
27
23
|
described_class.new({:'no-force' => true}, [])
|
28
24
|
end
|
@@ -127,63 +123,4 @@ describe R10K::Action::Deploy::Environment do
|
|
127
123
|
end
|
128
124
|
end
|
129
125
|
end
|
130
|
-
|
131
|
-
describe "write_environment_info!" do
|
132
|
-
|
133
|
-
class Fake_Environment
|
134
|
-
attr_accessor :path
|
135
|
-
attr_accessor :puppetfile
|
136
|
-
attr_accessor :info
|
137
|
-
|
138
|
-
def initialize(path, info)
|
139
|
-
@path = path
|
140
|
-
@info = info
|
141
|
-
@puppetfile = R10K::Puppetfile.new
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
let(:mock_stateful_repo_1) { instance_double("R10K::Git::StatefulRepository", :head => "123456") }
|
146
|
-
let(:mock_stateful_repo_2) { instance_double("R10K::Git::StatefulRepository", :head => "654321") }
|
147
|
-
let(:mock_git_module_1) { instance_double("R10K::Module::Git", :name => "my_cool_module", :version => "1.0", :repo => mock_stateful_repo_1) }
|
148
|
-
let(:mock_git_module_2) { instance_double("R10K::Module::Git", :name => "my_lame_module", :version => "0.0.1", :repo => mock_stateful_repo_2) }
|
149
|
-
let(:mock_forge_module_1) { double(:name => "their_shiny_module", :version => "2.0.0") }
|
150
|
-
let(:mock_puppetfile) { instance_double("R10K::Puppetfile", :modules => [mock_git_module_1, mock_git_module_2, mock_forge_module_1]) }
|
151
|
-
|
152
|
-
before(:all) do
|
153
|
-
@tmp_path = "./tmp-r10k-test-dir/"
|
154
|
-
Dir.mkdir(@tmp_path) unless File.exists?(@tmp_path)
|
155
|
-
end
|
156
|
-
|
157
|
-
after(:all) do
|
158
|
-
File.delete("#{@tmp_path}/.r10k-deploy.json")
|
159
|
-
Dir.delete(@tmp_path)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "writes the .r10k-deploy file correctly" do
|
163
|
-
allow(R10K::Puppetfile).to receive(:new).and_return(mock_puppetfile)
|
164
|
-
allow(mock_forge_module_1).to receive(:repo).and_raise(NoMethodError)
|
165
|
-
|
166
|
-
fake_env = Fake_Environment.new(@tmp_path, {:name => "my_cool_environment", :signature => "pablo picasso"})
|
167
|
-
subject.send(:write_environment_info!, fake_env, "2019-01-01 23:23:22 +0000", true)
|
168
|
-
|
169
|
-
file_contents = File.read("#{@tmp_path}/.r10k-deploy.json")
|
170
|
-
r10k_deploy = JSON.parse(file_contents)
|
171
|
-
|
172
|
-
expect(r10k_deploy['name']).to eq("my_cool_environment")
|
173
|
-
expect(r10k_deploy['signature']).to eq("pablo picasso")
|
174
|
-
expect(r10k_deploy['started_at']).to eq("2019-01-01 23:23:22 +0000")
|
175
|
-
expect(r10k_deploy['deploy_success']).to eq(true)
|
176
|
-
expect(r10k_deploy['module_deploys'].length).to eq(3)
|
177
|
-
expect(r10k_deploy['module_deploys'][0]['name']).to eq("my_cool_module")
|
178
|
-
expect(r10k_deploy['module_deploys'][0]['version']).to eq("1.0")
|
179
|
-
expect(r10k_deploy['module_deploys'][0]['sha']).to eq("123456")
|
180
|
-
expect(r10k_deploy['module_deploys'][1]['name']).to eq("my_lame_module")
|
181
|
-
expect(r10k_deploy['module_deploys'][1]['version']).to eq("0.0.1")
|
182
|
-
expect(r10k_deploy['module_deploys'][1]['sha']).to eq("654321")
|
183
|
-
expect(r10k_deploy['module_deploys'][2]['name']).to eq("their_shiny_module")
|
184
|
-
expect(r10k_deploy['module_deploys'][2]['version']).to eq("2.0.0")
|
185
|
-
expect(r10k_deploy['module_deploys'][2]['sha']).to eq(nil)
|
186
|
-
|
187
|
-
end
|
188
|
-
end
|
189
126
|
end
|
@@ -2,25 +2,40 @@ require 'spec_helper'
|
|
2
2
|
require 'r10k/action/puppetfile/check'
|
3
3
|
|
4
4
|
describe R10K::Action::Puppetfile::Check do
|
5
|
+
let(:default_opts) { {root: "/some/nonexistent/path"} }
|
6
|
+
let(:puppetfile) { instance_double('R10K::Puppetfile', :load! => true) }
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
def checker(opts = {}, argv = [], settings = {})
|
9
|
+
opts = default_opts.merge(opts)
|
10
|
+
return described_class.new(opts, argv, settings)
|
11
|
+
end
|
9
12
|
|
10
|
-
before
|
13
|
+
before(:each) do
|
14
|
+
allow(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, nil).and_return(puppetfile)
|
15
|
+
end
|
11
16
|
|
12
17
|
it_behaves_like "a puppetfile action"
|
13
18
|
|
14
19
|
it "prints 'Syntax OK' when the Puppetfile syntax could be validated" do
|
15
|
-
expect(puppetfile).to receive(:load!)
|
16
20
|
expect($stderr).to receive(:puts).with("Syntax OK")
|
17
|
-
|
21
|
+
|
22
|
+
checker.call
|
18
23
|
end
|
19
24
|
|
20
25
|
it "prints an error message when validating the Puppetfile syntax raised an error" do
|
21
|
-
|
22
|
-
|
26
|
+
allow(puppetfile).to receive(:load!).and_raise(R10K::Error.new("Boom!"))
|
27
|
+
allow(R10K::Errors::Formatting).to receive(:format_exception).with(instance_of(R10K::Error), anything).and_return("Formatted error message")
|
28
|
+
|
23
29
|
expect($stderr).to receive(:puts).with("Formatted error message")
|
24
|
-
|
30
|
+
|
31
|
+
checker.call
|
32
|
+
end
|
33
|
+
|
34
|
+
it "respects --puppetfile option" do
|
35
|
+
allow($stderr).to receive(:puts)
|
36
|
+
|
37
|
+
expect(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, "/custom/puppetfile/path").and_return(puppetfile)
|
38
|
+
|
39
|
+
checker({puppetfile: "/custom/puppetfile/path"}).call
|
25
40
|
end
|
26
41
|
end
|
@@ -31,32 +31,14 @@ describe R10K::Action::Puppetfile::CriRunner do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "for the moduledir" do
|
34
|
-
|
35
|
-
allow(cri_runner).to receive(:env).and_return({'PUPPETFILE_DIR' => '/some/nonexistent/modules'})
|
36
|
-
end
|
37
|
-
|
38
|
-
it "sets the option from the environment when the cli option is not given" do
|
39
|
-
opts = {}
|
40
|
-
expect(cri_runner.handle_opts(opts)).to include(:moduledir => '/some/nonexistent/modules')
|
41
|
-
end
|
42
|
-
|
43
|
-
it "doesn't set the option from the environment when the cli option is given" do
|
34
|
+
it "sets the option from the cli option if given" do
|
44
35
|
opts = {:moduledir => '/some/other/nonexistent/modules'}
|
45
36
|
expect(cri_runner.handle_opts(opts)).to include(:moduledir => '/some/other/nonexistent/modules')
|
46
37
|
end
|
47
38
|
end
|
48
39
|
|
49
40
|
describe "for the puppetfile path" do
|
50
|
-
|
51
|
-
allow(cri_runner).to receive(:env).and_return({'PUPPETFILE' => '/some/nonexistent/Puppetfile'})
|
52
|
-
end
|
53
|
-
|
54
|
-
it "sets the option from the environment when the cli option is not given" do
|
55
|
-
opts = {}
|
56
|
-
expect(cri_runner.handle_opts(opts)).to include(:puppetfile => '/some/nonexistent/Puppetfile')
|
57
|
-
end
|
58
|
-
|
59
|
-
it "doesn't set the option from the environment when the cli option is given" do
|
41
|
+
it "sets the option from the cli option if given" do
|
60
42
|
opts = {:puppetfile => '/some/other/nonexistent/modules'}
|
61
43
|
expect(cri_runner.handle_opts(opts)).to include(:puppetfile => '/some/other/nonexistent/modules')
|
62
44
|
end
|
@@ -2,11 +2,14 @@ require 'spec_helper'
|
|
2
2
|
require 'r10k/action/puppetfile/install'
|
3
3
|
|
4
4
|
describe R10K::Action::Puppetfile::Install do
|
5
|
-
|
6
|
-
subject { described_class.new({root: "/some/nonexistent/path"}, []) }
|
7
|
-
|
5
|
+
let(:default_opts) { {root: "/some/nonexistent/path"} }
|
8
6
|
let(:puppetfile) { R10K::Puppetfile.new('/some/nonexistent/path', nil, nil) }
|
9
7
|
|
8
|
+
def installer(opts = {}, argv = [], settings = {})
|
9
|
+
opts = default_opts.merge(opts)
|
10
|
+
return described_class.new(opts, argv, settings)
|
11
|
+
end
|
12
|
+
|
10
13
|
before(:each) do
|
11
14
|
allow(puppetfile).to receive(:load!).and_return(nil)
|
12
15
|
allow(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, nil, nil, nil).and_return(puppetfile)
|
@@ -25,45 +28,42 @@ describe R10K::Action::Puppetfile::Install do
|
|
25
28
|
end
|
26
29
|
|
27
30
|
it "syncs each module in the Puppetfile" do
|
28
|
-
expect(puppetfile).to receive(:load!)
|
29
31
|
modules.each { |m| expect(m).to receive(:sync) }
|
30
|
-
|
32
|
+
|
33
|
+
expect(installer.call).to eq true
|
31
34
|
end
|
32
35
|
|
33
36
|
it "returns false if a module failed to install" do
|
34
|
-
expect(puppetfile).to receive(:load!)
|
35
|
-
|
36
37
|
modules[0..2].each { |m| expect(m).to receive(:sync) }
|
37
38
|
expect(modules[3]).to receive(:sync).and_raise
|
38
|
-
|
39
|
+
|
40
|
+
expect(installer.call).to eq false
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
44
|
describe "purging" do
|
43
45
|
before do
|
44
|
-
allow(puppetfile).to receive(:load!)
|
45
46
|
allow(puppetfile).to receive(:modules).and_return([])
|
46
47
|
end
|
47
48
|
|
48
49
|
it "purges the moduledir after installation" do
|
49
50
|
expect(puppetfile).to receive(:purge!)
|
50
|
-
|
51
|
+
|
52
|
+
installer.call
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
56
|
describe "using custom paths" do
|
55
|
-
let(:puppetfile) { instance_double("R10K::Puppetfile", load!: nil, accept: nil, purge!: nil) }
|
56
|
-
|
57
57
|
it "can use a custom puppetfile path" do
|
58
|
-
subject = described_class.new({root: "/some/nonexistent/path", puppetfile: "/some/other/path/Puppetfile"}, [])
|
59
58
|
expect(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, "/some/other/path/Puppetfile", nil, nil).and_return(puppetfile)
|
60
|
-
|
59
|
+
|
60
|
+
installer({puppetfile: "/some/other/path/Puppetfile"}).call
|
61
61
|
end
|
62
62
|
|
63
63
|
it "can use a custom moduledir path" do
|
64
|
-
subject = described_class.new({root: "/some/nonexistent/path", moduledir: "/some/other/path/site-modules"}, [])
|
65
64
|
expect(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", "/some/other/path/site-modules", nil, nil, nil).and_return(puppetfile)
|
66
|
-
|
65
|
+
|
66
|
+
installer({moduledir: "/some/other/path/site-modules"}).call
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -2,18 +2,41 @@ require 'spec_helper'
|
|
2
2
|
require 'r10k/action/puppetfile/purge'
|
3
3
|
|
4
4
|
describe R10K::Action::Puppetfile::Purge do
|
5
|
+
let(:default_opts) { {root: "/some/nonexistent/path"} }
|
6
|
+
let(:puppetfile) { instance_double('R10K::Puppetfile', :load! => nil) }
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
def purger(opts = {}, argv = [], settings = {})
|
9
|
+
opts = default_opts.merge(opts)
|
10
|
+
return described_class.new(opts, argv, settings)
|
11
|
+
end
|
9
12
|
|
10
|
-
before
|
13
|
+
before(:each) do
|
14
|
+
allow(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, nil).and_return(puppetfile)
|
15
|
+
end
|
11
16
|
|
12
17
|
it_behaves_like "a puppetfile action"
|
13
18
|
|
14
19
|
it "purges unmanaged entries in the Puppetfile moduledir" do
|
15
|
-
allow(puppetfile).to receive(:load!)
|
16
20
|
expect(puppetfile).to receive(:purge!)
|
17
|
-
|
21
|
+
|
22
|
+
purger.call
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "using custom paths" do
|
26
|
+
before(:each) do
|
27
|
+
allow(puppetfile).to receive(:purge!)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "can use a custom puppetfile path" do
|
31
|
+
expect(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", nil, "/some/other/path/Puppetfile").and_return(puppetfile)
|
32
|
+
|
33
|
+
purger({puppetfile: "/some/other/path/Puppetfile"}).call
|
34
|
+
end
|
35
|
+
|
36
|
+
it "can use a custom moduledir path" do
|
37
|
+
expect(R10K::Puppetfile).to receive(:new).with("/some/nonexistent/path", "/some/other/path/site-modules", nil).and_return(puppetfile)
|
38
|
+
|
39
|
+
purger({moduledir: "/some/other/path/site-modules"}).call
|
40
|
+
end
|
18
41
|
end
|
19
42
|
end
|
@@ -132,13 +132,15 @@ describe R10K::Forge::ModuleRelease do
|
|
132
132
|
describe "#cleanup_unpack_path" do
|
133
133
|
it "ignores the unpack_path if it doesn't exist" do
|
134
134
|
expect(unpack_path).to receive(:exist?).and_return false
|
135
|
-
expect(unpack_path).to_not receive(:
|
135
|
+
expect(unpack_path).to_not receive(:parent)
|
136
136
|
subject.cleanup_unpack_path
|
137
137
|
end
|
138
138
|
|
139
|
-
it "removes the unpack_path if it exists" do
|
139
|
+
it "removes the containing directory of unpack_path if it exists" do
|
140
|
+
parent = instance_double('Pathname')
|
141
|
+
expect(parent).to receive(:rmtree)
|
140
142
|
expect(unpack_path).to receive(:exist?).and_return true
|
141
|
-
expect(unpack_path).to receive(:
|
143
|
+
expect(unpack_path).to receive(:parent).and_return(parent)
|
142
144
|
subject.cleanup_unpack_path
|
143
145
|
end
|
144
146
|
end
|
@@ -146,13 +148,15 @@ describe R10K::Forge::ModuleRelease do
|
|
146
148
|
describe "#cleanup_download_path" do
|
147
149
|
it "ignores the download_path if it doesn't exist" do
|
148
150
|
expect(download_path).to receive(:exist?).and_return false
|
149
|
-
expect(download_path).to_not receive(:
|
151
|
+
expect(download_path).to_not receive(:parent)
|
150
152
|
subject.cleanup_download_path
|
151
153
|
end
|
152
154
|
|
153
|
-
it "removes the download_path if it exists" do
|
155
|
+
it "removes the containing directory of download_path if it exists" do
|
156
|
+
parent = instance_double('Pathname')
|
157
|
+
expect(parent).to receive(:rmtree)
|
154
158
|
expect(download_path).to receive(:exist?).and_return true
|
155
|
-
expect(download_path).to receive(:
|
159
|
+
expect(download_path).to receive(:parent).and_return(parent)
|
156
160
|
subject.cleanup_download_path
|
157
161
|
end
|
158
162
|
end
|
@@ -21,23 +21,20 @@ describe R10K::Git::StatefulRepository do
|
|
21
21
|
|
22
22
|
it "is true if the ref is unresolvable" do
|
23
23
|
expect(cache).to receive(:exist?).and_return true
|
24
|
-
expect(cache).to receive(:
|
24
|
+
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:unknown)
|
25
25
|
expect(subject.sync_cache?(ref)).to eq true
|
26
26
|
end
|
27
27
|
|
28
28
|
it "is true if the ref is not a tag or commit" do
|
29
29
|
expect(cache).to receive(:exist?).and_return true
|
30
|
-
expect(cache).to receive(:resolve).with('0.9.x').and_return('93456ec7dc0f6fd3ac193b4df64f6544615dfbc9')
|
31
30
|
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:branch)
|
32
31
|
expect(subject.sync_cache?(ref)).to eq true
|
33
32
|
end
|
34
33
|
|
35
34
|
it "is false otherwise" do
|
36
35
|
expect(cache).to receive(:exist?).and_return true
|
37
|
-
expect(cache).to receive(:resolve).with('0.9.x').and_return('93456ec7dc0f6fd3ac193b4df64f6544615dfbc9')
|
38
36
|
expect(cache).to receive(:ref_type).with('0.9.x').and_return(:tag)
|
39
37
|
expect(subject.sync_cache?(ref)).to eq false
|
40
38
|
end
|
41
|
-
|
42
39
|
end
|
43
40
|
end
|