feat: sapling scm support
All checks were successful
CI / Lint (pull_request) Successful in 29s
CI / Test Node (pull_request) Successful in 32s
Conventional Tools Commitlint / Commitlint (pull_request) Successful in 5s
CI / Lint (push) Successful in 27s
CI / Test Node (push) Successful in 32s
Conventional Tools Commitlint / Commitlint (push) Successful in 5s

Now you can run this inside a sapling repo. It will automatically pick what
source control you are using by checking for the root repo.
This commit is contained in:
Ade Attwood 2024-09-17 08:29:42 +01:00
parent 7610b3bef5
commit 3e3d0b5a9d
2 changed files with 39 additions and 5 deletions

View file

@ -48,6 +48,40 @@ export const validate = async (argv: Argv) => {
} }
}; };
async function isGitRepo() {
const isGit = await exec(`git rev-parse --is-inside-work-tree`);
return isGit.code === 0;
}
async function isSaplingRepo() {
const isSapling = await exec(`sl root`);
return isSapling.code === 0;
}
async function getDiff(): Promise<string | undefined> {
if (await isGitRepo()) {
const diffText = await exec(`git diff origin/HEAD...HEAD`);
if (diffText.code > 0) {
error("Error loading the diff\n\n" + diffText.stderr);
return undefined;
}
return diffText.stdout;
}
if (await isSaplingRepo()) {
const diffText = await exec(`sl diff -g -r '. % public()'`);
if (diffText.code > 0) {
error("Error loading the diff\n\n" + diffText.stderr);
return undefined;
}
return diffText.stdout;
}
error("Unable to get a diff no repo was found\n");
}
export const run = async (argv = process.argv) => { export const run = async (argv = process.argv) => {
const parsed: Argv = await yargs(hideBin(argv)).options(options).argv; const parsed: Argv = await yargs(hideBin(argv)).options(options).argv;
const validationError = await validate(parsed); const validationError = await validate(parsed);
@ -62,12 +96,12 @@ export const run = async (argv = process.argv) => {
return lcovDiff(baseCoverage, compareCoverage); return lcovDiff(baseCoverage, compareCoverage);
} }
const diffText = await exec(`git diff origin/HEAD...HEAD`); const diffText = await getDiff();
if (diffText.code > 0) { if (!diffText) {
return error("Error loading the diff\n\n" + diffText.stderr); return;
} }
const diff = parseDiff.default(diffText.stdout); const diff = parseDiff.default(diffText);
const { percentage } = report(diff, baseCoverage); const { percentage } = report(diff, baseCoverage);
process.exit(percentage > 90 ? 0 : 1); process.exit(percentage > 90 ? 0 : 1);

View file

@ -1,7 +1,7 @@
const getCoverageForFile = (file: any, coverage: any) => { const getCoverageForFile = (file: any, coverage: any) => {
for (const cov of coverage) { for (const cov of coverage) {
const report: { [k: number]: number } = {}; const report: { [k: number]: number } = {};
if (cov.file === file.to) { if (cov.file.replace("./", "") === file.to) {
for (const detail of cov.lines.details) { for (const detail of cov.lines.details) {
report[detail.line] = detail.hit; report[detail.line] = detail.hit;
} }