runResolve
uses tcmts.cli.main.execute, which uses tcmts.cli.help.usageError, which uses tcmts.cli.help.usageOf, which uses tcmts.cli.style.bold, which uses node:util
Runs tcm resolve.
import { routeResolve } from "#codebase/tcmts/cli/commands"; import { execute, resolveConflict } from "#codebase/tcmts/cli/main"; import { conflictAt, sideHash } from "#codebase/tcmts/cli/merge"; import type { Context } from "#codebase/tcmts/cli/run"; import { choose, UsageError } from "#codebase/tcmts/cli/ui"; import { shortHash } from "#codebase/tcmts/core/hash"; import { parse } from "@bomb.sh/router"; export async function runResolve({ cb, cmd, rest }: Context): Promise<number> { const { model } = execute(cmd, parse(routeResolve(), { argv: rest })); const conflicted = [...new Set(cb.store.names().map((n) => n.path))].filter( (p) => cb.store.hashesAt(p).length > 1, ); const name = model.name ?? (await choose( "resolve <name> <#hash>", "Which conflict?", conflicted.map((p) => ({ value: p, label: p, hint: `${cb.store.hashesAt(p).length} definitions`, })), )); if (model.ours && model.theirs) throw new UsageError("--ours or --theirs: keep one side"); const side = model.ours ? "ours" : model.theirs ? "theirs" : undefined; const sides = conflictAt(cb, name)?.sides ?? []; const keep = model.hash ?? (side ? sideHash(cb, name, side) : await choose( "resolve <name> <#hash>", `Keep which ${name}?`, cb.store.hashesAt(name).map((h) => { const s = sides.find((x) => x.hash === h); const rec = cb.store.getDef(h); return { value: `#${h}`, label: `#${shortHash(h)}${s?.side ? ` (${s.side}: ${s.label})` : ""}`, hint: rec && cb.store.shownSignature(rec), }; }), false, )); resolveConflict(cb, name, keep); return 0; }
uses
- tcmts.cli.commands.routeResolve
- tcmts.cli.main.execute
- tcmts.cli.main.resolveConflict
- tcmts.cli.merge.conflictAt
- tcmts.cli.merge.sideHash
- tcmts.cli.run.Context
- tcmts.cli.ui.UsageError
- tcmts.cli.ui.choose
- tcmts.core.hash.shortHash