path: root/diff-tree.c
diff options
authorPaul Mackerras <>2006-05-18 06:58:51 (GMT)
committerJunio C Hamano <>2006-05-18 07:25:50 (GMT)
commit70f75cc96a3c590ac1c54c09c39446626f155ef7 (patch)
tree88a7314b1be7d8d782268f33197e09fbd98c3ba6 /diff-tree.c
parent18b01f4ff6db66b6419c7501bb303b643638b297 (diff)
Provide a way to flush git-diff-tree's output
Gitk wants to use git-diff-tree as a filter to tell it which ids from a given list affect a set of files or directories. We don't want to fork and exec a new git-diff-tree process for each batch of ids, since there could be a lot of relatively small batches. For example, a batch could contain as many ids as fit in gitk's headline display window, i.e. 20 or so, and we would be processing a new batch every time the user scrolls that window. The --stdin flag to git-diff-tree is suitable for this, but the main difficulty is that the output of git-diff-tree gets buffered and doesn't get sent until the buffer is full. This provides a way to get git-diff-tree to flush its output buffers. If a blank line is supplied on git-diff-tree's standard input, it will flush its output buffers and then accept further input. Signed-off-by: Paul Mackerras <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'diff-tree.c')
1 files changed, 4 insertions, 1 deletions
diff --git a/diff-tree.c b/diff-tree.c
index 7207867..69bb74b 100644
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -138,7 +138,10 @@ int main(int argc, const char **argv)
opt->diffopt.setup |= (DIFF_SETUP_USE_SIZE_CACHE |
while (fgets(line, sizeof(line), stdin))
- diff_tree_stdin(line);
+ if (line[0] == '\n')
+ fflush(stdout);
+ else
+ diff_tree_stdin(line);
return 0;