Class: RailVerdict::Repair::Command

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

Class Method Summary collapse

Class Method Details

.execute(repository_root:, config_path:, finding_ref:, format: "console", output_path: nil, changed: false, base: nil, baseline_override: nil, waiver_override: nil, stdout: $stdout, stderr: $stderr) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rail_verdict/repair/command.rb', line 10

def self.execute(repository_root:, config_path:, finding_ref:, format: "console", output_path: nil, changed: false, base: nil, baseline_override: nil, waiver_override: nil, stdout: $stdout, stderr: $stderr)
  outcome, interrupted = run_check(repository_root: repository_root, config_path: config_path, changed: changed, base: base, baseline_override: baseline_override, waiver_override: waiver_override)
  return [130, nil] if interrupted || outcome.result.completion_status == "interrupted"

  begin
    packet = ContextAssembler.build(outcome: outcome, finding_ref: finding_ref, repository_root: repository_root)
  rescue ContextAssembler::StaleFindingError => e
    stderr.puts "railverdict repair: #{e.message}"
    return [2, nil]
  rescue ArgumentError => e
    stderr.puts "railverdict repair: #{e.message}"
    return [2, nil]
  end

  hash = packet.to_h

  if output_path
    write_atomic(output_path, hash, stderr)
    return [2, nil] unless File.file?(output_path)
  end

  if format == "json"
    stdout.write(JSON.generate(hash) + "\n")
  else
    stdout.write(render_console(hash))
  end
  [0, packet]
end