const { execSync, execFileSync } = require("child_process") const commandExists = require("./commandExist").sync const { existsSync } = require("fs"); const { resolve, join } = require("path") if (!(commandExists("git"))) throw new Error("Install git") //----------------------------------------------------------- function GitClone(url, path = resolve(process.cwd(), Math.random().toString().replace(/[01]\./, "GitClone")), depth = 1) { // Check exist dir if (existsSync(join(path, ".git"))) return GitPull(path) else { // const command = `git clone "${url}" ${depth} ${resolve(path)}` if (typeof depth !== "number") depth = 1; console.log("git", ["clone", url, "--depth", depth, path]); execFileSync("git", ["clone", url, "--depth", depth, path]).toString("ascii") return execSync("git log -1 --pretty=format:%H", {cwd: path}).toString("ascii").split("\n").filter(d=>{if(d)return true;return false}).join(""); } } /** * Pull changes from git repository and return git sha * * @param {string} [path="./"] * @return {string} git sha */ function GitPull(path = "./"){ execSync("git pull --recurse-submodules=on-demand", { cwd: resolve(path) }) return execSync("git log -1 --pretty=format:%H", {cwd: path}).toString("ascii").split("\n").filter(d=>{if(d)return true;return false}).join(""); } module.exports = { GitClone, GitPull }