r10k 2.6.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.travis.yml +9 -16
  4. data/CHANGELOG.mkd +23 -36
  5. data/Gemfile +2 -1
  6. data/MAINTAINERS +18 -0
  7. data/README.mkd +1 -5
  8. data/bin/r10k +2 -2
  9. data/doc/common-patterns.mkd +2 -2
  10. data/doc/dynamic-environments/configuration.mkd +1 -2
  11. data/doc/dynamic-environments/quickstart.mkd +3 -3
  12. data/doc/dynamic-environments/usage.mkd +0 -12
  13. data/doc/puppetfile.mkd +0 -18
  14. data/docker/Gemfile +13 -0
  15. data/docker/ci/build +72 -0
  16. data/docker/distelli-manifest.yml +4 -0
  17. data/docker/r10k/Dockerfile +41 -0
  18. data/docker/r10k/spec/dockerfile_spec.rb +16 -0
  19. data/integration/Gemfile +4 -2
  20. data/integration/Rakefile +3 -2
  21. data/integration/pre-suite/00_pe_install.rb +0 -1
  22. data/integration/pre-suite/30_test_utils.rb +17 -0
  23. data/integration/scripts/README.mkd +86 -0
  24. data/integration/scripts/setup_r10k_env_centos5.sh +23 -0
  25. data/integration/scripts/setup_r10k_env_centos6.sh +23 -0
  26. data/integration/scripts/setup_r10k_env_rhel7.sh +23 -0
  27. data/integration/scripts/setup_r10k_env_sles11.sh +23 -0
  28. data/integration/scripts/setup_r10k_env_sles12.sh +23 -0
  29. data/integration/scripts/setup_r10k_env_ubuntu1004.sh +23 -0
  30. data/integration/scripts/setup_r10k_env_ubuntu1204.sh +23 -0
  31. data/integration/scripts/setup_r10k_env_ubuntu1404.sh +23 -0
  32. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +2 -2
  33. data/integration/tests/basic_functionality/negative/attempt_to_install_peonly_module_without_license.rb +71 -0
  34. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +2 -2
  35. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +2 -2
  36. data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
  37. data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
  38. data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
  39. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +12 -2
  40. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +1 -8
  41. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +11 -2
  42. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +12 -2
  43. data/lib/r10k/action/deploy/environment.rb +2 -15
  44. data/lib/r10k/action/puppetfile/check.rb +1 -1
  45. data/lib/r10k/action/puppetfile/cri_runner.rb +1 -13
  46. data/lib/r10k/action/puppetfile/purge.rb +1 -1
  47. data/lib/r10k/cli/deploy.rb +0 -1
  48. data/lib/r10k/cli/puppetfile.rb +4 -0
  49. data/lib/r10k/environment/base.rb +7 -1
  50. data/lib/r10k/environment/svn.rb +1 -1
  51. data/lib/r10k/forge/module_release.rb +2 -2
  52. data/lib/r10k/git/rugged/base_repository.rb +6 -3
  53. data/lib/r10k/git/rugged/working_repository.rb +10 -1
  54. data/lib/r10k/git/shellgit/base_repository.rb +27 -8
  55. data/lib/r10k/git/shellgit/working_repository.rb +20 -6
  56. data/lib/r10k/git/stateful_repository.rb +0 -1
  57. data/lib/r10k/module/git.rb +0 -5
  58. data/lib/r10k/puppetfile.rb +22 -27
  59. data/lib/r10k/source/base.rb +6 -0
  60. data/lib/r10k/source/git.rb +2 -2
  61. data/lib/r10k/source/svn.rb +4 -2
  62. data/lib/r10k/util/purgeable.rb +4 -2
  63. data/lib/r10k/util/subprocess/runner/posix.rb +3 -3
  64. data/lib/r10k/version.rb +1 -4
  65. data/locales/r10k.pot +23 -19
  66. data/r10k.gemspec +4 -8
  67. data/r10k.yaml.example +6 -0
  68. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
  69. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
  70. data/spec/shared-examples/git/working_repository.rb +46 -0
  71. data/spec/unit/action/deploy/environment_spec.rb +0 -63
  72. data/spec/unit/action/puppetfile/check_spec.rb +24 -9
  73. data/spec/unit/action/puppetfile/cri_runner_spec.rb +2 -20
  74. data/spec/unit/action/puppetfile/install_spec.rb +16 -16
  75. data/spec/unit/action/puppetfile/purge_spec.rb +29 -6
  76. data/spec/unit/forge/module_release_spec.rb +10 -6
  77. data/spec/unit/git/stateful_repository_spec.rb +1 -4
  78. data/spec/unit/puppetfile_spec.rb +43 -36
  79. metadata +33 -48
  80. data/.github/pull_request_template.md +0 -4
  81. data/.github/workflows/release.yml +0 -36
  82. data/CODEOWNERS +0 -1
  83. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
