mergeFrom

tcmts.cli.merge.mergeFrom · #obgs3tsk · term · runs anywhere

Three-way merge of namespaces (#6ftriw5m), telling what a side only re-hashed (re-derived after a dependency changed) from what it edited.

import { diffNamespaces } from "#codebase/tcmts/cli/diff";
import type { NameState } from "#codebase/tcmts/cli/diff";
import { mergeStates } from "#codebase/tcmts/cli/merge";
import type { MergeResult } from "#codebase/tcmts/cli/merge";

export function mergeFrom(
  base: NameState,
  ours: NameState,
  theirs: NameState,
  irOf: (hash: string) => string,
): MergeResult {
  const propagated = {
    ours: new Set(diffNamespaces(base, ours, irOf).propagated.map((c) => c.path)),
    theirs: new Set(diffNamespaces(base, theirs, irOf).propagated.map((c) => c.path)),
  };
  return mergeStates(base, ours, theirs, propagated);
}

uses

used by