branchList
The codebase's branches, this one first.
import type { BranchItem } from "#codebase/tcmts/cli/changes"; import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { stateOf } from "#codebase/tcmts/cli/diff"; export function branchList(cb: Codebase): BranchItem[] { const current = cb.store.branch().name; const now = stateOf(cb.store.names(undefined, true)); const items = cb.store.branches().map((name): BranchItem => { const ts = cb.store.causalLog(1, name)[0]?.ts; if (name === current) return { name, current: true, differs: 0, ...(ts ? { ts } : {}) }; const other = stateOf(cb.store.names(name, true)); let differs = 0; for (const k of new Set([...now.keys(), ...other.keys()])) { const [a, b] = [now.get(k), other.get(k)]; if (!a || !b || a.size !== b.size || [...a].some((h) => !b.has(h))) differs++; } return { name, current: false, differs, ...(ts ? { ts } : {}) }; }); return [...items.filter((b) => b.current), ...items.filter((b) => !b.current)]; }