@@ -43,7 +43,7 @@ class R10K::Environment::SVN < R10K::Environment::Base
43
43
  def initialize(name, basedir, dirname, options = {})
44
44
  super
45
45
 
46
- setopts(options, {:remote => :self, :username => :self, :password => :self})
46
+ setopts(options, {:remote => :self, :username => :self, :password => :self, :puppetfile_name => :self })
47
47
 
48
48
  @working_dir = R10K::SVN::WorkingDir.new(Pathname.new(@full_path), :username => @username, :password => @password)
49
49
  end
@@ -181,14 +181,14 @@ module R10K
181
181
  # Remove the temporary directory used for unpacking the module.
182
182
  def cleanup_unpack_path
183
183
  if unpack_path.exist?
184
- unpack_path.rmtree
184
+ unpack_path.parent.rmtree
185
185
  end
186
186
  end
187
187
 
188
188
  # Remove the downloaded module release.
189
189
  def cleanup_download_path
190
190
  if download_path.exist?
191
- download_path.delete
191
+ download_path.parent.rmtree
192
192
  end
193
193
  end
194
194
 
@@ -34,10 +34,13 @@ class R10K::Git::Rugged::BaseRepository
34
34
 
35
35
  # @return [Symbol] The type of the given ref, one of :branch, :tag, :commit, or :unknown
36
36
  def ref_type(pattern)
37
- if branches.include? pattern
38
- :branch
39
- elsif tags.include? pattern
37
+ # Try to match and resolve SHA refs as quickly as possible.
38
+ if pattern =~ /^[0-9a-f]{5,40}$/i && @_rugged_repo.include?(pattern)
39
+ :commit
40
+ elsif @_rugged_repo.tags[pattern]
40
41
  :tag
42
+ elsif @_rugged_repo.branches[pattern]
43
+ :branch
41
44
  elsif resolve(pattern)
42
45
  :commit
43
46
  else
@@ -118,7 +118,16 @@ class R10K::Git::Rugged::WorkingRepository < R10K::Git::Rugged::BaseRepository
118
118
  end
119
119
 
120
120
  def dirty?
121
- with_repo { |repo| repo.diff_workdir('HEAD').size > 0 }
121
+ with_repo do |repo|
122
+ diff = repo.diff_workdir('HEAD')
123
+
124
+ diff.each_patch do |p|
125
+ logger.debug(_("Found local modifications in %{file_path}" % {file_path: File.join(@path, p.delta.old_file[:path])}))
126
+ logger.debug1(p.to_s)
127
+ end
128
+
129
+ return diff.size > 0
130
+ end
122
131
  end
123
132
 
124
133
  private
@@ -30,21 +30,40 @@ class R10K::Git::ShellGit::BaseRepository
30
30
  for_each_ref('refs/heads')
31
31
  end
32
32
 
33
+ def is_branch?(pattern)
34
+ result = git ['rev-parse', '-q', '--verify', "refs/heads/#{pattern}"], :git_dir => git_dir.to_s, :raise_on_fail => false
35
+
36
+ result.success?
37
+ end
38
+
33
39
  # @return [Array<String>] All tags in this repository
34
40
  def tags
35
41
  for_each_ref('refs/tags')
36
42
  end
37
43
 
