@altano/repository-tools
Version:
Misc tools for dealing with repositories of multiple version control systems (git, svn, etc)
47 lines (45 loc) • 1.24 kB
JavaScript
import { repositoryExec } from "./repositoryCommand.js";
//#region src/findRoot.ts
async function findGitRoot(directory) {
return repositoryExec(directory, "git", [
"rev-parse",
"--quiet",
"--show-toplevel"
]);
}
async function findSaplingRoot(directory) {
return repositoryExec(directory, "sl", ["--quiet", "root"]);
}
async function findMercurialRoot(directory) {
return repositoryExec(directory, "hg", ["--quiet", "root"]);
}
async function findSubversionRoot(directory) {
return repositoryExec(directory, "svn", [
"info",
"--show-item",
"wc-root"
]);
}
const findMethods = [
findGitRoot,
findSubversionRoot,
findSaplingRoot,
findMercurialRoot
];
/**
* Find the root path of the repository containing the given directory.
*
* @returns null if not found or the path of the repository root as a string
*/
async function findRoot(directory) {
for (const method of findMethods) try {
const result = await method(directory);
if (result != null && result !== "") return result;
} catch (e) {
if (e instanceof Error && "code" in e && e.code === "ENOTDIR") throw new Error(`Given path isn't a directory: ${directory}`);
}
return null;
}
//#endregion
export { findRoot };
//# sourceMappingURL=findRoot.js.map