mergeShown
uses tcmts.cli.merge.scratchText, which uses tcmts.cli.files.fileContent, which uses Buffer
Two definitions of name merged as text from a base's (#own223zy of each; none: from nothing), three-way:
code as mergeScratch merges it, a file by lines. Where both changed the same lines, conflict markers. ns:
the namespace of the file it's written in, if not its own.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { mergeLines, mergeScratch, scratchText } from "#codebase/tcmts/cli/merge"; import type { MarkerLabels, Merged } from "#codebase/tcmts/cli/merge"; import type { DefRecord } from "#codebase/tcmts/core/types"; export function mergeShown( cb: Codebase, name: string, base: DefRecord | undefined, ours: DefRecord, theirs: DefRecord, labels?: MarkerLabels, ns?: string, ): Merged { const text = (r: DefRecord | undefined) => (r ? scratchText(cb, r, name, ns) : ""); if (ours.kind !== "file") return mergeScratch(text(base), text(ours), text(theirs), labels); const r = mergeLines( text(base).split("\n"), text(ours).split("\n"), text(theirs).split("\n"), labels, ); const { lines, ...rest } = r; return { text: lines.join("\n"), body: lines, ...rest }; }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.merge.MarkerLabels
- tcmts.cli.merge.Merged
- tcmts.cli.merge.mergeLines
- tcmts.cli.merge.mergeScratch
- tcmts.cli.merge.scratchText
- tcmts.core.types.DefRecord