44
+ def is_tag?(pattern)
45
+ result = git ['rev-parse', '-q', '--verify', "refs/tags/#{pattern}"], :git_dir => git_dir.to_s, :raise_on_fail => false
46
+
47
+ result.success?
48
+ end
49
+
38
50
  # @return [Symbol] The type of the given ref, one of :branch, :tag, :commit, or :unknown
39
51
  def ref_type(pattern)
40
- if branches.include? pattern
41
- :branch
42
- elsif tags.include? pattern
43
- :tag
44
- elsif resolve(pattern)
45
- :commit
46
- else
47
- :unknown
52
+ @_ref_type_cache ||= {}
53
+
54
+ @_ref_type_cache[pattern] ||= begin
55
+ # Try to match and resolve SHA refs as quickly as possible.
56
+ if pattern =~ /^[0-9a-f]{5,40}$/i && resolve(pattern)
57
+ :commit
58
+ elsif is_tag? pattern
59
+ :tag
60
+ elsif is_branch? pattern
61
+ :branch
62
+ elsif resolve(pattern)
63
+ :commit
64
+ else
65
+ :unknown
66
+ end
48
67
  end
49
68
  end
50
69
 
@@ -49,14 +49,14 @@ class R10K::Git::ShellGit::WorkingRepository < R10K::Git::ShellGit::BaseReposito
49
49
  # @param ref [String] The git reference to check out
50
50
  # @param opts [Hash] Optional hash of additional options.
51
51
  def checkout(ref, opts = {})
52
+ argv = ['checkout', ref]
53
+
52
54
  # :force defaults to true
53
55
  if !opts.has_key?(:force) || opts[:force]
54
- force_opt = '--force'
55
- else
56
- force_opt = ''
56
+ argv << '--force'
57
57
  end
58
58
 
59
- git ['checkout', ref, force_opt], :path => @path.to_s
59
+ git argv, :path => @path.to_s
60
60
  end
61
61
 
62
62
  def fetch(remote_name='origin')
@@ -91,7 +91,21 @@ class R10K::Git::ShellGit::WorkingRepository < R10K::Git::ShellGit::BaseReposito
91
91
 
92
92
  # does the working tree have local modifications to tracked files?
93
93
  def dirty?
94
- result = git(['diff-index', '--quiet','HEAD', '--'], :path => @path.to_s, :raise_on_fail => false)
95
- result.exit_code != 0
94
+ result = git(['diff-index', '--exit-code', '--name-only', 'HEAD'], :path => @path.to_s, :raise_on_fail => false)
95
+
96
+ if result.exit_code != 0
97
+ dirty_files = result.stdout.split('\n')
98
+
99
+ dirty_files.each do |file|
100
+ logger.debug(_("Found local modifications in %{file_path}" % {file_path: File.join(@path, file)}))
101
+
102
+ # Do this in a block so that the extra subprocess only gets invoked when needed.
103
+ logger.debug1 { git(['diff-index', '-p', 'HEAD', file], :path => @path.to_s, :raise_on_fail => false).stdout }
104
+ end
105
+
106
+ return true
107
+ else
108
+ return false
109
+ end
96
110
  end
97
111
  end
@@ -89,7 +89,6 @@ class R10K::Git::StatefulRepository
89
89
  # @api private
90
90
  def sync_cache?(ref)
91
91
  return true if !@cache.exist?
92
- return true if !@cache.resolve(ref)
93
92
  return true if !([:commit, :tag].include? @cache.ref_type(ref))
94
93
  return false
95
94
  end
@@ -23,11 +23,6 @@ class R10K::Module::Git < R10K::Module::Base
23
23
  # @return [String]
24
24
  attr_reader :desired_ref
25
25
 
26
- # @!attribute [r] default_ref
27
- # @api private
28
- # @return [String]
29
- attr_reader :default_ref
30
-
31
26
  def initialize(title, dirname, args, environment=nil)
32
27
  super
33
28
 
@@ -46,7 +46,10 @@ class Puppetfile
46
46
  @basedir = basedir
47
47
  @force = force || false
48
48
  @moduledir = moduledir || File.join(basedir, 'modules')
