whisk 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -9,7 +9,7 @@ exactly what you tell it, and will not resolve dependencies for you or make any
9
9
  decisions about which code gets downloaded for you.
10
10
 
11
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
12
+ the more tedious aspects of working with the 'single git repository per
13
13
  cookbook' model.
14
14
 
15
15
  # Configuration #
@@ -27,7 +27,7 @@ Whiskfile.
27
27
 
28
28
  ingredient "ntp" do
29
29
  source github % "ntp"
30
- options { :ref => 'master' }
30
+ ref '1.1.2'
31
31
  end
32
32
  end
33
33
 
@@ -43,7 +43,7 @@ checkout a specified ref.
43
43
  Preparing bowl 'production' with path /home/msf/hack/whisk/production
44
44
  Cloning ingredient ntp, from git url git://github.com/cookbooks/ntp.git
45
45
  Cloning into 'ntp'...
46
- Checking out ref 'master' for ingredient ntp
46
+ Checking out ref '1.1.2' for ingredient ntp
47
47
 
48
48
  You can also use specify an optional filter to run prepare on a subset of
49
49
  cookbooks using ruby regexes.
data/lib/whisk/bowl.rb CHANGED
@@ -15,13 +15,17 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- require 'pp'
19
18
  require 'fileutils'
19
+ require 'chef/mixin/params_validate'
20
+ require 'whisk/exceptions'
20
21
  require 'whisk/ingredient'
21
22
 
22
23
  class Whisk
23
24
  class Bowl
24
- attr_accessor :name, :ingredients
25
+
26
+ include Chef::Mixin::ParamsValidate
27
+
28
+ attr_reader :name, :ingredients
25
29
 
26
30
  def initialize(name, path=nil, &block)
27
31
  @name = name
@@ -31,14 +35,6 @@ class Whisk
31
35
  instance_eval(&block) if block_given?
32
36
  end
33
37
 
34
- def path(pth=nil)
35
- if pth
36
- @path = pth
37
- else
38
- @path
39
- end
40
- end
41
-
42
38
  def ingredient(iname, &block)
43
39
  if ingredients.has_key? iname
44
40
  raise ArgumentError "Ingredient '#{iname}' has already added to bowl '#{name}'"
@@ -90,5 +86,9 @@ class Whisk
90
86
  ingredient.update
91
87
  end
92
88
  end
89
+
90
+ def path(arg=nil)
91
+ set_or_return(:path, arg, :default => File.join(Dir.getwd, name))
92
+ end
93
93
  end
94
94
  end
@@ -0,0 +1,5 @@
1
+ class Chef
2
+ class Exceptions
3
+ class ValidationFailed < ArgumentError; end
4
+ end
5
+ end
@@ -26,17 +26,30 @@ class Whisk
26
26
 
27
27
  def clone
28
28
  if ::File.exists? File.join(Dir.pwd, name, ".git", "config")
29
- Whisk.ui.info "Ingredient #{self.name} already prepared, moving on"
29
+ Whisk.ui.info "Ingredient '#{self.name}' already prepared"
30
30
  else
31
- Whisk.ui.info "Cloning ingredient #{self.name}, " + "from git url #{self.source}"
31
+ Whisk.ui.info "Cloning ingredient '#{self.name}', " + "from url #{self.source}"
32
32
  shell_out("git clone #{self.source} #{self.name}")
33
33
  end
34
34
  end
35
35
 
36
- def checkout(ref="master")
37
- if self.options and self.options.has_key? :ref
38
- Whisk.ui.info "Checking out ref '#{ref}' for ingredient #{self.name}"
39
- shell_out("git checkout #{ref}", :cwd => self.name)
36
+ def current_ref
37
+ cref = run_command("git rev-parse --abbrev-ref HEAD", :cwd => self.name).stdout.chomp
38
+ if cref == 'HEAD'
39
+ return run_command("git describe", :cwd => self.name).stdout.chomp
40
+ else
41
+ return cref
42
+ end
43
+ end
44
+
45
+ def checkout
46
+ if self.ref
47
+ if self.current_ref == self.ref
48
+ Whisk.ui.info "Ingredient '#{self.name}' already at ref '#{self.ref}'"
49
+ else
50
+ Whisk.ui.info "Checking out ref '#{self.ref}' for ingredient '#{self.name}'"
51
+ shell_out("git checkout #{self.ref}", :cwd => self.name)
52
+ end
40
53
  end
41
54
  end
42
55
 
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
 
18
18
  require 'chef/mixin/params_validate'
19
+ require 'whisk/exceptions'
19
20
  require 'whisk/flavours'
20
21
 
21
22
  class Whisk
@@ -28,8 +29,8 @@ class Whisk
28
29
  def initialize(name, &block)
29
30
  @name = name
30
31
  @flavour = 'git'
32
+ @ref = nil
31
33
  @source = nil
32
- @options = {}
33
34
 
34
35
  instance_eval(&block) if block_given?
35
36
 
@@ -44,8 +45,8 @@ class Whisk
44
45
  set_or_return(:flavour, arg, :default => 'git')
45
46
  end
46
47
 
47
- def options(arg=nil)
48
- set_or_return(:options, arg, :default => {})
48
+ def ref(arg=nil)
49
+ set_or_return(:ref, arg, :kind_of => String)
49
50
  end
50
51
  end
51
52
  end
@@ -31,6 +31,12 @@ class Whisk
31
31
  cmd.run_command
32
32
  cmd
33
33
  end
34
+
35
+ def run_command(*command_args)
36
+ cmd = Mixlib::ShellOut.new(*command_args)
37
+ cmd.run_command
38
+ cmd
39
+ end
34
40
  end
35
41
  end
36
42
  end
data/lib/whisk/version.rb CHANGED
@@ -17,5 +17,5 @@
17
17
  #
18
18
 
19
19
  class Whisk
20
- VERSION = '0.1.0'
20
+ VERSION = '0.1.1'
21
21
  end
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.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-17 00:00:00.000000000 Z
12
+ date: 2012-08-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
@@ -105,6 +105,7 @@ files:
105
105
  - lib/whisk/cli.rb
106
106
  - lib/whisk/flavours.rb
107
107
  - lib/whisk/whiskfile.rb
108
+ - lib/whisk/exceptions.rb
108
109
  - lib/whisk/ingredient.rb
109
110
  - lib/whisk/version.rb
110
111
  - lib/whisk/bowl.rb