[PATCH] Diff-tree-helper take two.
This reworks the diff-tree-helper and show-diff to further make external diff command interface simpler. These commands now honor GIT_EXTERNAL_DIFF environment variable which can point at an arbitrary program that takes 7 parameters: name file1 file1-sha1 file1-mode file2 file2-sha1 file2-mode The parameters for an external diff command are as follows: name this invocation of the command is to emit diff for the named cache/tree entry. file1 pathname that holds the contents of the first file. This can be a file inside the working tree, or a temporary file created from the blob object, or /dev/null. The command should not attempt to unlink it -- the temporary is unlinked by the caller. file1-sha1 sha1 hash if file1 is a blob object, or "." otherwise. file1-mode mode bits for file1, or "." for a deleted file. If GIT_EXTERNAL_DIFF environment variable is not set, the default is to invoke diff with the set of parameters old show-diff used to use. This built-in implementation honors the GIT_DIFF_CMD and GIT_DIFF_OPTS environment variables as before. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
d1df574380
commit
be3cfa85f4
17
show-diff.c
17
show-diff.c
@@ -53,14 +53,11 @@ int main(int argc, char **argv)
|
||||
perror("read_cache");
|
||||
exit(1);
|
||||
}
|
||||
prepare_diff_cmd();
|
||||
|
||||
for (i = 0; i < entries; i++) {
|
||||
struct stat st;
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
int changed;
|
||||
unsigned long size;
|
||||
char type[20];
|
||||
void *old;
|
||||
|
||||
if (1 < argc &&
|
||||
! matches_pathspec(ce, argv+1, argc-1))
|
||||
@@ -87,8 +84,7 @@ int main(int argc, char **argv)
|
||||
else {
|
||||
printf("%s: %s\n", ce->name, strerror(errno));
|
||||
if (errno == ENOENT)
|
||||
show_diff_empty(ce->sha1, ce->name,
|
||||
reverse);
|
||||
show_diff_empty(ce, reverse);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -104,14 +100,7 @@ int main(int argc, char **argv)
|
||||
if (silent)
|
||||
continue;
|
||||
|
||||
old = read_sha1_file(ce->sha1, type, &size);
|
||||
if (! old)
|
||||
error("unable to read blob object for %s (%s)",
|
||||
ce->name, sha1_to_hex(ce->sha1));
|
||||
else
|
||||
show_differences(ce->name, ce->name, old, size,
|
||||
reverse);
|
||||
free(old);
|
||||
show_differences(ce, reverse);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user