Code

Update git-status to new git-diff-* and git-ls-files output.
authorJunio C Hamano <junkio@cox.net>
Sat, 15 Oct 2005 04:56:46 +0000 (21:56 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 18 Oct 2005 00:41:56 +0000 (17:41 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-status.sh

index fbdd377539eea2c4521a2df2d37ff06b80567664..29c2b1169b5f8ee862cbc62d0a1eb5577587e1c1 100755 (executable)
@@ -11,7 +11,7 @@ report () {
 #
 "
   trailer=""
-  while read oldmode mode oldsha sha status name newname
+  while read status name newname
   do
     echo -n "$header"
     header=""
@@ -41,16 +41,11 @@ 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 |
+       git-diff-index -M --cached --name-status HEAD |
        sed -e '
-               s/^:// 
-               h
-               s/^[^   ]*//
+               s/\\/\\\\/g
                s/ /\\ /g
-               x
-               s/      .*$//
-               G
-               s/\n/ /' |
+       ' |
        report "Updated but not checked in" "will commit"
 
        committable="$?"
@@ -60,40 +55,48 @@ else
 #'
        git-ls-files |
        sed -e '
+               s/\\/\\\\/g
                s/ /\\ /g
-               s/^/o o o o A /' |
+               s/^/A /
+       ' |
        report "Updated but not checked in" "will commit"
 
        committable="$?"
 fi
 
-git-diff-files |
+git-diff-files  --name-status |
 sed -e '
-       s/^:// 
-       h
-       s/^[^   ]*//
+       s/\\/\\\\/g
        s/ /\\ /g
-       x
-       s/      .*$//
-       G
-       s/\n/ /' |
+' |
 report "Changed but not updated" "use git-update-index to mark for commit"
 
-if grep -v '^#' "$GIT_DIR/info/exclude" >/dev/null 2>&1
+
+if test -f "$GIT_DIR/info/exclude"
 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
+    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# Ignored files:\n";
+                       print "#   (use \"git add\" to add to commit)\n#\n";
+                       $shown = 1;
+               }
+               print "$_\n";
+       }
+'
 
 case "$committable" in
 0)