namespace :deploy do

before :starting, :confirm_action do
    if fetch(:magento_deploy_confirm_roles).include? fetch(:stage).to_s
        print "\e[0;31m      Are you sure you want to deploy to #{fetch(:stage).to_s}? [y/n] \e[0m"
        proceed = STDIN.gets[0..0] rescue nil
        exit unless proceed == 'y' || proceed == 'Y'
    end
end

Rake::Task["cleanup"].clear_actions

desc "Clean up old releases"
task :cleanup do
    on release_roles :all do |host|
        releases = capture(:ls, "-x", releases_path).split
        valid, invalid = releases.partition { |e| /^\d{14}$/ =~ e }
        keep = fetch(:keep_releases).to_i

        warn t(:skip_cleanup, host: host.to_s) if invalid.any?

        if valid.count >= keep
            info t(:keeping_releases, host: host.to_s, keep_releases: keep, releases: valid.count)
            directories = (valid - valid.last(keep))
            if directories.any?
                directories_str = directories.map do |release|
                releases_path.join(release)
                end.join(" ")
                execute :sudo, 'rm', "-rf", directories_str
                # TODO re-symlink the old directory
            else
                info t(:no_old_releases, host: host.to_s, keep_releases: keep)
            end
        end
    end
end

Rake::Task["failed"].clear_actions

desc "Failed deployment tasks"
task :failed do
    on release_roles :all do |host|
        on roles :production, :staging, :testing do
            # Hold for a few seconds to make sure all disk related actions have completed
            info "Waiting for file / disk writing to complete"
            sleep(3)
            # Added sudo to make sure we can clear everything
            info "Removing failed deployment"
            execute :sudo, 'rm', '-rf', release_path
            info "Removed failed deployment"
        end
    end
end

end