berkshelf 1.1.0.rc1 → 1.1.0
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.
- data/berkshelf.gemspec +1 -0
- data/features/install_command.feature +2 -2
- data/features/open_command.feature +32 -0
- data/features/step_definitions/utility_steps.rb +8 -0
- data/lib/berkshelf/berksfile.rb +17 -4
- data/lib/berkshelf/cli.rb +15 -0
- data/lib/berkshelf/errors.rb +1 -0
- data/lib/berkshelf/version.rb +1 -1
- data/spec/unit/berkshelf/berksfile_spec.rb +22 -3
- metadata +12 -6
data/berkshelf.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.description = %q{Manages a Cookbook's, or an Application's, Cookbook dependencies}
|
19
19
|
s.summary = s.description
|
20
20
|
s.homepage = "http://berkshelf.com"
|
21
|
+
s.license = "Apache 2.0"
|
21
22
|
s.files = `git ls-files`.split($\)
|
22
23
|
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
23
24
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
@@ -341,13 +341,13 @@ Feature: install cookbooks from a Berksfile
|
|
341
341
|
Scenario: with a git error during download
|
342
342
|
Given I write to "Berksfile" with:
|
343
343
|
"""
|
344
|
-
cookbook "ohai"
|
344
|
+
cookbook "ohai", "1.1.4"
|
345
345
|
cookbook "doesntexist", git: "git://github.com/asdjhfkljashflkjashfakljsf"
|
346
346
|
"""
|
347
347
|
When I run `berks install`
|
348
348
|
Then the output should contain:
|
349
349
|
"""
|
350
|
-
Installing ohai (1.1.
|
350
|
+
Installing ohai (1.1.4) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
|
351
351
|
Failed to download doesntexist from git: 'git://github.com/asdjhfkljashflkjashfakljsf'
|
352
352
|
An error occured during Git execution:
|
353
353
|
"""
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: open command
|
2
|
+
As a user
|
3
|
+
I want to be able to view the source of a cached cookbook
|
4
|
+
So that I can troubleshoot bugs in my dependencies
|
5
|
+
|
6
|
+
Scenario: Running berks open with no $EDITOR
|
7
|
+
Given the environment variable EDITOR is nil
|
8
|
+
And the cookbook store has the cookbooks:
|
9
|
+
| mysql | 1.2.4 |
|
10
|
+
When I run `berks open mysql`
|
11
|
+
Then the output should contain "To open a cookbook, set $EDITOR or $BERKSHELF_EDITOR"
|
12
|
+
|
13
|
+
Scenario: Running berks open with an $EDITOR
|
14
|
+
Given the environment variable EDITOR is "ls"
|
15
|
+
And the cookbook store has the cookbooks:
|
16
|
+
| mysql | 1.2.4 |
|
17
|
+
When I run `berks open mysql`
|
18
|
+
Then the output should contain "metadata.rb"
|
19
|
+
|
20
|
+
Scenario: Running berks open with a missing EDITOR
|
21
|
+
Given the environment variable EDITOR is "wat"
|
22
|
+
And the cookbook store has the cookbooks:
|
23
|
+
| mysql | 1.2.4 |
|
24
|
+
When I run `berks open mysql`
|
25
|
+
Then the output should contain "Could not run `wat "
|
26
|
+
And the CLI should exit with the status code for error "CommandUnsuccessful"
|
27
|
+
|
28
|
+
Scenario: Running berks open when the cookbook does not exist
|
29
|
+
Given the environment variable EDITOR is "ls"
|
30
|
+
When I run `berks open mysql`
|
31
|
+
Then the output should contain "Cookbook 'mysql' not found in any of the sources!"
|
32
|
+
And the CLI should exit with the status code for error "CookbookNotFound"
|
@@ -1,3 +1,11 @@
|
|
1
1
|
Given /^pending\s+"([^\"]+)"$/ do |msg|
|
2
2
|
pending
|
3
3
|
end
|
4
|
+
|
5
|
+
Given /^the environment variable (.+) is nil$/ do |variable|
|
6
|
+
set_env variable, nil
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^the environment variable (.+) is "(.+)"$/ do |variable, value|
|
10
|
+
set_env variable, value
|
11
|
+
end
|
data/lib/berkshelf/berksfile.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'chef/cookbook/chefignore'
|
2
|
+
|
1
3
|
module Berkshelf
|
2
4
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
3
5
|
class Berksfile
|
@@ -27,7 +29,13 @@ module Berkshelf
|
|
27
29
|
# @return [String]
|
28
30
|
# expanded filepath to the vendor directory
|
29
31
|
def vendor(cookbooks, path)
|
30
|
-
|
32
|
+
chefignore_file = [
|
33
|
+
File.join(Dir.pwd, 'chefignore'),
|
34
|
+
File.join(Dir.pwd, 'cookbooks', 'chefignore')
|
35
|
+
].find { |f| File.exists?(f) }
|
36
|
+
|
37
|
+
chefignore = chefignore_file && ::Chef::Cookbook::Chefignore.new(chefignore_file)
|
38
|
+
path = File.expand_path(path)
|
31
39
|
FileUtils.mkdir_p(path)
|
32
40
|
|
33
41
|
scratch = Berkshelf.mktmpdir
|
@@ -37,7 +45,12 @@ module Berkshelf
|
|
37
45
|
|
38
46
|
# Dir.glob does not support backslash as a File separator
|
39
47
|
src = cb.path.to_s.gsub('\\', '/')
|
40
|
-
|
48
|
+
files = Dir.glob(File.join(src, "*"))
|
49
|
+
|
50
|
+
# Filter out files using chefignore
|
51
|
+
files = chefignore.remove_ignores_from(files) if chefignore
|
52
|
+
|
53
|
+
FileUtils.cp_r(files, dest)
|
41
54
|
end
|
42
55
|
|
43
56
|
FileUtils.remove_dir(path, force: true)
|
@@ -410,10 +423,10 @@ module Berkshelf
|
|
410
423
|
# @return [Hash]
|
411
424
|
# a hash of cached cookbooks and their latest version. An empty hash is returned
|
412
425
|
# if there are no newer cookbooks for any of your sources
|
413
|
-
#
|
426
|
+
#
|
414
427
|
# @example
|
415
428
|
# berksfile.outdated => {
|
416
|
-
# <#CachedCookbook name="artifact"> => "0.11.2"
|
429
|
+
# <#CachedCookbook name="artifact"> => "0.11.2"
|
417
430
|
# }
|
418
431
|
def outdated(options = {})
|
419
432
|
outdated = Hash.new
|
data/lib/berkshelf/cli.rb
CHANGED
@@ -92,6 +92,21 @@ module Berkshelf
|
|
92
92
|
Berkshelf.formatter.msg "Config written to: '#{path}'"
|
93
93
|
end
|
94
94
|
|
95
|
+
desc "open NAME", "Opens the source directory of an installed cookbook", hide: true
|
96
|
+
def open(name)
|
97
|
+
editor = [ENV['BERKSHELF_EDITOR'], ENV['VISUAL'], ENV['EDITOR']].find{|e| !e.nil? && !e.empty? }
|
98
|
+
raise ArgumentError, "To open a cookbook, set $EDITOR or $BERKSHELF_EDITOR" unless editor
|
99
|
+
|
100
|
+
cookbook = Berkshelf.cookbook_store.cookbooks(name).last
|
101
|
+
raise CookbookNotFound, "Cookbook '#{name}' not found in any of the sources!" unless cookbook
|
102
|
+
|
103
|
+
Dir.chdir(cookbook.path) do
|
104
|
+
command = "#{editor} #{cookbook.path}"
|
105
|
+
success = system(command)
|
106
|
+
raise CommandUnsuccessful, "Could not run `#{command}`" unless success
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
95
110
|
method_option :except,
|
96
111
|
type: :array,
|
97
112
|
desc: "Exclude cookbooks that are in these groups.",
|
data/lib/berkshelf/errors.rb
CHANGED
data/lib/berkshelf/version.rb
CHANGED
@@ -33,12 +33,31 @@ EOF
|
|
33
33
|
end
|
34
34
|
|
35
35
|
describe "::vendor" do
|
36
|
-
|
37
|
-
|
38
|
-
tmpdir = Dir.mktmpdir(nil, tmp_path)
|
36
|
+
let(:cached_cookbooks) { [] }
|
37
|
+
let(:tmpdir) { Dir.mktmpdir(nil, tmp_path) }
|
39
38
|
|
39
|
+
it "returns the expanded filepath of the vendor directory" do
|
40
40
|
subject.vendor(cached_cookbooks, tmpdir).should eql(tmpdir)
|
41
41
|
end
|
42
|
+
|
43
|
+
context "with a chefignore" do
|
44
|
+
before(:each) do
|
45
|
+
File.stub(:exists?).and_return(true)
|
46
|
+
::Chef::Cookbook::Chefignore.any_instance.stub(:remove_ignores_from).and_return(['metadata.rb'])
|
47
|
+
end
|
48
|
+
|
49
|
+
it "finds a chefignore file" do
|
50
|
+
::Chef::Cookbook::Chefignore.should_receive(:new).with(File.expand_path('chefignore'))
|
51
|
+
subject.vendor(cached_cookbooks, tmpdir)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "removes files in chefignore" do
|
55
|
+
cached_cookbooks = [ CachedCookbook.from_path(fixtures_path.join('cookbooks/example_cookbook')) ]
|
56
|
+
FileUtils.should_receive(:cp_r).with(['metadata.rb'], anything()).exactly(1).times
|
57
|
+
FileUtils.should_receive(:cp_r).with(anything(), anything(), anything()).once
|
58
|
+
subject.vendor(cached_cookbooks, tmpdir)
|
59
|
+
end
|
60
|
+
end
|
42
61
|
end
|
43
62
|
end
|
44
63
|
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jamie Winsor
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: yajl-ruby
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- features/json_formatter.feature
|
223
223
|
- features/list_command.feature
|
224
224
|
- features/lockfile.feature
|
225
|
+
- features/open_command.feature
|
225
226
|
- features/outdated_command.feature
|
226
227
|
- features/show_command.feature
|
227
228
|
- features/step_definitions/berksfile_steps.rb
|
@@ -347,7 +348,8 @@ files:
|
|
347
348
|
- spec/unit/berkshelf/uploader_spec.rb
|
348
349
|
- spec/unit/berkshelf_spec.rb
|
349
350
|
homepage: http://berkshelf.com
|
350
|
-
licenses:
|
351
|
+
licenses:
|
352
|
+
- Apache 2.0
|
351
353
|
post_install_message:
|
352
354
|
rdoc_options: []
|
353
355
|
require_paths:
|
@@ -361,9 +363,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
361
363
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
362
364
|
none: false
|
363
365
|
requirements:
|
364
|
-
- - ! '
|
366
|
+
- - ! '>='
|
365
367
|
- !ruby/object:Gem::Version
|
366
|
-
version:
|
368
|
+
version: '0'
|
369
|
+
segments:
|
370
|
+
- 0
|
371
|
+
hash: 810514310070508080
|
367
372
|
requirements: []
|
368
373
|
rubyforge_project:
|
369
374
|
rubygems_version: 1.8.23
|
@@ -381,6 +386,7 @@ test_files:
|
|
381
386
|
- features/json_formatter.feature
|
382
387
|
- features/list_command.feature
|
383
388
|
- features/lockfile.feature
|
389
|
+
- features/open_command.feature
|
384
390
|
- features/outdated_command.feature
|
385
391
|
- features/show_command.feature
|
386
392
|
- features/step_definitions/berksfile_steps.rb
|