recordConflicts
Keep which side each definition of a merge's conflicts came from, and the merge base's (ConflictRecord),
for what lists and settles conflicts afterwards (tcm todo, tcm edit, tcm resolve --ours).
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import type { NameState } from "#codebase/tcmts/cli/diff"; import { conflictSetting } from "#codebase/tcmts/cli/merge"; import type { ConflictRecord, Settled } from "#codebase/tcmts/cli/merge"; export function recordConflicts( cb: Codebase, conflicts: Settled["conflicts"], base: NameState, labels: { ours: string; theirs: string }, ): void { for (const c of conflicts) { const b = base.get(c.key); const of = (side: "ours" | "theirs") => ({ label: labels[side], hashes: c.sides.filter((s) => s.side === side).map((s) => s.hash), }); const rec: ConflictRecord = { ...(b?.size === 1 ? { base: [...b][0]! } : {}), ours: of("ours"), theirs: of("theirs"), }; cb.store.setSetting(conflictSetting(cb, c.key), JSON.stringify(rec)); } }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.diff.NameState
- tcmts.cli.merge.ConflictRecord
- tcmts.cli.merge.Settled
- tcmts.cli.merge.conflictSetting