r10k 2.6.9 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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