r10k 3.5.1 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +4 -1
  3. data/.github/workflows/docker.yml +4 -1
  4. data/.github/workflows/release.yml +3 -2
  5. data/.github/workflows/rspec_tests.yml +81 -0
  6. data/.travis.yml +8 -1
  7. data/CHANGELOG.mkd +43 -2
  8. data/CODEOWNERS +2 -2
  9. data/README.mkd +13 -4
  10. data/doc/common-patterns.mkd +1 -0
  11. data/doc/dynamic-environments/configuration.mkd +143 -39
  12. data/doc/dynamic-environments/usage.mkd +12 -11
  13. data/doc/puppetfile.mkd +23 -3
  14. data/docker/Gemfile +1 -1
  15. data/docker/Makefile +7 -4
  16. data/docker/docker-compose.yml +18 -0
  17. data/docker/r10k/Dockerfile +4 -3
  18. data/docker/r10k/docker-entrypoint.sh +0 -1
  19. data/docker/r10k/release.Dockerfile +3 -2
  20. data/docker/spec/dockerfile_spec.rb +26 -32
  21. data/integration/tests/git_source/git_source_repeated_remote.rb +68 -0
  22. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +2 -1
  23. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +2 -1
  24. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -1
  25. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +2 -1
  26. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +1 -1
  27. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +1 -1
  28. data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +1 -1
  29. data/lib/r10k/action/deploy/display.rb +9 -3
  30. data/lib/r10k/action/deploy/environment.rb +39 -14
  31. data/lib/r10k/action/deploy/module.rb +4 -1
  32. data/lib/r10k/action/runner.rb +34 -0
  33. data/lib/r10k/cli/deploy.rb +14 -7
  34. data/lib/r10k/cli/puppetfile.rb +5 -5
  35. data/lib/r10k/environment/base.rb +9 -2
  36. data/lib/r10k/environment/git.rb +17 -2
  37. data/lib/r10k/environment/name.rb +22 -4
  38. data/lib/r10k/environment/svn.rb +11 -2
  39. data/lib/r10k/environment/with_modules.rb +28 -20
  40. data/lib/r10k/forge/module_release.rb +2 -2
  41. data/lib/r10k/git.rb +1 -0
  42. data/lib/r10k/git/cache.rb +12 -4
  43. data/lib/r10k/git/rugged/credentials.rb +39 -2
  44. data/lib/r10k/git/stateful_repository.rb +4 -0
  45. data/lib/r10k/initializers.rb +2 -0
  46. data/lib/r10k/module/base.rb +8 -0
  47. data/lib/r10k/module/forge.rb +16 -4
  48. data/lib/r10k/module/git.rb +42 -24
  49. data/lib/r10k/module/local.rb +1 -1
  50. data/lib/r10k/module/svn.rb +14 -11
  51. data/lib/r10k/puppetfile.rb +30 -12
  52. data/lib/r10k/settings.rb +30 -3
  53. data/lib/r10k/source/base.rb +5 -0
  54. data/lib/r10k/source/git.rb +26 -3
  55. data/lib/r10k/source/hash.rb +4 -2
  56. data/lib/r10k/source/svn.rb +5 -1
  57. data/lib/r10k/util/setopts.rb +33 -12
  58. data/lib/r10k/version.rb +1 -1
  59. data/locales/r10k.pot +71 -43
  60. data/r10k.gemspec +1 -1
  61. data/spec/fixtures/unit/action/r10k_creds.yaml +9 -0
  62. data/spec/shared-examples/subprocess-runner.rb +11 -5
  63. data/spec/unit/action/deploy/display_spec.rb +4 -0
  64. data/spec/unit/action/deploy/environment_spec.rb +154 -12
  65. data/spec/unit/action/deploy/module_spec.rb +40 -1
  66. data/spec/unit/action/puppetfile/install_spec.rb +1 -0
  67. data/spec/unit/action/runner_spec.rb +48 -1
  68. data/spec/unit/environment/git_spec.rb +19 -2
  69. data/spec/unit/environment/name_spec.rb +28 -0
  70. data/spec/unit/environment/svn_spec.rb +12 -0
  71. data/spec/unit/environment/with_modules_spec.rb +74 -0
  72. data/spec/unit/forge/module_release_spec.rb +14 -10
  73. data/spec/unit/git/cache_spec.rb +10 -0
  74. data/spec/unit/git/rugged/credentials_spec.rb +79 -2
  75. data/spec/unit/git_spec.rb +3 -3
  76. data/spec/unit/module/forge_spec.rb +6 -0
  77. data/spec/unit/module/git_spec.rb +56 -1
  78. data/spec/unit/module_spec.rb +59 -9
  79. data/spec/unit/puppetfile_spec.rb +61 -7
  80. data/spec/unit/settings_spec.rb +12 -0
  81. data/spec/unit/source/git_spec.rb +49 -1
  82. data/spec/unit/util/setopts_spec.rb +25 -1
  83. metadata +9 -11
  84. data/azure-pipelines.yml +0 -86
