created: 2024-09-04T07:47:43.345Z
git-hook の prepare-commit-msg で `--amend` されているかを判断する
「どんなコマンドで git が叩かれてるかわかる変数があるんだろうな」とか思っていたら、そういうのは 🈚️ いらしい。
node/zx をつかっている私の場合
hook は zx で書いている。
node/zx ランタイムで git コマンドを取得しようとすると、こんな実装になった。
async function gitCommandLine() {
const gitProcessId = (await $`ps -p ${process.pid} -o ppid=`).stdout.trim();
const p = await $`ps -p ${gitProcessId} -o command=`;
return p.stdout.trim();
}
process.pid
が node/zx で実行されているスクリプトのプロセス ID-o ppid=
で、親プロセスである git コマンドのプロセス ID がわかる- もう 1 回 ps コマンドを発行
-o command=
で、プロセスがどんなコマンドで実行されているかが出力される
「どんなコマンドで git が叩かれてるか」がわかるようになったので、あとは --amend
文字列を探せばよい。
cmd.include(" --amend ");
追記
nodejs では親プロセスの ID h あ process.ppid
という属性で提供されていた。
外部プロセス動かすよりもこっちのほうがいい。
- const gitProcessId = (await $`ps -p ${process.pid} -o ppid=`).stdout.trim();
+ const gitProcessId = process.ppid;