#!/bin/sh
+USAGE='[-n] [-v] <file>...'
+SUBDIRECTORY_OK='Yes'
+. git-sh-setup
+
show_only=
verbose=
while : ; do
case "$1" in
-n)
show_only=true
- verbose=true
;;
-v)
- verbose=true
+ verbose=--verbose
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ usage
;;
*)
break
shift
done
-GIT_DIR=$(git-rev-parse --git-dir) || exit
-global_exclude=
-if [ -f "$GIT_DIR/info/exclude" ]; then
- global_exclude="--exclude-from=$GIT_DIR/info/exclude"
-fi
-for i in $(git-ls-files --others \
- $global_exclude --exclude-per-directory=.gitignore \
- "$@")
-do
- [ "$verbose" ] && echo " $i"
- [ "$show_only" ] || git-update-index --add -- "$i" || exit
-done
+# Check misspelled pathspec
+case "$#" in
+0) ;;
+*)
+ git-ls-files --error-unmatch --others --cached -- "$@" >/dev/null || {
+ echo >&2 "Maybe you misspelled it?"
+ exit 1
+ }
+ ;;
+esac
+
+if test -f "$GIT_DIR/info/exclude"
+then
+ git-ls-files -z \
+ --exclude-from="$GIT_DIR/info/exclude" \
+ --others --exclude-per-directory=.gitignore -- "$@"
+else
+ git-ls-files -z \
+ --others --exclude-per-directory=.gitignore -- "$@"
+fi |
+case "$show_only" in
+true)
+ xargs -0 echo ;;
+*)
+ git-update-index --add $verbose -z --stdin ;;
+esac