contributionChanges
uses tcmts.share.reviewItems, which uses tcmts.share.definitionLines, which uses tcmts.cli.files.fileContent, which uses Buffer
A contribution's changes, in review order; undefined if its branches are gone.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { diffNamespaces, keyPath, namesIn, stateOf } from "#codebase/tcmts/cli/diff"; import { isTestPath } from "#codebase/tcmts/cli/testing"; import { shortHash } from "#codebase/tcmts/core/hash"; import { reviewItems, reviewOrder } from "#codebase/tcmts/share"; import type { ContributionChanges } from "#codebase/tcmts/share"; import type { Contribution } from "#codebase/tcmts/store"; export function contributionChanges( cb: Codebase, c: Contribution, ): ContributionChanges | undefined { let from: string; let to: string; if (c.status === "merged" && c.mergedFrom && c.mergedAs) [from, to] = [c.mergedFrom, c.mergedAs]; else if (cb.store.hasBranch(c.source) && cb.store.hasBranch(c.target)) { to = cb.store.head(c.source); from = cb.store.mergeBase(cb.store.head(c.target), to); } else return undefined; const stateAt = (causal: string) => stateOf(cb.store.namespaceRows(cb.store.causal(causal)!.namespace)); const [before, after] = [stateAt(from), stateAt(to)]; const d = diffNamespaces(before, after, (h) => cb.store.getDef(h)!.ir); const [oldNames, newNames] = [namesIn(before), namesIn(after)]; const items = reviewItems(cb, d, oldNames, newNames); const usesOf = (h: string) => (cb.store.getDef(h)?.deps ?? []) .filter((x) => x.ref.startsWith("#")) .map((x) => x.ref.slice(1)); const name = (h: string) => newNames(h) ?? shortHash(h); return { from, to, items: reviewOrder(items, usesOf), propagated: d.propagated .map((x) => ({ path: keyPath(x.path), because: x.because.map(name), test: isTestPath(keyPath(x.path)), })) .sort((a, b) => (a.path < b.path ? -1 : 1)), }; }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.diff.diffNamespaces
- tcmts.cli.diff.keyPath
- tcmts.cli.diff.namesIn
- tcmts.cli.diff.stateOf
- tcmts.cli.testing.isTestPath
- tcmts.core.hash.shortHash
- tcmts.share.ContributionChanges
- tcmts.share.reviewItems
- tcmts.share.reviewOrder
- tcmts.store.Contribution