X-Git-Url: https://git.ladys.computer/GitWikiWeb/blobdiff_plain/d6baabd2ed44753aa5220830aae7741bd2cf8c28..38a7374d66f9a54f621aa192dcbbd573396e007a:/build.js?ds=sidebyside diff --git a/build.js b/build.js index b0df7c0..bd8ff27 100644 --- a/build.js +++ b/build.js @@ -20,7 +20,7 @@ // export GITWIKIWEB=/srv/git/GitWikiWeb // git archive --remote=$GITWIKIWEB HEAD build.js \ // | tar -xO \ -// | deno run -A - ~/public/wiki $GITWIKIWEB +// | deno run -A - ~/public/wiki $GITWIKIWEB current // // The directory `~/public/wiki` (or whatever you specify as the first // argument to `deno run -A -`) **will be deleted** and a new static @@ -37,7 +37,11 @@ import { emptyDir, ensureDir, -} from "https://deno.land/std@0.195.0/fs/mod.ts"; +} from "https://deno.land/std@0.196.0/fs/mod.ts"; +import { + JSON_SCHEMA, + parse as parseYaml, +} from "https://deno.land/std@0.196.0/yaml/mod.ts"; import djot from "npm:@djot/djot@0.2.3"; import { Parser } from "npm:htmlparser2@9.0.0"; import { DomHandler, Element, Text } from "npm:domhandler@5.0.3"; @@ -46,6 +50,7 @@ import domSerializer from "npm:dom-serializer@2.0.0"; const DESTINATION = Deno.args[0] ?? "~/public/wiki"; const REMOTE = Deno.args[1] ?? "/srv/git/GitWikiWeb"; +const REV = Deno.args[2] ?? "HEAD"; const READ_ONLY = { configurable: false, @@ -89,7 +94,7 @@ const getDOM = (source) => { const getRemoteContent = async (pathName) => { const getArchive = new Deno.Command("git", { - args: ["archive", `--remote=${REMOTE}`, "HEAD", pathName], + args: ["archive", `--remote=${REMOTE}`, REV, pathName], stdout: "piped", stderr: "piped", }).spawn(); @@ -173,7 +178,7 @@ const listOfInternalLinks = (references, wrapper = ($) => $) => ({ ), }); -const diffReferences = async (hash) => { +const diffReferences = async (hash, againstHead = false) => { const diff = new Deno.Command("git", { args: [ "diff-tree", @@ -182,7 +187,7 @@ const diffReferences = async (hash) => { "--name-only", "--no-renames", "--diff-filter=AM", - hash, + ...(againstHead ? [hash, "HEAD"] : [hash]), ], stdout: "piped", stderr: "piped", @@ -217,7 +222,7 @@ class GitWikiWebPage { #internalLinks = new Set(); #externalLinks = new Map(); - constructor(namespace, name, ast, source) { + constructor(namespace, name, ast, source, config) { const internalLinks = this.#internalLinks; const externalLinks = this.#externalLinks; const sections = Object.create(null); @@ -480,23 +485,8 @@ class GitWikiWebPage { String.fromCodePoint(parseInt(codepoint, 16)) }`; } else { - return { - "--8": str`${"—\u2060:\u202F"}`, // reverse puppyprick - "8--": str`${"\u202F:\u2060—"}`, // forward puppyprick - sp: rawInline` `, // space - nbsp: str`${"\xA0"}`, // no‐break space - cgj: str`${"\u034F"}`, // combining grapheme joiner - ensp: str`${"\u2002"}`, // enspace - emsp: str`${"\u2003"}`, // emspace - figsp: str`${"\u2007"}`, // figure space - zwsp: str`${"\u200B"}`, // zero‐width space - zwnj: str`${"\u200C"}`, // zero‐width nonjoiner - zwj: str`${"\u200D"}`, // zero‐width joiner - nnbsp: str`${"\u202F"}`, // narrow no‐break space - mathsp: str`${"\u205F"}`, // math space - wj: str`${"\u2060"}`, // word joiner - fwsp: str`${"\u3000"}`, // fullwidth space - }[alias] ?? e; + const resolved = config.symbols?.[alias]; + return resolved != null ? str`${resolved}` : e; } }, }, @@ -524,8 +514,11 @@ class GitWikiWebPage { } { + const config = await getRemoteContent("config.yaml").then((yaml) => + parseYaml(yaml, { schema: JSON_SCHEMA }) + ); const ls = new Deno.Command("git", { - args: ["ls-tree", "-rz", "live"], + args: ["ls-tree", "-rz", "HEAD"], stdout: "piped", stderr: "piped", }).spawn(); @@ -597,6 +590,7 @@ class GitWikiWebPage { console.warn(`Djot(${reference}): ${$.render()}`), }), source, + config, ); const reference = `${namespace}:${pageName}`; pages.set(reference, page); @@ -618,6 +612,7 @@ class GitWikiWebPage { console.warn(`Djot(${reference}): ${$.render()}`), }), source, + config, ); pages.set(reference, page); } @@ -692,7 +687,9 @@ class GitWikiWebPage { ]).then(logErrorsAndCollectResults); const refs = []; current = hash; - for (const ref of (await diffReferences(current))) { + for ( + const ref of (await diffReferences(current, !recency)) + ) { if (seen.has(ref)) { /* do nothing */ } else { @@ -700,7 +697,7 @@ class GitWikiWebPage { seen.add(ref); } } - results[recency] = { dateTime, humanReadable, refs }; + results[recency] = { dateTime, hash, humanReadable, refs }; } while (recency-- > 0 && current && current != commit); return results; })(),