49
- @puppetfile_path = puppetfile_path || File.join(basedir, 'Puppetfile')
49
+ @puppetfile_name = puppetfile_name || 'Puppetfile'
50
+ @puppetfile_path = puppetfile_path || File.join(basedir, @puppetfile_name)
51
+
52
+ logger.info _("Using Puppetfile '%{puppetfile}'") % {puppetfile: @puppetfile_path}
50
53
 
51
54
  @modules = []
52
55
  @managed_content = {}
@@ -55,42 +58,42 @@ class Puppetfile
55
58
  @loaded = false
56
59
  end
57
60
 
58
- def load(default_branch_override = nil)
61
+ def load
59
62
  if File.readable? @puppetfile_path
60
- self.load!(default_branch_override)
63
+ self.load!
61
64
  else
62
65
  logger.debug _("Puppetfile %{path} missing or unreadable") % {path: @puppetfile_path.inspect}
63
66
  end
64
67
  end
65
68
 
66
- def load!(default_branch_override = nil)
67
- @default_branch_override = default_branch_override
68
-
69
+ def load!
69
70
  dsl = R10K::Puppetfile::DSL.new(self)
70
71
  dsl.instance_eval(puppetfile_contents, @puppetfile_path)
71
-
72
72
  validate_no_duplicate_names(@modules)
73
73
  @loaded = true
74
- rescue SyntaxError, LoadError, ArgumentError => e
74
+ rescue SyntaxError, LoadError, ArgumentError, NameError => e
75
75
  raise R10K::Error.wrap(e, _("Failed to evaluate %{path}") % {path: @puppetfile_path})
76
76
  end
77
77
 
78
- # @param [String] forge
79
- def set_forge(forge)
80
- @forge = forge
81
- end
82
-
83
78
  # @param [Array<String>] modules
84
79
  def validate_no_duplicate_names(modules)
85
80
  dupes = modules
86
81
  .group_by { |mod| mod.name }
87
- .select { |_, v| v.size > 1 }.map(&:first)
82
+ .select { |_, v| v.size > 1 }
83
+ .map(&:first)
88
84
  unless dupes.empty?
89
- logger.warn _('Puppetfiles should not contain duplicate module names and will result in an error in r10k v3.x.')
90
- logger.warn _("Remove the duplicates of the following modules: %{dupes}" % {dupes: dupes.join(" ")})
85
+ msg = _('Puppetfiles cannot contain duplicate module names.')
86
+ msg += ' '
87
+ msg += _("Remove the duplicates of the following modules: %{dupes}" % { dupes: dupes.join(' ') })
88
+ raise R10K::Error.new(msg)
91
89
  end
92
90
  end
93
91
 
92
+ # @param [String] forge
93
+ def set_forge(forge)
94
+ @forge = forge
95
+ end
96
+
94
97
  # @param [String] moduledir
95
98
  def set_moduledir(moduledir)
96
99
  @moduledir = if Pathname.new(moduledir).absolute?
@@ -110,10 +113,6 @@ class Puppetfile
110
113
  install_path = @moduledir
111
114
  end
112
115
 
113
- if args.is_a?(Hash) && @default_branch_override != nil
114
- args[:default_branch] = @default_branch_override
115
- end
116
-
117
116
  # Keep track of all the content this Puppetfile is managing to enable purging.
118
117
  @managed_content[install_path] = Array.new unless @managed_content.has_key?(install_path)
119
118
 
@@ -128,9 +127,7 @@ class Puppetfile
128
127
  def managed_directories
129
128
  self.load unless @loaded
130
129
 
131
- dirs = @managed_content.keys
132
- dirs.delete(real_basedir)
133
- dirs
130
+ @managed_content.keys
134
131
  end
135
132
 
136
133
  # Returns an array of the full paths to all the content being managed.
@@ -182,6 +179,8 @@ class Puppetfile
182
179
  end
183
180
 
184
181
  def validate_install_path(path, modname)
182
+ real_basedir = Pathname.new(basedir).cleanpath.to_s
183
+
185
184
  unless /^#{Regexp.escape(real_basedir)}.*/ =~ path
186
185
  raise R10K::Error.new("Puppetfile cannot manage content '#{modname}' outside of containing environment: #{path} is not within #{real_basedir}")
