#!/usr/bin/env node const { spawnSync } = require("node:child_process"); const realGit = "__PI_GIT_SAFE_REAL_GIT__"; const globalValueOptions = new Set([ "-C", "-c", "--config-env", "--exec-path", "--git-dir", "--namespace", "--super-prefix", "--work-tree", ]); function optionName(argument) { const equals = argument.indexOf("="); return equals < 0 ? argument : argument.slice(0, equals); } function consumesNext(argument, options) { return !argument.includes("=") && options.has(optionName(argument)); } function commandPosition(args) { for (let index = 0; index < args.length; index++) { const argument = args[index]; if (argument === "--") return index + 1; if (!argument.startsWith("-")) return index; if (consumesNext(argument, globalValueOptions)) index++; } return -1; } const args = process.argv.slice(2); const commandIndex = commandPosition(args); const editorQuery = args[commandIndex] === "var" && (args[commandIndex + 1] === "GIT_EDITOR" || args[commandIndex + 1] === "GIT_SEQUENCE_EDITOR"); const env = { ...process.env }; if (!editorQuery) { env.GIT_EDITOR = "true"; env.GIT_SEQUENCE_EDITOR = "true"; env.GIT_MERGE_AUTOEDIT = "no"; } const result = spawnSync(realGit, args, { stdio: "inherit", env }); if (result.error) { console.error(result.error.message); process.exit(127); } if (result.signal) process.kill(process.pid, result.signal); process.exit(result.status ?? 1);