X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-diff-script;h=a285a2a4ee056fc4689c139eebe299072c91b46d;hb=b893f09104ee5f1d8710dfe17cdf1cbac995f17a;hp=03ed555e777b6dfeac8811338986eb752418ab72;hpb=98e031f0bb6e857c684e6db24d03d22cfc1a532a;p=git.git diff --git a/git-diff-script b/git-diff-script index 03ed555e..a285a2a4 100755 --- a/git-diff-script +++ b/git-diff-script @@ -1,19 +1,35 @@ #!/bin/sh -. git-sh-setup-script || die "Not a git archive" +# +# Copyright (c) 2005 Linus Torvalds +# Copyright (c) 2005 Junio C Hamano -rev=($(git-rev-parse --revs-only "$@")) -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) - begin=$(echo "${rev[1]}" | tr -d '^') - end="${rev[0]}" - git-diff-tree -M -p $flags $begin $end $files;; +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"