#!/bin/sh # # Copyright (c) 2005 Linus Torvalds # . git-sh-setup || die "Not a git archive" report () { header="# # $1: # ($2) # " trailer="" while read 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";; A*) echo "# new file: $name";; U ) echo "# unmerged: $name";; esac done echo -n "$trailer" [ "$header" ] } branch=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD) case "$branch" in refs/heads/master) ;; *) echo "# On branch $branch" ;; esac git-update-index -q --unmerged --refresh || exit if GIT_DIR="$GIT_DIR" git-rev-parse --verify HEAD >/dev/null 2>&1 then git-diff-index -M --cached --name-status --diff-filter=MDTCRA HEAD | sed -e ' s/\\/\\\\/g s/ /\\ /g ' | report "Updated but not checked in" "will commit" committable="$?" else echo '# # Initial commit #' git-ls-files | sed -e ' s/\\/\\\\/g s/ /\\ /g s/^/A / ' | report "Updated but not checked in" "will commit" committable="$?" fi git-diff-files --name-status | sed -e ' s/\\/\\\\/g s/ /\\ /g ' | report "Changed but not updated" "use git-update-index to mark for commit" if test -f "$GIT_DIR/info/exclude" then git-ls-files -z --others \ --exclude-from="$GIT_DIR/info/exclude" \ --exclude-per-directory=.gitignore else git-ls-files -z --others \ --exclude-per-directory=.gitignore fi | perl -e '$/ = "\0"; my $shown = 0; while (<>) { chomp; s|\\|\\\\|g; s|\t|\\t|g; s|\n|\\n|g; s/^/# /; if (!$shown) { print "#\n# Untracked files:\n"; print "# (use \"git add\" to add to commit)\n#\n"; $shown = 1; } print "$_\n"; } ' case "$committable" in 0) echo "nothing to commit" exit 1 esac exit 0