X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=git-add.sh;h=fdec86d1a41af847f9d737a2c058e2d2027f32fe;hb=ed24928e122bad83e62d161087f806fa21c46a59;hp=3d364db2517b6a19de6b8e26f6d61a86589c1fcc;hpb=c1067050ce58b5b39f528fe634732da858664603;p=git.git diff --git a/git-add.sh b/git-add.sh index 3d364db2..fdec86d1 100755 --- a/git-add.sh +++ b/git-add.sh @@ -1,15 +1,26 @@ #!/bin/sh +die () { + echo >&2 "$*" + exit 1 +} + +usage() { + die "usage: git add [-n] [-v] ..." +} + show_only= verbose= while : ; do case "$1" in -n) show_only=true - verbose=true ;; -v) - verbose=true + verbose=--verbose + ;; + -*) + usage ;; *) break @@ -19,14 +30,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