summaryrefslogtreecommitdiff
path: root/git-status.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-status.sh')
-rwxr-xr-xgit-status.sh106
1 files changed, 106 insertions, 0 deletions
diff --git a/git-status.sh b/git-status.sh
new file mode 100755
index 0000000000..b90ffc198d
--- /dev/null
+++ b/git-status.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Linus Torvalds
+#
+GIT_DIR=$(git-rev-parse --git-dir) || exit
+
+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