diff options
author | Paul Mackerras <paulus@samba.org> | 2006-05-29 19:01:38 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-05-29 19:04:19 -0700 |
commit | e0c97ca63df2590026fe1f9a76fefba54b291d06 (patch) | |
tree | 9c0632ce5ad38148b65b639d2a1a7a7d44c59bd6 | |
parent | 22669a045a062c7884735219bc4f5f8a8dd183a2 (diff) | |
download | git-e0c97ca63df2590026fe1f9a76fefba54b291d06.tar.gz git-e0c97ca63df2590026fe1f9a76fefba54b291d06.tar.xz |
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>
-rw-r--r-- | builtin-diff-tree.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/builtin-diff-tree.c b/builtin-diff-tree.c index cc53b81ac..58cf65856 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; } |