data/lib/r10k/settings.rb CHANGED
@@ -12,6 +12,8 @@ module R10K
12
12
  class << self
13
13
  # Path to puppet executable
14
14
  attr_accessor :puppet_path
15
+ # Path to puppet.conf
16
+ attr_accessor :puppet_conf
15
17
  end
16
18
 
17
19
  def self.git_settings
@@ -35,6 +37,11 @@ module R10K
35
37
  Only used by the 'rugged' Git provider.",
36
38
  }),
37
39
 
40
+ Definition.new(:oauth_token, {
41
+ :desc => "The path to a token file for Git OAuth remotes.
42
+ Only used by the 'rugged' Git provider."
43
+ }),
44
+
38
45
  URIDefinition.new(:proxy, {
39
46
  :desc => "An optional proxy server to use when interacting with Git sources via HTTP(S).",
40
47
  :default => :inherit,
@@ -52,11 +59,17 @@ module R10K
52
59
  :default => :inherit,
53
60
  }),
54
61
 
62
+ Definition.new(:oauth_token, {
63
+ :desc => "The path to a token file for Git OAuth remotes.
64
+ Only used by the 'rugged' Git provider.",
65
+ :default => :inherit
66
+ }),
67
+
55
68
  URIDefinition.new(:proxy, {
56
69
  :desc => "An optional proxy server to use when interacting with Git sources via HTTP(S).",
57
70
  :default => :inherit,
58
71
  }),
59
-
72
+
60
73
  Definition.new(:ignore_branch_prefixes, {
61
74
  :desc => "Array of strings used to prefix branch names that will not be deployed as environments.",
62
75
  }),
@@ -109,11 +122,16 @@ module R10K
109
122
  end,
110
123
  }),
111
124
 
112
- Definition.new(:purge_whitelist, {
125
+ Definition.new(:purge_allowlist, {
113
126
  :desc => "A list of filename patterns to be excluded from any purge operations. Patterns are matched relative to the root of each deployed environment, if you want a pattern to match recursively you need to use the '**' glob in your pattern. Basic shell style globs are supported.",
114
127
  :default => [],
115
128
  }),
116
129
 
130
+ Definition.new(:purge_whitelist, {
131
+ :desc => "Deprecated; please use purge_allowlist instead. This setting will be removed in a future version.",
132
+ :default => [],
133
+ }),
134
+
117
135
  Definition.new(:generate_types, {
118
136
  :desc => "Controls whether to generate puppet types after deploying an environment. Defaults to false.",
119
137
  :default => false,
@@ -131,6 +149,15 @@ module R10K
131
149
  end
132
150
  end
133
151
  }),
152
+ Definition.new(:puppet_conf, {
153
+ :desc => "Path to puppet.conf. Defaults to /etc/puppetlabs/puppet/puppet.conf.",
154
+ :default => '/etc/puppetlabs/puppet/puppet.conf',
155
+ :validate => lambda do |value|
156
+ unless File.readable? value
157
+ raise ArgumentError, "The specified puppet.conf #{value} is not readable"
158
+ end
159
+ end
160
+ }),
134
161
  ])
135
162
  end
136
163
 
@@ -160,7 +187,7 @@ module R10K
160
187
 
