X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-status.sh;h=50ccd24efb707d615e560dfbd38abec5b2b25b20;hb=1e80e0449248edb77b0fb9853f4a3404a599e207;hp=621fa49d2bcad6c5343ac5c172fb9ca6a855c18d;hpb=c1067050ce58b5b39f528fe634732da858664603;p=git.git diff --git a/git-status.sh b/git-status.sh index 621fa49d..50ccd24e 100755 --- a/git-status.sh +++ b/git-status.sh @@ -2,7 +2,16 @@ # # Copyright (c) 2005 Linus Torvalds # -. git-sh-setup || die "Not a git archive" + +USAGE='' +SUBDIRECTORY_OK='Yes' + +. git-sh-setup + +if [ "$#" != "0" ] +then + usage +fi report () { header="# @@ -11,9 +20,9 @@ report () { # " trailer="" - while read oldmode mode oldsha sha status name newname + while read status name newname do - echo -n "$header" + printf '%s' "$header" header="" trailer="# " @@ -27,22 +36,25 @@ report () { U ) echo "# unmerged: $name";; esac done - echo -n "$trailer" + printf '%s' "$trailer" [ "$header" ] } -branch=`readlink "$GIT_DIR/HEAD"` +branch=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD) case "$branch" in refs/heads/master) ;; *) echo "# On branch $branch" ;; esac -git-update-index --refresh >/dev/null 2>&1 +git-update-index -q --unmerged --refresh || exit -if test -f "$GIT_DIR/HEAD" +if GIT_DIR="$GIT_DIR" git-rev-parse --verify HEAD >/dev/null 2>&1 then - git-diff-index -M --cached HEAD | - sed 's/^://' | + 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="$?" @@ -51,31 +63,49 @@ else # Initial commit #' git-ls-files | - sed 's/^/o o o o A /' | + sed -e ' + s/\\/\\\\/g + s/ /\\ /g + s/^/A / + ' | report "Updated but not checked in" "will commit" committable="$?" fi -git-diff-files | -sed 's/^://' | +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 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# Untracked files:\n"; + print "# (use \"git add\" to add to commit)\n#\n"; + $shown = 1; + } + print "$_\n"; + } +' case "$committable" in 0)