threads / patch / 1506

patchclean up git script

Subject: [PATCH] clean up git script

## tl;dr

One message between Aug 14, 2005 and Aug 14, 2005. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Amos Waterland· Aug 14, 2005, 05:16 UTC · lore

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.

Signed-off-by: Amos Waterland <apw@rossby.metr.ou.edu>
---
 git |   27 +++++++++++++--------------
 1 files changed, 13 insertions(+), 14 deletions(-)
Show changes to git +13 −14
diff --git a/git b/git
--- a/git
+++ b/git
@@ -1,19 +1,18 @@
 #!/bin/sh
+
 cmd="$1"
-shift
-if which git-$cmd-script >& /dev/null
-then
-	exec git-$cmd-script "$@"
-fi
+path=$(dirname $0)
 
-if which git-$cmd >& /dev/null
-then
-	exec git-$cmd "$@"
-fi
+test -x $path/git-$cmd-script && exec $path/git-$cmd-script "$@"
+test -x $path/git-$cmd && exec $path/git-$cmd "$@"
 
-alternatives=($(echo $PATH | tr ':' '\n' | while read i; do ls $i/git-*-script 2> /dev/null; done))
+echo "Usage: git COMMAND [OPTIONS] [TARGET]"
+if [ -n "$cmd" ]; then
+    echo " git command '$cmd' not found: commands are:"
+else
+    echo " git commands are:"
+fi
 
-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/^/  /'

← back to recent threads