187
186
  end
@@ -189,10 +188,6 @@ class Puppetfile
189
188
  true
190
189
  end
191
190
 
192
- def real_basedir
193
- Pathname.new(basedir).cleanpath.to_s
194
- end
195
-
196
191
  class DSL
197
192
  # A barebones implementation of the Puppetfile DSL
198
193
  #
@@ -16,6 +16,11 @@ class R10K::Source::Base
16
16
  # Defaults to nil.
17
17
  attr_reader :prefix
18
18
 
19
+ # @!attribute [r] puppetfile_name
20
+ # @return [String, nil] The Name of the puppetfile
21
+ # Defaults to nil.
22
+ attr_reader :puppetfile_name
23
+
19
24
  # Initialize the given source.
20
25
  #
21
26
  # @param name [String] The identifier for this source.
@@ -30,6 +35,7 @@ class R10K::Source::Base
30
35
  @name = name
31
36
  @basedir = Pathname.new(basedir).cleanpath.to_s
32
37
  @prefix = options.delete(:prefix)
38
+ @puppetfile_name = options.delete(:puppetfile_name)
33
39
  @options = options
34
40
  end
35
41
 
@@ -95,11 +95,11 @@ class R10K::Source::Git < R10K::Source::Base
95
95
  branch_names.each do |bn|
96
96
  if bn.valid?
97
97
  envs << R10K::Environment::Git.new(bn.name, @basedir, bn.dirname,
98
- {:remote => remote, :ref => bn.name})
98
+ {:remote => remote, :ref => bn.name, :puppetfile_name => puppetfile_name })
99
99
  elsif bn.correct?
100
100
  logger.warn _("Environment %{env_name} contained non-word characters, correcting name to %{corrected_env_name}") % {env_name: bn.name.inspect, corrected_env_name: bn.dirname}
101
101
  envs << R10K::Environment::Git.new(bn.name, @basedir, bn.dirname,
102
- {:remote => remote, :ref => bn.name})
102
+ {:remote => remote, :ref => bn.name, :puppetfile_name => puppetfile_name})
103
103
  elsif bn.validate?
104
104
  logger.error _("Environment %{env_name} contained non-word characters, ignoring it.") % {env_name: bn.name.inspect}
105
105
  end
@@ -55,10 +55,11 @@ class R10K::Source::SVN < R10K::Source::Base
55
55
  # @option options [String] :remote The URL to the base directory of the SVN repository
56
56
  # @option options [String] :username The SVN username
57
57
  # @option options [String] :password The SVN password
58
+ # @option options [String] :puppetfile_name The puppetfile name
58
59
  def initialize(name, basedir, options = {})
59
60
  super
60
61
 
61
- setopts(options, {:remote => :self, :username => :self, :password => :self})
62
+ setopts(options, {:remote => :self, :username => :self, :password => :self, :puppetfile_name => :self })
62
63
  @environments = []
63
64
  @svn_remote = R10K::SVN::Remote.new(@remote, :username => @username, :password => @password)
64
65
  @ignore_branch_prefixes = options[:ignore_branch_prefixes]
@@ -88,7 +89,8 @@ class R10K::Source::SVN < R10K::Source::Base
88
89
  options = {
89
90
  :remote => path,
90
91
  :username => @username,
91
- :password => @password
92
+ :password => @password,
93
+ :puppetfile_name => puppetfile_name
92
94
  }
93
95
  R10K::Environment::SVN.new(branch.name, @basedir, branch.dirname, options)
94
96
  end
@@ -45,10 +45,12 @@ module R10K
45
45
 
46
46
  # @return [Array<String>] Directory contents that are present but not expected
47
47
  def stale_contents(recurse, exclusions, whitelist)
48
+ fn_match_opts = File::FNM_PATHNAME | File::FNM_DOTMATCH
49
+
48
50
  (current_contents(recurse) - desired_contents).reject do |item|