161
188
  Definition.new(:pool_size, {
162
189
  :desc => "The amount of threads used to concurrently install modules. The default value is 1: install one module at a time.",
163
- :default => 1,
190
+ :default => 4,
164
191
  :validate => lambda do |value|
165
192
  if !value.is_a?(Integer)
166
193
  raise ArgumentError, "The pool_size setting should be an integer, not a #{value.class}"
@@ -31,10 +31,15 @@ class R10K::Source::Base
31
31
  # @option options [Boolean, String] :prefix If a String this becomes the prefix.
32
32
  # If true, will use the source name as the prefix. All sources should respect this option.
33
33
  # Defaults to false for no environment prefix.
34
+ # @option options [String] :strip_component If a string, this value will be
35
+ # removed from the beginning of each generated environment's name, if
36
+ # present. If the string is contained within two "/" characters, it will
37
+ # be treated as a regular expression.
34
38
  def initialize(name, basedir, options = {})
35
39
  @name = name
36
40
  @basedir = Pathname.new(basedir).cleanpath.to_s
37
41
  @prefix = options.delete(:prefix)
42
+ @strip_component = options.delete(:strip_component)
38
43
  @puppetfile_name = options.delete(:puppetfile_name)
39
44
  @options = options
40
45
  end
@@ -41,6 +41,10 @@ class R10K::Source::Git < R10K::Source::Base
41
41
  # that will be deployed as environments.
42
42
  attr_reader :ignore_branch_prefixes
43
43
 
44
+ # @!attribute [r] filter_command
45
+ # @return [String] Command to run to filter branches
46
+ attr_reader :filter_command
47
+
44
48
  # Initialize the given source.
45
49
  #
46
50
  # @param name [String] The identifier for this source.
@@ -61,6 +65,7 @@ class R10K::Source::Git < R10K::Source::Base
61
65
  @remote = options[:remote]
62
66
  @invalid_branches = (options[:invalid_branches] || 'correct_and_warn')
63
67
  @ignore_branch_prefixes = options[:ignore_branch_prefixes]
68
+ @filter_command = options[:filter_command]
64
69
 
65
70
  @cache = R10K::Git.cache.generate(@remote)
66
71
  end
@@ -115,7 +120,7 @@ class R10K::Source::Git < R10K::Source::Base
115
120
  environments.map {|env| env.dirname }
116
121
  end
117
122
 
118
- def filter_branches(branches, ignore_prefixes)
123
+ def filter_branches_by_regexp(branches, ignore_prefixes)
119
124
  filter = Regexp.new("^#{Regexp.union(ignore_prefixes)}")
120
125
  branches = branches.reject do |branch|
121
126
  result = filter.match(branch)
@@ -127,14 +132,32 @@ class R10K::Source::Git < R10K::Source::Base
127
132
  branches
128
133
  end
129
134
 
135
+ def filter_branches_by_command(branches, command)
136
+ branches.select do |branch|
137
+ result = system({'GIT_DIR' => @cache.git_dir.to_s, 'R10K_BRANCH' => branch, 'R10K_NAME' => @name.to_s}, command)
138
+ unless result
139
+ logger.warn _("Branch `%{name}:%{branch}` filtered out by filter_command %{cmd}") % {name: @name, branch: branch, cmd: command}
140
+ end
141
+ result
142
+ end
143
+ end
144
+
130
145
  private
131
146
 
132
147
  def branch_names
133
- opts = {:prefix => @prefix, :invalid => @invalid_branches, :source => @name}
148
+ opts = {prefix: @prefix,
149
+ invalid: @invalid_branches,
150
+ source: @name,
151
+ strip_component: @strip_component}
134
152
  branches = @cache.branches
135
153
  if @ignore_branch_prefixes && !@ignore_branch_prefixes.empty?
136
- branches = filter_branches(branches, @ignore_branch_prefixes)
154
+ branches = filter_branches_by_regexp(branches, @ignore_branch_prefixes)
155
+ end
156
+
157
+ if @filter_command && !@filter_command.empty?
158
+ branches = filter_branches_by_command(branches, @filter_command)
137
159
  end
160
+
138
161
  branches.map do |branch|
139
162
  R10K::Environment::Name.new(branch, opts)
140
163
  end
@@ -152,8 +152,10 @@ class R10K::Source::Hash < R10K::Source::Base
152
152
  R10K::Util::SymbolizeKeys.symbolize_keys!(opts)
153
153
  memo.merge({
154
154
  name => opts.merge({
155
- :basedir => @basedir,
156
- :dirname => R10K::Environment::Name.new(name, {prefix: @prefix, source: @name}).dirname
155
+ basedir: @basedir,
156
+ dirname: R10K::Environment::Name.new(name, {prefix: @prefix,
157
+ source: @name,
158
+ strip_component: @strip_component}).dirname
157
159
  })
158
160
  })
159
161
  end
@@ -121,7 +121,11 @@ class R10K::Source::SVN < R10K::Source::Base
121
121
 
122
122
  def names_and_paths
123
123
  branches = []
124
- opts = {:prefix => @prefix, :correct => false, :validate => false, :source => @name}
124
+ opts = {prefix: @prefix,
125
+ correct: false,
126
+ validate: false,
127
+ source: @name,
128
+ strip_component: @strip_component}
125
129
  branches << [R10K::Environment::Name.new('production', opts), "#{@remote}/trunk"]
126
130
  additional_branch_names = @svn_remote.branches
127
131
  if @ignore_branch_prefixes && !@ignore_branch_prefixes.empty?
@@ -7,6 +7,10 @@ module R10K
7
7
  # supports Ruby 1.8.7+ we cannot use that functionality.
8
8
  module Setopts
9
9
 
10
+ class Ignore; end
11
+
12
+ include R10K::Logging
13
+
10
14
  private
11
15
 
12
16
  # @param opts [Hash]
@@ -31,22 +35,39 @@ module R10K
31
35
  # setopts(opts, allowed)
32
36
  # @trace # => nil
33
37
  #
34
- def setopts(opts, allowed)
38
+ def setopts(opts, allowed, raise_on_unhandled: true)
39
+ processed_vars = {}
35
40
  opts.each_pair do |key, value|
36
41
  if allowed.key?(key)
37
- rhs = allowed[key]
38
- case rhs
39
- when NilClass, FalseClass
40
- # Ignore nil options
41
- when :self, TrueClass
42
- # tr here is because instance variables cannot have hyphens in their names.
43
- instance_variable_set("@#{key}".tr('-','_').to_sym, value)
44
- else
45
- # tr here same as previous
46
- instance_variable_set("@#{rhs}".tr('-','_').to_sym, value)
42
+ # Ignore nil options and explicit ignore param
43
+ next unless rhs = allowed[key]
44
+ next if rhs == ::R10K::Util::Setopts::Ignore
45
+
46
+ var = case rhs
47
+ when :self, TrueClass
48
+ # tr here is because instance variables cannot have hyphens in their names.
49
+ "@#{key}".tr('-','_').to_sym
50
+ else
51
+ # tr here same as previous
52
+ "@#{rhs}".tr('-','_').to_sym
53
+ end
54
+
55
+ if processed_vars.include?(var)
56
+ # This should be a raise, but that would be a behavior change and
57
+ # should happen on a SemVer boundry.
58
+ logger.warn _("%{class_name} parameters '%{a}' and '%{b}' conflict. Specify one or the other, but not both" \
59
+ % {class_name: self.class.name, a: processed_vars[var], b: key})
47
60
  end
61
+
62
+ instance_variable_set(var, value)
63
+ processed_vars[var] = key
48
64
  else
49
- raise ArgumentError, _("%{class_name} cannot handle option '%{key}'") % {class_name: self.class.name, key: key}
65
+ err_str = _("%{class_name} cannot handle option '%{key}'") % {class_name: self.class.name, key: key}
66
+ if raise_on_unhandled
67
+ raise ArgumentError, err_str
68
+ else
69
+ logger.warn(err_str)
70
+ end
50
71
  end
51
72
  end
52
73
  end
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.1'
5
+ VERSION = '3.9.0'
6
6
  end
data/locales/r10k.pot CHANGED
@@ -1,16 +1,16 @@
1
1
  # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) 2020 Puppet, Inc.
2
+ # Copyright (C) 2021 Puppet, Inc.
3
3
  # This file is distributed under the same license as the r10k package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
5
5
  #
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: r10k 3.4.1-20-g8fe925b\n"
9
+ "Project-Id-Version: r10k 3.4.1-151-g93d38cb\n"
10
10
  "\n"
11
11
  "Report-Msgid-Bugs-To: docs@puppetlabs.com\n"
12
- "POT-Creation-Date: 2020-04-28 18:41+0000\n"
13
- "PO-Revision-Date: 2020-04-28 18:41+0000\n"
12
+ "POT-Creation-Date: 2021-03-15 17:00+0000\n"
13
+ "PO-Revision-Date: 2021-03-15 17:00+0000\n"
14
14
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
15
  "Language-Team: LANGUAGE <LL@li.org>\n"
16
16
  "Language: \n"
@@ -83,15 +83,15 @@ msgstr ""
83
83
  msgid "Cannot track control repo branch for content '%{name}' when not part of a 'deploy' action, will use default if available."
84
84
  msgstr ""
85
85
 
86
- #: ../lib/r10k/action/runner.rb:53 ../lib/r10k/deployment/config.rb:42
86
+ #: ../lib/r10k/action/runner.rb:54 ../lib/r10k/deployment/config.rb:42
87
87
  msgid "Overriding config file setting '%{key}': '%{old_val}' -> '%{new_val}'"
88
88
  msgstr ""
89
89
 
90
- #: ../lib/r10k/action/runner.rb:86
90
+ #: ../lib/r10k/action/runner.rb:91
91
91
  msgid "Reading configuration from %{config_path}"
92
92
  msgstr ""
93
93
 
94
- #: ../lib/r10k/action/runner.rb:89
94
+ #: ../lib/r10k/action/runner.rb:94
95
95
  msgid "No config file explicitly given and no default config file could be found, default settings will be used."
96
96
  msgstr ""
97
97
 
@@ -103,16 +103,24 @@ msgstr ""
103
103
  msgid "Unable to load sources; the supplied configuration does not define the 'sources' key"
104
104
  msgstr ""
105
105
 
106
- #: ../lib/r10k/environment/base.rb:61 ../lib/r10k/environment/base.rb:77 ../lib/r10k/environment/base.rb:86 ../lib/r10k/source/base.rb:64
106
+ #: ../lib/r10k/environment/base.rb:61 ../lib/r10k/environment/base.rb:77 ../lib/r10k/environment/base.rb:86 ../lib/r10k/source/base.rb:69
107
107
  msgid "%{class} has not implemented method %{method}"
108
108
  msgstr ""
109
109
 
110
- #: ../lib/r10k/environment/with_modules.rb:104
111
- msgid "Puppetfile cannot contain module names defined by environment %{name}"
110
+ #: ../lib/r10k/environment/name.rb:78
111
+ 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})"
112
112
  msgstr ""
