radashi-helper
Version:
Help with managing your own Radashi
101 lines (96 loc) • 2.45 kB
JavaScript
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
};