49
- if exclusion_match = exclusions.find { |ex_item| File.fnmatch?(ex_item, item, File::FNM_PATHNAME | File::FNM_DOTMATCH) }
51
+ if exclusion_match = exclusions.find { |ex_item| (ex_item == item) || File.fnmatch?(ex_item, item, fn_match_opts) }
50
52
  logger.debug2 _("Not purging %{item} due to internal exclusion match: %{exclusion_match}") % {item: item, exclusion_match: exclusion_match}
51
- elsif whitelist_match = whitelist.find { |wl_item| File.fnmatch?(wl_item, item, File::FNM_PATHNAME | File::FNM_DOTMATCH) }
53
+ elsif whitelist_match = whitelist.find { |wl_item| (wl_item == item) || File.fnmatch?(wl_item, item, fn_match_opts) }
52
54
  logger.debug _("Not purging %{item} due to whitelist match: %{whitelist_match}") % {item: item, whitelist_match: whitelist_match}
53
55
  end
54
56
 
@@ -28,15 +28,15 @@ class R10K::Util::Subprocess::Runner::POSIX < R10K::Util::Subprocess::Runner
28
28
 
29
29
  @stdout_pump = R10K::Util::Subprocess::Runner::Pump.new(@stdout_r)
30
30
  @stderr_pump = R10K::Util::Subprocess::Runner::Pump.new(@stderr_r)
31
+ @stdout_pump.start
32
+ @stderr_pump.start
33
+
31
34
  pid = fork do
32
35
  exec_r.close
33
36
  execute_child(exec_w)
34
37
  end
35
38
 
36
39
  exec_w.close
37
- @stdout_pump.start
38
- @stderr_pump.start
39
-
40
40
  execute_parent(exec_r, pid)
41
41
 
42
42
  @result
@@ -1,6 +1,3 @@
1
1
  module R10K
2
- # When updating to a new major (X) or minor (Y) version, include `#major` or
3
- # `#minor` (respectively) in your commit message to trigger the appropriate
4
- # release. Otherwise, a new patch (Z) version will be released.
5
- VERSION = '2.6.9'
2
+ VERSION = '3.0.0'
6
3
  end
@@ -6,11 +6,11 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: r10k 2.6.5-10-g5854775\n"
9
+ "Project-Id-Version: r10k 2.6.3-141-gc7f57d5\n"
10
10
  "\n"
11
11
  "Report-Msgid-Bugs-To: docs@puppetlabs.com\n"
12
- "POT-Creation-Date: 2018-11-29 09:11-0800\n"
13
- "PO-Revision-Date: 2018-11-29 09:11-0800\n"
12
+ "POT-Creation-Date: 2018-08-02 19:06+0000\n"
13
+ "PO-Revision-Date: 2018-08-02 19:06+0000\n"
14
14
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
15
  "Language-Team: LANGUAGE <LL@li.org>\n"
16
16
  "Language: \n"
@@ -75,10 +75,6 @@ msgstr ""
75
75
  msgid "Syntax OK"
76
76
  msgstr ""
77
77
 
78
- #: ../lib/r10k/action/puppetfile/cri_runner.rb:19
79
- msgid "The use of the PUPPETFILE and PUPPETFILE_DIR environment variables is deprecated."
80
- msgstr ""
81
-
82
78
  #: ../lib/r10k/action/puppetfile/install.rb:30
83
79
  msgid "Updating module %{mod_path}"
84
80
  msgstr ""
@@ -107,7 +103,7 @@ msgstr ""
107
103
  msgid "Unable to load sources; the supplied configuration does not define the 'sources' key"
108
104
  msgstr ""
109
105
 
110
- #: ../lib/r10k/environment/base.rb:53 ../lib/r10k/environment/base.rb:69 ../lib/r10k/environment/base.rb:78 ../lib/r10k/source/base.rb:58
106
+ #: ../lib/r10k/environment/base.rb:59 ../lib/r10k/environment/base.rb:75 ../lib/r10k/environment/base.rb:84 ../lib/r10k/source/base.rb:64
111
107
  msgid "%{class} has not implemented method %{method}"
112
108
  msgstr ""
113
109
 
@@ -247,6 +243,10 @@ msgstr ""
247
243
  msgid "Fetching remote '%{remote}' at %{path}"
