mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 00:02:31 +00:00
* Split speech session lifecycle * Split terminal output scheduler pipeline * Split mobile browser pane modules * Prune resolved max-lines suppressions * Split pane tree equalization logic * Extract mobile troubleshoot screen styles * Split external automation manager * Split main window service attachments * Split hosted review creation checks * Split automation dispatch event handling * Split settings navigation metadata * Split daemon initialization lifecycle * Split GitLab item dialog * Split relay dispatcher layers * Split mobile host screen * Retarget mobile view settings source test * Split runtime file client layers * Split ports panel layers * Split runtime environments pane layers * Split local PTY provider responsibilities * Split CDP bridge responsibilities * Split relay Git handler responsibilities * Track moved relay Git fetch audit * Fix F3-speech for #17123 * Fix F1-cycle for #17131 * Fix F4-navtest for #17157 * Fix F2-allowlist for #17161
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { runProcess } from '../shared/child-process/run-process'
|
|
|
|
export const MAX_GIT_BUFFER = 10 * 1024 * 1024
|
|
const GIT_REBASE_PROCESS_FALLBACK_TIMEOUT_MS = 2_147_000_000
|
|
|
|
type GitTerminationOptions = {
|
|
cwd?: string
|
|
env?: NodeJS.ProcessEnv
|
|
timeout?: number
|
|
maxBuffer?: number
|
|
signal?: AbortSignal
|
|
}
|
|
|
|
export async function runGitToTermination(
|
|
args: string[],
|
|
options: GitTerminationOptions,
|
|
stdin: string | undefined
|
|
): Promise<{ stdout: string; stderr: string }> {
|
|
const result = await runProcess({
|
|
program: 'git',
|
|
args,
|
|
cwd: typeof options.cwd === 'string' ? options.cwd : undefined,
|
|
env: options.env,
|
|
timeoutMs:
|
|
typeof options.timeout === 'number'
|
|
? options.timeout
|
|
: GIT_REBASE_PROCESS_FALLBACK_TIMEOUT_MS,
|
|
maxOutputBytes: typeof options.maxBuffer === 'number' ? options.maxBuffer : MAX_GIT_BUFFER,
|
|
signal: options.signal,
|
|
terminationBarrier: true,
|
|
...(stdin === undefined ? {} : { input: stdin })
|
|
})
|
|
if (result.code === 0 && !result.timedOut && !options.signal?.aborted) {
|
|
return { stdout: result.stdout, stderr: result.stderr }
|
|
}
|
|
const error = new Error(
|
|
result.timedOut
|
|
? `git ${args[0] ?? 'command'} timed out.`
|
|
: options.signal?.aborted
|
|
? 'The operation was aborted.'
|
|
: result.stderr.trim() || `git ${args[0] ?? 'command'} failed.`
|
|
)
|
|
if (options.signal?.aborted) {
|
|
error.name = 'AbortError'
|
|
}
|
|
throw Object.assign(error, {
|
|
code: result.code,
|
|
killed: result.timedOut || result.signal !== null || options.signal?.aborted === true,
|
|
signal: result.signal,
|
|
stdout: result.stdout,
|
|
stderr: result.stderr
|
|
})
|
|
}
|