UNPKG

radashi-helper

Version:
101 lines (96 loc) 2.45 kB
import { stdio } from "./chunk-GGEXN2BI.js"; import { cloneRadashi, getRadashiCloneURL, prepareGitHubDefaultRepo } from "./chunk-DSXY7YVB.js"; import { RadashiError, exec, forwardStderrAndRethrow, log } from "./chunk-JLKIE3A2.js"; import { memo } from "./chunk-VOEQFXI5.js"; // src/util/pullRadashi.ts import { existsSync } from "node:fs"; // src/util/isExactCommit.ts function isExactCommit(branch) { return /^([0-9a-f]{7,40}|v[0-9]+\.[0-9]+\.[0-9]+(-\S+)?)$/.test(branch); } // src/util/pullRadashi.ts var pullRadashi = memo( async function pullRadashi2(env) { if (!env.radashiDir) { throw new RadashiError("No upstream repository exists"); } const ref = await env.radashiRef; if (existsSync(env.radashiDir)) { if (isExactCommit(ref)) { if (await isRepoInSync(ref, { cwd: env.radashiDir })) { return; } log("Updating radashi. Please wait..."); await exec( "git", ["remote", "set-url", "origin", getRadashiCloneURL(ref)], { cwd: env.radashiDir } ).catch(forwardStderrAndRethrow); await exec("git", ["fetch", "origin", ref], { cwd: env.radashiDir, stdio }); await exec("git", ["checkout", ref], { cwd: env.radashiDir }).catch(forwardStderrAndRethrow); } else { await exec("git", ["checkout", ref], { cwd: env.radashiDir, reject: false }); log("Updating radashi. Please wait..."); try { await exec("git", ["pull", "origin", ref], { cwd: env.radashiDir, stdio }); } catch { console.error("Pull exited with an error. Continuing..."); } } await prepareGitHubDefaultRepo(env.radashiDir); } else { log("Cloning radashi. Please wait..."); await cloneRadashi(ref, env.radashiDir, { stdio }); } }, { // Only run this function once per process. key: (env) => env.pkg.dependencies?.radashi ?? "" } ); async function isRepoInSync(ref, opts) { try { const { stdout: refCommit } = await exec( "git", ["rev-parse", "--verify", ref], opts ); const { stdout: headCommit } = await exec( "git", ["rev-parse", "HEAD"], opts ); return refCommit === headCommit; } catch (error) { return false; } } export { pullRadashi };