Format authored monorepo code with pinned language formatters
This commit is contained in:
@@ -57,24 +57,34 @@ export const createGitCapabilityResolver = async (options: {
|
||||
const existing = checkouts.get(key);
|
||||
if (existing) return await existing;
|
||||
const pending = (async () => {
|
||||
const directory = path.join(
|
||||
checkoutRoot,
|
||||
checkoutName(kind, source.repository, source.commit),
|
||||
);
|
||||
const directory = path.join(checkoutRoot, checkoutName(kind, source.repository, source.commit));
|
||||
const verify = async (checkout: string) => {
|
||||
const { stdout } = await execFile("git", ["-C", checkout, "rev-parse", "HEAD"]);
|
||||
if (stdout.trim().toLowerCase() !== source.commit.toLowerCase()) {
|
||||
throw new Error(`Locked commit mismatch for ${source.repository}: wanted ${source.commit}, fetched ${stdout.trim()}`);
|
||||
throw new Error(
|
||||
`Locked commit mismatch for ${source.repository}: wanted ${source.commit}, fetched ${stdout.trim()}`,
|
||||
);
|
||||
}
|
||||
const { stdout: changes } = await execFile("git", ["-C", checkout, "status", "--porcelain", "--untracked-files=all"]);
|
||||
const { stdout: changes } = await execFile("git", [
|
||||
"-C",
|
||||
checkout,
|
||||
"status",
|
||||
"--porcelain",
|
||||
"--untracked-files=all",
|
||||
]);
|
||||
if (changes.trim()) throw new Error(`Dependency checkout was modified: ${checkout}`);
|
||||
};
|
||||
// Only complete, checked clones become visible under the deterministic name.
|
||||
// Concurrent resolvers may fetch independently, but cannot observe a partial clone.
|
||||
if (await stat(directory).then(() => true, (error: NodeJS.ErrnoException) => {
|
||||
if (error.code === "ENOENT") return false;
|
||||
throw error;
|
||||
})) {
|
||||
if (
|
||||
await stat(directory).then(
|
||||
() => true,
|
||||
(error: NodeJS.ErrnoException) => {
|
||||
if (error.code === "ENOENT") return false;
|
||||
throw error;
|
||||
},
|
||||
)
|
||||
) {
|
||||
await verify(directory);
|
||||
return { directory };
|
||||
}
|
||||
@@ -82,20 +92,21 @@ export const createGitCapabilityResolver = async (options: {
|
||||
const checkout = path.join(staging, "checkout");
|
||||
try {
|
||||
await execFile("git", [
|
||||
"-c",
|
||||
"advice.detachedHead=false",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"--single-branch",
|
||||
"--branch",
|
||||
`quixos-reachability/${source.commit.toLowerCase()}`,
|
||||
source.repository,
|
||||
checkout,
|
||||
]);
|
||||
"-c",
|
||||
"advice.detachedHead=false",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"--single-branch",
|
||||
"--branch",
|
||||
`quixos-reachability/${source.commit.toLowerCase()}`,
|
||||
source.repository,
|
||||
checkout,
|
||||
]);
|
||||
await verify(checkout);
|
||||
try { await rename(checkout, directory); }
|
||||
catch (error) {
|
||||
try {
|
||||
await rename(checkout, directory);
|
||||
} catch (error) {
|
||||
if (!["EEXIST", "ENOTEMPTY"].includes((error as NodeJS.ErrnoException).code ?? "")) throw error;
|
||||
await verify(directory);
|
||||
}
|
||||
@@ -105,7 +116,11 @@ export const createGitCapabilityResolver = async (options: {
|
||||
return { directory };
|
||||
})();
|
||||
checkouts.set(key, pending);
|
||||
try { return await pending; }
|
||||
catch (error) { checkouts.delete(key); throw error; }
|
||||
try {
|
||||
return await pending;
|
||||
} catch (error) {
|
||||
checkouts.delete(key);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user