Class: RailsAiBridge::Registry::DefaultGitRunner

Inherits:
Object
  • Object
show all
Includes:
GitRunner
Defined in:
lib/rails_ai_bridge/registry/skill_source_resolver.rb

Overview

Default implementation of GitRunner using Open3 to spawn git subprocesses.

This is the production implementation used for actual git operations. All git commands are wrapped in a +Timeout::timeout+ block so a slow or unreachable remote cannot block the calling thread indefinitely.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timeout: 30) ⇒ DefaultGitRunner

Returns a new instance of DefaultGitRunner.



55
56
57
# File 'lib/rails_ai_bridge/registry/skill_source_resolver.rb', line 55

def initialize(timeout: 30)
  @timeout = timeout
end

Instance Attribute Details

#timeoutObject (readonly)

Parameters:

  • timeout (Integer)

    seconds before a git operation is forcibly interrupted



53
54
55
# File 'lib/rails_ai_bridge/registry/skill_source_resolver.rb', line 53

def timeout
  @timeout
end

Instance Method Details

#checkout_ref(path, ref) ⇒ void

This method returns an undefined value.

Checks out a specific git ref inside a local repository directory.

Parameters:

  • path (String)

    path to the local repository

  • ref (String)

    branch, tag, or commit SHA to check out

Raises:

  • (ArgumentError)

    if ref starts with a dash (option injection guard)

  • (RuntimeError)

    if git checkout command fails, returns non-zero, or times out



91
92
93
94
95
96
97
98
# File 'lib/rails_ai_bridge/registry/skill_source_resolver.rb', line 91

def checkout_ref(path, ref)
  raise ArgumentError, "Invalid ref #{ref.inspect}: refs must not start with '-'" if ref.start_with?('-')

  with_timeout('git checkout') do
    _stdout, stderr, status = Open3.capture3('git', 'checkout', ref, chdir: path)
    fail_with_sanitized_error!('git checkout', stderr) unless status.success?
  end
end

#clone_repo(url, dest) ⇒ void

This method returns an undefined value.

Clones a remote repository to a local directory path.

Parameters:

  • url (String)

    git repository URL

  • dest (String)

    destination directory path

Raises:

  • (RuntimeError)

    if git clone command fails, returns non-zero, or times out



65
66
67
68
69
70
# File 'lib/rails_ai_bridge/registry/skill_source_resolver.rb', line 65

def clone_repo(url, dest)
  with_timeout('git clone') do
    _stdout, stderr, status = Open3.capture3('git', 'clone', url, dest)
    fail_with_sanitized_error!('git clone', stderr) unless status.success?
  end
end

#pull_repo(path) ⇒ void

This method returns an undefined value.

Pulls latest changes inside a local repository directory.

Parameters:

  • path (String)

    path to the local repository

Raises:

  • (RuntimeError)

    if git pull command fails, returns non-zero, or times out



77
78
79
80
81
82
# File 'lib/rails_ai_bridge/registry/skill_source_resolver.rb', line 77

def pull_repo(path)
  with_timeout('git pull') do
    _stdout, stderr, status = Open3.capture3('git', 'pull', chdir: path)
    fail_with_sanitized_error!('git pull', stderr) unless status.success?
  end
end