248
244
  msgstr ""
249
245
 
246
+ #: ../lib/r10k/git/rugged/working_repository.rb:125 ../lib/r10k/git/shellgit/working_repository.rb:100
247
+ msgid "Found local modifications in %{file_path}"
248
+ msgstr ""
249
+
250
250
  #: ../lib/r10k/git/stateful_repository.rb:40
251
251
  msgid "Unable to sync repo to unresolvable ref '%{ref}'"
252
252
  msgstr ""
@@ -319,23 +319,27 @@ msgstr ""
319
319
  msgid "Could not read metadata.json"
320
320
  msgstr ""
321
321
 
322
- #: ../lib/r10k/puppetfile.rb:62
322
+ #: ../lib/r10k/puppetfile.rb:52
323
+ msgid "Using Puppetfile '%{puppetfile}'"
324
+ msgstr ""
325
+
326
+ #: ../lib/r10k/puppetfile.rb:65
323
327
  msgid "Puppetfile %{path} missing or unreadable"
324
328
  msgstr ""
325
329
 
326
- #: ../lib/r10k/puppetfile.rb:72
330
+ #: ../lib/r10k/puppetfile.rb:75
327
331
  msgid "Failed to evaluate %{path}"
328
332
  msgstr ""
329
333
 
330
- #: ../lib/r10k/puppetfile.rb:86
331
- msgid "Puppetfiles should not contain duplicate module names and will result in an error in r10k v3.x."
334
+ #: ../lib/r10k/puppetfile.rb:85
335
+ msgid "Puppetfiles cannot contain duplicate module names."
332
336
  msgstr ""
333
337
 
334
338
  #: ../lib/r10k/puppetfile.rb:87
335
339
  msgid "Remove the duplicates of the following modules: %{dupes}"
336
340
  msgstr ""
337
341
 
338
- #: ../lib/r10k/puppetfile.rb:207
342
+ #: ../lib/r10k/puppetfile.rb:213
339
343
  msgid "unrecognized declaration '%{method}'"
340
344
  msgstr ""
341
345
 
@@ -415,7 +419,7 @@ msgstr ""
415
419
  msgid "Environment %{env_name} contained non-word characters, ignoring it."
416
420
  msgstr ""
417
421
 
418
- #: ../lib/r10k/source/git.rb:123 ../lib/r10k/source/svn.rb:111
422
+ #: ../lib/r10k/source/git.rb:123 ../lib/r10k/source/svn.rb:113
419
423
  msgid "Branch %{branch} filtered out by ignore_branch_prefixes %{ibp}"
420
424
  msgstr ""
421
425
 
@@ -443,23 +447,23 @@ msgstr ""
443
447
  msgid "pe_license feature is not available, PE only Puppet modules will not be downloadable."
444
448
  msgstr ""
445
449
 
446
- #: ../lib/r10k/util/purgeable.rb:50
450
+ #: ../lib/r10k/util/purgeable.rb:52
447
451
  msgid "Not purging %{item} due to internal exclusion match: %{exclusion_match}"
448
452
  msgstr ""
449
453
 
450
- #: ../lib/r10k/util/purgeable.rb:52
454
+ #: ../lib/r10k/util/purgeable.rb:54
451
455
  msgid "Not purging %{item} due to whitelist match: %{whitelist_match}"
452
456
  msgstr ""
453
457
 
454
- #: ../lib/r10k/util/purgeable.rb:69
458
+ #: ../lib/r10k/util/purgeable.rb:71
455
459
  msgid "No unmanaged contents in %{managed_dirs}, nothing to purge"
456
460
  msgstr ""
457
461
 
458
- #: ../lib/r10k/util/purgeable.rb:74
462
+ #: ../lib/r10k/util/purgeable.rb:76
459
463
  msgid "Removing unmanaged path %{path}"
460
464
  msgstr ""
461
465
 
462
- #: ../lib/r10k/util/purgeable.rb:79
466
+ #: ../lib/r10k/util/purgeable.rb:81
463
467
  msgid "Unable to remove unmanaged path: %{path}"
464
468
  msgstr ""
465
469