Module: RailVerdict::Git::Command

Defined in:
lib/rail_verdict/git/command.rb

Constant Summary collapse

GIT_EXECUTABLE =
"git"

Class Method Summary collapse

Class Method Details

.interpret(result, chdir:) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rail_verdict/git/command.rb', line 18

def interpret(result, chdir:)
  case result.status
  when :spawn_failed
    raise Git::Unavailable, "git is not available: #{result.detail}"
  when :timed_out
    raise Git::Timeout, "git operation timed out"
  when :truncated
    raise Git::Truncated, "git output was truncated"
  when :signaled
    raise Git::Error, "git terminated by signal #{result.signal}"
  when :exited
    result
  else
    raise Git::Error, "unexpected git result: #{result.status}"
  end
  if result.stdout_truncated || result.stderr_truncated
    raise Git::Truncated, "git output was truncated"
  end
  result
end

.require_success(result, context_message: "git command failed") ⇒ Object

Raises:



39
40
41
42
43
44
45
# File 'lib/rail_verdict/git/command.rb', line 39

def require_success(result, context_message: "git command failed")
  return if result.exit_code == 0

  stderr = result.stderr.to_s.strip
  suffix = stderr.empty? ? "" : " (#{stderr[0, 1024]})"
  raise Git::Error, "#{context_message}: exit #{result.exit_code}#{suffix}"
end

.run(argv, chdir:, timeout_seconds: 5.0, max_stdout_bytes: 524288, max_stderr_bytes: 65536, runner: ProcessRunner) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/rail_verdict/git/command.rb', line 10

def run(argv, chdir:, timeout_seconds: 5.0, max_stdout_bytes: 524288, max_stderr_bytes: 65536, runner: ProcessRunner)
  argv.each do |element|
    raise ArgumentError, "git argv elements must be strings" unless element.is_a?(String)
    raise ArgumentError, "git argv elements cannot contain NUL bytes" if element.include?("\0")
  end
  runner.run(GIT_EXECUTABLE, argv, chdir: chdir, timeout_seconds: timeout_seconds, max_stdout_bytes: max_stdout_bytes, max_stderr_bytes: max_stderr_bytes)
end