berkshelf 3.1.2 → 3.1.3
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/Gemfile +1 -1
- data/README.md +13 -48
- data/berkshelf.gemspec +3 -3
- data/features/commands/install.feature +1 -1
- data/lib/berkshelf.rb +1 -0
- data/lib/berkshelf/config.rb +3 -3
- data/lib/berkshelf/cookbook_store.rb +20 -1
- data/lib/berkshelf/errors.rb +28 -0
- data/lib/berkshelf/init_generator.rb +3 -1
- data/lib/berkshelf/locations/git.rb +1 -46
- data/lib/berkshelf/mixin/git.rb +30 -0
- data/lib/berkshelf/source.rb +1 -1
- data/lib/berkshelf/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/support/chef_api.rb +1 -1
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +7 -1
- data/spec/unit/berkshelf/cookbook_store_spec.rb +10 -0
- data/spec/unit/berkshelf/locations/git_spec.rb +2 -2
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f602bc76f25aadd31542d00b644abe495c9a0ae
|
4
|
+
data.tar.gz: ab05691e2bd055675d57e3940337770571124fb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf4fd42a2f32ea879fcefc8389323cbbd293f382b884f7b65fc17aaee93e5bc27b6a4594d07c3be84346da03a50197563f3ad1f6addaae50096d8f359ee68d35
|
7
|
+
data.tar.gz: 51824f49578a4ce7417797e158413afe3951f65d243b48de48905af27924a0561f2c5b8aaaf533a7f0758ca3b5c67fbf002e694c07c2f3dff04240f4f4b3ffc0
|
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.1.3
|
4
|
+
|
5
|
+
* Enhancements
|
6
|
+
* Updated out of date dependencies
|
7
|
+
|
8
|
+
* Bug fixes
|
9
|
+
* Skip loading of cached cookbooks that do not have a value for metadata
|
10
|
+
* SSL Verify option will be respected when communicating to an API server
|
11
|
+
* Fixed issue where some commands were unexpectedly crashing instead of informing the user that Git is not installed
|
12
|
+
|
3
13
|
# 3.1.2
|
4
14
|
|
5
15
|
* Enhancements
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -39,15 +39,6 @@ Ruby 1.9 mode is required on all interpreters.
|
|
39
39
|
|
40
40
|
Ruby 1.9.1 and 1.9.2 are not officially supported. If you encounter problems, please upgrade to Ruby 2.0 or 1.9.3.
|
41
41
|
|
42
|
-
## Shell Completion
|
43
|
-
|
44
|
-
- [Bash](https://github.com/berkshelf/berkshelf-bash-plugin)
|
45
|
-
- [ZSH](https://github.com/berkshelf/berkshelf-zsh-plugin)
|
46
|
-
|
47
|
-
## Plugins
|
48
|
-
|
49
|
-
Please see [Plugins page](https://github.com/berkshelf/berkshelf/blob/master/PLUGINS.md) for more information.
|
50
|
-
|
51
42
|
## Configuration
|
52
43
|
|
53
44
|
Berkshelf will search in specific locations for a configuration file. In order:
|
@@ -60,45 +51,19 @@ Berkshelf will search in specific locations for a configuration file. In order:
|
|
60
51
|
|
61
52
|
You are encouraged to keep project-specific configuration in the `$PWD/.berkshelf` directory. A default configuration file is generated for you, but you can update the values to suit your needs.
|
62
53
|
|
63
|
-
##
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
{
|
77
|
-
"access_token": "",
|
78
|
-
"api_endpoint": "https://github.enterprise.local/api/v3",
|
79
|
-
"web_endpoint": "https://github.enterprise.local",
|
80
|
-
"ssl_verify": true
|
81
|
-
}
|
82
|
-
]
|
83
|
-
}
|
84
|
-
|
85
|
-
The first subsection is used for any organization hosted on github.com. As this is the default, you do not have to set the
|
86
|
-
endpoint info (these are known values for github.com). The second subsection is used when you also index cookbooks from
|
87
|
-
organizations hosted on Github Enterprise. In this case you will need to specify the specific endpoint info so Berkshelf
|
88
|
-
knows where to connect to. You can add as many subsections as you have endpoints.
|
89
|
-
|
90
|
-
## SSL Errors
|
91
|
-
|
92
|
-
If you have trouble getting Berkshelf to successfully talk to an SSL Chef Server, you can try making sure you
|
93
|
-
have a certificate bundle available to your shell. `export SSL_CERT_FILE=...path/to/cert/file...`
|
94
|
-
|
95
|
-
If you need to disable SSL, you can in `~/.berkshelf/config.json` like so:
|
96
|
-
|
97
|
-
{
|
98
|
-
"ssl": {
|
99
|
-
"verify": false
|
100
|
-
}
|
101
|
-
}
|
54
|
+
## Shell Completion
|
55
|
+
|
56
|
+
- [Bash](https://github.com/berkshelf/berkshelf-bash-plugin)
|
57
|
+
- [ZSH](https://github.com/berkshelf/berkshelf-zsh-plugin)
|
58
|
+
|
59
|
+
## Plugins
|
60
|
+
|
61
|
+
Please see [Plugins page](https://github.com/berkshelf/berkshelf/blob/master/PLUGINS.md) for more information.
|
62
|
+
|
63
|
+
## Getting Help
|
64
|
+
|
65
|
+
* If you have an issue: report it on the [issue tracker](https://github.com/berkshelf/berkshelf/issues)
|
66
|
+
* If you have a question: visit the #chef or #berkshelf channel on irc.freenode.net
|
102
67
|
|
103
68
|
## Authors
|
104
69
|
|
data/berkshelf.gemspec
CHANGED
@@ -32,13 +32,13 @@ Gem::Specification.new do |s|
|
|
32
32
|
|
33
33
|
s.add_dependency 'addressable', '~> 2.3.4'
|
34
34
|
s.add_dependency 'berkshelf-api-client', '~> 1.2'
|
35
|
-
s.add_dependency 'buff-config', '~> 0
|
36
|
-
s.add_dependency 'buff-extensions', '~> 0
|
35
|
+
s.add_dependency 'buff-config', '~> 1.0'
|
36
|
+
s.add_dependency 'buff-extensions', '~> 1.0'
|
37
37
|
s.add_dependency 'buff-shell_out', '~> 0.1'
|
38
38
|
s.add_dependency 'faraday', '~> 0.9.0'
|
39
39
|
s.add_dependency 'minitar', '~> 0.5.4'
|
40
40
|
s.add_dependency 'retryable', '~> 1.3.3'
|
41
|
-
s.add_dependency 'ridley', '~>
|
41
|
+
s.add_dependency 'ridley', '~> 4.0'
|
42
42
|
s.add_dependency 'solve', '~> 1.1'
|
43
43
|
s.add_dependency 'thor', '~> 0.18'
|
44
44
|
s.add_dependency 'octokit', '~> 3.0'
|
@@ -451,7 +451,7 @@ Feature: berks install
|
|
451
451
|
"""
|
452
452
|
Repository not found.
|
453
453
|
"""
|
454
|
-
And the exit status should be "
|
454
|
+
And the exit status should be "GitError"
|
455
455
|
|
456
456
|
Scenario: transitive dependencies in metadata
|
457
457
|
Given the cookbook store contains a cookbook "fake" "1.0.0" with dependencies:
|
data/lib/berkshelf.rb
CHANGED
data/lib/berkshelf/config.rb
CHANGED
@@ -91,7 +91,7 @@ module Berkshelf
|
|
91
91
|
type: Array,
|
92
92
|
default: Array.new
|
93
93
|
attribute 'raise_license_exception',
|
94
|
-
type: Boolean,
|
94
|
+
type: Buff::Boolean,
|
95
95
|
default: false
|
96
96
|
attribute 'vagrant.vm.box',
|
97
97
|
type: String,
|
@@ -108,13 +108,13 @@ module Berkshelf
|
|
108
108
|
type: String,
|
109
109
|
default: 'chef_solo'
|
110
110
|
attribute 'vagrant.omnibus.enabled',
|
111
|
-
type: Boolean,
|
111
|
+
type: Buff::Boolean,
|
112
112
|
default: true
|
113
113
|
attribute 'vagrant.omnibus.version',
|
114
114
|
type: String,
|
115
115
|
default: 'latest'
|
116
116
|
attribute 'ssl.verify',
|
117
|
-
type: Boolean,
|
117
|
+
type: Buff::Boolean,
|
118
118
|
default: true,
|
119
119
|
required: true
|
120
120
|
attribute 'github',
|
@@ -94,6 +94,7 @@ module Berkshelf
|
|
94
94
|
#
|
95
95
|
# @return [Array<Berkshelf::CachedCookbook>]
|
96
96
|
def cookbooks(filter = nil)
|
97
|
+
skipped_cookbooks = []
|
97
98
|
cookbooks = storage_path.children.collect do |path|
|
98
99
|
begin
|
99
100
|
Semverse::Version.split(File.basename(path).slice(CachedCookbook::DIRNAME_REGEXP, 2))
|
@@ -103,9 +104,27 @@ module Berkshelf
|
|
103
104
|
next
|
104
105
|
end
|
105
106
|
|
106
|
-
|
107
|
+
begin
|
108
|
+
CachedCookbook.from_store_path(path)
|
109
|
+
rescue Ridley::Errors::MissingNameAttribute
|
110
|
+
# Skip cached cookbooks that do not have a name attribute.
|
111
|
+
skipped_cookbooks << File.basename(path)
|
112
|
+
next
|
113
|
+
end
|
107
114
|
end.compact
|
108
115
|
|
116
|
+
if skipped_cookbooks.any?
|
117
|
+
msg = "Skipping cookbooks #{skipped_cookbooks}. Berkshelf can only interact "
|
118
|
+
msg << "with cookbooks which have defined the `name` attribute in their metadata.rb. If you "
|
119
|
+
msg << "are the maintainer of any of the above cookbooks, please add the name attribute to "
|
120
|
+
msg << "your cookbook. If you are not the maintainer, please file an issue or report the lack "
|
121
|
+
msg << "of a name attribute as a bug.\n\n"
|
122
|
+
msg << "You can remove each cookbook in #{skipped_cookbooks} from the Berkshelf shelf "
|
123
|
+
msg << "by using the `berks shelf uninstall` command:\n\n"
|
124
|
+
msg << " $ berkshelf shelf uninstall <name>"
|
125
|
+
Berkshelf.log.warn msg
|
126
|
+
end
|
127
|
+
|
109
128
|
return cookbooks unless filter
|
110
129
|
|
111
130
|
cookbooks.select do |cookbook|
|
data/lib/berkshelf/errors.rb
CHANGED
@@ -479,4 +479,32 @@ module Berkshelf
|
|
479
479
|
"is the standard error from the command:\n\n#{@output}"
|
480
480
|
end
|
481
481
|
end
|
482
|
+
|
483
|
+
# Git errors
|
484
|
+
# ------------------------------
|
485
|
+
class GitError < BerkshelfError; status_code(400); end
|
486
|
+
|
487
|
+
class GitNotInstalled < GitError
|
488
|
+
def initialize
|
489
|
+
super 'You need to install Git before you can download ' \
|
490
|
+
'cookbooks from git repositories. For more information, please ' \
|
491
|
+
'see the Git docs: http://git-scm.org. If you have git installed, ' \
|
492
|
+
'please make sure it is in your $PATH and accessible by the user ' \
|
493
|
+
'running this command.'
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
class GitCommandError < GitError
|
498
|
+
def initialize(command, path, stderr = nil)
|
499
|
+
out = "Git error: command `git #{command}` failed. If this error "
|
500
|
+
out << "persists, try removing the cache directory at '#{path}'."
|
501
|
+
|
502
|
+
if stderr
|
503
|
+
out << "Output from the command:\n\n"
|
504
|
+
out << stderr
|
505
|
+
end
|
506
|
+
|
507
|
+
super(out)
|
508
|
+
end
|
509
|
+
end
|
482
510
|
end
|
@@ -4,6 +4,8 @@ rescue LoadError; end
|
|
4
4
|
|
5
5
|
module Berkshelf
|
6
6
|
class InitGenerator < BaseGenerator
|
7
|
+
include Mixin::Git
|
8
|
+
|
7
9
|
def initialize(*args)
|
8
10
|
super(*args)
|
9
11
|
if @options[:cookbook_name]
|
@@ -75,7 +77,7 @@ module Berkshelf
|
|
75
77
|
|
76
78
|
unless File.exists?(target.join('.git'))
|
77
79
|
inside target do
|
78
|
-
|
80
|
+
git 'init'
|
79
81
|
end
|
80
82
|
end
|
81
83
|
end
|
@@ -2,29 +2,7 @@ require 'buff/shell_out'
|
|
2
2
|
|
3
3
|
module Berkshelf
|
4
4
|
class GitLocation < BaseLocation
|
5
|
-
|
6
|
-
|
7
|
-
class GitNotInstalled < GitError
|
8
|
-
def initialize
|
9
|
-
super 'You need to install Git before you can download ' \
|
10
|
-
'cookbooks from git repositories. For more information, please ' \
|
11
|
-
'see the Git docs: http://git-scm.org.'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class GitCommandError < GitError
|
16
|
-
def initialize(command, path, stderr = nil)
|
17
|
-
out = "Git error: command `git #{command}` failed. If this error "
|
18
|
-
out << "persists, try removing the cache directory at '#{path}'."
|
19
|
-
|
20
|
-
if stderr
|
21
|
-
out << "Output from the command:\n\n"
|
22
|
-
out << stderr
|
23
|
-
end
|
24
|
-
|
25
|
-
super(out)
|
26
|
-
end
|
27
|
-
end
|
5
|
+
include Mixin::Git
|
28
6
|
|
29
7
|
attr_reader :uri
|
30
8
|
attr_reader :branch
|
@@ -150,29 +128,6 @@ module Berkshelf
|
|
150
128
|
|
151
129
|
private
|
152
130
|
|
153
|
-
# Perform a git command.
|
154
|
-
#
|
155
|
-
# @param [String] command
|
156
|
-
# the command to run
|
157
|
-
# @param [Boolean] error
|
158
|
-
# whether to raise error if the command fails
|
159
|
-
#
|
160
|
-
# @raise [String]
|
161
|
-
# the +$stdout+ from the command
|
162
|
-
def git(command, error = true)
|
163
|
-
unless Berkshelf.which('git') || Berkshelf.which('git.exe')
|
164
|
-
raise GitNotInstalled.new
|
165
|
-
end
|
166
|
-
|
167
|
-
response = Buff::ShellOut.shell_out(%|git #{command}|)
|
168
|
-
|
169
|
-
if error && !response.success?
|
170
|
-
raise GitCommandError.new(command, cache_path, stderr = response.stderr)
|
171
|
-
end
|
172
|
-
|
173
|
-
response.stdout.strip
|
174
|
-
end
|
175
|
-
|
176
131
|
# Determine if this git repo has already been downloaded.
|
177
132
|
#
|
178
133
|
# @return [Boolean]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'buff/shell_out'
|
2
|
+
|
3
|
+
module Berkshelf
|
4
|
+
module Mixin
|
5
|
+
module Git
|
6
|
+
# Perform a git command.
|
7
|
+
#
|
8
|
+
# @param [String] command
|
9
|
+
# the command to run
|
10
|
+
# @param [Boolean] error
|
11
|
+
# whether to raise error if the command fails
|
12
|
+
#
|
13
|
+
# @raise [String]
|
14
|
+
# the +$stdout+ from the command
|
15
|
+
def git(command, error = true)
|
16
|
+
unless Berkshelf.which('git') || Berkshelf.which('git.exe')
|
17
|
+
raise GitNotInstalled.new
|
18
|
+
end
|
19
|
+
|
20
|
+
response = Buff::ShellOut.shell_out(%|git #{command}|)
|
21
|
+
|
22
|
+
if error && !response.success?
|
23
|
+
raise GitCommandError.new(command, cache_path, response.stderr)
|
24
|
+
end
|
25
|
+
|
26
|
+
response.stdout.strip
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/berkshelf/source.rb
CHANGED
@@ -10,7 +10,7 @@ module Berkshelf
|
|
10
10
|
# @param [String, Berkshelf::SourceURI] uri
|
11
11
|
def initialize(uri)
|
12
12
|
@uri = SourceURI.parse(uri)
|
13
|
-
@api_client = APIClient.new(uri)
|
13
|
+
@api_client = APIClient.new(uri, ssl: {verify: Berkshelf::Config.instance.ssl.verify})
|
14
14
|
@universe = nil
|
15
15
|
end
|
16
16
|
|
data/lib/berkshelf/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -26,9 +26,11 @@ Spork.prefork do
|
|
26
26
|
config.mock_with :rspec
|
27
27
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
28
28
|
config.filter_run focus: true
|
29
|
+
config.filter_run_excluding not_supported_on_windows: windows?
|
29
30
|
config.run_all_when_everything_filtered = true
|
30
31
|
|
31
32
|
config.before(:each) do
|
33
|
+
Berkshelf.logger = Berkshelf::Logger.new(nil)
|
32
34
|
Berkshelf.set_format(:null)
|
33
35
|
Berkshelf.ui.mute!
|
34
36
|
end
|
data/spec/support/chef_api.rb
CHANGED
@@ -43,7 +43,13 @@ describe Berkshelf::CachedCookbook do
|
|
43
43
|
describe '::checksum' do
|
44
44
|
it 'returns a checksum of the given filepath' do
|
45
45
|
path = fixtures_path.join('cookbooks', 'example_cookbook-0.5.0', 'README.md')
|
46
|
-
|
46
|
+
expected_md5 = if IO.binread(path).include?("\r\n")
|
47
|
+
# On windows, with git configured for auto crlf
|
48
|
+
"2414583f86c9eb68bdbb0be391939341"
|
49
|
+
else
|
50
|
+
"6e21094b7a920e374e7261f50e9c4eef"
|
51
|
+
end
|
52
|
+
expect(described_class.checksum(path)).to eq(expected_md5)
|
47
53
|
end
|
48
54
|
|
49
55
|
context 'given path does not exist' do
|
@@ -106,6 +106,16 @@ describe Berkshelf::CookbookStore do
|
|
106
106
|
expect(subject.cookbooks('mysql')).to have(1).item
|
107
107
|
end
|
108
108
|
end
|
109
|
+
|
110
|
+
context 'when a there is a cookbook without a name attribute' do
|
111
|
+
before do
|
112
|
+
generate_cookbook(subject.storage_path, 'foo', '3.0.1', without_name: true)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'omits the broken cookbook' do
|
116
|
+
expect(subject.cookbooks('foo')).to be_empty
|
117
|
+
end
|
118
|
+
end
|
109
119
|
end
|
110
120
|
|
111
121
|
describe "#import"
|
@@ -236,13 +236,13 @@ module Berkshelf
|
|
236
236
|
|
237
237
|
it 'raises an error if Git is not installed' do
|
238
238
|
Berkshelf.stub(:which).and_return(false)
|
239
|
-
expect { subject.git('foo') }.to raise_error(
|
239
|
+
expect { subject.git('foo') }.to raise_error(GitNotInstalled)
|
240
240
|
end
|
241
241
|
|
242
242
|
it 'raises an error if the command fails' do
|
243
243
|
shell_out = double('shell_out', success?: false, stderr: nil)
|
244
244
|
Buff::ShellOut.stub(:shell_out).and_return(shell_out)
|
245
|
-
expect { subject.git('foo') }.to raise_error(
|
245
|
+
expect { subject.git('foo') }.to raise_error(GitCommandError)
|
246
246
|
end
|
247
247
|
end
|
248
248
|
end
|
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.1.
|
4
|
+
version: 3.1.3
|
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-06-03 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: addressable
|
@@ -48,28 +48,28 @@ dependencies:
|
|
48
48
|
requirements:
|
49
49
|
- - "~>"
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: '0
|
51
|
+
version: '1.0'
|
52
52
|
type: :runtime
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
56
|
- - "~>"
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: '0
|
58
|
+
version: '1.0'
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: buff-extensions
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
63
|
- - "~>"
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '0
|
65
|
+
version: '1.0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
70
|
- - "~>"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '0
|
72
|
+
version: '1.0'
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: buff-shell_out
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,14 +132,14 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - "~>"
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: '
|
135
|
+
version: '4.0'
|
136
136
|
type: :runtime
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
140
|
- - "~>"
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version: '
|
142
|
+
version: '4.0'
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
144
|
name: solve
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -447,6 +447,7 @@ files:
|
|
447
447
|
- lib/berkshelf/lockfile.rb
|
448
448
|
- lib/berkshelf/logger.rb
|
449
449
|
- lib/berkshelf/mixin/dsl_eval.rb
|
450
|
+
- lib/berkshelf/mixin/git.rb
|
450
451
|
- lib/berkshelf/mixin/logging.rb
|
451
452
|
- lib/berkshelf/packager.rb
|
452
453
|
- lib/berkshelf/resolver.rb
|