berkshelf 3.2.1 → 3.2.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/features/berksfile.feature +1 -1
- data/features/commands/upload.feature +1 -1
- data/generator_files/Berksfile.erb +1 -1
- data/generator_files/Vagrantfile.erb +1 -1
- data/lib/berkshelf/berksfile.rb +13 -6
- data/lib/berkshelf/community_rest.rb +1 -1
- data/lib/berkshelf/errors.rb +1 -1
- data/lib/berkshelf/file_syncer.rb +1 -0
- data/lib/berkshelf/formatters/human.rb +1 -1
- data/lib/berkshelf/formatters/json.rb +1 -1
- data/lib/berkshelf/version.rb +1 -1
- data/spec/unit/berkshelf/berksfile_spec.rb +24 -0
- data/spec/unit/berkshelf/cookbook_generator_spec.rb +1 -1
- data/spec/unit/berkshelf/file_syncer_spec.rb +89 -0
- data/spec/unit/berkshelf/installer_spec.rb +1 -1
- data/spec/unit/berkshelf/source_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc48892092998c6c4609f996e7a0470b6dea6af
|
4
|
+
data.tar.gz: df867ca3468c988b011781e3c645f21a4eb8bfa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0423feeb86a7f1163daabb1ebf9e98aa6a69c945162bf48b39b83b08353a9402f035640519c028d6156d3c89a9802e44119966581b2a1f2f8b91bee419b808c5
|
7
|
+
data.tar.gz: ee5e644f38a0fa4a7a86b7565f290c749c0ab10be15716c54ac477e095315807280b49d8a1c779bf1317dd4217515bfe137b61c39f4f3e007f8546421e3c9288
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
> This is a high level digest of changes. For the complete CHANGELOG diff two tags in the project's [commit history](https://github.com/berkshelf/berkshelf/commits/master).
|
2
2
|
|
3
|
+
# 3.2.2
|
4
|
+
|
5
|
+
* Enhancements
|
6
|
+
* Use chef.io hostname in urls instead of getchef
|
7
|
+
|
8
|
+
* Bug Fixes
|
9
|
+
* Fix syntax issue in generated Vagrantfile
|
10
|
+
* Only exclude the top level metadata.rb file when vendoring cookbooks rather than all files named metadata.rb
|
11
|
+
* Relative paths can now be passed to berks vendor
|
12
|
+
|
3
13
|
# 3.2.1
|
4
14
|
|
5
15
|
* Bug Fixes
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ Manage a Cookbook or an Application's Cookbook dependencies
|
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
12
|
-
Berkshelf is now included as part of the [Chef-DK](http://
|
12
|
+
Berkshelf is now included as part of the [Chef-DK](http://chef.io/downloads/chef-dk). This is fastest, easiest, and the recommended installation method for getting up and running with Berkshelf.
|
13
13
|
|
14
14
|
> note: You may need to uninstall the Berkshelf gem especially if you are using a Ruby version manager you may need to uninstall all Berkshelf gems from each Ruby installation.
|
15
15
|
|
data/features/berksfile.feature
CHANGED
@@ -407,7 +407,7 @@ Feature: berks upload
|
|
407
407
|
"""
|
408
408
|
And the cookbook "fake" has the file "Berksfile" with:
|
409
409
|
"""
|
410
|
-
source 'https://supermarket.
|
410
|
+
source 'https://supermarket.chef.io'
|
411
411
|
metadata
|
412
412
|
"""
|
413
413
|
And the cookbook "fake" has the file "Berksfile.lock" with:
|
@@ -18,7 +18,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
18
18
|
#
|
19
19
|
# $ vagrant plugin install vagrant-omnibus
|
20
20
|
#
|
21
|
-
if Vagrant.has_plugin?
|
21
|
+
if Vagrant.has_plugin?("vagrant-omnibus")
|
22
22
|
config.omnibus.chef_version = '<%= berkshelf_config.vagrant.omnibus.version %>'
|
23
23
|
end
|
24
24
|
|
data/lib/berkshelf/berksfile.rb
CHANGED
@@ -27,7 +27,11 @@ module Berkshelf
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
DEFAULT_API_URL = "https://supermarket.
|
30
|
+
DEFAULT_API_URL = "https://supermarket.chef.io".freeze
|
31
|
+
|
32
|
+
# Don't vendor VCS files.
|
33
|
+
# Reference GNU tar --exclude-vcs: https://www.gnu.org/software/tar/manual/html_section/tar_49.html
|
34
|
+
EXCLUDED_VCS_FILES_WHEN_VENDORING = ['.arch-ids', '{arch}', '.bzr', '.bzrignore', '.bzrtags', 'CVS', '.cvsignore', '_darcs', '.git', '.hg', '.hgignore', '.hgrags', 'RCS', 'SCCS', '.svn'].freeze
|
31
35
|
|
32
36
|
include Mixin::Logging
|
33
37
|
include Cleanroom
|
@@ -168,7 +172,7 @@ module Berkshelf
|
|
168
172
|
# in a second source would not be used.
|
169
173
|
#
|
170
174
|
# @example
|
171
|
-
# source "https://supermarket.
|
175
|
+
# source "https://supermarket.chef.io"
|
172
176
|
# source "https://berks-api.riotgames.com"
|
173
177
|
#
|
174
178
|
# @param [String] api_url
|
@@ -204,7 +208,7 @@ module Berkshelf
|
|
204
208
|
if args.first == :opscode
|
205
209
|
Berkshelf.formatter.deprecation "Your Berksfile contains a site location pointing to the Opscode Community " +
|
206
210
|
"Site (site :opscode). Site locations have been replaced by the source location. Change this to: " +
|
207
|
-
"'source \"https://supermarket.
|
211
|
+
"'source \"https://supermarket.chef.io\"' to remove this warning. For more information visit " +
|
208
212
|
"https://github.com/berkshelf/berkshelf/wiki/deprecated-locations"
|
209
213
|
source(DEFAULT_API_URL)
|
210
214
|
return
|
@@ -444,7 +448,7 @@ module Berkshelf
|
|
444
448
|
# "nginx" => {
|
445
449
|
# "local" => #<Version 1.8.0>,
|
446
450
|
# "remote" => {
|
447
|
-
# #<Source uri: "https://supermarket.
|
451
|
+
# #<Source uri: "https://supermarket.chef.io"> #=> #<Version 2.6.2>
|
448
452
|
# }
|
449
453
|
# }
|
450
454
|
# }
|
@@ -574,9 +578,10 @@ module Berkshelf
|
|
574
578
|
# @return [String, nil]
|
575
579
|
# the expanded path cookbooks were vendored to or nil if nothing was vendored
|
576
580
|
def vendor(destination)
|
577
|
-
Dir.mktmpdir do |scratch|
|
581
|
+
Dir.mktmpdir('vendor') do |scratch|
|
578
582
|
chefignore = nil
|
579
583
|
cached_cookbooks = install
|
584
|
+
raw_metadata_files = []
|
580
585
|
|
581
586
|
return nil if cached_cookbooks.empty?
|
582
587
|
|
@@ -596,6 +601,8 @@ module Berkshelf
|
|
596
601
|
cookbook.compile_metadata(cookbook_destination)
|
597
602
|
end
|
598
603
|
|
604
|
+
raw_metadata_files << File::join(cookbook.cookbook_name, 'metadata.rb')
|
605
|
+
|
599
606
|
FileUtils.cp_r(files, cookbook_destination)
|
600
607
|
end
|
601
608
|
|
@@ -614,7 +621,7 @@ module Berkshelf
|
|
614
621
|
#
|
615
622
|
# * https://tickets.opscode.com/browse/CHEF-4811
|
616
623
|
# * https://tickets.opscode.com/browse/CHEF-4810
|
617
|
-
FileSyncer.sync(scratch, destination, exclude:
|
624
|
+
FileSyncer.sync(scratch, destination, exclude: raw_metadata_files + EXCLUDED_VCS_FILES_WHEN_VENDORING)
|
618
625
|
end
|
619
626
|
|
620
627
|
destination
|
data/lib/berkshelf/errors.rb
CHANGED
@@ -57,7 +57,7 @@ module Berkshelf
|
|
57
57
|
#
|
58
58
|
# @param [Hash] hash
|
59
59
|
# the list of outdated cookbooks in the format
|
60
|
-
# { 'cookbook' => { 'supermarket.
|
60
|
+
# { 'cookbook' => { 'supermarket.chef.io' => #<Cookbook> } }
|
61
61
|
def outdated(hash)
|
62
62
|
if hash.empty?
|
63
63
|
Berkshelf.ui.info('All cookbooks up to date!')
|
@@ -89,7 +89,7 @@ module Berkshelf
|
|
89
89
|
#
|
90
90
|
# @param [Hash] hash
|
91
91
|
# the list of outdated cookbooks in the format
|
92
|
-
# { 'cookbook' => { 'supermarket.
|
92
|
+
# { 'cookbook' => { 'supermarket.chef.io' => #<Cookbook> } }
|
93
93
|
def outdated(hash)
|
94
94
|
hash.each do |name, info|
|
95
95
|
info['remote'].each do |remote_source, remote_version|
|
data/lib/berkshelf/version.rb
CHANGED
@@ -382,4 +382,28 @@ describe Berkshelf::Berksfile do
|
|
382
382
|
subject.upload
|
383
383
|
end
|
384
384
|
end
|
385
|
+
|
386
|
+
describe '#vendor' do
|
387
|
+
let(:cached_cookbook) { double(Berkshelf::CachedCookbook, cookbook_name: 'my_cookbook', path: '/my_cookbook/path', compiled_metadata?: true) }
|
388
|
+
let(:installer) { double(Berkshelf::Installer, run: [cached_cookbook]) }
|
389
|
+
let(:raw_metadata_files) { [File::join(cached_cookbook.cookbook_name, 'metadata.rb')] }
|
390
|
+
|
391
|
+
let(:destination) { '/a/destination/path' }
|
392
|
+
let(:excludes) { { :exclude => raw_metadata_files + Berkshelf::Berksfile::EXCLUDED_VCS_FILES_WHEN_VENDORING } }
|
393
|
+
|
394
|
+
before do
|
395
|
+
allow(Berkshelf::Installer).to receive(:new).and_return(installer)
|
396
|
+
end
|
397
|
+
|
398
|
+
it 'invokes FileSyncer with correct arguments' do
|
399
|
+
expect(Berkshelf::FileSyncer).to receive(:sync).with(/vendor/, destination, excludes)
|
400
|
+
|
401
|
+
subject.vendor(destination)
|
402
|
+
end
|
403
|
+
|
404
|
+
it 'excludes the top-level metadata.rb file' do
|
405
|
+
expect(excludes[:exclude].any? { |exclude| File.fnmatch?(exclude, 'my_cookbook/recipes/metadata.rb', File::FNM_DOTMATCH) }).to be(false)
|
406
|
+
expect(excludes[:exclude].any? { |exclude| File.fnmatch?(exclude, 'my_cookbook/metadata.rb', File::FNM_DOTMATCH) }).to be(true)
|
407
|
+
end
|
408
|
+
end
|
385
409
|
end
|
@@ -71,7 +71,7 @@ describe Berkshelf::CookbookGenerator do
|
|
71
71
|
contains "description 'Installs/Configures sparkle_motion'"
|
72
72
|
end
|
73
73
|
file 'Berksfile' do
|
74
|
-
contains 'source "https://supermarket.
|
74
|
+
contains 'source "https://supermarket.chef.io"'
|
75
75
|
contains 'metadata'
|
76
76
|
end
|
77
77
|
file 'Gemfile'
|
@@ -56,6 +56,45 @@ module Berkshelf
|
|
56
56
|
FileUtils.touch(File.join(source, '.dot_folder', 'file_f'))
|
57
57
|
|
58
58
|
FileUtils.touch(File.join(source, '.file_g'))
|
59
|
+
|
60
|
+
# VCS files: Arch
|
61
|
+
FileUtils.mkdir_p(File.join(source, '.arch-ids'))
|
62
|
+
FileUtils.mkdir_p(File.join(source, '{arch}'))
|
63
|
+
|
64
|
+
# VCS files: Bazaar
|
65
|
+
FileUtils.touch(File.join(source, '.bzr'))
|
66
|
+
FileUtils.touch(File.join(source, '.bzrignore'))
|
67
|
+
FileUtils.touch(File.join(source, '.bzrtags'))
|
68
|
+
|
69
|
+
# VCS files: CVS
|
70
|
+
FileUtils.mkdir_p(File.join(source, 'CVS'))
|
71
|
+
FileUtils.touch(File.join(source, '.cvsignore'))
|
72
|
+
|
73
|
+
# VCS files: Darcs
|
74
|
+
FileUtils.touch(File.join(source, '_darcs'))
|
75
|
+
|
76
|
+
# VCS files: git
|
77
|
+
FileUtils.mkdir_p(File.join(source, '.git', 'objects', '08'))
|
78
|
+
FileUtils.touch(File.join(source, '.git', 'HEAD'))
|
79
|
+
git_readonly_file = File.join(source, '.git', 'objects', '08', '01ddba0b1237b2e0e602cf5fdb6544561950cb')
|
80
|
+
FileUtils.touch(File.join(git_readonly_file))
|
81
|
+
FileUtils.chmod("ugo=r", git_readonly_file)
|
82
|
+
FileUtils.touch(File.join(source, '.gitignore'))
|
83
|
+
|
84
|
+
# VCS files: Mercurial
|
85
|
+
FileUtils.touch(File.join(source, '.hg'))
|
86
|
+
FileUtils.touch(File.join(source, '.hgignore'))
|
87
|
+
FileUtils.touch(File.join(source, '.hgrags'))
|
88
|
+
|
89
|
+
# VCS files: RCS
|
90
|
+
FileUtils.mkdir_p(File.join(source, 'RCS'))
|
91
|
+
|
92
|
+
# VCS files: SCCS
|
93
|
+
FileUtils.mkdir_p(File.join(source, 'SCCS'))
|
94
|
+
|
95
|
+
# VCS files: Subversion
|
96
|
+
FileUtils.mkdir_p(File.join(source, '.svn'))
|
97
|
+
|
59
98
|
source
|
60
99
|
end
|
61
100
|
|
@@ -99,6 +138,46 @@ module Berkshelf
|
|
99
138
|
expect("#{destination}/existing_file").to_not be_a_file
|
100
139
|
expect("#{destination}/.existing_file").to_not be_a_file
|
101
140
|
end
|
141
|
+
|
142
|
+
it 'skips excluded VCS files' do
|
143
|
+
described_class.sync(source, destination, exclude: Berksfile::EXCLUDED_VCS_FILES_WHEN_VENDORING)
|
144
|
+
|
145
|
+
# VCS files: Arch
|
146
|
+
expect("#{destination}/.arch-ids").to_not be_a_directory
|
147
|
+
expect("#{destination}/{arch}").to_not be_a_directory
|
148
|
+
|
149
|
+
# VCS files: Bazaar
|
150
|
+
expect("#{destination}/.bzr").to_not be_a_file
|
151
|
+
expect("#{destination}/.bzrignore").to_not be_a_file
|
152
|
+
expect("#{destination}/.bzrtags").to_not be_a_file
|
153
|
+
|
154
|
+
# VCS files: CVS
|
155
|
+
expect("#{destination}/CVS").to_not be_a_directory
|
156
|
+
expect("#{destination}/.cvsignore").to_not be_a_file
|
157
|
+
|
158
|
+
# VCS files: Darcs
|
159
|
+
expect("#{destination}/_darcs").to_not be_a_file
|
160
|
+
|
161
|
+
# VCS files: git
|
162
|
+
expect("#{destination}/.git/objects/08/01ddba0b1237b2e0e602cf5fdb6544561950cb").to_not be_a_file
|
163
|
+
expect("#{destination}/.git/HEAD").to_not be_a_file
|
164
|
+
expect("#{destination}/.git").to_not be_a_directory
|
165
|
+
|
166
|
+
# VCS files: Mercurial
|
167
|
+
expect("#{destination}/.hg").to_not be_a_file
|
168
|
+
expect("#{destination}/.hgignore").to_not be_a_file
|
169
|
+
expect("#{destination}/.hgrags").to_not be_a_file
|
170
|
+
|
171
|
+
# VCS files: RCS
|
172
|
+
expect("#{destination}/RCS").to_not be_a_directory
|
173
|
+
|
174
|
+
# VCS files: SCCS
|
175
|
+
expect("#{destination}/SCCS").to_not be_a_directory
|
176
|
+
|
177
|
+
# VCS files: Subversion
|
178
|
+
expect("#{destination}/.svn").to_not be_a_directory
|
179
|
+
|
180
|
+
end
|
102
181
|
end
|
103
182
|
|
104
183
|
context 'with deeply nested paths and symlinks' do
|
@@ -164,6 +243,16 @@ module Berkshelf
|
|
164
243
|
|
165
244
|
expect("#{destination}/root").to be_a_symlink_to('/foo/bar')
|
166
245
|
end
|
246
|
+
|
247
|
+
it 'copies relative and absolute symlinks when destination is a relative path' do
|
248
|
+
described_class.sync(source, "#{destination.gsub(Dir.pwd, '.')}")
|
249
|
+
|
250
|
+
expect("#{destination}/links/index.html").to be_a_symlink_to("./home.html")
|
251
|
+
expect("#{destination}/links/default.html").to be_a_symlink_to("./home.html")
|
252
|
+
expect("#{destination}/links/apt").to be_a_symlink_to("../source/bin/apt")
|
253
|
+
expect("#{destination}/root").to be_a_symlink_to('/foo/bar')
|
254
|
+
end
|
255
|
+
|
167
256
|
end
|
168
257
|
|
169
258
|
context 'when :exclude is given' do
|
@@ -6,7 +6,7 @@ describe Berkshelf::Installer do
|
|
6
6
|
subject { described_class.new(berksfile) }
|
7
7
|
|
8
8
|
describe "#build_universe" do
|
9
|
-
let(:source_one) { double('one', uri: 'https://supermarket.
|
9
|
+
let(:source_one) { double('one', uri: 'https://supermarket.chef.io') }
|
10
10
|
let(:source_two) { double('two', uri: 'https://api.chef.org') }
|
11
11
|
let(:sources) { [ source_one, source_two ] }
|
12
12
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Winsor
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-
|
15
|
+
date: 2014-12-18 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: addressable
|