1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-20 02:56:12 +02:00

[PATCH] clean up git script

Makes git work with a pure POSIX shell (tested with bash --posix and ash).
Right now git causes ash to choke on the redundant shift on line two.

Reduces the number of system calls git makes just to do a usage
statement from 22610 to 1122, and the runtime for same from 349ms to
29ms on my x86 Linux box.

Presents a standard usage statement, and pretty prints the available
commands in a form that does not scroll off small terminals.

[jc: while shifting when $# was zero was a bug, the original
patch failed to shift when it needs to, which I fixed up.]

Signed-off-by: Amos Waterland <apw@rossby.metr.ou.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2005-08-15 15:37:37 -07:00
parent 2ad77e67c7
commit b0c6f8d767

35
git
View File

@ -1,19 +1,22 @@
#!/bin/sh
cmd="$1"
shift
if which git-$cmd-script >& /dev/null
then
exec git-$cmd-script "$@"
cmd=
path=$(dirname $0)
case "$#" in
0) ;;
*) cmd="$1"
shift
test -x $path/git-$cmd-script && exec $path/git-$cmd-script "$@"
test -x $path/git-$cmd && exec $path/git-$cmd "$@" ;;
esac
echo "Usage: git COMMAND [OPTIONS] [TARGET]"
if [ -n "$cmd" ]; then
echo " git command '$cmd' not found: commands are:"
else
echo " git commands are:"
fi
if which git-$cmd >& /dev/null
then
exec git-$cmd "$@"
fi
alternatives=($(echo $PATH | tr ':' '\n' | while read i; do ls $i/git-*-script 2> /dev/null; done))
echo Git command "'$cmd'" not found. Try one of
for i in "${alternatives[@]}"; do
echo $i | sed 's:^.*/git-: :' | sed 's:-script$::'
done | sort | uniq
alternatives=$(cd $path &&
ls git-*-script | sed -e 's/git-//' -e 's/-script//')
echo $alternatives | fmt | sed 's/^/ /'