#!/bin/sh
# 教材演習用：変更履歴を残す最小の流れ（作業開始→変更→確認→分岐→add→commit→確認→やり直し）を、
# このフォルダ直下の work/ に作る使い捨ての Git 置き場で実際に行う。
# 共有先（GitHub など）への送信は行わない。演習用の名前・メールアドレス・日時を固定し、個人の設定は読まない
# （日時を固定するので、保存単位の識別子（ハッシュ）は誰が実行しても同じになる）。
set -e
cd "$(dirname "$0")"
rm -rf work && mkdir work && cd work
export GIT_AUTHOR_DATE="2026-09-21T00:00:00+09:00" GIT_COMMITTER_DATE="2026-09-21T00:00:00+09:00"
GIT="git -c user.name=drill -c user.email=drill@example.invalid -c commit.gpgsign=false -c core.pager=cat"

echo "手順0：作業開始。空の置き場を作り、変更前のコードを最初の保存単位として記録する"
$GIT init -q -b main
cp ../approval_before.js approval.js
$GIT add approval.js
$GIT commit -q -m "承認可否の判定（変更前）"
$GIT log --oneline

echo "手順1：分岐（ブランチ）を作る。目的が分かる名前にする"
$GIT switch -c fix-self-approval
$GIT branch --show-current

echo "手順2：コードを変更する（自己承認を禁止する条件を1行追加。教材上の変更例で、実際のAI出力ではない）"
cp ../approval_after.js approval.js

echo "手順3：変更を確認する。まず何が変わったファイルか（status）、次に何行がどう変わったか（diff）"
$GIT status --short
$GIT diff

echo "手順4：保存の対象にする（add）と、理由を添えて保存する（commit）"
$GIT add approval.js
$GIT commit -q -m "自己承認を禁止する条件を追加（REQ-003）"

echo "手順5：保存できたことを確認する。作業中の変更が残っていないこと（status が空）と、履歴に理由が残っていること"
$GIT status --short
echo "（status の出力なし＝保存していない変更は無い）"
$GIT log --oneline
$GIT show --stat --oneline HEAD | sed -n '2,$p'

echo "手順6：やり直し。履歴を残したまま直前の保存単位を打ち消す（revert）"
$GIT revert --no-edit HEAD >/dev/null
$GIT log --oneline
echo "打ち消し後の approval.js（変更前と同じ内容に戻っている）:"
diff ../approval_before.js approval.js && echo "（diff の出力なし＝変更前と同一）"

echo "手順7：共有先の確認。この置き場には共有先が設定されていない（remote なし）ので、送信は起きない"
$GIT remote -v
echo "（remote の出力なし＝共有先なし）"