113
113
 
114
- #: ../lib/r10k/environment/with_modules.rb:106
115
- msgid "Remove the conflicting definitions of the following modules: %{conflicts}"
114
+ #: ../lib/r10k/environment/with_modules.rb:60
115
+ msgid "Environment and %{src} both define the \"%{name}\" module"
116
+ msgstr ""
117
+
118
+ #: ../lib/r10k/environment/with_modules.rb:61
119
+ msgid "#{msg_error}. The %{src} definition will be ignored"
120
+ msgstr ""
121
+
122
+ #: ../lib/r10k/environment/with_modules.rb:71
123
+ msgid "Unexpected value for `module_conflicts` setting in %{env} environment: %{val}"
116
124
  msgstr ""
117
125
 
118
126
  #: ../lib/r10k/feature.rb:27
@@ -187,11 +195,11 @@ msgstr ""
187
195
  msgid "Cannot write %{file}; parent directory does not exist"
188
196
  msgstr ""
189
197
 
190
- #: ../lib/r10k/git/cache.rb:55
198
+ #: ../lib/r10k/git/cache.rb:65
191
199
  msgid "%{class}#path is deprecated; use #git_dir"
192
200
  msgstr ""
193
201
 
194
- #: ../lib/r10k/git/cache.rb:84
202
+ #: ../lib/r10k/git/cache.rb:94
195
203
  msgid "Creating new git cache for %{remote}"
