#!/bin/bash # git for the shells of CodeCraft agents: `git commit` gets the co-author trailer from # $CODECRAFT_COMMIT_TRAILER (model, provider, CodeCraft). Everything else goes to the real # git unchanged. Git itself skips the trailer when the message already ends with it. real=${CODECRAFT_REAL_GIT:-/usr/bin/git} [[ -n $CODECRAFT_COMMIT_TRAILER ]] || exec "$real" "$@" # The subcommand comes after git's global options (-C dir, -c key=value, --git-dir=…). i=1 while (( i <= $# )); do case ${!i} in -C | -c | --git-dir | --work-tree | --namespace | --exec-path | --config-env) i=$((i + 2)) ;; --) break ;; -*) i=$((i + 1)) ;; *) break ;; esac done if (( i <= $# )) && [[ ${!i} == commit ]]; then # Right after "commit", so it stays an option even before "-- ". exec "$real" "${@:1:i}" --trailer "$CODECRAFT_COMMIT_TRAILER" "${@:i+1}" fi exec "$real" "$@"