Sha256: 136075f834f70eef1939785457ca979d844ce33916852be9814416f8e9c90a03

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

module Mina
  class Runner
    class Pretty
      include Mina::Helpers::Output

      attr_reader :script, :coathooks

      def initialize(script)
        @script = Shellwords.shellsplit(script)
        @coathooks = 0
      end

      def run
        status =
          Open4.popen4(*script) do |pid, _stdin, stdout, stderr|
            # Handle `^C`.
            trap('INT') { handle_sigint(pid) }

            stdout_thread = Thread.new do
              while (line = stdout.gets)
                print_line(line)
              end
            end

            stderr_thread = Thread.new do
              while (line = stderr.gets)
                print_stderr(line)
              end
            end

            stdout_thread.join
            stderr_thread.join
          end

        status.exitstatus
      end

      private

      def handle_sigint(pid)
        puts ''
        if coathooks > 1
          print_status 'Mina: SIGINT received again. Force quitting...'
          Process.kill 'KILL', pid
        else
          print_status 'Mina: SIGINT received.'
          Process.kill 'TERM', pid
        end
        @coathooks += 1
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mina-1.0.0.beta2 lib/mina/runner/pretty.rb
mina-1.0.0.beta1 lib/mina/runner/pretty.rb