diff options
Diffstat (limited to 'git-add.sh')
-rwxr-xr-x | git-add.sh | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -1,15 +1,21 @@ #!/bin/sh +usage() { + die "usage: git add [-n] [-v] <file>..." +} + show_only= verbose= while : ; do case "$1" in -n) show_only=true - verbose=true ;; -v) - verbose=true + verbose=--verbose + ;; + -*) + usage ;; *) break @@ -19,14 +25,19 @@ while : ; do 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 + +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 |