mirror of
https://github.com/git/git.git
synced 2024-11-18 07:03:57 +01:00
5d1a5c02e8
Instead of "git status" ignoring (and hiding) potential errors from the "git-update-index" call, make it exit if it fails, and show the error. In order to do this, use the "-q" flag (to ignore not-up-to-date files) and add a new "--unmerged" flag that allows unmerged entries in the index without any errors. This also avoids marking the index "changed" if an entry isn't actually modified, and makes sure that we exit with an understandable error message if the index is corrupt or unreadable. "read_cache()" no longer returns an error for the caller to check. Finally, make die() and usage() exit with recognizable error codes, if we ever want to check the failure reason in scripts. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
86 lines
1.5 KiB
Bash
Executable File
86 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Linus Torvalds
|
|
#
|
|
. git-sh-setup || die "Not a git archive"
|
|
|
|
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";;
|
|
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 HEAD |
|
|
sed 's/^://' |
|
|
report "Updated but not checked in" "will commit"
|
|
|
|
committable="$?"
|
|
else
|
|
echo '#
|
|
# Initial commit
|
|
#'
|
|
git-ls-files |
|
|
sed 's/^/o o o o A /' |
|
|
report "Updated but not checked in" "will commit"
|
|
|
|
committable="$?"
|
|
fi
|
|
|
|
git-diff-files |
|
|
sed 's/^://' |
|
|
report "Changed but not updated" "use git-update-index to mark for commit"
|
|
|
|
if grep -v '^#' "$GIT_DIR/info/exclude" >/dev/null 2>&1
|
|
then
|
|
git-ls-files --others \
|
|
--exclude-from="$GIT_DIR/info/exclude" \
|
|
--exclude-per-directory=.gitignore |
|
|
sed -e '
|
|
1i\
|
|
#\
|
|
# Ignored files:\
|
|
# (use "git add" to add to commit)\
|
|
#
|
|
s/^/# /
|
|
$a\
|
|
#'
|
|
fi
|
|
|
|
case "$committable" in
|
|
0)
|
|
echo "nothing to commit"
|
|
exit 1
|
|
esac
|
|
exit 0
|