r10k 1.2.4 → 1.3.0rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +8 -8
  2. data/{CHANGELOG → CHANGELOG.mkd} +51 -41
  3. data/doc/dynamic-environments/configuration.mkd +1 -1
  4. data/doc/dynamic-environments/git-environments.markdown +19 -0
  5. data/doc/dynamic-environments/usage.mkd +6 -0
  6. data/lib/r10k/cli/deploy.rb +15 -0
  7. data/lib/r10k/cli/ext/logging.rb +0 -1
  8. data/lib/r10k/cli/module/deploy.rb +0 -1
  9. data/lib/r10k/cli/puppetfile.rb +2 -2
  10. data/lib/r10k/cli.rb +2 -16
  11. data/lib/r10k/deployment/environment.rb +9 -79
  12. data/lib/r10k/deployment/source.rb +15 -89
  13. data/lib/r10k/deployment.rb +13 -14
  14. data/lib/r10k/environment/base.rb +42 -0
  15. data/lib/r10k/environment/git.rb +79 -0
  16. data/lib/r10k/environment/svn.rb +73 -0
  17. data/lib/r10k/environment.rb +7 -0
  18. data/lib/r10k/execution.rb +0 -1
  19. data/lib/r10k/git/cache.rb +11 -5
  20. data/lib/r10k/git/repository.rb +1 -8
  21. data/lib/r10k/git/working_dir.rb +11 -34
  22. data/lib/r10k/git.rb +0 -1
  23. data/lib/r10k/instance_cache.rb +32 -0
  24. data/lib/r10k/keyed_factory.rb +39 -0
  25. data/lib/r10k/module/forge.rb +2 -3
  26. data/lib/r10k/module/svn.rb +0 -1
  27. data/lib/r10k/puppetfile.rb +0 -1
  28. data/lib/r10k/registry.rb +3 -31
  29. data/lib/r10k/source/base.rb +60 -0
  30. data/lib/r10k/source/git.rb +195 -0
  31. data/lib/r10k/source/svn.rb +140 -0
  32. data/lib/r10k/source.rb +39 -0
  33. data/lib/r10k/svn/remote.rb +48 -0
  34. data/lib/r10k/svn/working_dir.rb +0 -2
  35. data/lib/r10k/svn.rb +6 -0
  36. data/lib/r10k/task/deployment.rb +1 -2
  37. data/lib/r10k/task.rb +0 -2
  38. data/lib/r10k/task_runner.rb +0 -1
  39. data/lib/r10k/util/core_ext/hash_ext.rb +19 -0
  40. data/lib/r10k/util/subprocess.rb +0 -1
  41. data/lib/r10k/version.rb +1 -1
  42. data/lib/r10k.rb +1 -0
  43. data/spec/unit/deployment/environment_spec.rb +16 -15
  44. data/spec/unit/environment/git_spec.rb +81 -0
  45. data/spec/unit/environment/svn_spec.rb +76 -0
  46. data/spec/unit/git/repository_spec.rb +0 -10
  47. data/spec/unit/git/working_dir_spec.rb +1 -110
  48. data/spec/unit/{registry_spec.rb → instance_cache_spec.rb} +3 -3
  49. data/spec/unit/keyed_factory_spec.rb +51 -0
  50. data/spec/unit/source/git_spec.rb +274 -0
  51. data/spec/unit/source/svn_spec.rb +102 -0
  52. data/spec/unit/source_spec.rb +10 -0
  53. data/spec/unit/svn/remote_spec.rb +21 -0
  54. data/spec/unit/util/core_ext/hash_ext_spec.rb +63 -0
  55. metadata +36 -10
  56. data/lib/r10k/git/alternates.rb +0 -49
  57. data/spec/unit/git/alternates_spec.rb +0 -90
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'r10k/util/core_ext/hash_ext'
3
+
4
+ describe R10K::Util::CoreExt::HashExt::SymbolizeKeys do
5
+ it "doesn't monky patch core types" do
6
+ # And now for a diatribe on monkey patching.
7
+ #
8
+ # Seriously. Monkey patching objects on a global objects without a very
9
+ # good reason is evil. On a case by case basis, sure, it can make life
10
+ # a bit easier but it also can grossly complicate things. If you do need to
11
+ # add a method to every type of an object because it'll be used everywhere,
12
+ # go for it. However if you only need a given method in a limited area,
13
+ # `Object#extend` is your friend.
14
+ #
15
+ # Fin.
16
+ expect(Hash.new).to_not respond_to(:symbolize_keys!)
17
+ end
18
+
19
+ describe "on an instance that extends #{described_class}" do
20
+ subject { Hash.new.extend(described_class) }
21
+
22
+ it "deletes all keys that are strings" do
23
+ subject['foo'] = 'bar'
24
+ subject[:baz] = 'quux'
25
+
26
+ subject.symbolize_keys!
27
+ expect(subject).to_not have_key('foo')
28
+ end
29
+
30
+ it "replaces the deleted keys with interned strings" do
31
+ subject['foo'] = 'bar'
32
+ subject[:baz] = 'quux'
33
+
34
+ subject.symbolize_keys!
35
+ expect(subject[:foo]).to eq 'bar'
36
+ end
37
+
38
+ it "raises an error if there is an existing symbol for a given string key" do
39
+ subject['foo'] = 'bar'
40
+ subject[:foo] = 'quux'
41
+
42
+ expect {
43
+ subject.symbolize_keys!
44
+ }.to raise_error(TypeError, /An existing interned key/)
45
+ end
46
+
47
+ it "does not modify existing symbol entries" do
48
+ subject['foo'] = 'bar'
49
+ subject[:baz] = 'quux'
50
+
51
+ subject.symbolize_keys!
52
+ expect(subject[:baz]).to eq 'quux'
53
+ end
54
+
55
+ it "does not modify keys that are not strings or symbols" do
56
+ key = %w[foo]
57
+ subject[key] = 'bar'
58
+
59
+ subject.symbolize_keys!
60
+ expect(subject[key]).to eq 'bar'
61
+ end
62
+ end
63
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r10k
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.3.0rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Thebo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-15 00:00:00.000000000 Z
11
+ date: 2014-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored
@@ -191,7 +191,7 @@ files:
191
191
  - .nodeset.yml
