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 }