Class: KamalBackup::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/kamal_backup/command.rb

Class Method Summary collapse

Class Method Details

.capture(spec, input: nil, redactor:) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/kamal_backup/command.rb', line 28

def self.capture(spec, input: nil, redactor:)
  stdout, stderr, status = Open3.capture3(spec.env, *spec.argv, stdin_data: input)
  result = CommandResult.new(stdout: stdout, stderr: stderr, status: status.exitstatus)
  return result if status.success?

  raise CommandError.new(
    "command failed (#{status.exitstatus}): #{spec.display(redactor)}\n#{redactor.redact_string(stderr)}",
    command: spec,
    status: status.exitstatus,
    stdout: redactor.redact_string(stdout),
    stderr: redactor.redact_string(stderr)
  )
rescue Errno::ENOENT => e
  raise CommandError.new(
    "command not found: #{spec.argv.first}",
    command: spec,
    status: 127,
    stderr: e.message
  )
end