oldestFirst

tcmts.cli.sync.oldestFirst · #jnsvbrzz · term · runs anywhere

Causals, parents before children.

import type { Causal } from "#codebase/tcmts/store";

export function oldestFirst(causals: Causal[]): Causal[] {
  const by = new Map(causals.map((c) => [c.hash, c]));
  const out: Causal[] = [];
  const done = new Set<string>();
  const visit = (c: Causal) => {
    if (done.has(c.hash)) return;
    done.add(c.hash);
    for (const p of c.parents) if (by.has(p)) visit(by.get(p)!);
    out.push(c);
  };
  causals.forEach(visit);
  return out;
}

uses

used by