/ quartz / cli / helpers.js
helpers.js
 1  import { isCancel, outro } from "@clack/prompts"
 2  import { styleText } from "util"
 3  import { contentCacheFolder } from "./constants.js"
 4  import { spawnSync } from "child_process"
 5  import fs from "fs"
 6  
 7  export function escapePath(fp) {
 8    return fp
 9      .replace(/\\ /g, " ") // unescape spaces
10      .replace(/^"(.*)"$/, "$1")
11      .replace(/^'(.*)'$/, "$1")
12      .trim()
13  }
14  
15  export function exitIfCancel(val) {
16    if (isCancel(val)) {
17      outro(styleText("red", "Exiting"))
18      process.exit(0)
19    } else {
20      return val
21    }
22  }
23  
24  export async function stashContentFolder(contentFolder) {
25    await fs.promises.rm(contentCacheFolder, { force: true, recursive: true })
26    await fs.promises.cp(contentFolder, contentCacheFolder, {
27      force: true,
28      recursive: true,
29      verbatimSymlinks: true,
30      preserveTimestamps: true,
31    })
32    await fs.promises.rm(contentFolder, { force: true, recursive: true })
33  }
34  
35  export function gitPull(origin, branch) {
36    const flags = ["--no-rebase", "--autostash", "-s", "recursive", "-X", "ours", "--no-edit"]
37    const out = spawnSync("git", ["pull", ...flags, origin, branch], { stdio: "inherit" })
38    if (out.stderr) {
39      throw new Error(styleText("red", `Error while pulling updates: ${out.stderr}`))
40    } else if (out.status !== 0) {
41      throw new Error(styleText("red", "Error while pulling updates"))
42    }
43  }
44  
45  export async function popContentFolder(contentFolder) {
46    await fs.promises.rm(contentFolder, { force: true, recursive: true })
47    await fs.promises.cp(contentCacheFolder, contentFolder, {
48      force: true,
49      recursive: true,
50      verbatimSymlinks: true,
51      preserveTimestamps: true,
52    })
53    await fs.promises.rm(contentCacheFolder, { force: true, recursive: true })
54  }