real=${ATTEST_REAL_GIT:?}
case "${ATTEST_FAULT:-}:$*" in
probe:*) echo attest-faulty-git; exit 0 ;;
ls-tree:*" ls-tree "*|ls-tree:"ls-tree "*)
"$real" "$@" | head -c 64
exit 1 ;;
cat-file:"cat-file blob "*|cat-file:*" cat-file blob "*)
exit 1 ;;
hang:*" fetch "*|hang:*" ls-remote "*|hang:"fetch "*|hang:"ls-remote "*)
[ -z "${ATTEST_FAULT_LOG:-}" ] || printf 'call\n' >> "$ATTEST_FAULT_LOG"
for a in "$@"; do
case $a in
+*:*) dst=${a#*:}; lock=$("$real" rev-parse --git-path "$dst.lock")
mkdir -p "$(dirname "$lock")"; : > "$lock" ;;
esac
done
exec sleep 120 ;;
env:*" fetch "*|env:*" ls-remote "*|env:"fetch "*|env:"ls-remote "*)
printf '%s|%s\n' "${GIT_TERMINAL_PROMPT-}" "${GIT_SSH_COMMAND-}" >> "${ATTEST_FAULT_LOG:?}" ;;
esac
exec "$real" "$@"