#!/bin/sh report () { header="# # $1: # ($2) # " trailer="" while read oldmode mode oldsha sha status name newname do echo -n "$header" header="" trailer="# " case "$status" in M) echo "# modified: $name";; D) echo "# deleted: $name";; T) echo "# typechange: $name";; C) echo "# copied: $name -> $newname";; R) echo "# renamed: $name -> $newname";; N) echo "# new file: $name";; U) echo "# unmerged: $name";; esac done echo -n "$trailer" [ "$header" ] } git-update-cache --refresh >& /dev/null git-diff-cache -B -C --cached HEAD | sed 's/^://' | report "Updated but not checked in" "will commit" committable="$?" git-diff-files | sed 's/^://' | report "Changed but not updated" "use git-update-cache to mark for commit" if [ "$committable" == "0" ] then echo "nothing to commit" exit 1 fi exit 0