Class: Daytona::Git
- Inherits:
-
Object
- Object
- Daytona::Git
- Includes:
- Instrumentation
- Defined in:
- lib/daytona/git.rb
Instance Attribute Summary collapse
-
#sandbox_id ⇒ String
readonly
The Sandbox ID.
-
#toolbox_api ⇒ DaytonaToolboxApiClient::GitApi
readonly
API client for Sandbox operations.
Instance Method Summary collapse
-
#add(path, files) ⇒ void
Stages the specified files for the next commit, similar to running 'git add' on the command line.
-
#branches(path) ⇒ DaytonaApiClient::ListBranchResponse
Lists branches in the repository.
-
#checkout_branch(path, branch) ⇒ void
Checkout branch in the repository.
-
#clone(url:, path:, branch: nil, commit_id: nil, username: nil, password: nil, insecure_skip_tls: nil, depth: nil) ⇒ void
Clones a Git repository into the specified path.
-
#commit(path:, message:, author:, email:, allow_empty: false) ⇒ GitCommitResponse
Creates a new commit with the staged changes.
-
#configure_user(name, email, scope: 'global', path: nil) ⇒ void
Configures the Git user name and email at the given scope.
-
#create_branch(path, name) ⇒ void
Create branch in the repository.
-
#dangerously_authenticate(username, password, host: nil, protocol: nil) ⇒ void
Persists Git credentials globally so that subsequent operations against the given host authenticate automatically.
-
#delete_branch(path, name) ⇒ void
Delete branch in the repository.
-
#get_config(key, scope: 'global', path: nil) ⇒ String?
Gets a Git config value at the given scope, or nil when unset.
-
#init(path, bare: false, initial_branch: nil) ⇒ void
Initializes a new Git repository at the specified path.
-
#initialize(sandbox_id:, toolbox_api:, otel_state: nil) ⇒ Git
constructor
Initializes a new Git handler instance.
-
#pull(path:, username: nil, password: nil, branch: nil, remote: nil) ⇒ void
Pulls changes from the remote repository.
-
#push(path:, username: nil, password: nil, branch: nil, remote: nil, set_upstream: false) ⇒ void
Pushes all local commits on the current branch to the remote repository.
-
#remote_add(path, name, url, fetch: false, overwrite: false) ⇒ void
Adds (or overwrites) a remote in the repository.
-
#remote_get(path, name) ⇒ String?
Gets the URL of a remote, or nil when it does not exist.
-
#remotes(path) ⇒ DaytonaToolboxApiClient::ListRemotesResponse
Lists the remotes configured in the repository.
-
#reset(path, mode: nil, target: nil, files: nil) ⇒ void
Resets the current HEAD to the specified state.
-
#restore(path, files, staged: nil, worktree: nil, source: nil) ⇒ void
Restores working tree files or unstages changes.
-
#set_config(key, value, scope: 'global', path: nil) ⇒ void
Sets a Git config value at the given scope.
-
#status(path) ⇒ DaytonaToolboxApiClient::GitStatus
Gets the current Git repository status.
Methods included from Instrumentation
Constructor Details
#initialize(sandbox_id:, toolbox_api:, otel_state: nil) ⇒ Git
Initializes a new Git handler instance.
21 22 23 24 25 |
# File 'lib/daytona/git.rb', line 21 def initialize(sandbox_id:, toolbox_api:, otel_state: nil) @sandbox_id = sandbox_id @toolbox_api = toolbox_api @otel_state = otel_state end |
Instance Attribute Details
#sandbox_id ⇒ String (readonly)
Returns The Sandbox ID.
11 12 13 |
# File 'lib/daytona/git.rb', line 11 def sandbox_id @sandbox_id end |
#toolbox_api ⇒ DaytonaToolboxApiClient::GitApi (readonly)
Returns API client for Sandbox operations.
14 15 16 |
# File 'lib/daytona/git.rb', line 14 def toolbox_api @toolbox_api end |
Instance Method Details
#add(path, files) ⇒ void
This method returns an undefined value.
Stages the specified files for the next commit, similar to running 'git add' on the command line.
46 47 48 49 50 51 52 |
# File 'lib/daytona/git.rb', line 46 def add(path, files) toolbox_api.add_files(DaytonaToolboxApiClient::GitAddRequest.new(path:, files:)) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to add files') rescue StandardError => e raise Sdk::Error, "Failed to add files: #{e.}" end |
#branches(path) ⇒ DaytonaApiClient::ListBranchResponse
Lists branches in the repository.
64 65 66 67 68 69 70 |
# File 'lib/daytona/git.rb', line 64 def branches(path) toolbox_api.list_branches(path) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to list branches') rescue StandardError => e raise Sdk::Error, "Failed to list branches: #{e.}" end |
#checkout_branch(path, branch) ⇒ void
This method returns an undefined value.
Checkout branch in the repository.
270 271 272 273 274 275 276 277 278 |
# File 'lib/daytona/git.rb', line 270 def checkout_branch(path, branch) toolbox_api.checkout_branch( DaytonaToolboxApiClient::GitCheckoutRequest.new(path:, branch:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to checkout branch') rescue StandardError => e raise Sdk::Error, "Failed to checkout branch: #{e.}" end |
#clone(url:, path:, branch: nil, commit_id: nil, username: nil, password: nil, insecure_skip_tls: nil, depth: nil) ⇒ void
This method returns an undefined value.
Clones a Git repository into the specified path. It supports cloning specific branches or commits, and can authenticate with the remote repository if credentials are provided.
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/daytona/git.rb', line 114 def clone(url:, path:, branch: nil, commit_id: nil, username: nil, password: nil, insecure_skip_tls: nil, depth: nil) # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists, Layout/LineLength toolbox_api.clone_repository( DaytonaToolboxApiClient::GitCloneRequest.new( url: url, branch: branch, path: path, username: username, password: password, commit_id: commit_id, insecure_skip_tls: insecure_skip_tls, depth: depth ) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to clone repository') rescue StandardError => e raise Sdk::Error, "Failed to clone repository: #{e.}" end |
#commit(path:, message:, author:, email:, allow_empty: false) ⇒ GitCommitResponse
Creates a new commit with the staged changes. Make sure to stage changes using the add() method before committing.
156 157 158 159 160 161 162 163 164 165 |
# File 'lib/daytona/git.rb', line 156 def commit(path:, message:, author:, email:, allow_empty: false) response = toolbox_api.commit_changes( DaytonaToolboxApiClient::GitCommitRequest.new(path:, message:, author:, email:, allow_empty:) ) GitCommitResponse.new(sha: response._hash) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to commit changes') rescue StandardError => e raise Sdk::Error, "Failed to commit changes: #{e.}" end |
#configure_user(name, email, scope: 'global', path: nil) ⇒ void
This method returns an undefined value.
Configures the Git user name and email at the given scope.
501 502 503 504 505 506 507 508 509 |
# File 'lib/daytona/git.rb', line 501 def configure_user(name, email, scope: 'global', path: nil) toolbox_api.configure_user( DaytonaToolboxApiClient::GitConfigureUserRequest.new(name:, email:, scope:, path:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to configure user') rescue StandardError => e raise Sdk::Error, "Failed to configure user: #{e.}" end |
#create_branch(path, name) ⇒ void
This method returns an undefined value.
Create branch in the repository.
292 293 294 295 296 297 298 299 300 |
# File 'lib/daytona/git.rb', line 292 def create_branch(path, name) toolbox_api.create_branch( DaytonaToolboxApiClient::GitBranchRequest.new(path:, name:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to create branch') rescue StandardError => e raise Sdk::Error, "Failed to create branch: #{e.}" end |
#dangerously_authenticate(username, password, host: nil, protocol: nil) ⇒ void
This method returns an undefined value.
Persists Git credentials globally so that subsequent operations against the given host authenticate automatically.
WARNING: This stores the password in plaintext on disk via the Git credential store.
525 526 527 528 529 530 531 532 533 |
# File 'lib/daytona/git.rb', line 525 def dangerously_authenticate(username, password, host: nil, protocol: nil) toolbox_api.authenticate( DaytonaToolboxApiClient::GitAuthenticateRequest.new(username:, password:, host:, protocol:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to authenticate') rescue StandardError => e raise Sdk::Error, "Failed to authenticate: #{e.}" end |
#delete_branch(path, name) ⇒ void
This method returns an undefined value.
Delete branch in the repository.
313 314 315 316 317 318 319 320 321 |
# File 'lib/daytona/git.rb', line 313 def delete_branch(path, name) toolbox_api.delete_branch( DaytonaToolboxApiClient::GitDeleteBranchRequest.new(path:, name:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to delete branch') rescue StandardError => e raise Sdk::Error, "Failed to delete branch: #{e.}" end |
#get_config(key, scope: 'global', path: nil) ⇒ String?
Gets a Git config value at the given scope, or nil when unset.
482 483 484 485 486 487 488 |
# File 'lib/daytona/git.rb', line 482 def get_config(key, scope: 'global', path: nil) toolbox_api.get_git_config(key, scope: scope, path: path).value rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to get config') rescue StandardError => e raise Sdk::Error, "Failed to get config: #{e.}" end |
#init(path, bare: false, initial_branch: nil) ⇒ void
This method returns an undefined value.
Initializes a new Git repository at the specified path.
333 334 335 336 337 338 339 340 341 |
# File 'lib/daytona/git.rb', line 333 def init(path, bare: false, initial_branch: nil) toolbox_api.init_repository( DaytonaToolboxApiClient::GitInitRequest.new(path:, bare:, initial_branch:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to initialize repository') rescue StandardError => e raise Sdk::Error, "Failed to initialize repository: #{e.}" end |
#pull(path:, username: nil, password: nil, branch: nil, remote: nil) ⇒ void
This method returns an undefined value.
Pulls changes from the remote repository. If the remote repository requires authentication, provide username and password/token.
229 230 231 232 233 234 235 236 237 |
# File 'lib/daytona/git.rb', line 229 def pull(path:, username: nil, password: nil, branch: nil, remote: nil) toolbox_api.pull_changes( DaytonaToolboxApiClient::GitPullRequest.new(path:, username:, password:, branch:, remote:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to pull changes') rescue StandardError => e raise Sdk::Error, "Failed to pull changes: #{e.}" end |
#push(path:, username: nil, password: nil, branch: nil, remote: nil, set_upstream: false) ⇒ void
This method returns an undefined value.
Pushes all local commits on the current branch to the remote repository. If the remote repository requires authentication, provide username and password/token.
194 195 196 197 198 199 200 201 202 |
# File 'lib/daytona/git.rb', line 194 def push(path:, username: nil, password: nil, branch: nil, remote: nil, set_upstream: false) # rubocop:disable Metrics/ParameterLists toolbox_api.push_changes( DaytonaToolboxApiClient::GitPushRequest.new(path:, username:, password:, branch:, remote:, set_upstream:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to push changes') rescue StandardError => e raise Sdk::Error, "Failed to push changes: #{e.}" end |
#remote_add(path, name, url, fetch: false, overwrite: false) ⇒ void
This method returns an undefined value.
Adds (or overwrites) a remote in the repository.
407 408 409 410 411 412 413 414 415 |
# File 'lib/daytona/git.rb', line 407 def remote_add(path, name, url, fetch: false, overwrite: false) toolbox_api.add_remote( DaytonaToolboxApiClient::GitAddRemoteRequest.new(path:, name:, url:, fetch:, overwrite:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to add remote') rescue StandardError => e raise Sdk::Error, "Failed to add remote: #{e.}" end |
#remote_get(path, name) ⇒ String?
Gets the URL of a remote, or nil when it does not exist.
443 444 445 446 447 448 449 |
# File 'lib/daytona/git.rb', line 443 def remote_get(path, name) toolbox_api.list_remotes(path).remotes.find { |r| r.name == name }&.url rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to get remote') rescue StandardError => e raise Sdk::Error, "Failed to get remote: #{e.}" end |
#remotes(path) ⇒ DaytonaToolboxApiClient::ListRemotesResponse
Lists the remotes configured in the repository.
426 427 428 429 430 431 432 |
# File 'lib/daytona/git.rb', line 426 def remotes(path) toolbox_api.list_remotes(path) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to list remotes') rescue StandardError => e raise Sdk::Error, "Failed to list remotes: #{e.}" end |
#reset(path, mode: nil, target: nil, files: nil) ⇒ void
This method returns an undefined value.
Resets the current HEAD to the specified state.
358 359 360 361 362 363 364 365 366 |
# File 'lib/daytona/git.rb', line 358 def reset(path, mode: nil, target: nil, files: nil) toolbox_api.reset_changes( DaytonaToolboxApiClient::GitResetRequest.new(path:, mode:, target:, files:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to reset') rescue StandardError => e raise Sdk::Error, "Failed to reset: #{e.}" end |
#restore(path, files, staged: nil, worktree: nil, source: nil) ⇒ void
This method returns an undefined value.
Restores working tree files or unstages changes.
385 386 387 388 389 390 391 392 393 |
# File 'lib/daytona/git.rb', line 385 def restore(path, files, staged: nil, worktree: nil, source: nil) toolbox_api.restore_files( DaytonaToolboxApiClient::GitRestoreRequest.new(path:, files:, staged:, worktree:, source:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to restore files') rescue StandardError => e raise Sdk::Error, "Failed to restore files: #{e.}" end |
#set_config(key, value, scope: 'global', path: nil) ⇒ void
This method returns an undefined value.
Sets a Git config value at the given scope.
462 463 464 465 466 467 468 469 470 |
# File 'lib/daytona/git.rb', line 462 def set_config(key, value, scope: 'global', path: nil) toolbox_api.set_git_config( DaytonaToolboxApiClient::GitSetConfigRequest.new(key:, value:, scope:, path:) ) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to set config') rescue StandardError => e raise Sdk::Error, "Failed to set config: #{e.}" end |
#status(path) ⇒ DaytonaToolboxApiClient::GitStatus
Gets the current Git repository status.
251 252 253 254 255 256 257 |
# File 'lib/daytona/git.rb', line 251 def status(path) toolbox_api.get_status(path) rescue DaytonaToolboxApiClient::ApiError => e raise map_api_error(e, 'Failed to get status') rescue StandardError => e raise Sdk::Error, "Failed to get status: #{e.}" end |