whisk 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +68 -12
- data/bin/whisk +2 -26
- data/lib/whisk/bowl.rb +23 -12
- data/lib/whisk/cli.rb +96 -0
- data/lib/whisk/flavour/git.rb +17 -21
- data/lib/whisk/ingredient.rb +21 -8
- data/lib/whisk/version.rb +1 -1
- data/lib/whisk/{config.rb → whiskfile.rb} +26 -22
- data/lib/whisk.rb +10 -0
- metadata +62 -15
- data/lib/whisk/log.rb +0 -37
data/README.md
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
Whisk
|
2
2
|
=====
|
3
3
|
|
4
|
-
Whisk is a simple cookbook manager for Chef, inspired by librarian
|
5
|
-
|
6
|
-
exactly what you tell it.
|
4
|
+
Whisk is a simple cookbook manager for Chef, inspired by librarian and
|
5
|
+
berkshelf.
|
7
6
|
|
8
|
-
|
7
|
+
Unlike these tools, Whisk only concerns itself with fetching and preparing
|
8
|
+
exactly what you tell it, and will not resolve dependencies for you or make any
|
9
|
+
decisions about which code gets downloaded for you.
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
Whisk has been designed to work with git only and tries to help automating
|
12
|
+
the more tedious aspects of working in with 'the single repository per
|
13
|
+
cookbook' model.
|
14
|
+
|
15
|
+
# Configuration #
|
13
16
|
|
14
17
|
Whisk will prepare one or multiple 'bowls' of cookbooks as specified in your
|
15
|
-
|
18
|
+
Whiskfile.
|
19
|
+
|
20
|
+
## Example Whiskfile ##
|
16
21
|
|
17
22
|
cb_path = "/home/msf/hack/whisk/%s"
|
18
23
|
github = "git://github.com/cookbooks/%s.git"
|
@@ -20,10 +25,61 @@ whisk.rb file.
|
|
20
25
|
bowl "production" do
|
21
26
|
path cb_path % name
|
22
27
|
|
23
|
-
ingredient "ntp"
|
24
|
-
|
25
|
-
|
28
|
+
ingredient "ntp" do
|
29
|
+
source github % "ntp"
|
30
|
+
options { :ref => 'master' }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Commands #
|
35
|
+
|
36
|
+
## whisk prepare ##
|
37
|
+
|
38
|
+
The prepare subcommand allows you to clone your ingredients and optional
|
39
|
+
checkout a specified ref.
|
40
|
+
|
41
|
+
$ whisk prepare
|
42
|
+
Creating bowl 'production' with path /home/msf/hack/whisk/production
|
43
|
+
Preparing bowl 'production' with path /home/msf/hack/whisk/production
|
44
|
+
Cloning ingredient ntp, from git url git://github.com/cookbooks/ntp.git
|
45
|
+
Cloning into 'ntp'...
|
46
|
+
Checking out ref 'master' for ingredient ntp
|
47
|
+
|
48
|
+
You can also use specify an optional filter to run prepare on a subset of
|
49
|
+
cookbooks using ruby regexes.
|
50
|
+
|
51
|
+
# prepare the 'development' bowl
|
52
|
+
$ whisk prepare dev
|
53
|
+
|
54
|
+
# prepare the ntp cookbook in all configured bowls'
|
55
|
+
$ whisk prepare '.*' 'ntp'
|
56
|
+
|
57
|
+
# prepare a list of cookbooks
|
58
|
+
$ whisk prepare 'dev' '(ssh|ntp)'
|
59
|
+
|
60
|
+
## whisk status ##
|
61
|
+
|
62
|
+
Whisk status calls 'git status' on the specified set of ingredients.
|
63
|
+
|
64
|
+
You can use the same filter mechanisms as described in 'whisk prepare'
|
65
|
+
to run update on a subset of ingredients
|
66
|
+
|
67
|
+
# show status for all configured bowls
|
68
|
+
$ whisk status
|
69
|
+
Status for ingredient 'production/ntp'
|
70
|
+
# On branch master
|
71
|
+
nothing to commit (working directory clean)
|
72
|
+
|
73
|
+
## whisk update ##
|
74
|
+
|
75
|
+
Whisk update calls 'git remote update' on the specified set of ingredients
|
76
|
+
on them. It does not attempt to merge any code from your remotes.
|
26
77
|
|
27
|
-
|
78
|
+
You can use the same filter mechanisms as described in 'whisk prepare'
|
79
|
+
to run update on a subset of ingredients
|
28
80
|
|
81
|
+
# update all ingredients, in all bowls
|
82
|
+
$ whisk update
|
29
83
|
|
84
|
+
# only update the 'development bowl'
|
85
|
+
$ whisk update dev
|
data/bin/whisk
CHANGED
@@ -18,30 +18,6 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
21
|
+
require 'whisk/cli'
|
21
22
|
|
22
|
-
|
23
|
-
require 'logger'
|
24
|
-
require 'whisk/config'
|
25
|
-
require 'whisk/log'
|
26
|
-
|
27
|
-
# borrowed from chef/chef/lib/chef/application.rb
|
28
|
-
logger = Logger.new(STDOUT)
|
29
|
-
STDOUT.sync = true
|
30
|
-
logger.formatter = Whisk::Log.logger.formatter
|
31
|
-
Whisk::Log::Formatter.show_time = false
|
32
|
-
Whisk::Log.loggers << logger
|
33
|
-
|
34
|
-
if File.exists?("Whiskfile")
|
35
|
-
whiskfile = "Whiskfile"
|
36
|
-
else
|
37
|
-
whiskfile = File.join(ENV['HOME'], '.chef', 'whisk.rb')
|
38
|
-
end
|
39
|
-
|
40
|
-
Whisk::Log.info "Loading configuration from Whiskfile: #{whiskfile}"
|
41
|
-
|
42
|
-
Whisk::Config.from_file(whiskfile)
|
43
|
-
|
44
|
-
bowls = Whisk::Config.bowls
|
45
|
-
bowls.each do |name, bowl|
|
46
|
-
bowl.prepare
|
47
|
-
end
|
23
|
+
Whisk::CLI.start
|
data/lib/whisk/bowl.rb
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
|
18
18
|
require 'pp'
|
19
19
|
require 'fileutils'
|
20
|
-
require 'whisk/log'
|
21
20
|
require 'whisk/ingredient'
|
22
21
|
|
23
22
|
class Whisk
|
@@ -40,22 +39,18 @@ class Whisk
|
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
43
|
-
def ingredient(iname,
|
42
|
+
def ingredient(iname, &block)
|
44
43
|
if ingredients.has_key? iname
|
45
|
-
raise ArgumentError "
|
44
|
+
raise ArgumentError "Ingredient '#{iname}' has already added to bowl '#{name}'"
|
46
45
|
else
|
47
|
-
|
48
|
-
flavour = opts.delete :flavour
|
49
|
-
options = opts.delete :options
|
50
|
-
i = Whisk::Ingredient.new(iname, source, flavour, options)
|
51
|
-
ingredients[iname] = i
|
46
|
+
ingredients[iname] = Whisk::Ingredient.new(iname, &block)
|
52
47
|
end
|
53
48
|
end
|
54
49
|
|
55
50
|
def create!
|
56
|
-
|
51
|
+
unless Dir.exists? path
|
57
52
|
begin
|
58
|
-
Whisk
|
53
|
+
Whisk.ui.info "Creating bowl '#{name}' with path #{path}"
|
59
54
|
::FileUtils.mkdir_p path
|
60
55
|
rescue Exception => e
|
61
56
|
puts "#{e.backtrace} #{e.message}"
|
@@ -67,17 +62,33 @@ class Whisk
|
|
67
62
|
self.create!
|
68
63
|
::Dir.chdir path
|
69
64
|
|
70
|
-
Whisk
|
65
|
+
Whisk.ui.info "Preparing bowl '#{name}' with path #{path}"
|
71
66
|
|
72
67
|
ingredients.each do |name, ingredient|
|
73
68
|
begin
|
74
69
|
ingredient.prepare
|
75
70
|
rescue Exception => e
|
76
|
-
Whisk
|
71
|
+
Whisk.ui.error "Failed fetching ingredient '#{name}'"
|
77
72
|
raise
|
78
73
|
exit 1
|
79
74
|
end
|
80
75
|
end
|
81
76
|
end
|
77
|
+
|
78
|
+
def status
|
79
|
+
::Dir.chdir path
|
80
|
+
ingredients.each do |name, ingredient|
|
81
|
+
Whisk.ui.info "Status for ingredient '#{self.name}/#{name}'"
|
82
|
+
ingredient.status
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def update
|
87
|
+
::Dir.chdir path
|
88
|
+
ingredients.each do |name, ingredient|
|
89
|
+
Whisk.ui.info "Updating ingredient '#{self.name}/#{name}'"
|
90
|
+
ingredient.update
|
91
|
+
end
|
92
|
+
end
|
82
93
|
end
|
83
94
|
end
|
data/lib/whisk/cli.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# Author:: Jamie Winsor <jamie@vialstudios.com>
|
2
|
+
# Copyright:: Copyright (c) 2012 Jamie Winsor
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
# this file is derived f
|
18
|
+
|
19
|
+
require 'thor'
|
20
|
+
require 'whisk'
|
21
|
+
require 'whisk/whiskfile'
|
22
|
+
|
23
|
+
def filter_bowls(bowls, bowl=nil, ingredient=nil)
|
24
|
+
if bowl
|
25
|
+
bowls.delete_if {|k,v| !k.to_s.match(/^#{bowl}$/)}
|
26
|
+
if ingredient
|
27
|
+
bowls.each do |name, b|
|
28
|
+
bowls[name].ingredients.delete_if {|k,v| !k.to_s.match(/^#{ingredient}$/)}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
return bowls
|
34
|
+
end
|
35
|
+
|
36
|
+
class Whisk
|
37
|
+
class CLI < Thor
|
38
|
+
def initialize(*)
|
39
|
+
super
|
40
|
+
# JW TODO: Replace Chef::Knife::UI with our own UI class
|
41
|
+
::Whisk.ui = Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
|
42
|
+
@options = options.dup # unfreeze frozen options Hash from Thor
|
43
|
+
rescue Error => e
|
44
|
+
Whisk.ui.fatal e
|
45
|
+
exit e.status_code
|
46
|
+
end
|
47
|
+
|
48
|
+
namespace "whisk"
|
49
|
+
|
50
|
+
method_option :whiskfile,
|
51
|
+
type: :string,
|
52
|
+
default: File.join(Dir.pwd, Whisk::DEFAULT_FILENAME),
|
53
|
+
desc: "Path to a Whiskfile to operate off of.",
|
54
|
+
aliases: "-w",
|
55
|
+
banner: "PATH"
|
56
|
+
desc "prepare", "prepare a bowl by cloning any missing repositories"
|
57
|
+
def prepare(bowl=nil, ingredient=nil)
|
58
|
+
whiskfile = ::Whisk::WhiskFile.from_file(options[:whiskfile])
|
59
|
+
bowls = filter_bowls(whiskfile.bowls, bowl, ingredient)
|
60
|
+
|
61
|
+
bowls.each do |name, bowl|
|
62
|
+
bowl.prepare
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
method_option :whiskfile,
|
67
|
+
type: :string,
|
68
|
+
default: File.join(Dir.pwd, Whisk::DEFAULT_FILENAME),
|
69
|
+
desc: "Path to a Whiskfile to operate off of.",
|
70
|
+
aliases: "-w",
|
71
|
+
banner: "PATH"
|
72
|
+
desc "prepare", "prepare a bowl by cloning any missing repositories"
|
73
|
+
def status(bowl=nil, ingredient=nil)
|
74
|
+
whiskfile = ::Whisk::WhiskFile.from_file(options[:whiskfile])
|
75
|
+
bowls = filter_bowls(whiskfile.bowls, bowl, ingredient)
|
76
|
+
bowls.each do |name, bowl|
|
77
|
+
bowl.status
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
method_option :whiskfile,
|
82
|
+
type: :string,
|
83
|
+
default: File.join(Dir.pwd, Whisk::DEFAULT_FILENAME),
|
84
|
+
desc: "Path to a Whiskfile to operate off of.",
|
85
|
+
aliases: "-w",
|
86
|
+
banner: "PATH"
|
87
|
+
desc "prepare", "prepare a bowl by cloning any missing repositories"
|
88
|
+
def update(bowl=nil, ingredient=nil)
|
89
|
+
whiskfile = ::Whisk::WhiskFile.from_file(options[:whiskfile])
|
90
|
+
bowls = filter_bowls(whiskfile.bowls, bowl, ingredient)
|
91
|
+
bowls.each do |name, bowl|
|
92
|
+
bowl.update
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/whisk/flavour/git.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
18
|
require 'whisk/mixin/shellout'
|
19
|
-
require 'whisk/log'
|
20
19
|
require 'whisk/ingredient'
|
21
20
|
|
22
21
|
class Whisk
|
@@ -26,41 +25,38 @@ class Whisk
|
|
26
25
|
include Whisk::Mixin::ShellOut
|
27
26
|
|
28
27
|
def clone
|
29
|
-
|
30
|
-
Whisk
|
28
|
+
if ::File.exists? File.join(Dir.pwd, name, ".git", "config")
|
29
|
+
Whisk.ui.info "Ingredient #{self.name} already prepared, moving on"
|
30
|
+
else
|
31
|
+
Whisk.ui.info "Cloning ingredient #{self.name}, " + "from git url #{self.source}"
|
31
32
|
shell_out("git clone #{self.source} #{self.name}")
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
def checkout(ref="master")
|
36
|
-
|
37
|
+
if self.options and self.options.has_key? :ref
|
38
|
+
Whisk.ui.info "Checking out ref '#{ref}' for ingredient #{self.name}"
|
37
39
|
shell_out("git checkout #{ref}", :cwd => self.name)
|
38
|
-
|
39
|
-
|
40
|
-
def post_fetch
|
41
|
-
end
|
42
|
-
def pre_fetch
|
43
|
-
end
|
44
|
-
|
45
|
-
def fetch
|
46
|
-
Whisk::Log.info "fetching ingredient '#{self.name}', from git url #{self.source}"
|
47
|
-
shell_out("git fetch --all")
|
40
|
+
end
|
48
41
|
end
|
49
42
|
|
50
43
|
def prepare
|
51
44
|
begin
|
52
45
|
self.clone
|
53
|
-
self.
|
54
|
-
if self.options and self.options.has_key? :ref
|
55
|
-
self.checkout self.options[:ref]
|
56
|
-
else
|
57
|
-
self.checkout
|
58
|
-
end
|
46
|
+
self.checkout
|
59
47
|
rescue Exception => e
|
60
|
-
Whisk
|
48
|
+
Whisk.ui.error "#{e.message} #{e.backtrace}"
|
61
49
|
raise
|
62
50
|
end
|
63
51
|
end
|
52
|
+
|
53
|
+
def status
|
54
|
+
shell_out("git status", :cwd => self.name)
|
55
|
+
end
|
56
|
+
|
57
|
+
def update
|
58
|
+
shell_out("git remote update", :cwd => self.name)
|
59
|
+
end
|
64
60
|
end
|
65
61
|
end
|
66
62
|
end
|
data/lib/whisk/ingredient.rb
CHANGED
@@ -15,24 +15,37 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
+
require 'chef/mixin/params_validate'
|
18
19
|
require 'whisk/flavours'
|
19
20
|
|
20
21
|
class Whisk
|
21
22
|
class Ingredient
|
22
23
|
|
23
|
-
|
24
|
+
include Chef::Mixin::ParamsValidate
|
24
25
|
|
25
|
-
|
26
|
+
attr_reader :name
|
27
|
+
|
28
|
+
def initialize(name, &block)
|
26
29
|
@name = name
|
27
|
-
@
|
28
|
-
@
|
29
|
-
@options =
|
30
|
+
@flavour = 'git'
|
31
|
+
@source = nil
|
32
|
+
@options = {}
|
30
33
|
|
31
|
-
if
|
32
|
-
raise ArgumentError, "must provide source for Ingredient #{name}"
|
33
|
-
end
|
34
|
+
instance_eval(&block) if block_given?
|
34
35
|
|
35
36
|
self.class.send(:include, Whisk::FLAVOURS[@flavour])
|
36
37
|
end
|
38
|
+
|
39
|
+
def source(arg=nil)
|
40
|
+
set_or_return(:source, arg, :required => true)
|
41
|
+
end
|
42
|
+
|
43
|
+
def flavour(arg=nil)
|
44
|
+
set_or_return(:flavour, arg, :default => 'git')
|
45
|
+
end
|
46
|
+
|
47
|
+
def options(arg=nil)
|
48
|
+
set_or_return(:options, arg, :default => {})
|
49
|
+
end
|
37
50
|
end
|
38
51
|
end
|
data/lib/whisk/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#
|
2
|
+
#
|
2
3
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
4
|
# Author:: Mathieu Sauve-Frankel <msf@kisoku.net>
|
4
5
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
@@ -18,38 +19,41 @@
|
|
18
19
|
# limitations under the License.
|
19
20
|
#
|
20
21
|
# from_file is derived from chef/chef/lib/chef/mixin/from_file.rb
|
22
|
+
#
|
23
|
+
#
|
21
24
|
|
22
|
-
require 'whisk
|
25
|
+
require 'whisk'
|
23
26
|
|
24
27
|
class Whisk
|
25
|
-
class
|
26
|
-
attr_accessor :bowls
|
27
|
-
|
28
|
+
class WhiskFile
|
28
29
|
@@bowls = {}
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
class << self
|
32
|
+
def add_bowl(bowl)
|
33
|
+
if @@bowls.has_key? name
|
34
|
+
raise ArgumentError "bowl #{name} already exists"
|
35
|
+
else
|
36
|
+
@@bowls[bowl.name] = bowl
|
37
|
+
end
|
38
|
+
end
|
37
39
|
|
38
|
-
|
39
|
-
if self.bowls.has_key? name
|
40
|
-
raise ArgumentError "bowl #{name} already exists"
|
41
|
-
else
|
40
|
+
def bowl(name, &block)
|
42
41
|
b = Whisk::Bowl.new(name)
|
43
42
|
b.instance_eval(&block)
|
44
|
-
|
43
|
+
add_bowl(b)
|
44
|
+
end
|
45
|
+
|
46
|
+
def bowls
|
47
|
+
@@bowls
|
45
48
|
end
|
46
|
-
end
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
def from_file(filename)
|
51
|
+
if ::File.exists?(filename) && ::File.readable?(filename)
|
52
|
+
instance_eval(::IO.read(filename), filename, 1)
|
53
|
+
self
|
54
|
+
else
|
55
|
+
raise IOError, "Cannot open or read #{filename}!"
|
56
|
+
end
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
data/lib/whisk.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whisk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,27 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: chef
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: mixlib-log
|
16
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
17
33
|
none: false
|
18
34
|
requirements:
|
19
35
|
- - ! '>='
|
@@ -21,10 +37,15 @@ dependencies:
|
|
21
37
|
version: 1.3.0
|
22
38
|
type: :runtime
|
23
39
|
prerelease: false
|
24
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.3.0
|
25
46
|
- !ruby/object:Gem::Dependency
|
26
47
|
name: mixlib-shellout
|
27
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
28
49
|
none: false
|
29
50
|
requirements:
|
30
51
|
- - ! '>='
|
@@ -32,10 +53,31 @@ dependencies:
|
|
32
53
|
version: 1.0.0
|
33
54
|
type: :runtime
|
34
55
|
prerelease: false
|
35
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: thor
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
36
78
|
- !ruby/object:Gem::Dependency
|
37
79
|
name: rspec
|
38
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
39
81
|
none: false
|
40
82
|
requirements:
|
41
83
|
- - ! '>='
|
@@ -43,7 +85,12 @@ dependencies:
|
|
43
85
|
version: '0'
|
44
86
|
type: :development
|
45
87
|
prerelease: false
|
46
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
47
94
|
description: A simple Chef cookbook dependency manager
|
48
95
|
email: msf@kisoku.net
|
49
96
|
executables:
|
@@ -53,15 +100,15 @@ extra_rdoc_files: []
|
|
53
100
|
files:
|
54
101
|
- LICENSE
|
55
102
|
- README.md
|
103
|
+
- lib/whisk.rb
|
104
|
+
- lib/whisk/mixin/shellout.rb
|
105
|
+
- lib/whisk/cli.rb
|
106
|
+
- lib/whisk/flavours.rb
|
107
|
+
- lib/whisk/whiskfile.rb
|
108
|
+
- lib/whisk/ingredient.rb
|
56
109
|
- lib/whisk/version.rb
|
57
110
|
- lib/whisk/bowl.rb
|
58
|
-
- lib/whisk/ingredient.rb
|
59
|
-
- lib/whisk/mixin/shellout.rb
|
60
111
|
- lib/whisk/flavour/git.rb
|
61
|
-
- lib/whisk/flavours.rb
|
62
|
-
- lib/whisk/config.rb
|
63
|
-
- lib/whisk/log.rb
|
64
|
-
- lib/whisk.rb
|
65
112
|
- bin/whisk
|
66
113
|
homepage: http://github.com/kisoku/whisk
|
67
114
|
licenses: []
|
@@ -83,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
130
|
version: '0'
|
84
131
|
requirements: []
|
85
132
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.8.
|
133
|
+
rubygems_version: 1.8.24
|
87
134
|
signing_key:
|
88
135
|
specification_version: 3
|
89
136
|
summary: A simple Chef cookbook dependency manager
|
data/lib/whisk/log.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
# Author:: AJ Christensen (<@aj@opscode.com>)
|
4
|
-
# Author:: Christopher Brown (<cb@opscode.com>)
|
5
|
-
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
6
|
-
# License:: Apache License, Version 2.0
|
7
|
-
#
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
-
# you may not use this file except in compliance with the License.
|
10
|
-
# You may obtain a copy of the License at
|
11
|
-
#
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
-
#
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
#
|
20
|
-
# this file is derived from chef/chef/lib/chef/log.rb
|
21
|
-
|
22
|
-
require 'logger'
|
23
|
-
require 'mixlib/log'
|
24
|
-
|
25
|
-
class Whisk
|
26
|
-
class Log
|
27
|
-
extend Mixlib::Log
|
28
|
-
|
29
|
-
init
|
30
|
-
|
31
|
-
class Formatter
|
32
|
-
def self.show_time=(*args)
|
33
|
-
Mixlib::Log::Formatter.show_time = *args
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|