namespace :upstart do

desc "Start the application services"
task :start do
  on fetch(:upstart_servers) do
    execute fetch(:upstart_cmd), 'start', fetch(:upstart_service)
  end
end

desc "Stop the application services"
task :stop do
  on fetch(:upstart_servers) do
    execute fetch(:upstart_cmd), 'stop', fetch(:upstart_service)
  end
end

desc "Restart the application services"
task :restart do
  on fetch(:upstart_servers) do
    unless test(fetch(:upstart_cmd), 'start', fetch(:upstart_service))
      execute fetch(:upstart_cmd), 'restart', fetch(:upstart_service)
    end
  end
end

desc "Prefixes the upstart command with sudo when :upstart_sudo => true"
task :configure_sudo do
  if fetch(:upstart_sudo)
    upstart_cmd = fetch(:upstart_cmd).to_s
    SSHKit.config.command_map.prefix[upstart_cmd].push('sudo')
  end
end

end

Capistrano::DSL.stages.each do |stage|

after stage, 'upstart:configure_sudo'

end

namespace :load do

task :defaults do
  set :upstart_service,  -> { fetch(:application) }
  set :upstart_sudo,     false
  set :upstart_roles,    :app
  set :upstart_servers,  -> { release_roles(fetch(:upstart_roles)) }
  set :upstart_cmd,      'initctl'
end

end

namespace :deploy do

after :publishing, 'upstart:restart'

end