196
204
  msgstr ""
197
205
 
@@ -227,15 +235,31 @@ msgstr ""
227
235
  msgid "Unable to use SSH key auth for %{url}: private key %{private_key} is missing or unreadable"
228
236
  msgstr ""
229
237
 
230
- #: ../lib/r10k/git/rugged/credentials.rb:80
238
+ #: ../lib/r10k/git/rugged/credentials.rb:84
239
+ msgid "Using OAuth token from stdin for URL %{url}"
240
+ msgstr ""
241
+
242
+ #: ../lib/r10k/git/rugged/credentials.rb:87
243
+ msgid "Using OAuth token from %{token_path} for URL %{url}"
244
+ msgstr ""
245
+
246
+ #: ../lib/r10k/git/rugged/credentials.rb:89
247
+ msgid "%{path} is missing or unreadable, cannot load OAuth token"
248
+ msgstr ""
249
+
250
+ #: ../lib/r10k/git/rugged/credentials.rb:93
251
+ msgid "Supplied OAuth token contains invalid characters."
252
+ msgstr ""
253
+
254
+ #: ../lib/r10k/git/rugged/credentials.rb:117
231
255
  msgid "URL %{url} includes the username %{username}, using that user for authentication."
232
256
  msgstr ""
233
257
 
234
- #: ../lib/r10k/git/rugged/credentials.rb:83
258
+ #: ../lib/r10k/git/rugged/credentials.rb:120
235
259
  msgid "URL %{url} did not specify a user, using %{user} from configuration"
