diff --git a/git-diff-script b/git-diff-script index 99ff2640f1..a285a2a4ee 100755 --- a/git-diff-script +++ b/git-diff-script @@ -1,23 +1,35 @@ #!/bin/sh -rev=($(git-rev-parse --revs-only "$@")) || exit -flags=($(git-rev-parse --no-revs --flags "$@")) -files=($(git-rev-parse --no-revs --no-flags "$@")) -case "${#rev[*]}" in -0) - git-diff-files -M -p "$@";; -1) - git-diff-cache -M -p "$@";; -2) - case "${rev[1]}" in - ^?*) - begin=$(echo "${rev[1]}" | tr -d '^') - end="${rev[0]}" ;; - *) - begin="${rev[0]}" - end="${rev[1]}" ;; - esac - git-diff-tree -M -p $flags $begin $end $files;; +# +# Copyright (c) 2005 Linus Torvalds +# Copyright (c) 2005 Junio C Hamano + +rev=$(git-rev-parse --revs-only --no-flags --sq "$@") || exit +flags=$(git-rev-parse --no-revs --flags --sq "$@") +files=$(git-rev-parse --no-revs --no-flags --sq "$@") + +: ${flags:="'-M' '-p'"} + +case "$rev" in +?*' '?*' '?*) + die "I don't understand" + ;; +?*' '^?*) + begin=$(expr "$rev" : '.*^.\([0-9a-f]*\).*') && + end=$(expr "$rev" : '.\([0-9a-f]*\). .*') || exit + cmd="git-diff-tree $flags $begin $end $files" + ;; +?*' '?*) + cmd="git-diff-tree $flags $rev $files" + ;; +?*' ') + cmd="git-diff-cache $flags $rev $files" + ;; +'') + cmd="git-diff-files $flags $files" + ;; *) - echo "I don't understand" - exit 1;; + die "I don't understand $*" + ;; esac + +eval "$cmd"