+run_status () {
+ (
+ # We always show status for the whole tree.
+ cd "$TOP"
+
+ IS_INITIAL="$initial_commit"
+ REFERENCE=HEAD
+ case "$amend" in
+ t)
+ # If we are amending the initial commit, there
+ # is no HEAD^1.
+ if git-rev-parse --verify "HEAD^1" >/dev/null 2>&1
+ then
+ REFERENCE="HEAD^1"
+ IS_INITIAL=
+ else
+ IS_INITIAL=t
+ fi
+ ;;
+ esac
+
+ # If TMP_INDEX is defined, that means we are doing
+ # "--only" partial commit, and that index file is used
+ # to build the tree for the commit. Otherwise, if
+ # NEXT_INDEX exists, that is the index file used to
+ # make the commit. Otherwise we are using as-is commit
+ # so the regular index file is what we use to compare.
+ if test '' != "$TMP_INDEX"
+ then
+ GIT_INDEX_FILE="$TMP_INDEX"
+ export GIT_INDEX_FILE
+ elif test -f "$NEXT_INDEX"
+ then
+ GIT_INDEX_FILE="$NEXT_INDEX"
+ export GIT_INDEX_FILE
+ fi
+
+ case "$branch" in
+ refs/heads/master) ;;
+ *) echo "# On branch $branch" ;;
+ esac
+
+ if test -z "$IS_INITIAL"
+ then
+ git-diff-index -M --cached --name-status \
+ --diff-filter=MDTCRA $REFERENCE |
+ 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 --directory \
+ --exclude-from="$GIT_DIR/info/exclude" \
+ --exclude-per-directory=.gitignore
+ else
+ git-ls-files -z --others --directory \
+ --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";
+ print "#\n";
+ $shown = 1;
+ }
+ print "$_\n";
+ }
+ '
+
+ if test -n "$verbose"
+ then
+ git-diff-index --cached -M -p --diff-filter=MDTCRA $REFERENCE
+ fi
+ case "$committable" in
+ 0)
+ echo "nothing to commit"
+ exit 1
+ esac
+ exit 0
+ )
+}
+
+trap '
+ test -z "$TMP_INDEX" || {
+ test -f "$TMP_INDEX" && rm -f "$TMP_INDEX"
+ }
+ rm -f "$NEXT_INDEX"
+' 0
+
+################################################################
+# Command line argument parsing and sanity checking
+
+all=
+also=
+only=
+logfile=
+use_commit=
+amend=
+no_edit=
+log_given=
+log_message=
+verify=t
+verbose=
+signoff=
+force_author=
+only_include_assumed=