git-commit-vandalism/git-status.sh
Junio C Hamano f179044862 git-status: do not mark unmerged paths as committable.
An unmerged path appears as both "Updated but not checked in" list,
and "Changed but not updated" list.  We are not going to commit that
path until it is resolved, so remove it from the former list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-06 17:37:40 -08:00

107 lines
1.9 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 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