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;
ダークナイト [Blu-ray]
[ad] ダークナイト [Blu-ray]
出演 クリスチャン・ベール, マイケル・ケイン (Blu-ray)