Re: [PATCH 0/2] diff-tree/diff-cache helper
- From
Junio C Hamano <junkio@cox.net>
- Date
- Apr 26, 2005, 07:39 UTC
- Message-ID
- <7vll76ouk0.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.58.0504251832480.18901@ppc970.osdl.org>
>>>>> "LT" == Linus Torvalds <torvalds@osdl.org> writes:
LT> Good, applied.
LT> This also makes me think that we should just make "show-diff" show the LT> same format, at which point show-diff actually matches all the other LT> tools, and it is likely to make show-diff more useful to boot.
Matching is good, ...
LT> Maybe rename the "show-diff" command to be "cache-diff", and if somebody LT> wants the old "show-diff" thing, just have a script that does
LT> #!/bin/sh LT> cache-diff | diff-tree-helper
LT> and nothing more.
Well, great minds do not think alike ;-) I was actually going in quite the opposite way for the same goal of "matching". My plan was to rewrite the external diff interface once more to make it more generic. Then to add -p (patch) flag to diff-tree and diff-cache, so that we do not need diff-tree-helper anymore. My ultimate motive for all of this is to make the core GIT useful enough to render Cogito or any other wrapper layer more or less irrelevant ;-). Well type ^W a couple of times and rephrase that to make things easier for the wrapper layer.
Jokes aside, I have updated the external diff interface and will be sending you a patch in a separate message. The existing external diff interface had a horrible interface to the callers, and it had a hardcoded knowledge of how to call diff and what parameters to pass in which order, so the customization the end user or the scripts could make was quite limited. The updated interface allows pretty much arbitrary formatting, so "git diff" can put SHA1 instead of short-and-sweet 'a' or 'b' as directory prefix in the patch output, for example.
When an environment variable GIT_EXTERNAL_DIFF exists, it names a script that takes 7 parameters:
name file1 sha1-1 mode1 file2 sha1-2 mode2
This is essentially the same idea you used for merge-cache. Then the named command can use these information to generate and format the diff any way it wants. See how it interfaces using the examples like this:
GIT_EXTERNAL_DIFF=echo show-diff
diff-cache $(cat .git/HEAD) | \
GIT_EXTERNAL_DIFF=./jit-external-diff-script diff-tree-helperThe patch comes with a sample script, jit-external-diff-script, but it is not much better than the built-in one; I do not expect it to be used for anything other than starting point for wrapper writers.
Without the environment variable, it uses a built-in implementation that behaves exactly like the traditional show-diff, and it can be customized via GIT_DIFF_CMD and GIT_DIFF_OPTS as before.