192
192
  - .rspec
193
193
  - .travis.yml
194
- - CHANGELOG
194
+ - CHANGELOG.mkd
195
195
  - Gemfile
196
196
  - LICENSE
197
197
  - README.markdown
@@ -224,10 +224,13 @@ files:
224
224
  - lib/r10k/deployment/config/loader.rb
225
225
  - lib/r10k/deployment/environment.rb
226
226
  - lib/r10k/deployment/source.rb
227
+ - lib/r10k/environment.rb
228
+ - lib/r10k/environment/base.rb
229
+ - lib/r10k/environment/git.rb
230
+ - lib/r10k/environment/svn.rb
227
231
  - lib/r10k/errors.rb
228
232
  - lib/r10k/execution.rb
229
233
  - lib/r10k/git.rb
230
- - lib/r10k/git/alternates.rb
231
234
  - lib/r10k/git/cache.rb
232
235
  - lib/r10k/git/commit.rb
233
236
  - lib/r10k/git/errors.rb
@@ -237,6 +240,8 @@ files:
237
240
  - lib/r10k/git/repository.rb
238
241
  - lib/r10k/git/tag.rb
239
242
  - lib/r10k/git/working_dir.rb
243
+ - lib/r10k/instance_cache.rb
244
+ - lib/r10k/keyed_factory.rb
240
245
  - lib/r10k/logging.rb
241
246
  - lib/r10k/module.rb
242
247
  - lib/r10k/module/base.rb
@@ -252,6 +257,12 @@ files:
252
257
  - lib/r10k/settings.rb
253
258
  - lib/r10k/settings/container.rb
254
259
  - lib/r10k/settings/mixin.rb
260
+ - lib/r10k/source.rb
261
+ - lib/r10k/source/base.rb
262
+ - lib/r10k/source/git.rb
263
+ - lib/r10k/source/svn.rb
264
+ - lib/r10k/svn.rb
265
+ - lib/r10k/svn/remote.rb
255
266
  - lib/r10k/svn/working_dir.rb
256
267
  - lib/r10k/task.rb
257
268
  - lib/r10k/task/deployment.rb
@@ -259,6 +270,7 @@ files:
259
270
  - lib/r10k/task/module.rb
260
271
  - lib/r10k/task/puppetfile.rb
