Class: RailsAiBridge::Registry::DefaultGitRunner
- Inherits:
-
Object
- Object
- RailsAiBridge::Registry::DefaultGitRunner
- 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
- #timeout ⇒ Object readonly
Instance Method Summary collapse
-
#checkout_ref(path, ref) ⇒ void
Checks out a specific git ref inside a local repository directory.
-
#clone_repo(url, dest) ⇒ void
Clones a remote repository to a local directory path.
-
#initialize(timeout: 30) ⇒ DefaultGitRunner
constructor
A new instance of DefaultGitRunner.
-
#pull_repo(path) ⇒ void
Pulls latest changes inside a local repository directory.
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
#timeout ⇒ Object (readonly)
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.
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.
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.
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 |