236
260
  msgstr ""
237
261
 
238
- #: ../lib/r10k/git/rugged/credentials.rb:86
262
+ #: ../lib/r10k/git/rugged/credentials.rb:123
239
263
  msgid "URL %{url} did not specify a user, using current user %{user}"
240
264
  msgstr ""
241
265
 
@@ -255,31 +279,31 @@ msgstr ""
255
279
  msgid "Found local modifications in %{file_path}"
256
280
  msgstr ""
257
281
 
258
- #: ../lib/r10k/git/stateful_repository.rb:40
282
+ #: ../lib/r10k/git/stateful_repository.rb:44
259
283
  msgid "Unable to sync repo to unresolvable ref '%{ref}'"
260
284
  msgstr ""
261
285
 
262
- #: ../lib/r10k/git/stateful_repository.rb:47
286
+ #: ../lib/r10k/git/stateful_repository.rb:51
263
287
  msgid "Cloning %{repo_path} and checking out %{ref}"
264
288
  msgstr ""
265
289
 
266
- #: ../lib/r10k/git/stateful_repository.rb:50
290
+ #: ../lib/r10k/git/stateful_repository.rb:54
267
291
  msgid "Replacing %{repo_path} and checking out %{ref}"
268
292
  msgstr ""
269
293
 
270
- #: ../lib/r10k/git/stateful_repository.rb:54 ../lib/r10k/git/stateful_repository.rb:59
294
+ #: ../lib/r10k/git/stateful_repository.rb:58 ../lib/r10k/git/stateful_repository.rb:63
271
295
  msgid "Updating %{repo_path} to %{ref}"
272
296
  msgstr ""
273
297
 
274
- #: ../lib/r10k/git/stateful_repository.rb:58
298
+ #: ../lib/r10k/git/stateful_repository.rb:62
275
299
  msgid "Overwriting local modifications to %{repo_path}"
276
300
  msgstr ""
277
301
 
278
- #: ../lib/r10k/git/stateful_repository.rb:62
302
+ #: ../lib/r10k/git/stateful_repository.rb:66
279
303
  msgid "Skipping %{repo_path} due to local modifications"
280
304
  msgstr ""
281
305
 
282
- #: ../lib/r10k/git/stateful_repository.rb:65
306
+ #: ../lib/r10k/git/stateful_repository.rb:69
283
307
  msgid "%{repo_path} is already at Git ref %{ref}"
284
308
  msgstr ""
285
309
 
@@ -303,20 +327,16 @@ msgstr ""
303
327
  msgid "Module %{name} with args %{args} doesn't have an implementation. (Are you using the right arguments?)"
304
328
  msgstr ""
305
329
 
306
- #: ../lib/r10k/module/base.rb:110
330
+ #: ../lib/r10k/module/base.rb:118
307
331
  msgid "Module name (%{title}) must match either 'modulename' or 'owner/modulename'"
308
332
  msgstr ""
309
333
 
310
- #: ../lib/r10k/module/forge.rb:70 ../lib/r10k/module/forge.rb:99
334
+ #: ../lib/r10k/module/forge.rb:81 ../lib/r10k/module/forge.rb:110
311
335
  msgid "The module %{title} does not exist on %{url}."
