]> Lady’s Gitweb - GitWikiWeb/blobdiff - build.js
Allow specifying the revision to pull files from
[GitWikiWeb] / build.js
index df9c016600b3fdf9539de47d162d7ff944fc9dc9..bd8ff27ba2c0fe3743ba4132236fd65237c8cfbc 100644 (file)
--- a/build.js
+++ b/build.js
@@ -20,7 +20,7 @@
 //     export GITWIKIWEB=/srv/git/GitWikiWeb
 //     git archive --remote=$GITWIKIWEB HEAD build.js \
 //       | tar -xO \
 //     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
 //
 // The directory `~/public/wiki` (or whatever you specify as the first
 // argument to `deno run -A -`) **will be deleted** and a new static
 import {
   emptyDir,
   ensureDir,
 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";
 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 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,
 
 const READ_ONLY = {
   configurable: false,
@@ -89,7 +94,7 @@ const getDOM = (source) => {
 
 const getRemoteContent = async (pathName) => {
   const getArchive = new Deno.Command("git", {
 
 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();
     stdout: "piped",
     stderr: "piped",
   }).spawn();
@@ -217,7 +222,7 @@ class GitWikiWebPage {
   #internalLinks = new Set();
   #externalLinks = new Map();
 
   #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);
     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 {
                 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", {
   const ls = new Deno.Command("git", {
-    args: ["ls-tree", "-rz", "live"],
+    args: ["ls-tree", "-rz", "HEAD"],
     stdout: "piped",
     stderr: "piped",
   }).spawn();
     stdout: "piped",
     stderr: "piped",
   }).spawn();
@@ -597,6 +590,7 @@ class GitWikiWebPage {
                     console.warn(`Djot(${reference}): ${$.render()}`),
                 }),
                 source,
                     console.warn(`Djot(${reference}): ${$.render()}`),
                 }),
                 source,
+                config,
               );
               const reference = `${namespace}:${pageName}`;
               pages.set(reference, page);
               );
               const reference = `${namespace}:${pageName}`;
               pages.set(reference, page);
@@ -618,6 +612,7 @@ class GitWikiWebPage {
             console.warn(`Djot(${reference}): ${$.render()}`),
         }),
         source,
             console.warn(`Djot(${reference}): ${$.render()}`),
         }),
         source,
+        config,
       );
       pages.set(reference, page);
     }
       );
       pages.set(reference, page);
     }
This page took 0.036099 seconds and 4 git commands to generate.