261
272
  - lib/r10k/task_runner.rb
273
+ - lib/r10k/util/core_ext/hash_ext.rb
262
274
  - lib/r10k/util/platform.rb
263
275
  - lib/r10k/util/purgeable.rb
264
276
  - lib/r10k/util/subprocess.rb
@@ -297,7 +309,8 @@ files:
297
309
  - spec/system/version_spec.rb
298
310
  - spec/unit/deployment/environment_spec.rb
299
311
  - spec/unit/deployment/source_spec.rb
300
- - spec/unit/git/alternates_spec.rb
312
+ - spec/unit/environment/git_spec.rb
313
+ - spec/unit/environment/svn_spec.rb
301
314
  - spec/unit/git/cache_spec.rb
302
315
  - spec/unit/git/commit_spec.rb
303
316
  - spec/unit/git/head_spec.rb
@@ -305,14 +318,20 @@ files:
305
318
  - spec/unit/git/repository_spec.rb
306
319
  - spec/unit/git/tag_spec.rb
307
320
  - spec/unit/git/working_dir_spec.rb
321
+ - spec/unit/instance_cache_spec.rb
322
+ - spec/unit/keyed_factory_spec.rb
308
323
  - spec/unit/module/forge_spec.rb
309
324
  - spec/unit/module/git_spec.rb
310
325
  - spec/unit/module/metadata_spec.rb
311
326
  - spec/unit/module/svn_spec.rb
312
327
  - spec/unit/module_repository/forge_spec.rb
313
328
  - spec/unit/module_spec.rb
314
- - spec/unit/registry_spec.rb
315
329
  - spec/unit/settings/container_spec.rb
330
+ - spec/unit/source/git_spec.rb
331
+ - spec/unit/source/svn_spec.rb
332
+ - spec/unit/source_spec.rb
333
+ - spec/unit/svn/remote_spec.rb
334
+ - spec/unit/util/core_ext/hash_ext_spec.rb
316
335
  - spec/unit/util/subprocess_spec.rb
317
336
  homepage: http://github.com/adrienthebo/r10k
318
337
  licenses:
@@ -363,9 +382,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
363
382
  version: '0'
364
383
  required_rubygems_version: !ruby/object:Gem::Requirement
365
384
  requirements:
366
- - - ! '>='
385
+ - - ! '>'
367
386
  - !ruby/object:Gem::Version
368
- version: '0'
387
+ version: 1.3.1
369
388
  requirements: []
370
389
  rubyforge_project:
371
390
  rubygems_version: 2.2.1
@@ -378,7 +397,8 @@ test_files:
378
397
  - spec/system/module/forge/install_spec.rb
379
398
  - spec/system/module/svn/update_spec.rb
380
399
  - spec/system/module/svn/install_spec.rb
381
- - spec/unit/registry_spec.rb
400
+ - spec/unit/environment/svn_spec.rb
401
+ - spec/unit/environment/git_spec.rb
382
402
  - spec/unit/module_spec.rb
383
403
  - spec/unit/module_repository/forge_spec.rb
384
404
  - spec/unit/git/ref_spec.rb
@@ -387,12 +407,18 @@ test_files:
387
407
  - spec/unit/git/commit_spec.rb
388
408
  - spec/unit/git/repository_spec.rb
389
409
  - spec/unit/git/head_spec.rb
390
- - spec/unit/git/alternates_spec.rb
391
410
  - spec/unit/git/tag_spec.rb
411
+ - spec/unit/keyed_factory_spec.rb
392
412
  - spec/unit/deployment/environment_spec.rb
393
413
  - spec/unit/deployment/source_spec.rb
414
+ - spec/unit/source_spec.rb
394
415
  - spec/unit/util/subprocess_spec.rb
416
+ - spec/unit/util/core_ext/hash_ext_spec.rb
417
+ - spec/unit/instance_cache_spec.rb
395
418
  - spec/unit/settings/container_spec.rb
419
+ - spec/unit/svn/remote_spec.rb
420
+ - spec/unit/source/svn_spec.rb
421
+ - spec/unit/source/git_spec.rb
396
422
  - spec/unit/module/forge_spec.rb
397
423
  - spec/unit/module/svn_spec.rb
398
424
  - spec/unit/module/git_spec.rb