312
336
  msgstr ""
313
337
 
314
- #: ../lib/r10k/module/forge.rb:174
315
- msgid "Forge module names must match 'owner/modulename'"
316
- msgstr ""
317
-
318
- #: ../lib/r10k/module/git.rb:97
319
- msgid "Unhandled options %{unhandled} specified for %{class}"
338
+ #: ../lib/r10k/module/forge.rb:185
339
+ msgid "Forge module names must match 'owner/modulename', instead got #{title}"
320
340
  msgstr ""
321
341
 
322
342
  #: ../lib/r10k/module/local.rb:34
@@ -347,19 +367,19 @@ msgstr ""
347
367
  msgid "Remove the duplicates of the following modules: %{dupes}"
348
368
  msgstr ""
349
369
 
350
- #: ../lib/r10k/puppetfile.rb:192
370
+ #: ../lib/r10k/puppetfile.rb:201
351
371
  msgid "Updating modules with %{pool_size} threads"
352
372
  msgstr ""
353
373
 
354
- #: ../lib/r10k/puppetfile.rb:203
374
+ #: ../lib/r10k/puppetfile.rb:212
355
375
  msgid "Error during concurrent deploy of a module: %{message}"
356
376
  msgstr ""
357
377
 
358
- #: ../lib/r10k/puppetfile.rb:225
378
+ #: ../lib/r10k/puppetfile.rb:241
359
379
  msgid "Module thread %{id} exiting: %{message}"
360
380
  msgstr ""
361
381
 
362
- #: ../lib/r10k/puppetfile.rb:282
382
+ #: ../lib/r10k/puppetfile.rb:300
363
383
  msgid "unrecognized declaration '%{method}'"
364
384
  msgstr ""
365
385
 
@@ -442,26 +462,30 @@ msgid ""
442
462
  "Returned: %{data}"
443
463
  msgstr ""
444
464
 
445
- #: ../lib/r10k/source/git.rb:72
465
+ #: ../lib/r10k/source/git.rb:77
446
466
  msgid "Fetching '%{remote}' to determine current branches."
447
467
  msgstr ""
448
468
 
449
- #: ../lib/r10k/source/git.rb:75
469
+ #: ../lib/r10k/source/git.rb:80
450
470
  msgid "Unable to determine current branches for Git source '%{name}' (%{basedir})"
451
471
  msgstr ""
452
472
 
453
- #: ../lib/r10k/source/git.rb:100
473
+ #: ../lib/r10k/source/git.rb:105
454
474
  msgid "Environment %{env_name} contained non-word characters, correcting name to %{corrected_env_name}"
455
475
  msgstr ""
456
476
 
457
- #: ../lib/r10k/source/git.rb:104
477
+ #: ../lib/r10k/source/git.rb:109
458
478
  msgid "Environment %{env_name} contained non-word characters, ignoring it."
459
479
  msgstr ""
460
480
 
461
- #: ../lib/r10k/source/git.rb:123 ../lib/r10k/source/svn.rb:113
481
+ #: ../lib/r10k/source/git.rb:128 ../lib/r10k/source/svn.rb:113
462
482
  msgid "Branch %{branch} filtered out by ignore_branch_prefixes %{ibp}"
463
483
  msgstr ""
464
484
 
485
+ #: ../lib/r10k/source/git.rb:139
486
+ msgid "Branch `%{name}:%{branch}` filtered out by filter_command %{cmd}"
487
+ msgstr ""
488
+
465
489
  #: ../lib/r10k/source/yaml.rb:10
466
490
  msgid "Couldn't open environments file %{file}: %{err}"
467
491
  msgstr ""
@@ -522,7 +546,11 @@ msgstr ""
522
546
  msgid "Unable to remove unmanaged path: %{path}"
523
547
  msgstr ""
524
548
 
525
- #: ../lib/r10k/util/setopts.rb:49
549
+ #: ../lib/r10k/util/setopts.rb:58
550
+ msgid "%{class_name} parameters '%{a}' and '%{b}' conflict. Specify one or the other, but not both"
551
+ msgstr ""
552
+
553
+ #: ../lib/r10k/util/setopts.rb:65
526
554
  msgid "%{class_name} cannot handle option '%{key}'"
527
555
  msgstr ""
528
556