r10k 3.14.0 → 3.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/docker.yml +5 -0
- data/.github/workflows/rspec_tests.yml +4 -3
- data/.github/workflows/stale.yml +2 -0
- data/.gitignore +1 -0
- data/CHANGELOG.mkd +22 -0
- data/README.mkd +2 -2
- data/doc/dynamic-environments/configuration.mkd +44 -16
- 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/git/providers.mkd +22 -0
- data/docker/Makefile +18 -11
- data/docker/r10k/Dockerfile +1 -1
- data/docker/r10k/release.Dockerfile +1 -1
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +1 -1
- data/integration/tests/git_source/git_source_repeated_remote.rb +2 -2
- data/integration/tests/purging/content_not_purged_at_root.rb +2 -2
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -1
- 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/single_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -1
- data/lib/r10k/environment/with_modules.rb +25 -2
- data/lib/r10k/git/rugged/bare_repository.rb +1 -1
- data/lib/r10k/git/rugged/credentials.rb +1 -1
- data/lib/r10k/git/rugged/thin_repository.rb +7 -0
- data/lib/r10k/git/rugged/working_repository.rb +8 -4
- data/lib/r10k/git/shellgit/thin_repository.rb +4 -0
- data/lib/r10k/git/shellgit/working_repository.rb +3 -2
- data/lib/r10k/git/stateful_repository.rb +4 -4
- data/lib/r10k/module/base.rb +6 -2
- data/lib/r10k/module/forge.rb +10 -10
- data/lib/r10k/module/git.rb +2 -4
- data/lib/r10k/module/local.rb +1 -1
- data/lib/r10k/module_loader/puppetfile/dsl.rb +1 -1
- data/lib/r10k/module_loader/puppetfile.rb +11 -6
- data/lib/r10k/settings/container.rb +1 -0
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +23 -15
- data/r10k.gemspec +5 -7
- data/spec/fixtures/unit/puppetfile/various-modules/modules/apt/.gitkeep +1 -0
- data/spec/fixtures/unit/puppetfile/various-modules/modules/baz/.gitkeep +1 -0
- data/spec/fixtures/unit/puppetfile/various-modules/modules/buzz/.gitkeep +1 -0
- data/spec/fixtures/unit/puppetfile/various-modules/modules/canary/.gitkeep +1 -0
- data/spec/fixtures/unit/puppetfile/various-modules/modules/fizz/.gitkeep +1 -0
- data/spec/fixtures/unit/puppetfile/various-modules/modules/rpm/.gitkeep +1 -0
- data/spec/integration/git/stateful_repository_spec.rb +16 -0
- data/spec/unit/action/deploy/module_spec.rb +7 -7
- data/spec/unit/environment/git_spec.rb +2 -2
- data/spec/unit/environment/with_modules_spec.rb +47 -0
- data/spec/unit/git/alternates_spec.rb +28 -28
- data/spec/unit/git/cache_spec.rb +1 -1
- data/spec/unit/git/rugged/cache_spec.rb +2 -2
- data/spec/unit/git/shellgit/cache_spec.rb +1 -1
- data/spec/unit/git/stateful_repository_spec.rb +1 -1
- data/spec/unit/module/forge_spec.rb +9 -7
- data/spec/unit/module/git_spec.rb +5 -5
- data/spec/unit/module_loader/puppetfile_spec.rb +18 -5
- data/spec/unit/module_spec.rb +14 -7
- data/spec/unit/util/cacheable_spec.rb +2 -2
- metadata +24 -13
- data/.travis.yml +0 -42
@@ -36,7 +36,7 @@ class R10K::Git::StatefulRepository
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Returns true if the sync actually updated the repo, false otherwise
|
39
|
-
def sync(ref, force=true)
|
39
|
+
def sync(ref, force=true, exclude_spec=false)
|
40
40
|
@cache.sync if sync_cache?(ref)
|
41
41
|
|
42
42
|
sha = @cache.resolve(ref)
|
@@ -45,7 +45,7 @@ class R10K::Git::StatefulRepository
|
|
45
45
|
raise R10K::Git::UnresolvableRefError.new(_("Unable to sync repo to unresolvable ref '%{ref}'") % {ref: ref}, :git_dir => @repo.git_dir)
|
46
46
|
end
|
47
47
|
|
48
|
-
workdir_status = status(ref)
|
48
|
+
workdir_status = status(ref, exclude_spec)
|
49
49
|
|
50
50
|
updated = true
|
51
51
|
case workdir_status
|
@@ -75,7 +75,7 @@ class R10K::Git::StatefulRepository
|
|
75
75
|
updated
|
76
76
|
end
|
77
77
|
|
78
|
-
def status(ref)
|
78
|
+
def status(ref, exclude_spec=false)
|
79
79
|
if !@repo.exist?
|
80
80
|
:absent
|
81
81
|
elsif !@cache.exist?
|
@@ -88,7 +88,7 @@ class R10K::Git::StatefulRepository
|
|
88
88
|
:mismatched
|
89
89
|
elsif @repo.head.nil?
|
90
90
|
:mismatched
|
91
|
-
elsif @repo.dirty?
|
91
|
+
elsif @repo.dirty?(exclude_spec)
|
92
92
|
:dirty
|
93
93
|
elsif !(@repo.head == @cache.resolve(ref))
|
94
94
|
:outdated
|
data/lib/r10k/module/base.rb
CHANGED
@@ -60,8 +60,12 @@ class R10K::Module::Base
|
|
60
60
|
@environment = environment
|
61
61
|
@overrides = args.delete(:overrides) || {}
|
62
62
|
@spec_deletable = true
|
63
|
-
@exclude_spec =
|
64
|
-
@exclude_spec = @overrides
|
63
|
+
@exclude_spec = false
|
64
|
+
@exclude_spec = @overrides.dig(:modules, :exclude_spec) if @overrides.dig(:modules, :exclude_spec)
|
65
|
+
if args.has_key?(:exclude_spec)
|
66
|
+
logger.debug2 _("Overriding :exclude_spec setting with per module setting for #{@title}")
|
67
|
+
@exclude_spec = args.delete(:exclude_spec)
|
68
|
+
end
|
65
69
|
@origin = 'external' # Expect Puppetfile or R10k::Environment to set this to a specific value
|
66
70
|
|
67
71
|
@requested_modules = @overrides.dig(:modules, :requested_modules) || []
|
data/lib/r10k/module/forge.rb
CHANGED
@@ -13,16 +13,7 @@ class R10K::Module::Forge < R10K::Module::Base
|
|
13
13
|
R10K::Module.register(self)
|
14
14
|
|
15
15
|
def self.implement?(name, args)
|
16
|
-
args[:type].to_s == 'forge'
|
17
|
-
(!!
|
18
|
-
((args.keys & %i{git svn type}).empty? &&
|
19
|
-
args.has_key?(:version) &&
|
20
|
-
name.match(%r[\w+[/-]\w+]) &&
|
21
|
-
valid_version?(args[:version])))
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.valid_version?(expected_version)
|
25
|
-
expected_version == :latest || expected_version.nil? || PuppetForge::Util.version_valid?(expected_version)
|
16
|
+
args[:type].to_s == 'forge'
|
26
17
|
end
|
27
18
|
|
28
19
|
def self.statically_defined_version(name, args)
|
@@ -54,11 +45,20 @@ class R10K::Module::Forge < R10K::Module::Base
|
|
54
45
|
:type => ::R10K::Util::Setopts::Ignore,
|
55
46
|
}, :raise_on_unhandled => false)
|
56
47
|
|
48
|
+
# Validate version and raise on issue. Title is validated by base class.
|
49
|
+
unless valid_version?(@expected_version)
|
50
|
+
raise ArgumentError, _("Module version %{ver} is not a valid Forge module version") % {ver: @expected_version}
|
51
|
+
end
|
52
|
+
|
57
53
|
@expected_version ||= current_version || :latest
|
58
54
|
|
59
55
|
@v3_module = PuppetForge::V3::Module.new(:slug => @title)
|
60
56
|
end
|
61
57
|
|
58
|
+
def valid_version?(version)
|
59
|
+
version == :latest || version.nil? || PuppetForge::Util.version_valid?(version)
|
60
|
+
end
|
61
|
+
|
62
62
|
# @param [Hash] opts Deprecated
|
63
63
|
# @return [Boolean] true if the module was updated, false otherwise
|
64
64
|
def sync(opts={})
|
data/lib/r10k/module/git.rb
CHANGED
@@ -9,8 +9,6 @@ class R10K::Module::Git < R10K::Module::Base
|
|
9
9
|
|
10
10
|
def self.implement?(name, args)
|
11
11
|
args.has_key?(:git) || args[:type].to_s == 'git'
|
12
|
-
rescue
|
13
|
-
false
|
14
12
|
end
|
15
13
|
|
16
14
|
# Will be called if self.implement? above returns true. Will return
|
@@ -69,7 +67,7 @@ class R10K::Module::Git < R10K::Module::Base
|
|
69
67
|
:default_branch_override => :default_override_ref,
|
70
68
|
}, :raise_on_unhandled => false)
|
71
69
|
|
72
|
-
force = @overrides
|
70
|
+
force = @overrides[:force]
|
73
71
|
@force = force == false ? false : true
|
74
72
|
|
75
73
|
@desired_ref ||= 'master'
|
@@ -102,7 +100,7 @@ class R10K::Module::Git < R10K::Module::Base
|
|
102
100
|
def sync(opts={})
|
103
101
|
force = opts[:force] || @force
|
104
102
|
if should_sync?
|
105
|
-
updated = @repo.sync(version, force)
|
103
|
+
updated = @repo.sync(version, force, @exclude_spec)
|
106
104
|
else
|
107
105
|
updated = false
|
108
106
|
end
|
data/lib/r10k/module/local.rb
CHANGED
@@ -8,7 +8,7 @@ class R10K::Module::Local < R10K::Module::Base
|
|
8
8
|
R10K::Module.register(self)
|
9
9
|
|
10
10
|
def self.implement?(name, args)
|
11
|
-
args
|
11
|
+
args[:local] || args[:type].to_s == 'local'
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.statically_defined_version(*)
|
@@ -157,11 +157,14 @@ module R10K
|
|
157
157
|
return @modules
|
158
158
|
end
|
159
159
|
|
160
|
-
# If this module's metadata has a static version and that version
|
161
|
-
# matches the existing module declaration
|
162
|
-
#
|
163
|
-
|
164
|
-
|
160
|
+
# If this module's metadata has a static version, and that version
|
161
|
+
# matches the existing module declaration, and it ostensibly
|
162
|
+
# has already has been deployed to disk, use it. Otherwise create a
|
163
|
+
# regular module to sync.
|
164
|
+
unless mod.version &&
|
165
|
+
mod.version == @existing_module_versions_by_name[mod.name] &&
|
166
|
+
File.directory?(mod.path)
|
167
|
+
mod = mod.to_implementation
|
165
168
|
end
|
166
169
|
|
167
170
|
@modules << mod
|
@@ -196,8 +199,10 @@ module R10K
|
|
196
199
|
end
|
197
200
|
|
198
201
|
def parse_module_definition(name, info)
|
202
|
+
# The only valid (deprecated) way a module can be defined with a
|
203
|
+
# non-hash info is if it is a Forge module.
|
199
204
|
if !info.is_a?(Hash)
|
200
|
-
info = { version: info }
|
205
|
+
info = { type: 'forge', version: info }
|
201
206
|
end
|
202
207
|
|
203
208
|
info[:overrides] = @overrides
|
data/lib/r10k/version.rb
CHANGED
@@ -2,5 +2,5 @@ module R10K
|
|
2
2
|
# When updating to a new major (X) or minor (Y) version, include `#major` or
|
3
3
|
# `#minor` (respectively) in your commit message to trigger the appropriate
|
4
4
|
# release. Otherwise, a new patch (Z) version will be released.
|
5
|
-
VERSION = '3.
|
5
|
+
VERSION = '3.15.0'
|
6
6
|
end
|
data/locales/r10k.pot
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# SOME DESCRIPTIVE TITLE.
|
2
|
-
# Copyright (C)
|
2
|
+
# Copyright (C) 2022 Puppet, Inc.
|
3
3
|
# This file is distributed under the same license as the r10k package.
|
4
|
-
# FIRST AUTHOR <EMAIL@ADDRESS>,
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
5
5
|
#
|
6
6
|
#, fuzzy
|
7
7
|
msgid ""
|
8
8
|
msgstr ""
|
9
|
-
"Project-Id-Version: r10k 3.9.3-
|
9
|
+
"Project-Id-Version: r10k 3.9.3-208-gb88bb368\n"
|
10
10
|
"\n"
|
11
11
|
"Report-Msgid-Bugs-To: docs@puppetlabs.com\n"
|
12
|
-
"POT-Creation-Date:
|
13
|
-
"PO-Revision-Date:
|
12
|
+
"POT-Creation-Date: 2022-02-07 21:13+0000\n"
|
13
|
+
"PO-Revision-Date: 2022-02-07 21:13+0000\n"
|
14
14
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15
15
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
16
16
|
"Language: \n"
|
@@ -115,7 +115,7 @@ msgstr ""
|
|
115
115
|
msgid "%{class} has not implemented method %{method}"
|
116
116
|
msgstr ""
|
117
117
|
|
118
|
-
#: ../lib/r10k/environment/name.rb:
|
118
|
+
#: ../lib/r10k/environment/name.rb:83
|
119
119
|
msgid "Improper configuration value given for strip_component setting in %{src} source. Value must be a string, a /regex/, false, or omitted. Got \"%{val}\" (%{type})"
|
120
120
|
msgstr ""
|
121
121
|
|
@@ -395,27 +395,31 @@ msgstr ""
|
|
395
395
|
msgid "Module %{name} with args %{args} doesn't have an implementation. (Are you using the right arguments?)"
|
396
396
|
msgstr ""
|
397
397
|
|
398
|
-
#: ../lib/r10k/module/base.rb:
|
398
|
+
#: ../lib/r10k/module/base.rb:66
|
399
|
+
msgid "Overriding :exclude_spec setting with per module setting for #{@title}"
|
400
|
+
msgstr ""
|
401
|
+
|
402
|
+
#: ../lib/r10k/module/base.rb:87
|
399
403
|
msgid "Spec dir for #{@title} will not be deleted because it is not in the moduledir"
|
400
404
|
msgstr ""
|
401
405
|
|
402
|
-
#: ../lib/r10k/module/base.rb:
|
406
|
+
#: ../lib/r10k/module/base.rb:99
|
403
407
|
msgid "Deleting spec data at #{spec_path}"
|
404
408
|
msgstr ""
|
405
409
|
|
406
|
-
#: ../lib/r10k/module/base.rb:
|
410
|
+
#: ../lib/r10k/module/base.rb:107
|
407
411
|
msgid "No spec dir detected at #{spec_path}, skipping deletion"
|
408
412
|
msgstr ""
|
409
413
|
|
410
|
-
#: ../lib/r10k/module/base.rb:
|
414
|
+
#: ../lib/r10k/module/base.rb:120
|
411
415
|
msgid "Deploying module to %{path}"
|
412
416
|
msgstr ""
|
413
417
|
|
414
|
-
#: ../lib/r10k/module/base.rb:
|
418
|
+
#: ../lib/r10k/module/base.rb:123
|
415
419
|
msgid "Only updating modules %{modules}, skipping module %{name}"
|
416
420
|
msgstr ""
|
417
421
|
|
418
|
-
#: ../lib/r10k/module/base.rb:
|
422
|
+
#: ../lib/r10k/module/base.rb:179
|
419
423
|
msgid "Module name (%{title}) must match either 'modulename' or 'owner/modulename'"
|
420
424
|
msgstr ""
|
421
425
|
|
@@ -423,6 +427,10 @@ msgstr ""
|
|
423
427
|
msgid "Not updating module %{name}, assuming content unchanged"
|
424
428
|
msgstr ""
|
425
429
|
|
430
|
+
#: ../lib/r10k/module/forge.rb:50
|
431
|
+
msgid "Module version %{ver} is not a valid Forge module version"
|
432
|
+
msgstr ""
|
433
|
+
|
426
434
|
#: ../lib/r10k/module/forge.rb:98
|
427
435
|
msgid "The module %{title} does not appear to have any published releases, cannot determine latest version."
|
428
436
|
msgstr ""
|
@@ -435,7 +443,7 @@ msgstr ""
|
|
435
443
|
msgid "Forge module names must match 'owner/modulename', instead got #{title}"
|
436
444
|
msgstr ""
|
437
445
|
|
438
|
-
#: ../lib/r10k/module/git.rb:
|
446
|
+
#: ../lib/r10k/module/git.rb:79
|
439
447
|
msgid "Cannot track control repo branch for content '%{name}' when not part of a git-backed environment, will use default if available."
|
440
448
|
msgstr ""
|
441
449
|
|
@@ -479,11 +487,11 @@ msgstr ""
|
|
479
487
|
msgid "Puppetfile %{path} missing or unreadable"
|
480
488
|
msgstr ""
|
481
489
|
|
482
|
-
#: ../lib/r10k/module_loader/puppetfile.rb:
|
490
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:230
|
483
491
|
msgid "Puppetfiles cannot contain duplicate module names."
|
484
492
|
msgstr ""
|
485
493
|
|
486
|
-
#: ../lib/r10k/module_loader/puppetfile.rb:
|
494
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:232
|
487
495
|
msgid "Remove the duplicates of the following modules: %{dupes}"
|
488
496
|
msgstr ""
|
489
497
|
|
data/r10k.gemspec
CHANGED
@@ -23,21 +23,19 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.license = 'Apache-2.0'
|
24
24
|
|
25
25
|
s.add_dependency 'colored2', '3.1.2'
|
26
|
-
s.add_dependency 'cri', '2.15.10'
|
26
|
+
s.add_dependency 'cri', '>= 2.15.10'
|
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', '
|
31
|
+
s.add_dependency 'puppet_forge', '>= 2.3.0'
|
32
32
|
|
33
33
|
s.add_dependency 'gettext-setup', '~>0.24'
|
34
|
-
|
35
|
-
|
36
|
-
s.add_dependency 'fast_gettext', '~> 1.1.0'
|
37
|
-
s.add_dependency 'gettext', ['>= 3.0.2', '< 3.3.0']
|
34
|
+
s.add_dependency 'fast_gettext', ['>= 1.1.0', '< 3.0.0']
|
35
|
+
s.add_dependency 'gettext', ['>= 3.0.2', '< 4.0.0']
|
38
36
|
|
39
37
|
s.add_dependency 'jwt', '~> 2.2.3'
|
40
|
-
s.add_dependency 'minitar', '~> 0.9
|
38
|
+
s.add_dependency 'minitar', '~> 0.9'
|
41
39
|
|
42
40
|
s.add_development_dependency 'rspec', '~> 3.1'
|
43
41
|
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -0,0 +1 @@
|
|
1
|
+
This only exists so the directory can be committed to git for testing purposes.
|
@@ -83,6 +83,22 @@ describe R10K::Git::StatefulRepository do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
describe "when the workdir has spec dir modifications" do
|
87
|
+
before(:each) do
|
88
|
+
thinrepo.clone(remote, {:ref => ref})
|
89
|
+
FileUtils.mkdir_p(File.join(thinrepo.path, 'spec'))
|
90
|
+
File.open(File.join(thinrepo.path, 'spec', 'file_spec.rb'), 'a') { |f| f.write('local modifications!') }
|
91
|
+
thinrepo.stage_files(['spec/file_spec.rb'])
|
92
|
+
end
|
93
|
+
it "is dirty with exclude_spec false" do
|
94
|
+
expect(subject.status(ref, false)).to eq :dirty
|
95
|
+
end
|
96
|
+
|
97
|
+
it "is insync with exclude_spec true" do
|
98
|
+
expect(subject.status(ref, true)).to eq :insync
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
86
102
|
describe "if the right ref is checked out" do
|
87
103
|
it "is insync" do
|
88
104
|
thinrepo.clone(remote, {:ref => ref})
|
@@ -231,7 +231,7 @@ describe R10K::Action::Deploy::Module do
|
|
231
231
|
original.call(settings.merge({
|
232
232
|
sources: {
|
233
233
|
main: {
|
234
|
-
remote: '
|
234
|
+
remote: 'https://not/a/remote',
|
235
235
|
basedir: '/not/a/basedir',
|
236
236
|
type: 'git'
|
237
237
|
}
|
@@ -253,9 +253,9 @@ describe R10K::Action::Deploy::Module do
|
|
253
253
|
loader = environment.loader
|
254
254
|
allow(loader).to receive(:puppetfile_content).and_return('')
|
255
255
|
expect(loader).to receive(:load) do
|
256
|
-
loader.add_module('mod1', { git: '
|
257
|
-
loader.add_module('mod2', { git: '
|
258
|
-
loader.add_module('mod3', { git: '
|
256
|
+
loader.add_module('mod1', { git: 'https://remote' })
|
257
|
+
loader.add_module('mod2', { git: 'https://remote' })
|
258
|
+
loader.add_module('mod3', { git: 'https://remote' })
|
259
259
|
|
260
260
|
loaded_content = loader.load!
|
261
261
|
loaded_content[:modules].each do |mod|
|
@@ -290,7 +290,7 @@ describe R10K::Action::Deploy::Module do
|
|
290
290
|
original.call(settings.merge({
|
291
291
|
sources: {
|
292
292
|
main: {
|
293
|
-
remote: '
|
293
|
+
remote: 'https://not/a/remote',
|
294
294
|
basedir: '/not/a/basedir',
|
295
295
|
type: 'git'
|
296
296
|
}
|
@@ -315,8 +315,8 @@ describe R10K::Action::Deploy::Module do
|
|
315
315
|
# it so it will create the correct loaded_content.
|
316
316
|
allow(loader).to receive(:puppetfile_content).and_return('')
|
317
317
|
expect(loader).to receive(:load) do
|
318
|
-
loader.add_module('mod1', { git: '
|
319
|
-
loader.add_module('mod2', { git: '
|
318
|
+
loader.add_module('mod1', { git: 'https://remote' })
|
319
|
+
loader.add_module('mod2', { git: 'https://remote' })
|
320
320
|
|
321
321
|
loaded_content = loader.load!
|
322
322
|
loaded_content[:modules].each do |mod|
|
@@ -9,7 +9,7 @@ describe R10K::Environment::Git do
|
|
9
9
|
'/some/nonexistent/environmentdir',
|
10
10
|
'gitref',
|
11
11
|
{
|
12
|
-
:remote => '
|
12
|
+
:remote => 'https://git-server.site/my-repo.git',
|
13
13
|
:ref => 'd026ea677116424d2968edb9cee8cbc24d09322b',
|
14
14
|
}
|
15
15
|
)
|
@@ -45,7 +45,7 @@ describe R10K::Environment::Git do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "can return the environment remote" do
|
48
|
-
expect(subject.remote).to eq '
|
48
|
+
expect(subject.remote).to eq 'https://git-server.site/my-repo.git'
|
49
49
|
end
|
50
50
|
|
51
51
|
it "can return the environment ref" do
|
@@ -72,4 +72,51 @@ describe R10K::Environment::WithModules do
|
|
72
72
|
expect(returned_modules.map(&:name).sort).to eq(%w[concat exec stdlib zebra])
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
describe "module options" do
|
77
|
+
let(:subject_params) {{
|
78
|
+
:modules => {
|
79
|
+
'hieradata' => {
|
80
|
+
:type => 'git',
|
81
|
+
:source => 'git@git.example.com:site_data.git',
|
82
|
+
:install_path => ''
|
83
|
+
},
|
84
|
+
'site_data_2' => {
|
85
|
+
:type => 'git',
|
86
|
+
:source => 'git@git.example.com:site_data.git',
|
87
|
+
:install_path => 'subdir'
|
88
|
+
},
|
89
|
+
|
90
|
+
}
|
91
|
+
}}
|
92
|
+
|
93
|
+
it "should support empty install_path" do
|
94
|
+
modules = subject.modules
|
95
|
+
expect(modules[0].title).to eq 'hieradata'
|
96
|
+
expect(modules[0].path).to eq Pathname.new('/some/nonexistent/environmentdir/prefix_release42/hieradata')
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should support install_path" do
|
101
|
+
modules = subject.modules
|
102
|
+
expect(modules[1].title).to eq 'site_data_2'
|
103
|
+
expect(modules[1].path).to eq Pathname.new('/some/nonexistent/environmentdir/prefix_release42/subdir/site_data_2')
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with invalid configuration" do
|
107
|
+
let(:subject_params) {{
|
108
|
+
:modules => {
|
109
|
+
'site_data_2' => {
|
110
|
+
:type => 'git',
|
111
|
+
:source => 'git@git.example.com:site_data.git',
|
112
|
+
:install_path => '/absolute_path_outside_of_containing_environment'
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}}
|
116
|
+
|
117
|
+
it "raises an error" do
|
118
|
+
expect{ subject.modules }.to raise_error(R10K::Error, /Environment cannot.*outside of containing environment.*/i)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
75
122
|
end
|
@@ -13,13 +13,13 @@ describe R10K::Git::Alternates do
|
|
13
13
|
it "reads the alternates file and splits on lines" do
|
14
14
|
expect(subject.file).to receive(:file?).and_return true
|
15
15
|
expect(subject.file).to receive(:readlines).and_return([
|
16
|
-
"/var/cache/r10k/git/
|
17
|
-
"/vagrant/.r10k/git/
|
16
|
+
"/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git\n",
|
17
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git\n",
|
18
18
|
])
|
19
19
|
|
20
20
|
expect(subject.read).to eq([
|
21
|
-
"/var/cache/r10k/git/
|
22
|
-
"/vagrant/.r10k/git/
|
21
|
+
"/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
22
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
23
23
|
])
|
24
24
|
end
|
25
25
|
|
@@ -33,17 +33,17 @@ describe R10K::Git::Alternates do
|
|
33
33
|
describe "determining if an entry is already present" do
|
34
34
|
before do
|
35
35
|
allow(subject).to receive(:to_a).and_return([
|
36
|
-
"/var/cache/r10k/git/
|
37
|
-
"/vagrant/.r10k/git/
|
36
|
+
"/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
37
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
38
38
|
])
|
39
39
|
end
|
40
40
|
|
41
41
|
it "is true if the element is in the array of read entries" do
|
42
|
-
expect(subject).to include("/vagrant/.r10k/git/
|
42
|
+
expect(subject).to include("/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git")
|
43
43
|
end
|
44
44
|
|
45
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/
|
46
|
+
expect(subject).to_not include("/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git")
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -52,7 +52,7 @@ describe R10K::Git::Alternates do
|
|
52
52
|
describe "and the git objects/info directory does not exist" do
|
53
53
|
it "raises an error when the parent directory does not exist" do
|
54
54
|
expect {
|
55
|
-
subject.write(["/tmp/.r10k/git/
|
55
|
+
subject.write(["/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
56
56
|
}.to raise_error(R10K::Git::GitError,"Cannot write /some/nonexistent/path/.git/objects/info/alternates; parent directory does not exist")
|
57
57
|
end
|
58
58
|
end
|
@@ -66,51 +66,51 @@ describe R10K::Git::Alternates do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it "creates the alternates file with the new entry when not present" do
|
69
|
-
subject.write(["/tmp/.r10k/git/
|
70
|
-
expect(io.string).to eq("/tmp/.r10k/git/
|
69
|
+
subject.write(["/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
70
|
+
expect(io.string).to eq("/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git\n")
|
71
71
|
end
|
72
72
|
|
73
73
|
it "rewrites the file with all alternate entries" do
|
74
|
-
subject.write(["/var/cache/r10k/git/
|
75
|
-
"/vagrant/.r10k/git/
|
76
|
-
"/tmp/.r10k/git/
|
74
|
+
subject.write(["/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
75
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
76
|
+
"/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
77
77
|
|
78
78
|
expect(io.string).to eq(<<-EOD)
|
79
|
-
/var/cache/r10k/git/
|
80
|
-
/vagrant/.r10k/git/
|
81
|
-
/tmp/.r10k/git/
|
79
|
+
/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git
|
80
|
+
/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git
|
81
|
+
/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git
|
82
82
|
EOD
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
describe "appending a new alternate object entry" do
|
87
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/
|
89
|
-
"/vagrant/.r10k/git/
|
88
|
+
expect(subject).to receive(:to_a).and_return(["/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
89
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
90
90
|
|
91
|
-
expect(subject).to receive(:write).with(["/var/cache/r10k/git/
|
92
|
-
"/vagrant/.r10k/git/
|
93
|
-
"/tmp/.r10k/git/
|
91
|
+
expect(subject).to receive(:write).with(["/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
92
|
+
"/vagrant/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
93
|
+
"/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
94
94
|
|
95
|
-
subject.add("/tmp/.r10k/git/
|
95
|
+
subject.add("/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git")
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
100
|
describe "conditionally appending a new alternate object entry" do
|
101
101
|
before do
|
102
|
-
expect(subject).to receive(:read).and_return(%w[/var/cache/r10k/git/
|
102
|
+
expect(subject).to receive(:read).and_return(%w[/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git])
|
103
103
|
end
|
104
104
|
|
105
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/
|
107
|
-
"/tmp/.r10k/git/
|
108
|
-
expect(subject.add?("/tmp/.r10k/git/
|
106
|
+
expect(subject).to receive(:write).with(["/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git",
|
107
|
+
"/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git"])
|
108
|
+
expect(subject.add?("/tmp/.r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git")).to eq true
|
109
109
|
end
|
110
110
|
|
111
111
|
it "doesn't modify the file and returns false when the entry exists" do
|
112
112
|
expect(subject).to_not receive(:write)
|
113
|
-
expect(subject.add?("/var/cache/r10k/git/
|
113
|
+
expect(subject.add?("/var/cache/r10k/git/https---github.com-puppetlabs-puppetlabs-apache.git")).to eq false
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
data/spec/unit/git/cache_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe R10K::Git::Rugged::Cache, :unless => R10K::Util::Platform.jruby? do
|
|
5
5
|
require 'r10k/git/rugged/cache'
|
6
6
|
end
|
7
7
|
|
8
|
-
subject(:cache) { described_class.new('
|
8
|
+
subject(:cache) { described_class.new('https://some/git/remote') }
|
9
9
|
|
10
10
|
it "wraps a Rugged::BareRepository instance" do
|
11
11
|
expect(cache.repo).to be_a_kind_of R10K::Git::Rugged::BareRepository
|
@@ -31,7 +31,7 @@ describe R10K::Git::Rugged::Cache, :unless => R10K::Util::Platform.jruby? do
|
|
31
31
|
before do
|
32
32
|
allow(subject.repo).to receive(:exist?).and_return true
|
33
33
|
allow(subject.repo).to receive(:fetch)
|
34
|
-
allow(subject.repo).to receive(:remotes).and_return({ 'origin' => '
|
34
|
+
allow(subject.repo).to receive(:remotes).and_return({ 'origin' => 'https://some/git/remote' })
|
35
35
|
end
|
36
36
|
|
37
37
|
it "does not update the URLs if they match" do
|
@@ -3,7 +3,7 @@ require 'r10k/git/shellgit/cache'
|
|
3
3
|
|
4
4
|
describe R10K::Git::ShellGit::Cache do
|
5
5
|
|
6
|
-
subject { described_class.new('
|
6
|
+
subject { described_class.new('https://some/git/remote') }
|
7
7
|
|
8
8
|
it "wraps a ShellGit::BareRepository instance" do
|
9
9
|
expect(subject.repo).to be_a_kind_of R10K::Git::ShellGit::BareRepository
|
@@ -4,7 +4,7 @@ require 'r10k/git/stateful_repository'
|
|
4
4
|
|
5
5
|
describe R10K::Git::StatefulRepository do
|
6
6
|
|
7
|
-
let(:remote) { '
|
7
|
+
let(:remote) { 'https://some.site/some-repo.git' }
|
8
8
|
let(:ref) { '0.9.x' }
|
9
9
|
|
10
10
|
subject { described_class.new(remote, '/some/nonexistent/basedir', 'some-dirname') }
|