mergeShown

tcmts.cli.merge.mergeShown · #l5iq45ne · term · runs on the server

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

used by