#!/usr/bin/env ruby
#-*-ruby-*-
require "dpklib/command"
require "dpklib/parsearg"
require "dpklib/unix"

class DpkrbExecProgram < Dpklib::CommandLineProgram
  PAUSE_NO = 1
  PAUSE_FAIL = 2
  PAUSE_ALWAYS = 3

  def start
    opts = Dpklib.parse_args(argv, "pP") || usage
    usage if opts.empty?

    @pause = if opts[:P]; PAUSE_ALWAYS
             elsif opts[:p]; PAUSE_FAIL
             else; PAUSE_NO
             end
    @is_success = system(*opts.args)
    @exit_status = Dpklib.get_exit_status($?)

    pause if should_pause?
    exit(@exit_status)
  end

  def should_pause?
    case @pause
    when PAUSE_NO; false
    when PAUSE_FAIL; !(@is_success)
    when PAUSE_ALWAYS; true
    else; false
    end
  end

  def pause
    prefix_msg = if @is_success
                   "Program normally exited."
                 else
                   "Program aborted."
                 end
    info("#{prefix_msg} Ctrl+C to finish ...")
    begin
      sleep
    rescue Interrupt
    end
  end

  def usage
    die(<<-EOF)
usage: #{progname} [OPTIONS] PROGRAM [ARG ...]
OPTIONS:
  -p: Pauses after execution when PROGRAM aborted.
  -P: Pauses after execution always.
    EOF
  end
  execute
end #/DpkrbExecProgram
