Expand lock-file skip list and extract checkoutTheirs into git module
Covers all common ecosystem lock files (npm, yarn, pnpm, Go, Ruby, PHP, Poetry) so merge conflicts in any of them are auto-resolved with --theirs rather than sent to Claude.
This commit is contained in:
parent
cc61e09384
commit
85cf9cc02f
|
|
@ -82,7 +82,17 @@ export async function teardownSession(root: string, branch: string, worktree: st
|
|||
}
|
||||
|
||||
/** Lock files to skip AI resolution — accept theirs and move on (basename match so `packages/foo/bun.lock` is also covered). */
|
||||
const SKIP_RESOLVE = new Set(["bun.lock", "Cargo.lock"])
|
||||
const SKIP_RESOLVE = new Set([
|
||||
"bun.lock",
|
||||
"Cargo.lock",
|
||||
"package-lock.json",
|
||||
"yarn.lock",
|
||||
"pnpm-lock.yaml",
|
||||
"go.sum",
|
||||
"Gemfile.lock",
|
||||
"composer.lock",
|
||||
"poetry.lock",
|
||||
])
|
||||
|
||||
/** Resolve conflict markers in files using Claude, then stage them. */
|
||||
export async function resolveConflicts(
|
||||
|
|
@ -95,10 +105,7 @@ export async function resolveConflicts(
|
|||
onFile(file, i + 1, files.length)
|
||||
|
||||
if (SKIP_RESOLVE.has(basename(file))) {
|
||||
const result = await $`git checkout --theirs -- ${file}`.cwd(cwd).nothrow().quiet()
|
||||
if (result.exitCode !== 0) {
|
||||
throw new Error(`Failed to resolve lock file ${file}: ${result.stderr.toString().trim()}`)
|
||||
}
|
||||
await git.checkoutTheirs(file, cwd)
|
||||
await git.stageFile(file, cwd)
|
||||
continue
|
||||
}
|
||||
|
|
@ -111,7 +118,7 @@ export async function resolveConflicts(
|
|||
)
|
||||
|
||||
if (resolved.exitCode !== 0) {
|
||||
throw new Error(`Claude failed to resolve ${file}: ${resolved.stderr}`)
|
||||
throw new Error(`Claude failed to resolve ${file}: ${resolved.stderr.toString().trim()}`)
|
||||
}
|
||||
|
||||
await Bun.write(join(cwd, file), resolved.stdout.trimEnd() + "\n")
|
||||
|
|
|
|||
|
|
@ -133,6 +133,14 @@ export async function commit(message: string, cwd: string): Promise<void> {
|
|||
}
|
||||
}
|
||||
|
||||
/** Accept "theirs" version of a conflicted file. */
|
||||
export async function checkoutTheirs(file: string, cwd: string): Promise<void> {
|
||||
const result = await $`git checkout --theirs -- ${file}`.cwd(cwd).nothrow().quiet()
|
||||
if (result.exitCode !== 0) {
|
||||
throw new Error(`Failed to checkout theirs for ${file}: ${result.stderr.toString().trim()}`)
|
||||
}
|
||||
}
|
||||
|
||||
/** Stage a file. */
|
||||
export async function stageFile(file: string, cwd: string): Promise<void> {
|
||||
const result = await $`git add ${file}`.cwd(cwd).nothrow().quiet()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user