summaryrefslogtreecommitdiff
path: root/builtin-diff-tree.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-05-29 19:01:38 -0700
committerJunio C Hamano <junkio@cox.net>2006-05-29 19:04:19 -0700
commite0c97ca63df2590026fe1f9a76fefba54b291d06 (patch)
tree9c0632ce5ad38148b65b639d2a1a7a7d44c59bd6 /builtin-diff-tree.c
parent22669a045a062c7884735219bc4f5f8a8dd183a2 (diff)
downloadgit-e0c97ca63df2590026fe1f9a76fefba54b291d06.tar.gz
Make git-diff-tree indicate when it flushes
There are times when gitk needs to know that the commits it has sent to git-diff-tree --stdin did not match, and it needs to know in a timely fashion even if none of them match. At the moment, git-diff-tree outputs nothing for non-matching commits, so it is impossible for gitk to distinguish between git-diff-tree being slow and git-diff-tree saying no. This makes git-diff-tree flush its output and echo back the input line when it is not a valid-looking object name. Gitk, or other users of git-diff-tree --stdin, can use a blank line or any other "marker line" to indicate that git-diff-tree has processed all the commits on its input up to the echoed back marker line, and any commits that have not been output do not match. [jc: re-done after a couple of back-and-forth discussion on the list.] Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-diff-tree.c')
-rw-r--r--builtin-diff-tree.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/builtin-diff-tree.c b/builtin-diff-tree.c
index cc53b81ac4..58cf65856d 100644
--- a/builtin-diff-tree.c
+++ b/builtin-diff-tree.c
@@ -138,11 +138,15 @@ int cmd_diff_tree(int argc, const char **argv, char **envp)
if (opt->diffopt.detect_rename)
opt->diffopt.setup |= (DIFF_SETUP_USE_SIZE_CACHE |
DIFF_SETUP_USE_CACHE);
- while (fgets(line, sizeof(line), stdin))
- if (line[0] == '\n')
+ while (fgets(line, sizeof(line), stdin)) {
+ unsigned char sha1[20];
+
+ if (get_sha1_hex(line, sha1)) {
+ fputs(line, stdout);
fflush(stdout);
+ }
else
diff_tree_stdin(line);
-
+ }
return 0;
}