entryChanges

tcmts.share.entryChanges · #jxzef5d7 · term · runs on the server

uses tcmts.share.reviewItems, which uses tcmts.share.definitionLines, which uses tcmts.cli.files.fileContent, which uses Buffer

What a history entry changed, definition by definition (#eiskjzkr, in review order), and what only re-hashed; undefined for the first entry. Names come as entryDiff's do.

import { diffNamespaces, namesIn } from "#codebase/tcmts/cli/diff";
import type { NamespaceDiff } from "#codebase/tcmts/cli/diff";
import { reviewItems, reviewOrder } from "#codebase/tcmts/share";
import type { ReviewItem, Share } from "#codebase/tcmts/share";

export function entryChanges(
  s: Pick<Share, "cb" | "cache">,
  hash: string,
): { items: ReviewItem[]; diff: NamespaceDiff } | undefined {
  const c = s.cb.store.causal(hash);
  if (!c?.parents.length) return undefined;
  const trees = s.cache.trees(s.cb);
  const after = trees.state(hash);
  const before = trees.state(c.parents[0]!);
  const diff = diffNamespaces(before, after, (h) => trees.ir(h));
  const usesOf = (h: string) =>
    (s.cb.store.getDef(h)?.deps ?? [])
      .filter((x) => x.ref.startsWith("#"))
      .map((x) => x.ref.slice(1));
  return {
    items: reviewOrder(reviewItems(s.cb, diff, namesIn(before), namesIn(after)), usesOf),
    diff,
  };
}

uses

used by