The four share files (index.ts, module.json, guard.test.ts), so they land as one commit. GIT1: seat.ts serves pull, open-pulls, tags, trees, file, contains, statuses, status, comment, view, note, merge-pull as tools on the seat, each answering the contract's shape and an error of kind refused, not-found or failed; a comment, view or note whose act id is held is answered held (note matched by id). merge-pull merges the head the caller names (its from-G judgements are GIT6, GIT7, GIT9). GIT2: seatevents.ts says pull-updated, pull-merged, pull-closed, forge-pull, forge-status, forge-delete and repo-writable on mesh.seat.git.event.<event>; the module's emits drop them. GIT3: merge.ts, check.ts, the acting tools, the owed watch, the gate's source read and check-gates-merge are gone. GIT10: catalog.ts follows the seat mesh-catalog (revision, catalog-revision); no write is granted before the first view. Builds: design 47 G §310, §311, §312, §313, §314, §163, §317, §278, §321, §196 Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
33 lines
1.5 KiB
TypeScript
33 lines
1.5 KiB
TypeScript
// The setting keep-main-rules (the operator, 2026-10-23: "disable the gitea branch protection reset thing"): only when it
|
|
// is true does the module put main's rule right in every repository of the organisation (client.ts ensureMainMerges).
|
|
// False, the default, leaves every repository's branch protection as people set it at the forge.
|
|
import { readFileSync } from "node:fs";
|
|
|
|
export const LEFT_AS_SET = "[gitea] main's rules are left as set at the forge (keep-main-rules is false)";
|
|
|
|
/** The setting from the settings-merged config file the mesh delivers; absent, unreadable or not true is false. */
|
|
export function keepMainRules(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
const file = env.MESH_GITEA_CONFIG_FILE;
|
|
if (!file) return false;
|
|
try {
|
|
const v = (JSON.parse(readFileSync(file, "utf8")) as Record<string, unknown>)["keep-main-rules"];
|
|
return v === true || v === "true";
|
|
} catch { return false; }
|
|
}
|
|
|
|
/** The 10-minute step: puts the rules right only when kept; else says once that they are left and writes nothing. */
|
|
export function mainRulesStep(keep: boolean, put: () => Promise<string[]>, say: (line: string) => void): () => Promise<void> {
|
|
let said = false;
|
|
let touched = -1;
|
|
return async () => {
|
|
if (!keep) {
|
|
if (!said) say(LEFT_AS_SET);
|
|
said = true;
|
|
return;
|
|
}
|
|
const repos = await put();
|
|
if (repos.length !== touched) say(`[gitea] main's rule is right in ${repos.length} repositories`);
|
|
touched = repos.length;
|
|
};
|
|
}
|