diff options
author | Junio C Hamano <junkio@cox.net> | 2005-08-23 22:18:00 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-08-23 22:18:00 +0200 |
commit | 0a5a9ea433031c5e23f1909bcca0a9b7ac7cf375 (patch) | |
tree | d382db6b903e0dab02698627eec6ff6cea3abe63 /git-diff-script | |
parent | Make "git-rev-list" work within subdirectories (diff) | |
download | git-0a5a9ea433031c5e23f1909bcca0a9b7ac7cf375.tar.xz git-0a5a9ea433031c5e23f1909bcca0a9b7ac7cf375.zip |
Update git-diff-script.
This uses the fixed rev-parse to allow passing diff options to the
underlying diff command. For example:
$ git diff -r HEAD
shows the output in raw-diff format, and
$ git diff -p -R HEAD | git apply
generates a patch to go back from your working tree to HEAD commit
(i.e. an expensive way to say "git checkout -f HEAD").
At the same time, it accidentally removes the use of shell arrays.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-diff-script')
-rwxr-xr-x | git-diff-script | 52 |
1 files changed, 32 insertions, 20 deletions
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" |