From e65ea48fae5a279ad4e50594b03621904f84e477 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Sun, 20 Aug 2023 21:27:44 +0000
Subject: [PATCH] fix: add async-mutex to builds on large vaults
---
quartz/build.ts | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/quartz/build.ts b/quartz/build.ts
index b5b1f9e..78437f8 100644
--- a/quartz/build.ts
+++ b/quartz/build.ts
@@ -16,6 +16,7 @@
import { glob, toPosixPath } from "./util/glob"
import { trace } from "./util/trace"
import { options } from "./util/sourcemap"
+import { Mutex } from "async-mutex"
async function buildQuartz(argv: Argv, clientRefresh: () => void) {
const ctx: BuildCtx = {
@@ -77,10 +78,11 @@
}
const initialSlugs = ctx.allSlugs
- let timeoutIds: Set<ReturnType<typeof setTimeout>> = new Set()
- let toRebuild: Set<FilePath> = new Set()
- let toRemove: Set<FilePath> = new Set()
- let trackedAssets: Set<FilePath> = new Set()
+ const buildMutex = new Mutex()
+ const timeoutIds: Set<ReturnType<typeof setTimeout>> = new Set()
+ const toRebuild: Set<FilePath> = new Set()
+ const toRemove: Set<FilePath> = new Set()
+ const trackedAssets: Set<FilePath> = new Set()
async function rebuild(fp: string, action: "add" | "change" | "delete") {
// don't do anything for gitignored files
if (ignored(fp)) {
@@ -111,6 +113,7 @@
// debounce rebuilds every 250ms
timeoutIds.add(
setTimeout(async () => {
+ await buildMutex.acquire()
const perf = new PerfTimer()
console.log(chalk.yellow("Detected change, rebuilding..."))
try {
@@ -143,6 +146,7 @@
clientRefresh()
toRebuild.clear()
toRemove.clear()
+ buildMutex.release()
}, 250),
)
}
--
Gitblit v1.10.0