lib/sprinkle/installers/apt.rb in sprinkle-0.4.2 vs lib/sprinkle/installers/apt.rb in sprinkle-0.5.0.rc1
- old
+ new
@@ -1,9 +1,7 @@
module Sprinkle
module Installers
- # = Apt Package Installer
- #
# The Apt package installer uses the +apt-get+ command to install
# packages. The apt installer has only one option which can be
# modified which is the +dependencies_only+ option. When this is
# set to true, the installer uses +build-dep+ instead of +install+
# to only build the dependencies.
@@ -11,41 +9,44 @@
# == Example Usage
#
# First, a simple installation of the magic_beans package:
#
# package :magic_beans do
- # description "Beans beans they're good for your heart..."
# apt 'magic_beans_package'
+ # verify { has_apt 'magic_beans_package' }
# end
#
# Second, only build the magic_beans dependencies:
#
# package :magic_beans_depends do
- # apt 'magic_beans_package' { dependencies_only true }
+ # apt 'magic_beans_package' do
+ # dependencies_only true
+ # end
# end
#
# As you can see, setting options is as simple as creating a
# block and calling the option as a method with the value as
# its parameter.
- class Apt < Installer
- attr_accessor :packages #:nodoc:
-
+ class Apt < PackageInstaller
def initialize(parent, *packages, &block) #:nodoc:
- packages.flatten!
-
- options = { :dependencies_only => false }
- options.update(packages.pop) if packages.last.is_a?(Hash)
-
- super parent, options, &block
-
- @packages = packages
+ super parent, *packages, &block
+ @options.reverse_merge!(:dependencies_only => false)
end
+ auto_api
+
+ verify_api do
+ def has_apt(package)
+ @commands << "dpkg --status #{package} | grep \"ok installed\""
+ end
+ end
+
protected
def install_commands #:nodoc:
command = @options[:dependencies_only] ? 'build-dep' : 'install'
- "env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get --force-yes -qyu #{command} #{@packages.join(' ')}"
+ noninteractive = "env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive"
+ "#{noninteractive} #{sudo_cmd}apt-get --force-yes -qyu #{command} #{@packages.join(' ')}"
end
end
end
end