Skip to content

Commit

Permalink
Make git-diff-tree indicate when it flushes
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
paulusmack authored and Junio C Hamano committed May 30, 2006
1 parent 22669a0 commit e0c97ca
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions builtin-diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit e0c97ca

Please sign in to comment.