@@ -1,49 +0,0 @@
1
- require 'pathname'
2
-
3
- # Manage `$GIT_DIR/objects/info/alternates`
4
- #
5
- # @see man gitrepository-layout(5)
6
- class R10K::Git::Alternates
7
-
8
- # @attribute [r] file
9
- # @return [Pathname] The alternates file
10
- attr_reader :file
11
-
12
- # @param git_dir [String] The path to the git repository
13
- def initialize(git_dir)
14
- @file = Pathname.new(File.join(git_dir, 'objects', 'info', 'alternates'))
15
- end
16
-
17
- def to_a
18
- read()
19
- end
20
-
21
- def <<(path)
22
- write(to_a << path)
23
- end
24
-
25
- def include?(path)
26
- to_a.include?(path)
27
- end
28
-
29
- private
30
-
31
- def write(entries)
32
- if ! @file.parent.directory?
33
- raise R10K::Git::GitError, "Cannot write #{@file}; parent directory does not exist"
34
- end
35
- @file.open("w") do |fh|
36
- entries.each do |entry|
37
- fh.puts(entry)
38
- end
39
- end
40
- end
41
-
42
- def read
43
- entries = []
44
- if @file.file?
45
- entries = @file.readlines.map(&:chomp)
46
- end
47
- entries
48
- end
49
- end
@@ -1,90 +0,0 @@
1
- require 'spec_helper'
2
- require 'stringio'
3
- require 'r10k/git'
4
-
5
- describe R10K::Git::Alternates do
6
- subject { described_class.new("/some/nonexistent/path/.git") }
7
-
8
- it "interacts with the alternates file in the given git repository" do
9
- expect(subject.file.to_s).to eq("/some/nonexistent/path/.git/objects/info/alternates")
10
- end
11
-
12
- describe "reading alternate object entries" do
13
- it "reads the alternates file and splits on lines" do
14
- expect(subject.file).to receive(:file?).and_return true
15
- expect(subject.file).to receive(:readlines).and_return([
16
- "/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n",
17
- "/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n",
18
- ])
19
-
20
- expect(subject.to_a).to eq([
21
- "/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
22
- "/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
23
- ])
24
- end
25
-
26
- it "returns an empty array when the file is not present" do
27
- expect(subject.file).to receive(:file?).and_return false
28
- expect(subject.file).to receive(:readlines).never
29
- expect(subject.to_a).to eq([])
30
- end
31
- end
32
-
33
- describe "determining if an entry is already present" do
34
- before do
35
- allow(subject).to receive(:to_a).and_return([
36
- "/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
37
- "/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
38
- ])
39
- end
40
-
41
- it "is true if the element is in the array of read entries" do
42
- expect(subject).to include("/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git")
43
- end
44
-
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/git---github.com-puppetlabs-puppetlabs-apache.git")
47
- end
48
- end
49
-
50
- describe "appending a new alternate object entry" do
51
- describe "and the git objects/info directory does not exist" do
52
- it "raises an error when the parent directory does not exist" do
53
- expect {
54
- subject << "/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"
55
- }.to raise_error(R10K::Git::GitError,"Cannot write /some/nonexistent/path/.git/objects/info/alternates; parent directory does not exist")
56
- end
57
- end
58
-
59
- describe "and the git objects/info directory exists" do
60
- let(:io) { StringIO.new }
61
-
62
- before do
63
- expect(subject.file).to receive(:open).with('w').and_yield(io)
64
- subject.file.stub_chain(:parent, :directory?).and_return true
65
- end
66
-
67
-
68
- it "creates the alternates file with the new entry when not present" do
69
- expect(subject).to receive(:to_a).and_return([])
70
- subject << "/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"
71
-
72
- expect(io.string).to eq("/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git\n")
73
- end
74
-
75
- it "rewrites the file with all alternate entries" do
76
- expect(subject).to receive(:to_a).and_return([
77
- "/var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
78
- "/vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git",
79
- ])
80
- subject << "/tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git"
81
-
82
- expect(io.string).to eq(<<-EOD)
83
- /var/cache/r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
84
- /vagrant/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
85
- /tmp/.r10k/git/git---github.com-puppetlabs-puppetlabs-apache.git
86
- EOD
87
- end
88
- end
89
- end
90
- end