Sha256: d6f1da0131eeac14847e7300f9a52277377dbb2fc09815026038e91e7a03b8f6
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
require "open3" require "benchmark" module MiniMagick ## # Sends commands to the shell (more precisely, it sends commands directly to # the operating system). # # @private # class Shell def run(command, errors: MiniMagick.errors, warnings: MiniMagick.warnings, **options) stdout, stderr, status = execute(command, **options) if status != 0 if stderr.include?("time limit exceeded") fail MiniMagick::TimeoutError, "`#{command.join(" ")}` has timed out" elsif errors fail MiniMagick::Error, "`#{command.join(" ")}` failed with status: #{status.inspect} and error:\n#{stderr}" end end $stderr.print(stderr) if warnings && stderr.strip != %(WARNING: The convert command is deprecated in IMv7, use "magick") [stdout, stderr, status] end def execute(command, stdin: "", timeout: MiniMagick.timeout) stdout, stderr, status = log(command.join(" ")) do Open3.capture3({ "MAGICK_TIME_LIMIT" => timeout&.to_s }, *command, stdin_data: stdin) end [stdout, stderr, status&.exitstatus] rescue Errno::ENOENT, IOError ["", "executable not found: \"#{command.first}\"", 127] end private def log(command, &block) value = nil duration = Benchmark.realtime { value = block.call } MiniMagick.logger.debug "[%.2fs] %s" % [duration, command] value end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mini_magick-5.0.0 | lib/mini_magick/shell.rb |